1.判断APK是否支持debuggble模式 

方法一: 通过过APKKiLLer反编译工具查看 ,如果不是在application节点下去修改然后二次打包即可添加指令android:debuggable="true"

 

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_aapt

  

方法二 :通过aapt指令去查看aapt list -v -a crackme1_killer.apk工具所在路径由下图所示,这条指令会打印出apk相关信息

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_aapt_02

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_ddms-so库_03

2. 搭建IDA调试android apk测试环境 

1. 在IDA安装目录找到android_server文件 push到android目录中,修改android_server并文件读写权限,以root身份去运行android_server文件(必须要以root身份去运行,否则无法IDA无法获取android应用进程)

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_debuggble_04

2. 执行指令 
    2.1 adb push androidserver /data/local/tmp/ 
    2.2 chmod 777 /data/local/tmp/android_server 执行权限否则会弹出下图框框,文件执行权限拒绝

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_aapt_05

2.3 /data/local/tmp/android_server 执行此文件 注意如果下图弹出 出现 bind: Address already in use 错误 这样的错误提示,说明原手机中android_server已经在执行中,找到进程直接干掉重新开启

干掉指令

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_debuggble_06

重开成功标志,代表android_server执行中

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_debuggble_07

2.3 adb forward tcp:23946 tcp:23946 IDA监听23946端口,PC段转发IDA监听端口,使IDA可以监听android系统进程 
2.4 打开IDA,使IDA添加需要调试的android进程,

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_apkkiller_08

2.5 点击确认以后会弹出android系统进程列表 选中需要调试的进程即可,如果未弹出下图提示为出现的话,在output window窗口输出链接失败,无效之类的提示的话请尝试多次执行 IDA监听端口转移指令即可

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_aapt_09

2.6 点击Debug-----> debug option 选中下图

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_aapt_10

2.7 运行应用程序 开启IDA断点调试
在执行下面这条指令,最好配置DDMS环境变量 ,在dos窗口输入ddms,弹出ddms窗口,弹出窗口以后经常会弹出ddms端口被占用的情况,解决方案是修改ddms窗口端口号最好,FILE --->Option

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_IDA-逆向-so函_11

ddms 执行文件所在路径

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_ddms-so库_12

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8701,链接的ddms对应的端口,开始测试模式的应用,点击IDA下图 出现下图提示开启IDA调试模式成功

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_IDA-逆向-so函_13

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_apkkiller_14

选中需要调试的so库 下断点,F7 代表进入方法,F8代表向下执行,F9
 进入下一个断点,若无及退出程序 ,函数有个固定的执行顺序,

android怎么添加一个so库编译到文件系统中 android so库怎么反编译_ddms-so库_15

注意啊: 在调试so库的时候 先执行.init_array 其次 JNI_OnLoad
,在调试so库的很多时候要双开IDA 动静太结合的双调,因为IDA在编译的过程不能全部展示所要调用的函数,指针还有内存地址