-
-
[原创]企业壳反调试及hook检测分析
-
发表于:
2018-1-19 15:18
12902
-
1.写在开始... 2
2.反调试之时间线程检测... 2
3.反调试之ptrace检测... 5
4.大致调用流程... 7
5.Hook检测之Xposed检测... 8
6.Hook检测之substrate检测... 9
7.小结... 10
8.参考引用... 10
最近在学习梆梆壳加固思路,在调试的过程中遇到了反调试,很是苦恼,而且每次调试都会被中断,盆友在论坛发了篇帖子【1】介绍了其中的一个反调,学习后收获颇多,给我指明了方向,接下来再对其他反调试进行补充,仅学习目的,若有疏漏或不合理之处请各位大佬多多指教。
启动调试后是对帖子【1】的验证,过程大致如下:
运行brpt.py后一路F9,
#下断点
# 内存中获取模块基地址
base = FindModule('linker');
#.text:00002464 BLX R4
addr = base + 0x2464; #该偏移值需要使用IDA静态查看linker模块的偏移值
#给linker下断点
AddBpt(addr);
#在libc.so中对库函数下断点
AddBpt(LocByName('fopen'));
AddBpt(LocByName('ptrace'));
当lr为pB54EB0CAE49198754C66F4A57BDB01DF函数时即为第一个反调试的线程创建处,然后会调用libDexHelper.so:pDD8ABF73B0AE99BD998BC5C954A74856,
再按一次F9即可断到帖子中提到的fopen函数处
执行完fopen后,回到调用函数libDexHelper.so:p8878CAA1006835C9D43174C88143BA8B+A6处,然后在如下所示处下断点,F9执行到此处,观察寄存器的值并做相应的修改,具体思路就是要跳过libDexHelper.so:AEDC62A8 BLX sub_AEDA6ECC 这个函数调用即可。
执行完成后,会跳出调用函数,来到下图处将r0寄存器的值修改为0,或将指令#1改为#0即可。
并在p39D6B1EED99DC7E506A9D4E07BD58D3A处下断,
执行完之后F9,则会跳到p39D6B1EED99DC7E506A9D4E07BD58D3A处,
该函数功能类似kill,具体过程参考帖子【1】。
接下来通过静态分析知道了时间线程的创建点,如下所示:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)