鱼C论坛

 找回密码
 立即注册
查看: 3391|回复: 1

企业壳反调试及hook检测分析

[复制链接]
发表于 2018-2-6 15:17:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 spark5566 于 2018-2-6 15:17 编辑

企业壳反调试及hook检测分析... 1
1.写在开始... 2
2.反调试之时间线程检测... 2
3.反调试之ptrace检测... 5
4.大致调用流程... 7
5.Hook检测之Xposed检测... 8
6.Hook检测之substrace检测... 9
7.小结... 10
8.参考引用... 10
  
1.写在开始最近在学习梆梆壳,在调试的过程中遇到了反调试,很是苦恼,而且每次调试都会被中断,盆友在论坛发了篇帖子【1】介绍了其中的一个反调,学习后收获颇多,给我指明了方向,接下来再对其他反调试进行补充,若有疏漏之处请各位大佬批评指正。
2.反调试之时间线程检测
启动调试后是对帖子【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,
无标题.png
再按一次F9即可断到帖子中提到的fopen函数处
无标题2.png
执行完fopen后,回到调用函数libDexHelper.so:p8878CAA1006835C9D43174C88143BA8B+A6处,然后在如下所示处下断点,F9执行到此处,观察寄存器的值并做相应的修改,具体思路就是要跳过libDexHelper.so:AEDC62A8 BLX  sub_AEDA6ECC 这个函数调用即可。
无标题3.png

执行完成后,会跳出调用函数,来到下图处将r0寄存器的值修改为0,或将指令#1改为#0即可。
无标题4.png
并在p39D6B1EED99DC7E506A9D4E07BD58D3A处下断,
无标题5.png
执行完之后F9,则会跳到p39D6B1EED99DC7E506A9D4E07BD58D3A处,
无标题6.png
该函数功能类似kill,具体过程参考帖子【1】。
接下来通过静态分析知道了时间线程的创建点,如下所示:
无标题7.png
具体的时间检测函数如下:
无标题8.png

其中主要就是调用了gettimeofday函数,获取时间,然后再做比较,不满足条件则kill掉
无标题9.png
无标题10.png
以上便是时间检测的功能了。

3.反调试之ptrace检测
接下来是ptrace检测函数通过静态分析ptrace被调用了3次,首先进行PTRACE_ATTACH,第二次调用后和0进行比较,最后进行PTRACE_DETACH,如下所示:
无标题11.png
另一处case 13会调用pF77EA32766D841ED6BD10130E181CB0D()是ptrace检测, 无标题12.png
在p9392640B2E38B72373213C945704CA08处也调用了ptrace检测,
无标题13.png
具体函数如下所示:
无标题14.png
其中p1EBFB58D66C99CAD7405904C9B93559D()->p39D6B1EED99DC7E506A9D4E07BD58D3A。

4.大致调用流程
经过上述分析,整理大致调用流程如下:
无标题15.png


5.Hook检测之Xposed检测
对于Xposed检测主要是对相关字符串做了比对,如下图所示:
无标题16.png
在做完比对后返回0和1进行比较,最后又会调用那个自己写的p39D681EED99DC7E506A9D4E07BD58D3A函数,前面提到,该函数功能类似kill,此处做了重命名为p3_linux_syscal_kill。
无标题17.png
6.Hook检测之substrace检测
通过静态分析可知,pAFD3E6E79D2F88D9F3563AE570866D51函数在case2中调用了pB4DACEC3279252082ECED1471A664BF7函数,此函数则为substrace的检测点,
无标题18.png
具体函数如下所示:
无标题19.png
当然也是比较的字符串,根据以上信息可以在手机中安装对应的框架进行动态验证,由于我的环境没有安装该hook框架,故暂未进行动态验证。
7.小结
根据以上分析,过掉以上反调试就很容易了,具体操作不难,不再赘述,方法可以参考帖子【2】。我采用idapython代码绕过,终于可以开心的调试了,以上当然不是所有的反调,具体还有其他细节的处理遇到了再根据具体情况加以分析,其中还有inotify没有分析,具体可以参考另一篇帖子【3】。当然,对于梆梆壳这只是迈出的第一步,还有很多需要继续加油!
8.参考引用
【1】https://bbs.pediy.com/thread-223808.htm
【2】https://bbs.pediy.com/thread-218938.htm
【3】https://bbs.pediy.com/thread-223320.htm


评分

参与人数 1鱼币 +5 收起 理由
康小泡 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 14:58:53 | 显示全部楼层
向大佬学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 07:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表