Android脱壳系列-背景

背景

  1. app存在的危险
    代码修改(广告植入,替换广告id)
    资源修改(界面替换广告,链接替换)
    破解(应用收费,内购)
    篡改数据(无效金币,砖石)
    加入恶意代码(木马,隐私,交易)
    动态注入,数据拦截,窃取,修改
    协议修改

  2. 加固目的
    需要防止逆向分析(防逆向)–防止核心代码被反编译
    控制二次打包(防篡改)– 校验完整性,签名,防止盗版
    防止调试和注入(防调试)–防止动态调试,注入获取关键数据
    防止应用数据窃取(防窃取)– 加密敏感数据
    防止协议直接被盗刷–加密协议通信

  3. 常用加固方式
    类加载技术
    针对apk中的classes.dex文件进行处理,放入特定的文件中,通过native代码来运行进行解密(爱加密,梆梆)
    方法替换技术
    将class.dex文件中的方法代码进行提取,抽取方法,在运行时对器进行动态解密还原

  4. 脱壳手法
    修改系统源码自动脱壳
    通过hook对关键函数进行脱壳
    开源工具zjdroid,dexhunter进行脱壳
    利用IDA或者GDB动态调试进行脱壳

壳进化

  1. 第一代壳 dex 加密
    dex字符串加密
    资源加密
    对抗反调试
    反调试
    自定义dexClassLoader

  2. 第二代壳 dex抽取和so加固
    dex代码抽取到外部
    dex动态加载
    so加密

  3. 第三代壳 dex动态解密和So混淆
    dex代码动态解密
    so代码混淆

脱壳思路

第一代壳
1. 内存dump,内存中寻址dex.035 或dex.036
2. 文件监视法
    dex优化生成odex
    监视文件变化(notifywait-for-Android)
    监视dexOpt输出(notifywait-for-Android)
3. hook法
    hook dvmDexFileOpenPartial
4. 定制安卓系统
第二代壳
1. hook dexFileParse  dexFileOpenFromMD
2. 定制系统
    dexHunter defineClassNative
    绕过3进程反调试一系列系统源码
    断点mmap, dexopt优化时,dvmContinueOptimization()->mmap()
第三代壳 方法指令抽取

dex2oat
ART模式下,dex2oat生成oat时,内存中的dex是完整的
定制系统
hook Dalvik_dalvik_system_DexFile_defineClassNative dexHunter
枚举所有DexClassDef,对所有class,调用dvmDefineClass进行强制加载

第四代壳

so+vmp
动态调试+人肉还原

总结

爱加密 脱壳点 dvmDexFileOpenPartial

壳特点

(“libsecexe.so”, “梆梆加固免费版”);
(“libsecmain.so”, “梆梆加固免费版”);
(“libSecShell.so”, “梆梆加固免费版”);
(“secData0.jar”, “梆梆加固免费版”);
(“libSecShell-x86.so”, “梆梆加固免费版”);

(“libDexHelper.so”, “梆梆企业版”);
(“libDexHelper-x86.so”, “梆梆企业版”);
(“classes.jar”, “梆梆加固定制版”);
(“DexHelper.so”, “梆梆加固定制版”);

(“libtup.so”, “腾讯加固”);
(“libshell.so”, “腾讯加固”);
(“mix.dex”, “腾讯加固”);
(“mixz.dex”, “腾讯加固”);
(“libshella-xxxx.so”, “腾讯加固”);
(“libshellx-xxxx.so”, “腾讯加固”);

(“libtosprotection.armeabi-v7a.so”, “腾讯御安全”);
(“libtosprotection.armeabi.so”, “腾讯御安全”);
(“libtosprotection.x86.so”, “腾讯御安全”);
(“tosversion”, “腾讯御安全”);
(“libTmsdk-xxx-mfr.so”, “腾讯御安全”);

(“aliprotect.dat”, “阿里加固”);
(“libsgmain.so”, “阿里加固”);
(“libsgsecuritybody.so”, “阿里加固”);
(“libmobisec.so”, “阿里加固”);
(“libfakejni.so”, “阿里加固”);
(“libzuma.so”, “阿里加固”);
(“libzumadata.so”, “阿里加固”);
(“libpreverify1.so”, “阿里加固”);

(“kdpdata.so”, “几维加固”);
(“dex.dat”, “几维加固”);
(“libkdp.so”, “几维加固”);
(“libkwscmm.so”, “几维加固”);
(“libkwscr.so”, “几维加固”);
(“libkwslinker.so”, “几维加固”);

(“libexec.so”, “爱加密”);
(“libexecmain.so”, “爱加密”);
(“ijiami.dat”, “爱加密”);
(“ijiami.ajm”, “爱加密”);
(“af.bin”, “爱加密”);
(“signed.bin”, “爱加密”);

(“libchaosvmp.so”, “娜迦”);
(“libddog.so”, “娜迦”);
(“libfdog.so”, “娜迦”);
(“libedog.so”, “娜迦”);

(“libprotectClass.so”, “360加固”);
(“libjiagu.so”, “360加固”);
(“libjiagu_art.so”, “360加固”);
(“libjiagu_x86.so”, “360加固”);

(“libcmvmp.so”, “中国移动安全加固”);
(“libmogosec_dex.so”, “中国移动安全加固”);
(“libmogosec_sodecrypt.so”, “中国移动安全加固”);
(“libmogosecurity.so”, “中国移动安全加固”);

(“libbaiduprotect.so”, “百度加固”);
(“baiduprotect1.jar”, “百度加固”);
(“baiduprotect.jar”, “百度加固”);

(“libuusafe.jar.so”, “UU安全加固”);
(“libuusafe.so”, “UU安全加固”);
(“libuusafeempty.so”, “UU安全加固”);

(“dp.arm-v7.so.dat”, “DexProtect加固”);
(“dp.arm.so.dat”, “DexProtect加固”);

(“libegis.so”, “通付盾加固”);
(“libNSaferOnly.so”, “通付盾加固”);

(“libreincp.so”, “珊瑚灵御加固”);
(“libreincp_x86.so”, “珊瑚灵御加固”);

(“libnqshield.so”, “网秦加固”);

(“libnesec.so”, “网易易盾”);

(“libAPKProtect.so”, “APKProtect加固”);

(“libx3g.so”, “顶象技术加固”);

(“libitsec.so”, “海云安加固”);

(“libapssec.so”, “盛大加固”);

(“librsprotect.so”, “瑞星加固”);

(“libapktoolplus_jiagu.so”, “apktoolplus加固”);