五大反逆向技术:
代码混淆、针对不同逆向工具保护技术、增加逆向难度(java代码native化)、动态加载技术、代码验证技术
代码混淆:
工具:proguard
常用操作:保留选项、压缩、优化、混淆。
功能:
混淆代码(注意使用混淆文件的时候需加入自己的具体操作以防程序无法运行)
删除无用Log:可删除调试和分析代码逻辑时的log,也可删除不使用的调试接口和测试环境
问题:
混淆错误:用到第三方jar时要指明proguard不要检查
运行错误:代码不能混淆的情况下
调试定位较为痛苦,开发者需要自己备份一份map记录对应混淆映像
DEX保护:
工具:dex文件混淆器dalvik-obfuscato、DexGuard
原理:fill-array-data-payload指令,隐藏原始字节码
加壳处理:android平台的加壳公司:APKProtect、Bangcle、LIAPP、Qihoo
脱壳工具:android-unpacker(Github)
so文件保护:
so文件:Native C/C++代码编译得到的文件
问题:对ELF文件加壳、对Android系统中so文件的加载、调用机制的处理
防止jd-GUI查看代码
方法:添加无意义的代码段、针对jd-GUI的bug使其运行时崩溃。最常用的是添加无意义switch代码。
防止二次打包
APK机器识别原理:包名及签名
1、java层签名验证
定位签名方式:搜索Landroid/content/pm/PackageInfo:->signatures
2、服务器验证
可行性不高,依赖网络,可伪造。
3、NDK技术底层获取签名和验证
将获取和验证的方法封装在so文件中,破解难度加强。但是用IDA PRO工具等也可以完美获取验证签名的具体位置
4、自定义文件指纹验证
自定义一天签名和校验机制算法
防止动态分析
Anti-debug和Anti-Anti-debug之间的博弈
检测运行环境:
检测IDA等工具:使用IDA或者gdb等工具的时候,会在android进程中启动一些本地进程,android_server、gdbserver等
查看是否存在模拟器:使用设备的imei和build.MODE判断
防止动态注入:防止对方调用ptrace函数或保证平台进行注入检测
Android渗透测试:
主要方向:网络调试、数据表嗅探、网络攻击、口令破解、私有文件排查、逆向代码分析
工具:
Drozer(又称Mercury),针对android系统地安全审计与攻击框架
瑞士军刀busybox,安装步骤:
(1)root设备
(2)busybox二进制文件,选择对应架构的最新版本
(3)将busybox传入到android设备:adb push busybox /mnt/sdcard
(4)重新挂载/system目录读写权限
adb shell
su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
(5)复制busybox文件到/system/xbin并将其修改为“可执行”的权限
cp /mnt/sdcard/busybox /system/xbin
chomd 755 busybox
(6)安装busybox
busybox --install
集成化工具:dSploit、zANTI
加固问题
1、加固厂商:加固宝360、娜迦nagapt、梆梆bangcle、爱加密ijm、阿里、百度,盛大,腾讯,网秦通付盾
2、加固厂商对应的特征:
娜迦libchaosvmp.so,libddog.so,libfdog.co
爱加密libexec.so,libexemain.so
梆梆libsecexe.so,libsecmain.so,libDexHelper.so
360libprotectClass.so,libjiagu.so
通付盾libegis.so
网秦libnqshield.so
百度libbaiduprotect.so
3、脱壳方法:
修改系统源码自动脱壳
通过hook方式对关键函数脱壳
开源工具ZjDroid,DexHunter脱壳
IDA或者GDB动态调试脱壳