安卓逆向-加固后的APK包

一些关于加固的基本认识

  • 第三方加固/app公司自己加固 (一般在哪家应用市场上发布,就用哪家的加固方案(也可以选择不加固))
  • 加固方式(.dex加固、.so加固)
  • 查看/确认加固:
    不同厂商对APP的加固特征(可以先看lib,实在不知道可以拿so文件名到百度上搜搜看)
    爱加密:libexec.so,libexecmain.so,ijiami.dat
    梆梆: libsecexe.so,libsecmain.so , libDexHelper.so libSecShell.so
    360:libprotectClass.so,libjiagu.so,libjiagu_art.so,libjiagu_x86.so
    百度:libbaiduprotect.so
    腾讯(乐加固):libshellx-2.10.6.0.so,libBugly.so,libtup.so, libexec.so,libshell.so,stub_tengxun,libshella-2.10.6.0.so
    网易易盾:libnesec.so
    用jadx打开class.dex只能看到壳,看不到程序源码
  • 加固后的AndroidManifest.xml<application>会先进入自己壳的类,进行解密脱壳操作,而不是直接启动被加固的程序
    在这里插入图片描述

加固原理

在这里插入图片描述

在这里插入图片描述

系统执行时先加载没加密的壳的代码对加密了的源dex进行解密并执行

在这里插入图片描述

逆向/脱壳方法

  • 反编译/Hook技术/动态调试
  • Hook:先取得要Hook函数/方法的控制权。好处:不用破坏程序
  • 动态调试(内存):反调试,汇编,计算内存地址

Hook技术(Java层/Native层(.so库))

改变程序执行流程的一种技术 在函数被调用前,通过HOOK技术,先得到该函数的控制权,实现该函数的逻辑改写

脱壳

脱壳原理:
在壳APK解密源APK后,源APK被加载前,拦截这个过程中的系统函数 把内存种Dex dump出来
脱壳方式:
1.基于xposed的现有的脱壳工具(Java层):
Fdex2:Hook ClassLoader loadClass方法 通用脱壳
dumpDex:https://github.com/WrBug/dumpDex
2.重写底层函数(Native层):
DexExtractor:重写Dalvik虚拟机(安卓6.0以前,现在用ART虚拟机)的libdvm.so里的读写dex的dexFileParse函数。(能脱壳脱梆梆、爱加密,安卓7.0后的无法脱)
3.逆向框架: 筑好底层 提供开发接口(主要系统函数都已HOOK/基于xposed frida开发脱壳工具/有大神已开发上层应用模块)
xposed(Java 编译)
frida(Python Javascript 代码注入)

如何看apk是否被加固

直接改成zip后缀解压进去看特征:
1.看lib文件夹里的so文件名有没有上述的命名特征,不确定的就拿怀疑的文件名拿去百度上搜索一波

在这里插入图片描述

在这里插入图片描述

2.用jadx看classes.dex是不是只看得到壳代码

在这里插入图片描述

加固后怎么分析xml文件

在这里插入图片描述
在这里插入图片描述

参考资料
https://www.bilibili.com/video/BV1JK4y1b79N?t=902

猜你喜欢

转载自blog.csdn.net/m0_50685012/article/details/113634970