标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2025-983] 作者: ecawen 发表于: [2017-11-03] [2017-11-03]被用户:ecawen 修改过
本文共 [818] 位读者顶过
引言最近在捣鼓移动端的脱壳,虽然目前这方面的教程有挺多的了,但还是走了很多弯路,现在希望把这些内容记录下来帮助有需要的人 环境准备手机环境首先请准备一台手机,这台手机需满足以下三个条件:
首先解释为什么要是真机,因为模拟器经常会遇见各种各样的问题(亲测)导致有些步骤进行不下去。[出自:jiwo.org] 程序环境
程序的话,自然是要找一个已经加了壳的应用,且这个应用本身不会太复杂,以防反编译的时候出现一些奇奇怪怪的问题。 操作步骤放置IDA的APP调试服务器
找到IDA的根目录,进入dbgsrv的子目录下,可以看见有一个名为android_server的文件,这个就是要使用IDA调试so文件所需要的程序。你想啊,我在电脑上怎么才能调试手机上的程序呢?一个方案当然是我在手机上弄一个调试器,但手机屏幕这么小,根本不方便调试,那么最好就是我在手机上这个调试器只提供调试功能,而把操作界面放到电脑上来,而android_server这个文件就是起到这个作用了。 将ro.debuggable的值改为1
为了使用jdb恢复程序的运行,我们需要: 以root权限运行android_server
打开手机的usb调试,连接上数据线,在电脑上的cmd里运行adb shell,有的人可能运行不成功,有可能是因为adb被占用的原因(我曾经因为使用了酷狗,一直被它自己的音乐传输后台程序给占用着),进入到shell后,输入su获取root获取,然后./as运行android_server,这里最好用su切换root权限后再运行,以防出现权限不够的情况。 进行端口转发
上一步里android_server在监听端口23946,我们可以用adb forward tcp:23946 tcp:23946这个命令将pc端的23946端口转到手机端的23946,这样ida附加调试的时的地址就只需要填127.0.0.1,即本机地址了。 以调试模式启动应用
使用AndroidKiller打开APK文件进行反编译,可以看到
命令最末尾那个就是我们APP对应的包名/入口,其他部分不能修改。 使用IDA附加调试
打开一个空的IDA,选择debugger->attach->Remote ARMLinux/Android debugger,然后在选择debug options里选择suspen on process entry point,使其断在程序入口点,这里如果进行了端口转发在hostname里填上127.0.0.1,如果没有,就填上手机的IP地址,点击确定之后找到对应的程序,加载。 打开DDMS
这一步也不是必要的,DDMS原本是ecplipse上的一个插件,如果你用的是android studio,可以用tools->Android->Android Device Monitor打开它。可以看见,我们要调试的程序出现在了这里(如果没有是因为ro.debuggable没有设置成功),
这条命令即把pc端的8700端口转发到手机端的8606端口上(待调试程序占用的端口号是8606) 使用jdb恢复程序运行最后在命令行中输入:
这一步的作用是使程序恢复运行。注意这时候如果ida里还没有点击运行,程序是不会真的继续运行的,这时候就可以正常地在IDA里下断调试了。 最后的话
感觉android端的下断调试远比pc端要繁琐,坑也比较多,而网上的教程大多是只告诉我们具体的步骤,而不告诉我们为什么需要这个步骤的原因,导致我们跟着做的时候也是懵懵懂懂,因此产生了写这篇文章的动机。 |