Jieming's Blog

To Be A Loyal Dependable Person!

导入jni.h解析

需求IDA 导入C/C++头文件后,通过添加头文件中的结构体,可以用结构体中的函数替换伪代码中的地址偏移,提高函数可读性,本文以JNI_OnLoad()为例讲解。 步骤1.点击IDA菜单项”File->Load file->Parse C header file”选择jni.h,导入的时候IDA可能会报错,解决办法很简单:把要导入的文件备份下,然后哪里报错删哪里。 2.导入完成后......

Android反调试笔记

Android反调试常常出现在init.array和JNI_Onload中。除了反调试外,应用还可能在上述两个地方初始化变量。 1)代码执行时间检测读取系统时间,检测关键代码执行耗时。类似函数:time,gettimeofday。 1234567time_t t1, t2;time (&t1);/* Parts of Important Codes */time (&t2);......

Method Profiling—流程分析

Windows平台上大名鼎鼎的Ollydbg调试器有一个trace功能,其作用是在执行程序时记录下每个被调用的API名称,分析人员只需查看API的调用序列即可知道这段代码的具体用途。这个功能非常强大,DDMS中也提供了类似的调试方法—Method Profiling(方法剖析)。 实验说明实验选取唯品会App,以“忘记密码”功能为例,利用Method Profiling进行分析。 实验步骤(......

函数无法识别的解决方法

做BCTF 2016 LostFlower期间,遇到”动态调试中函数无法F5”的问题,分享下原因和解决方法。 原因先看动态调试中遇到的问题: IDA提示stringFromJNI没有被解析成函数,并且问题出在地址上。按P键无效,查看函数的结束地址: 通过对比发现了问题所在,原因是函数没有终点,下面就该解决问题。 解决方法最初的尝试是在函数的结束地址7500EBBC处”set func......

UI Automator Viewer—分析View结构

控件的点击事件作为分析App算法的入口,在逆向中占据举足轻重的地位。如果要找到对应的点击事件,首先要找到控件的定义。那么问题来了,如何能够快速地找到控件的定义呢? 实验说明实验选取唯品会App,以“忘记密码”功能为例,利用UI Automator Viewer进行分析。 分析uiautomatorviewer.bat位于Android SDK/tools目录下,点击运行,把设备停在登陆界面,......

google-ctf 2016 little-bobby-application writeup

本文为2016年google-ctf中little-bobby-application的writeup。 Find the vulnerability, develop an exploit, and when you’re ready, submit your APK to https://bottle-brush-tree.ctfcompetition.com. Can take up......

hctf 2015 Andy writeup

本文为2015年hctf中Andy的writeup。 Andy writeup首先点我下载题目。直接使用jeb反编译,关键代码如下: ​ 对输入字符串拼接hdu1s8后反转,然后进行base64编码,最后是一个经典加密。过程可逆: 1234SRlhb70......

alictf 2015 Cake writeup

本文为2015年alictf中Cake的writeup。 Cake writeup首先点我下载题目。直接使用jeb反编译,关键代码如下: 具体流程:输入一个字符串input,初始化一个长度为16的数组v2,然后input与getKey()返回的v0_1进行异或,结果与v2相同。根据异或的自反性,我们可知input = v2 ^ v0_1。 值得注意的地方是getkey()返回bobdy......

Android Native反调试—检测TracerPid值

/proc/$pid/status中显示程序的pid等信息,程序正常运行时TracerPid为0。程序被调试后,TracerPid 为正在调试此进程的pid。 实现代码如下: void be_attached_check(){ const int bufsize = 1024; char filename[bufsize]; char line[bufsize];......

IDA使用小结(六)

现在开始第六期。 1.动态调试时,直接continue跳转到某行汇编代码收到SIGSEGV信号,调试终止:若不能直接跳转到某一行,采用单步步过的方法绕过限制,一步一步执行到目标行。 2.有时候动态注册的函数伪代码显示一个传参,实质上有多个传参。把传参改为JNIEnv *env并Force call type后,IDA会重新识别并显示多个传参。 3.有时候静态注册的函数伪代码显示一个传......