Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

SCUBSRGroup/CrackSo

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CrackSo

CrackSo是一款通用化的脱壳工具,主要针对的仍是第2代壳(so本地加密型)

0x01 Android SO壳的发展历程

  • 1)so本地加密,导入内存解密,壳加载器跑完不再做其他事情
  • 2)程序正常运行时,壳可以重新接管控制权
  • 3)vmp保护(第4代加壳)

0x02 常见Android SO加壳思路

  • 1)破坏Elf Header:将Elf32_Ehdr 中的e_shoff, e_shnum, e_shstrndx, e_shentsize字段处理,变为无效值,导致IDA无法解析该SO文件
  • 2)删除Section Header:在链接过程中,Section Header因没有用到,可随意删除,导致ida无法打开该so文件
  • 3)有源码加密Section或者函数:(1)对section加壳 (2)对函数加壳
  • 4)无源码加密Section或者函数: 将解密函数放在另一个so中,只需保证解密函数在被加密函数执行前执行即可。执行时机的选择:(1)在linker执行.init_array时(2)在OnLoad函数中。注意:解密so一定要放在被解密so后加载,否则,搜索进程空间找不到被解密的so
  • 5)从内存加载SO(自定义loader加载):详细参考:SO文件格式及linker机制学习总结(1)SO文件格式及linker机制学习总结(2)
  • 6)packed SO(soinfo结构): 把loader的代码插入到原so的init_array或者jni_onload处,重打包成packed so,加载该so,首先执行init_array或者jni_onload,完成对原so的解密,从内存加载,形成soinfo结构,然后替换原packed so的soinfo结构
  • 7)llvm源码级混淆(Clang+LLVM): Clang作为LLVM 的一个编译器前端,对源程序进行词法分析和语义分析,形成AST(抽象语法树) ,最后用LLVM作为后端代码的生成器,详见: Android LLVM-Obfuscator C/C++ 混淆编译的深入研究
  • 8)花指令:在C语言中,内嵌arm汇编的方式,可加入arm花指令,迷惑IDA
  • 9)so vmp保护:写一个ART虚拟执行so中被保护的代码,但在手机上效率是一个问题

0x03 对应的脱壳思路

0x04 Reference

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.