APK使用反编译工具AndroidKiller进行反编译后,在AndroidManifest.xml没有设置android:debuggable属性,没有该属性下debuggable默认是关闭,但是在模拟器或设备系统属性ro.debuggable为1(可以使用命令"adb shell getprop ro.debuggable"来检测该值)可进行动态调试。
1.先查看AndroidManifest.xml是否有设置android:debuggable属性,发现没有有设置android:debuggable属性,可以添加属性为true重打包再进行调试,或者直接使用模拟器直接调试。
2.使用ps看看进程pid值,再通过adb jdwp查看可调试进行有没该pid值。(建议使用网易模拟器)
findstr后面的字符是apk的包名,或者是这个app的关键字
3.使用adb forward tcp:1234 jdwp:1766进程pid值 //将pc机上的1234端口重定向到PID值为1766的手机进程。
E:\Desktop\adb>adb forward tcp:1234 jdwp:1766
4.通过jdb命令连接进行调试jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=1234
E:\Desktop\adb>jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=1234
设置未捕获的java.lang.Throwable
设置延迟的未捕获的java.lang.Throwable
正在初始化jdb...
>
查看classes:
可以进行动态调试
危害:应用存在被破解篡改和被注入代码等风险
加固建议:
1.加入设置android:debuggable属性;
2.检测调试器,当检测到软件调试器链接时,终止软件运行;
3.检测模拟器