安卓程序动态调试需要满足两个条件。

1.在AndroidMainfest.xml文件中,在application标签下,Android:debuggable=true。

2.系统默认调式,在build.prop(boot.img),ro.debugable=1。

一: 实例演示java层反调试

以“百度加固”为例。

1.将样本拖入jdax-gui中,进行反编译,来到加固程序的onCreate 里,如下图所示。

9fe0dd9e400f6e548573b45e68e5d7a2.png

2.找到attachBaseContext方法,里面有一个判断,调用这个Debug. isDebuggerConnected函数来检测程序是否被调试反调,从而执行是否加载so库的逻辑操作,如下图所示。

03a9431ee26011088f70f0b03cd0241d.png

二:绕过Java层反调试的方法

1.使用androidkiller进行反编译,然后搜索isDebuggerConnected,如下图所示。

c8953b50052b620b373d2aa3e14fbda0.png

2.过来后,修改判断条件,将nez改为eqz,如下图所示。

b54ba0e1bda7ec24a096e56c9c09cf43.png

3.修改smali之后,将apk重新打包,编译,再签名即可。

小结

介绍了java层反调试的原理,通过一个反调试的例子,实操过掉Java层反调试。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐