Android 加固应用

1.混淆:Proguard.配置proguard-rules.pro文件,在app的gradle文件中把minifyEnable设置为true开启混淆。(Proguard-rules.pro:配置proguard。通过-keep保留四大组建,application资源,native方法,枚举里,自定义控件,parcelable序列化类,serializeable序列化类,有回调函数的类,实体类,webview交互类,h5和交js互类,含反射的类

2.反调试:如果一个进程被调试,这个进程的status文件的TracePid会记录调试者的ID,我们可以轮询这个文件的TracePid,发现这个id大于0就退出程序

3.加壳:

3.1加密源程序为解壳数据

3.2计算解壳数据长度并添加该长度到解壳dex文件头末尾,接续解壳数据到文件头末尾

3.3修改解壳程序dex文件头中的checksum,signature等参数,分析数据偏移量,修改偏移量,修改并覆盖清单文件

3.4解壳:从插入数据的位置读取解壳数据的长度,从dex文件读取解壳数据,解密解壳数据,以文件形式保存解密数据到apk文件,通过dexclassloader动态加载apk文件

4.运行时修改dalvik指令:定位到需要修改的ondex文件的mao地址,通过odex的长度确定dex文件的偏移量和偏移位置,找到了偏移量就可以解析dex文件头,定位dex文件各部分锁在的区域,再定位到byte code的存放位置就可以修改dalvik字节码了。byte code中的insns参数就是存放dalvik的字节码,再定位到dexmethod,codeoff就是数据结构的偏移量,得到了便宜就可以通过mprotect函数修改insns了。注:apk安装时会通过dexopt来验证并生产优化后dalvik字节码和dex文件,过程是:将apk中的class.dex解压后用dexopt处理,并保存到dalvik-cache中,odex文件会解析相关依赖,并加载所需的依赖库表附加在文件中,会修改部分指令加快解析和处理速度

5。检测模拟器:检测模拟器特有文件,检测默认号码,检测设备ids,检测ImsI id ,检测硬件信息,检测运营商

6.对抗apk重打包:通过一个轮询去获取当前应用程序的签名,用获取到的签名和app的gradle文件中的签名信息比较,如果不同就说明被重新打包过,直接退出程序。

 

你可能感兴趣的:(面试问题系列)