吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3616|回复: 10

[转载技术] Android逆向之动态调试总结

[复制链接]
Shark恒 发表于 2014-11-5 17:25 | 显示全部楼层 |阅读模式


一、在SO中关键函数上下断点

刚吾爱汇编论坛调试时。大多都满足于在SO中某关键函数上下断点。然后通过操作应用程序,去触发这个断点,然后进行调试

详细的步骤可以参见非虫大大的《Android软件安全与逆向分析》

简单说:在libsyclover.so文件中有一个函数jnicall1。每次单击按钮的时候,便会调用此函数。

1.静态载入此so文件,找到函数的偏移地址为:0x132C

102626pytt7yftxt3ez6dg.jpg
2.执行android_server3.端口转发

adb forward tcp:23946 tcp:23946

4.运行程序

5.IDA附加

102626eoq5s2qfq4p5uegr.jpg
然后会弹出
102626zmz47zqx8z8mrqm2.jpg
点击OK之后,在弹出的列表框中选择需要附加的进程即可

6.下断点


附加完成之后,会停在libc.so这个模块中。此时按下Ctrl + S,弹出模块列表框,搜索so文件名。
102627hht9kiuxcu3pz3ot.jpg
记录下基地址:0×76072000 (RX权限)
和静态分析时得到的偏移地址0x132C相加得到0x7607332C
G跳转到此位置

102627ouv45rvhdd7dr4z4.jpg
F2下好断点!

7.触发断点


下好断点,便F9执行,此时状态是runing
此时,去应用中单击按钮,程序便会断在刚刚下好的断点处~

102628gvrlauprqjpzbo6k.jpg
ok~ 这种调试方法局限性很大,适合于比较初级的调试。这种调试手法在现在已经满足不了需求了。


二、在JNI_OnLoad函数上下断点

JNI_OnLoad函数大概功能就是在程序加载so的时候,会执行JNI_OnLoad函数,做一系列的准备工作。
很多时候,程序猿们会将一些重要信息放在此函数中,而不是通过某种事件来重复触发。包括说将反调试函数放置在此函数中。因此,调试手段发生了改变,上述调试方法基本上被淘汰。

1.静态分析,找到JNI_OnLoad函数的偏移:0×1504

102628xcfa0hvogg0tzfgc.jpg

2.执行android_server3.端口转发

adb forward tcp:23946 tcp:23946

4.以调试模式启动程序

adb shell am start -D -n com.example.mytestcm/.MainActivity
此时,手机界面会出现Waiting For Debugger页面


5.打开ddms或者Eclipse (必要,为了使用jdb命令)

6.IDA附加

7.设置调试选项

Debugger ― Debugger Options
102628emj5lzgovlojakl5.jpg

8.F9运行程序

IDA中,F9运行程序,此时是runing状态。
在命令行中执行:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700其中port=8700是从ddms中看到的。

102629bzrizn8pyr7lfh82.jpg
此时程序会断下来
102629f0m61yo1z1l2ds11.jpg

9.下断点

Ctrl + S 然后搜索到so文件名
102629umuys8ysxm2m985m.jpg
记录下基地址是:0×76118000
加上JNI_OnLoad函数的偏移地址0×1504为0×76119504
G跳转到0×76119504,下断点

102629f9h9ldh8mrmzhl9t.jpg

A.触发断点

下好断点之后,直接F9运行吧,就能断在JNI_OnLoad函数处~
102630gg4hqhhx06xxjai8.jpg
当这种调试手法出现之后,将特殊函数,或者反调试函数放在JNI_OnLoad中也不是那么的安全了。此时,程序猿们通过分析系统对SO文件的加载链接过程发现,JNI_OnLoad函数并不是最开始执行的。在JNI_OnLoad函数执行之前,还会执行init段和init_array中的一系列函数。
因此,现在的调试方法,都是将断点下在init_array中~
至于下断点的方法,可以类比于在JNI_OnLoad中下断点的方法,在init_array的函数中下断点。还有一种方法便是通过在linker模块中,通过对其中函数下断点,然后也能单步到init_array中
下面便详细介绍下如何给任意系统函数下断点

三、给任意系统函数下断点

1.需要准备的有:
与你调试环境一致的系统源码,这个也可以在http://androidxref.com/网站上在线查阅。
root之后的手机,方便将系统的一些so文件dump至本地,静态获取到系统函数的偏移地址


2.流程
执行android_server
端口转发 adb forward tcp:23946 tcp:23946
调试模式启动程序 adb shell am start -D -n 包名/类名
IDA附加
静态找到目标函数对应所在模块的偏移地址
Ctrl+S找到对应模块的基地址,两个地址相加得到最终地址
G跳转至地址,然后下断
F9运行
执行jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
断下,进行调试


四、在dvmDexFileOpenPartial函数下断点,dump出明文dex


发展至今,从去年到现在,apk的加解密发展非常迅速。国内出现了很多针对apk的加壳保护方案。主要也体现在对dex的保护和对so的保护!
针对dex的保护,很长一段时间,都能通过对dvmDexFileOpenPartial函数下断点,从而dump出明文dex文件。

以这次alictf的第三题为例子,展示下如何对dvmDexFileOpenPartial函数下断点!
其他步骤都是一样的,这儿主要说下如何找到dvmDexFileOpenPartial函数位置
1.查看源码


dvmDexFileOpenPartial函数在rewriteDex这个函数中被调用。
102630xkd99gppk9u6gggd.jpg
可以看到关键字符串信息是:Unable to create DexFile
此时,从手机的/system/lib目录下得到libdvm.so


2. 载入IDA,搜索字符串:Unable to create DexFile


102630gkb0cebktoevf47r.jpg
得到偏移地址是:0x0005AE8A

3.下断点


搜索模块libdvm.so
102631r13p9woyw3e7mpo9.jpg
基地址是0×41492000
加上偏移地址为0x414ECE8A
G跳转至此位置,下好断点,即可


4.dump明文dex文件


下好断点之后,F9运行,执行jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
程序断下

102631etzcf8e5wzk5et2a.jpg
此时,看到寄存器窗口中的值为:
102632jbmigfedf0xfasem.jpg
R0保存dex的起始地址,R1便是dex的长度
102632y1zn2tkvkbikt40v.jpg
直接dump即可!

5.后续


dump出来的dex就可以进行反编。
效果如下:

102632jfml964g4l5nomp8.jpg


五、写在最后
随着现在技术的发展,对apk的保护是越来越好!大大增加了逆向分析人员的分析难度。同时,在整个攻防的过程中,对攻防两端的人都带来了非常棒体验。双方都取得了长足的进步!
也促使了整个加固方向水平的提升!
其中,动态调试手法在整个过程中是必不可少的。


评分

参与人数 16HB +22 THX +13 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
29590 + 1
24567 + 1
Jawon + 1
一路走来不容易 + 1
Soul1999 + 1
Wayne + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
消逝的过去 + 1
叶落花开 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
jaunic + 1
hnymsh + 1
lies + 1
简单 + 5 + 1 教程非常易懂,对新人帮助极大!楼主大爱!
Chris皇 + 2 + 1 转的一手好帖!学习了!
mm475 + 5 + 1 积极评分从我做起,感谢!
王婆卖瓜 + 5 + 1 积极评分从我做起,感谢!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
雨季 发表于 2014-11-7 22:00 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
wwe杨云VGe 发表于 2014-11-18 08:34 | 显示全部楼层

太厉害了 谢谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
逍遥枷锁 发表于 2014-12-26 12:17 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
行行行行行行 发表于 2022-3-31 14:29 | 显示全部楼层


[快捷回复]-感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-6-14 02:41 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
冷亦飞 发表于 2022-10-1 21:37 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2022-11-21 07:36 | 显示全部楼层

666,学到了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
Wayne 发表于 2022-11-21 12:11 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-3-24 18:10 | 显示全部楼层

楼主你辛苦了吧
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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