java层保护
1 代码混淆
2 调试器检测
native层
1 ptrace检测
2 进程名检测
3 apk线程检测
4 安卓系统调试检测函数
5 轮询检测法
6 断点检测
java层保护
1 代码混淆
apk应用在被逆向分析时,java层代码就像被扒光一样,而native代码分析难度大,但是需要扎实的c/c++基础。这个
时候大家就可以考虑一下代码混淆技术稍作保护(毕竟看着好多abc也挺烦的)。Android开发中提供了Proguard这
一工具来进行代码混淆。 这里只做简单介绍,Proguard是一个开源项目,他能够对Java类中的代码进行压缩
(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。
1. 压缩(Shrink):在压缩处理这一步中,用于检测和删除没有使用的类,字段,方法和属性。
2. 优化(Optimize):在优化处理这一步中,对字节码进行优化,并且移除无用指令。
3. 混淆(Obfuscate):在混淆处理这一步中,使用a,b,c等无意义的名称,对类,字段和方法进行重命名。
4. 预检(Preveirfy):在预检这一步中,主要是在Java平台上对处理后的代码进行预检。
Proguard在Android Studio中都已经内置,每次新创建一个工程时,都会自动在gradle中被添加。
2 调试器检测
利用Java层API来判断Android程序是否是处于被调试下。
进行动态调试的时候,需要进行jdb连接:jdb -connect
com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700,
当接连成功之后,android.os.Debug.isDebuggerConnected() 这个方法就会ture。
这就跟系统的android.os.Debug.isDebuggerConnected()方法有关。
解决也很简单,使用反编译工具方便程序,然后搜索isDebuggerConnected() 关键字, 然后Nop 掉改函数的调用即
可。 还有就是判断当前应用属性:ApplicationInfo.FLAG_DEBUGGABLE。在反编译后AndroidMainfiest,xml 中添
加:android:debuggable=“true”。
评论0