静态分析反调试so,IDA动态调试so
本文尝试分析crackme程序
0、准备工作
电脑: Window10
手机: AndroidPhone Redmi note 4x Version7.0 Root
环境: Java 1.8.0_121
调试: IDA V6.8
0.1 将apk软件安装到手机上
可通过adb命令安装,命令:adb install AliCrackMe.apk
0.2 发送android_server到手机
通过adb push android_server data/local/tmp将IDA/dbgsrv目录下的android_server发送到手机的tmp目录
0.3 在手机目录中改名android_server为as并赋予777权限
adb shell
su
cd data/local/tmp
mv android_server as
chmod 777 as
0.4 关闭seLinux防火墙
setenforce 0
0.5 运行android_server
./as
1、调试
1.1 TCP转发
adb forward tcp:23946 tcp:23946
1.2 启动MainActivity
adb shell am start -D -n com.yaotong.crackme/.MainActivity
1.3 打开DDMS
双击monitor.bat,com.yaotong.crackme前边出现红色小虫子,记下com.yaotong.crackme的端口号86XX
1.4 打开IDA(32bit)
点OK,点go
Debugger-->Attach-->Remote ARMLiunx/Android debugger,选择hostname为127.0.0.1,port:23946,点击OK
附加进程,search"crack",双击com.yaotong.crackme,等待几秒。
勾选三项:
suspend on process entry point
supend on thread start/exit
supend on library load/unload
按F9运行
1.4 在cmd窗口通过jdb连接
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=86XX
出现设置未捕获的java.lang.Throwable等
1.5 IDA
点击cancel,按两次F9,加载完libcrackme.so,选中module中的crackme.so,选择java_com_yaotong_crackemeXXXX.securityCheck,在函数第一行下断点。
按F4,让程序直接退出,有反调试。
1.6 关闭运行的as
ctrl+c
2、过反调试
直接拉libcrackme.so进IDA,找到libcrackme.so的BLX R7处,按下F2,改为00 00 00 00,按下F2保存,在菜单栏,点击Edit->Patch program->Apply patches to input file...,选择保存位置,点击OK。
3、将保存的libcrackme.so放到手机中替换原来的so文件
3.1 删除手机原有libcrackme.so
adb shell
su
cd /data/app/com.yaotong.crackme-1/lib/arm
rm -rf libcrackme.so
3.2 传送新libcrackme.so到目标文件夹
adb push libcrackme.so /data/app/com.yaotong.crackme-1/lib/arm
在上一个cmd中赋予so文件的执行权限:chmod 777 libcrackme.so
4、动态调试
4.1 cmd1
./as
4.2 cmd2
adb forward tcp:23946 tcp:23946
adb shell am start -D -n com.yaotong.crackme/.MainActivity
4.3 DDMS
4.4 IDA
attach 127.0.0.1 23946
搜索并双击com.yaotong.crackme
附加三项
F9
4.5 JDB
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=86XX
4.6 IDA
点击cancel,按两次F9,加载完libcrackme.so,选中module中的libcrackme.so,选择java_com_yaotong_crackemeXXXX.securityCheck,在函数第一行下断点。
按F4,F9,在程序进入输入框处输入111,点击输入密码,断在断点处,在Hex View-1窗口中同步R0,一顿F8,当Hex View-1窗口出现111,就同步R3,继续F8,在Hex View-1中得到flag:aiyou,bucuoo