Android常见App加固厂商脱壳方法的整理

目录

  1. 简述(脱壳前学习的知识、壳的历史、脱壳方法)
  2. 第一代壳
  3. 第二代壳
  4. 第三代壳
  5. 第N代壳

简述

  1. Apk文件结构
  2. Dex文件结构
  3. 壳史
  4. 壳的识别

Apk文件结构

1

Dex文件结构

2

壳史

第一代壳 Dex加密

  1. Dex字符串加密
  2. 资源加密
  3. 对抗反编译
  4. 反调试
  5. 自定义DexClassLoader

第二代壳 Dex抽取与So加固

  1. 对抗第一代壳常见的脱壳法
  2. Dex Method代码抽取到外部(通常企业版)
  3. Dex动态加载
  4. So加密

第三代壳 Dex动态解密与So混淆

  1. Dex Method代码动态解密
  2. So代码膨胀混淆
  3. 对抗之前出现的所有脱壳法
  4. HOOK Dalvik的解释器的壳

第四代壳 arm vmp(未来)

  1. vmp

壳的识别

1.用加固厂商特征:

  • 娜迦: 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

2.基于特征的识别代码

3

第一代壳

  1. 内存Dump法
  2. 文件监视法
  3. Hook法
  4. 定制系统
  5. 动态调试法

内存Dump法

  • 内存中寻找dex.035或者dex.036
  • /proc/xxx/maps中查找后,手动Dump

4

5

6

7

文件监视法

8

9

10

Hook法

11

12

定制系统

  • 修改安卓源码并刷机

13

14

动态调试法

  • IDA Pro

15

16

17

  • gdb gcore法
.gdbserver :1234 attach pid .gdb (gdb) target remote :1234 (gdb) gcore

coredump文件中搜索“dex.035”

18

第二代壳

  1. 内存重组法
  2. Hook法
  3. 动态调试
  4. 定制系统
  5. 静态脱壳机


内存重组法

Dex篇

ZjDroid http://bbs.pediy.com/showthread.php?t=190494

对付一切内存中完整的dex,包括壳与动态加载的jar

19

20

so篇

elfrebuild

21

22

构造soinfo,然后对其进行重建

23

24

Hook法

针对无代码抽取且Hook dvmDexFileOpenPartial失败

Hook dexFileParse

http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

25

https://github.com/WooyunDota/DumpDex

26

针对无代码抽取且Hook dexFileParse失败

Hook memcmp

http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

27

28

定制系统

修改安卓源码并刷机-针对无抽取代码

https://github.com/bunnyblue/DexExtractor

29

Hook dexfileParse

30

31

DexHunter-最强大的二代壳脱壳工具

https://github.com/zyq8709/DexHunter

DexHunter的工作流程:

32

DexHunter的工作原理:

33

绕过三进程反调试

http://bbs.pediy.com/showthread.php?p=1439627

34

35

修改系统源码后:

36

http://www.cnblogs.com/lvcha/p/3903669.html

37

ls /proc/345/task

38

./gdbserver :1234 --attach346 ... (gdb) gcore

gcore防Dump解决方案:

http://bbs.pediy.com/showthread.php?t=198995

断点mmap调试,针对Hook dexFileParse无效

原理: dexopt优化时, dvmContinueOptimization()->mmap()

39

静态脱壳机

分析壳so逻辑并还原加密算法

http://www.cnblogs.com/2014asm/p/4924342.html

40

自定义linker脱so壳

https://github.com/devilogic/udog

main() -> dump_file()

41

第三代壳

  1. dex2oat法
  2. 定制系统

dex2oat法

ART模式下,dex2oat生成oat时,内存中的DEX是完整的

http://bbs.pediy.com/showthread.php?t=210532

43

定制系统

Hook Dalvik_dalvik_system_DexFile_defineClassNative

枚举所有DexClassDef,对所有的class,调用dvmDefineClass进行强制加载

44

第N代壳

  1. so + vmp
  2. 动态调试 + 人肉还原


  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
首先,查壳,使用PEID或者是FI,为UPX v1.08 接下来用OD载入,提示为“压缩代码是否继续分析”,我们选择否 我在这里介绍几种方法,请看我的操作。 方法1:单步跟踪(最常见方法) 0040E8C0 N> 60 pushad //停在这里了,我们F8单步 0040E8C1 BE 15B04000 mov esi,NOTEPAD.0040B015 0040E8C6 8DBE EB5FFFFF lea edi,dword ptr ds:[esi+FFFF> 0040E8CC 57 push edi 0040E8CD 83CD FF or ebp,FFFFFFFF 0040E8D0 EB 10 jmp short NOTEPAD.0040E8E2 //跳 。。。。。。。。。。 0040E8E2 8B1E mov ebx,dword ptr ds:[esi] //跳到这里,继续单步 0040E8E4 83EE FC sub esi,-4 0040E8E7 11DB adc ebx,ebx 0040E8E9 ^ 72 ED jb short NOTEPAD.0040E8D8 //这里要往回跳了 0040E8EB B8 01000000 mov eax,1 //F4,然后继续F8 0040E8F0 01DB add ebx,ebx 0040E8F2 75 07 jnz short NOTEPAD.0040E8FB //跳 。。。。。。。。。。。 0040E8FB 11C0 adc eax,eax //来到这里,F8继续 0040E8FD 01DB add ebx,ebx 0040E8FD 01DB add ebx,ebx 0040E8FF ^ 73 EF jnb short NOTEPAD.0040E8F0 0040E901 75 09 jnz short NOTEPAD.0040E90C //跳 。。。。。。。。。。。 0040E90C 31C9 xor ecx,ecx //跳到这里,继续F8 0040E90E 83E8 03 sub eax,3 0040E90E 83E8 03 sub eax,3 0040E911 72 0D jb short NOTEPAD.0040E920 //跳 。。。。。。。。。。。 0040E920 01DB add ebx,ebx //跳到这里,继续F8 0040E922 75 07 jnz short NOTEPAD.0040E92B //跳 。。。。。。。。。。。 0040E92B 11C9 adc ecx,ecx //跳到了这里,继续F8 0040E92D 01DB add ebx,ebx 0040E92F 75 07 jnz short NOTEPAD.0040E938 //跳 。。。。。。。。。。。 0040E938 11C9 adc ecx,ecx //跳到这里,继续F8 0040E93A 75 20 jnz short NOTEPAD.0040E95C //跳 。。。。。。。。。。。 0040E95C 81FD 00F3FFFF cmp ebp,-0D00 //来到这,继续F8 0040E962 83D1 01 adc ecx,1 0040E965 8D142F lea edx,dword ptr ds:[edi+ebp] 0040E968 83FD FC
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值