标签:libc 数据 ida title 问题 XML man 知识库 key
将ida目录中的android_server push到安卓手机上
adb push android_server /data/local/tmp
adb shell /data/local/tmp/android_server
adb forward tcp:23946 tcp:23946
ddms
adb shell am start -D -n 包名/类名
GO -> Debugger -> Remote ARMLinux/Android debugger
Debugger — Debugger Options
ddms(为了使用jdb命令)
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
其中port=8700是从ddms中看到的。
附加完成之后,会停在so模块中。此时按下Ctrl + S,弹出模块列表框,搜索so文件名。
记录下基地址。要下断点的函数加上ida静态分析时的偏移地址,得到内存中的地址,G跳转到该函数处,F2下断点。
使用F8进行单步调试,F7进行单步跳入调试。
1)、运行app
2)、将内存里的数据拷贝出来。
adb shell
su
ps | grep com.tyomcat.crackme 获取so的进程ID
cat /proc/(PID)/maps | grep libcrackme.so 获取so在内存中的基地址
dd if=/proc/(PID)/mem of=/sdcard/1.mem bs=1 skip=(so的基地址) count=(so文件大小)
adb pull /sdcard/1.mem
1)、执行android_server:adb shell /data/local/tmp/android_server
2)、端口转发adb forward tcp:23946 tcp:23946
3)、运行程序
4)、ps 获取pid
5)、命令:kill -19 <pid> 可以让进程暂停
6)、IDA附加,动态调试。
IDA是使用android_server在root环境下注入到被调试的进程中,那么这里用到一个技术就是Linux中的ptrace,那么Android中如果一个进程被另外一个进程ptrace了之后,在他的status文件中有一个字段:TracerPid 可以标识是被哪个进程trace了,我们可以使用命令查看我们的被调试的进行信息。
cat /proc/(PID)/status
无法连接到目标的VM,那么这种问题大部分都出现在被调试程序不可调试,在AndroidManifest.xml添加android:debuggable属性:
回编译:java -jar apktool.jar b -d out -o debug.apk
签名apk:java -jar .\sign\signapk.jar .\sign\testkey.x509.pem .\sign\testkey.pk8 debug.apk debug.sig.apk
标签:libc 数据 ida title 问题 XML man 知识库 key
原文地址:http://www.cnblogs.com/tyomcat/p/6195627.html