美文网首页
Android加壳脱壳

Android加壳脱壳

作者: MagicalGuy | 来源:发表于2018-11-03 22:29 被阅读0次

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 加固

  1. 使用 readelf 查看 init 段、init_array 段是否有函数
    如果有,下断点准备分析
  2. 查看 JNI_OnLoad 函数是否有混淆
    如果有,一般来说是在 init 段、init_array 段的函数中做解密
  3. 查看 smali 代码中,native 声明的函数的名称
    如果有,在 IDA 中导出信息表中去查找对应的函数
    如果没有找到,可能这些函数都是动态注册的。
    动态注册使用的是 env->RegisterNatives
  4. 使用 IDA 分析时,需要导入常见结构,在 jni.h 中
    文件路径:F:\Android\sdk\ndk-bundle\platforms\android-23\arch-arm\usr\include
image.png

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


image.png

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


image.png

调用代码


image.png

最终调用的都是 CallFunction


image.png

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

image.png

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


image.png

查看代码:


image.png

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


image.png

IDA 中:


image.png

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


image.png

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

image.png

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

image.png

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

image.png image.png

关键函数 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,双击模块,可以看到导出函数列表,找到对应函数

image.png

下断点:


image.png

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

image.png

使用 IDA 执行脚本


image.png

脱壳脚本:
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

image.png

相关文章

  • 六 iOS逆向 - 脱壳

    加壳脱壳基本概念 使用dumpdecrypted工具进行iOSApp脱壳 一 加壳脱壳基本概念 一 什么是加壳? ...

  • Android加壳脱壳

    Android 加固与脱壳 加固与脱壳常用加固 so 文件特征分析 apk 加固动态调试分析 apk 加固-环境搭...

  • 加壳脱壳

    脱壳存根(stub) 脱壳存根执行了以下三个步骤: (1)将原始程序脱壳到内存中 (2)解析原始可执行文件的所有导...

  • 八、加壳脱壳

    从之前的知识可知,通过class-dump或hopper就可以知道一个app的头文件信息。 加壳的app:但如果是...

  • 手工加壳脱壳

    PE文件的Magic code(魔数、幻数)是什么? MZ头、PE头 PE文件中文件头的信息有哪些? 运行平台、时...

  • 加壳脱壳(04)

    1.什么是脱壳? 摘掉壳程序,将未加密的可执行文件还原出来(有些人也称为“砸壳”) 脱壳主要有2种方法:硬脱壳、动...

  • Android 加壳与脱壳方式总结

    介绍 说到加壳,之前接触的主要都是pc端的壳,当时的脱壳就是用的esp脱壳法,大概意思就是程序运行到将当前环境保存...

  • iOS逆向:脱壳

    目录一,加壳二,脱壳三,工具四,验证 一,加壳 1,介绍 App Store会对ipa包中的可执行文件进行加壳操作...

  • iOS逆向与安全8.1:砸壳、初识Theos

    砸壳 软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。 砸壳原理 应用加壳(加密)提交给...

  • 应用砸壳

    砸壳 软件脱壳,顾明思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密) 砸壳原理 应用加壳(加密) 应用砸...

网友评论

      本文标题:Android加壳脱壳

      本文链接:https://www.haomeiwen.com/subject/fsylxqtx.html