IDA pro脱壳实战过反调试
来源:互联网 发布:剑灵邀请一直网络忙 编辑:程序博客网 时间:2024/05/24 07:27
IDA pro脱壳实战过反调试
标签(空格分隔): Apk逆向
1. 前言
之前总结了IDA pro脱壳的基本步骤,包括调试步骤和在libdvm.so的dvmDexFileOpenPartial函数出下断点,从内存中dump出dex文件。
这次以360一代加壳为例,试着在mmap出下断点和过一些基本的反调试技术。
2. 脱壳环境搭建
这里的环境搭建和上一篇博客一样http://blog.csdn.net/daide2012/article/details/75675210
启动android_server
端口转发
以调试模式启动应用
打开IDA附件进程
设置Debugger Option选项
运行jdb调试
3. 开始脱壳
3.1 下断点
找到mmap函数,在此下断点,一般我们读取文件都是使用fopen和fgets函数,但是360壳通过mmap函数读取/proc/pid/status,来检查TracerPid,因此我们应该在mmap函数处下断点
单步调试过程中发现一直重复执行一段代码如下:
我们发现,这是一段循环,测试是增加破解难度,故意设置的,因此我们将循环条件的寄存器值进行更改,让其跳出循环,否则要进行多次单步,按F8按的手痛
在寄存器列表中点击鼠标右键,修改寄存器R11的值为Ox000000A7,提早退出循环,然后单步调试
注意单步都标号为loc_760BF08C处的时候,要进入该函数,然后继续单独调试,我试了好几次,每次执行到此处的代码,自动退出了,因此反调试的实现肯定是由该段代码实现,所以要进入调试
继续单独调试
过程中会发现程序读取/proc/pid/status的内容,比较TracerPid的值与0的大小
此时R0寄存器的值恰好是16进制的值11EF,对应的TracerPid为4591,因此要修改R0寄存器的值为0,绕过范调试检测,然后继续单步
执行完后,按F9继续运行mmap函数,因为此时读取的并不一定是dex文件,动态库在装载的时候很多都调用了mmap函数,所以回到mmap继续调试
注意,程序会多次进行反调试检测,所以在进入反调试的函数处建议下断点,这样可以快速的F9到反调试检测的位置。我在调试的过程中一共按了6,7次才把反调试检测过完,中间按错了好几次,每次都得重头再来,耐心很重要啊!!!
过了反调试之后,在memcmp处下断点,不断的F9,同时在Hex View窗口主要出现dex.035的字符
终于看到dex.035这个字样了,下面的工作使用脚本将dex文件从内存中dump出
之后即可直接采用脚本dump出dex文件
- IDA pro脱壳实战过反调试
- IDA Pro脱壳实战(一)
- IDA PRO动态调试 尝试脱壳记录
- IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总
- IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总
- 360加固逆向脱壳之过反调试
- 360加固逆向脱壳之过反调试
- 利用IDA Pro反汇编程序
- IDA so 反调试
- OllyDbg、IDA Pro联合调试
- 反汇编分析工具(HexRays IDA Pro)
- IDA Pro 6.6 反汇编程序实例
- 反汇编IDA之路1(IDA pro 学习)
- 第5章 IDA Pro 破解实战
- 安卓逆向学习笔记(5) - 在JNI_Onload 函数处下断点避开针对IDA Pro的反调试
- IDA pro 调试程序如何传递参数
- 使用IDA Pro调试so文件
- IDA Pro动态调试Android so文件
- BZOJ 2442 [Usaco2011 Open]修剪草坪 DP+单调队列优化
- UVA 10815 (字符串处理)
- mysql删除大表更快的drop table办法
- Linux软件安装
- 网络编程和反射--简单讲解
- IDA pro脱壳实战过反调试
- 注册Google Account账号两天仍旧失败后,终于迎来激动人心的时刻!(此电话号码无法用于进行验证)
- GIT 远程仓库:添加远程库、从远程库克隆
- 颜色分类
- Linux下挂载iso文件和配置yum本地源
- c++抛出异常方式与C语言的区别
- 百度站长平台提交链接-主动推送
- 使用mysql的C API从数据库选择数据
- PAT:1008. 数组元素循环右移问题 (20)