- 对本书的赞誉
- 前言
- 基础篇
- 第 1 章 Android 中锁屏密码加密算法分析
- 第 2 章 Android 中 NDK 开发
- 第 3 章 Android 中开发与逆向常用命令总结
- 第 4 章 so 文件格式解析
- 第 5 章 AndroidManifest.xml 文件格式解析
- 第 6 章 resource.arsc 文件格式解析
- 第 7 章 dex 文件格式解析
- 防护篇
- 第 8 章 Android 应用安全防护的基本策略
- 第 9 章 Android 中常用权限分析
- 第 10 章 Android 中的 run-as 命令
- 第 11 章 Android 中的 allowBackup 属性
- 第 12 章 Android 中的签名机制
- 第 13 章 Android 应用加固原理
- 第 14 章 Android 中的 so 加固原理
- 工具篇
- 第 15 章 Android 逆向分析基础
- 第 16 章 反编译神器 apktool 和 Jadx
- 第 17 章 Hook 神器 Xposed
- 第 18 章 脱壳神器 ZjDroid
- 第 19 章 Native 层 Hook 神器 Cydia Substrate
- 操作篇
- 第 20 章 静态方式逆向应用
- 第 21 章 动态调试 smali 源码
- 第 22 章 IDA 工具调试 so 源码
- 第 23 章 逆向加固应用
- 第 24 章 逆向应用经典案例分析
- 第 25 章 Android 中常见漏洞分析
- 第 26 章 文件加密病毒 Wannacry 样本分析
21.1 动态调试步骤
第一步:反编译 apk
通过 apktool 工具进行 apk 的反编译,得到 smali 源码和 AndroidManifest.xml,然后修改 AndroidManifest.xml 中的 debug 属性为 true,同时在入口处加上 waitForDebug 代码,进行 debug 等待。一般入口都是先找到入口 Activity 的 onCreate 方法中的第一行处,这里需要注意的是,apktool 工具一定要加上-d 参数,这样反编译得到的文件是 Java 文件,这样才能够被 Eclipse 识别,进行调试。
第二步:回编译 apk
修改完成 AndroidManifest.xml 和添加 waitForDebug 之后,需要使用 apktool 进行回编译,回编译之后得到的是一个没有签名的 apk,还需要使用 signapk.jar 来进行签名,签名文件直接使用测试程序的签名文件就可以,最后进行安装。
第三步:将反编译 smali 工程导入 Eclipse
将反编译之后的 smali 源码导入到 Eclipse 工程中,找到关键点,进行下断点。这里的关键点,一般是先大致了解程序运行的结构,然后找到需要破解的地方,使用 View 分析工具,或者使用 jd-gui 工具直接查看 apk 源码(使用 dex2jar 将 dex 文件转化成 jar 文件,然后用 jd-gui 进行查看),找到代码的大体位置,然后下断点。这里可以借助 Eclipse 的 DDMS 自带的 View 分析工具找到对应控件的 resid,然后全局搜索这个控件的 resid,或者直接在 values/public.xml 中查找,最终定位到这个控件位置,再查看它的点击事件即可。
第四步:设置远程调试
设置远程调试工程,首先运行需要调试程序,然后在 DDMS 中找到对应的调试服务端的端口号,然后在 Debug Configurations 中设置远程调试项目,设置对应的调试端口和 ip 地址(一般都是本机 pc,那就是 localhost),然后红色小蜘蛛变成绿色的,表示远程调试项目连接关联上了调试程序。这里需要注意的是,一定需要关联正确,不然是没有任何效果的,关联成功之后,就可以进行操作。
第五步:调试 apk 程序
操作的过程中,会进入到关键的断点处,通过 F6 单步,F5 单步进入,F7 单步跳出,进行调试。找到关键方法,然后通过分析 smali 语法了解逻辑,如果逻辑复杂的,可以通过查看具体的环境变量的值来观察,这里也是最重要的,也是最复杂的,同时这里也是没有规章可寻的,这与每个人的逻辑思维以及破解能力有关系。分析关键的加密方法是需要功底的,当然这里还需要注意一个信息,就是 Log 日志,这有时候也是很重要的一个信息。
第六步:编写代码实现核心逻辑
当知道了核心方法的逻辑,要想得到正确的密码,还是需要自己用语言去实现逻辑的,需要手动编写代码才能得到正确的密码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论