Android 加固与脱壳
加固与脱壳
常用加固 so 文件特征
分析 apk 加固
动态调试分析 apk 加固-环境搭建
动态调试对 linker 和 libdvm.so 下断点
关键函数 dump dex
Android 加固与脱壳
加固与脱壳
加固分析:IDA静态分析,动态调试
加固特征:so文件名称和Application类名
脱壳技巧:
IDA中的F5 c代码的类型解析
dex加载过程中的api下断
so文件加载过程中的api下断
脚本dump
改系统源码
常用加固 so 文件特征
◆ 常见加固厂商产品 so 的特征
◆ 娜迦: libchaosvmp.so , libddog.solibfdog.so
◆ 爱加密:libexec.so, libexecmain.so
◆ 梆梆:libsecexe.so,libsecmain.so, libDexHelper.so
◆ 360:libprotectClass.so, libjiagu.so
◆ 通付盾:libegis.so
◆ 网秦:libnqshield.so
◆ 百度:libbaiduprotect.so
◆ 阿里:libmobisec.so
◆ 腾讯:libshella-.so, libshellx-.so
分析 apk 加固
- 使用 readelf 查看 init 段、init_array 段是否有函数
如果有,下断点准备分析 - 查看 JNI_OnLoad 函数是否有混淆
如果有,一般来说是在 init 段、init_array 段的函数中做解密 - 查看 smali 代码中,native 声明的函数的名称
如果有,在 IDA 中导出信息表中去查找对应的函数
如果没有找到,可能这些函数都是动态注册的。
动态注册使用的是 env->RegisterNatives - 使用 IDA 分析时,需要导入常见结构,在 jni.h 中
文件路径:F:\Android\sdk\ndk-bundle\platforms\android-23\arch-arm\usr\include

动态调试分析 apk 加固-环境搭建
下载 linker 和 libdvm.so 文件

分析 linker 中的 init 段初始化和 init 段初始化

调用代码

最终调用的都是 CallFunction

附近特征:
TRACE("[ Calling %s @ %p for '%s' ]", function_name, function, name);
function();
TRACE("[ Done calling %s @ %p for '%s' ]", function_name, function,
name);
在 linker 文件中搜索特征

在字符串 使用数据引用,查看其引用代码,再去找代码

查看代码:

偏移是 274C
同样的方式,Jni_Onload 的调用也需要分析。源码中

IDA 中:

偏移 503CC
动态调试对 linker 和 libdvm.so 下断点
使用 IDA 附加程序之后,找到模块,下断点

Linker 基地址:4003a000+274c=4003C74C

Libdvm.so 基地址:41489000+503CC=414D93CC

使用 g 命令跳转到目的地址,下断点,如果没有解析代码使用命令 C 解析代码


关键函数 dump dex
常用函数:
◆ 脱壳关键函数:
◆ libdvm.so:dvmDexFileOpenFromFd
◆ libdvm.so:dexFileParse
◆ libdvm.so:dvmDexFileOpenPartial
◆ libdvm.so: RegisterNatives
◆ linker: blx r4 调用 init 或是 init_array
◆ libdvm.so : blx r8 调用 JNI_Onload
◆ 库函数:mmap,mprotect,open,read,memcmp
举例:libdvm.so:dvmDexFileOpenPartial
在 ida 动态调试时,找到模块 libdvm.so,双击模块,可以看到导出函数列表,找到对应函数

下断点:

断下之后,参数 r0 是第一个参数,r1 是第二个参数。根据函数原型,可知 r0 是 dex 基地址,r1 是大小。

使用 IDA 执行脚本

脱壳脚本:
static main(void)
{
auto fp, begin, end, dexbyte;
fp = fopen("F:\dump.dex", "wb");
begin = r0;
end = begin + r1;
for ( dexbyte = begin; dexbyte < end; dexbyte ++ )
fputc(Byte(dexbyte), fp);
}
最终查看 dump.dex

网友评论