前言
由于本人使用的是Mac来做开发,并且最近要做逆向相关,苦于网上多数教程都是Win的,没办法只有到处搜集资料和自己踩坑,摸着石头过河。这里分享一下Mac来做的整个过程。目标,IDA动态调试,dump dex脱壳。
脱壳的话,目前两种方法,一种动态调试,一种xposed,当前为动态调试学习
环境:
macOS 10.14.1
root过后的手机 htc 4.4.2
IDA 7.0 附送地址
IDA mac 高版本崩溃解决适配
mprop 设置手机所有应用为可调试 下载地址
精简方案
1、 copy 启动 Android server
- 上传IDA调试服务器地址:IDAPro70\dbgsrv\android_server
- cmd进入到该目录下: IDAPro70\dbgsrv
- 导入IDA调试服务器:adb push android_server /data/local/tmp
- adb shell 以su启动(手机要求root)
- cd到/data/local/tmp下:chmod 777 android_server
- ./android_server(如果失败重启手机)
2、 root手机使用mprop设置ro.debuggable为1
adb push xxx/mprop /data/local/tmp/mprop
adb shell su
chmod 755 /data/local/tmp/mprop
data/local/tmp/mprop
setprop ro.debuggable 1
/data/local/tmp/mprop -r3、 转发ida端口 开启adb应用调试
adb forward tcp:23946 tcp:23946
adb shell am start -D -n 包名/包名对应启动Activity4、 ida attach到应用进程 打断点
打开IDA设置好process options 地址127.0.0.1 端口23946
Ida -》debugger -》attach process
选择对应应用进程
选择libdvm.so
找到dvmDexFileOpenPartial 计算偏移量
下断点5、 jdb连接应用
连接jdb(两种方式)
1、通过ddms(如果占用8700 ps查看 kill杀掉 重来)
2、命令
adb shell ps | xxx 找到对应app的进程号
adb forward tcp:8700 jdwp:进程号
jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost6 IDA开启调试
启动ida F9 开始进行调试
大致原理
通过IDA的动态调试系统库libdvm.so的dvmDexFileOpenPartial方法,来寻找内存中的dex段地址,然后进行dump,最终达到脱壳的目的。
(4.4前后的不同java虚拟机类型,所以这里用的是4.4.2的手机,系统库为libdvm,如果是之后的便是libart,调试方法为openMemory)
详细过程
看似原理很简单,但是会遇到许多的问题和坑,每个都能卡你半天,所以这里分享给大家一些细节东西,望君莫要重蹈覆辙。
1、 copy 启动 Android server
- 上传IDA调试服务器地址:IDAPro70\dbgsrv\android_server
- cmd进入到该目录下: IDAPro70\dbgsrv
- 导入IDA调试服务器:adb push android_server /data/local/tmp
- adb shell 以su启动(手机要求root)
- cd到/data/local/tmp下:chmod 777 android_server
- ./android_server(如果失败重启手机)