介绍

说到加壳,之前接触的主要都是pc端的壳,当时的脱壳就是用的esp脱壳法,大概意思就是程序运行到将当前环境保存之后,在当前的esp指向的地址下硬件断点,然后再次运行到该点时,进行dump内存,即可(大概意思,好多年没弄过了,网上资料很多反正)。这个时通常的加密或者压缩壳的方式,还有类似vmprotect的虚拟机壳,就是用其他指令代替原有的指令从而达到反调试的技术。这个没研究过怎么破解,还有代码抽取技术,将部分关键代码抽取出来,具体也没了解过。。当时学的太粗浅了。现在主要搞Android方面的,看了非虫的新书,所以这里做个总结,首先介绍一下常见的壳的识别:

可以使用类似peid的工具,对文件的二进制进行识别,Android中工具是:apkid 需要安装yara,使用pip install apkid后,

命令行执行:$ apkid 文件名 即可得到编译类型以及所加的壳。

压缩壳、加密壳:

这种第一代,开始时对dex和so加密,运行时或者加载后解密,通常会加一些反调试手段。

破解方式:

hook法:

直接hook dex2oat的函数,可以得到原始的dex,但是有些apk不再走系统默认的dex2oat函数了

缓存脱壳法:

早期会有一些壳,安装包是加密压缩了,但是安装后会在/data/dalvik-cache目录下生成解密的odex文件,只要取出来进行一下deodex即可。

内存dump法:

在运行后,dump出文件内容。工具是:android-unpacker

原理即通过/proc/pid/maps的内存映射表,找到dex起始位置,通过dump_memory()将dex dump出来。

动态调试脱壳法:

通过适当的点,在dex解密后dump,适当的点包括:dvmdexfileopenpartial;dexFileParse;memcpy(当第二个参数为DEX_OPT_MAGIC)时,并且这是一个不断更新的过程。之前还看过四哥写的一个函数是Dexclassloader

hook脱壳法:

其实原理就是动态调试,只是通过hook框架自动化实现了。

系统定制法:

修改android源码中的相关函数后刷机实现,也是一种自动化

指令抽取壳:

部分方法需要执行时动态解密。

防脱壳方式:

设置一些虚假函数,一旦调用自动退出程序

破解方式:

FART:针对art模式,调用所有方法后抽取dex

dalvik:f8left可破解,但是dalvik很多应用以及无法安装

保护壳:

多种方式保护,如代码抽取、执行前后解密又加密、多进程保护、反调试、反dump等

破解方式:

内存重组脱壳法:

通过内存中dex文件的格式,找到完整的dex文件,将其组合到一起。主要流程:libdvm.so->gDvm->userDexFiles->pEntries.isDex->pRawDexFile->pDvmDex->pDexFile。工具参照Cvvt编写的dumpDex脚本

https://github.com/CvvT/dumpDex

hook方式:

还是实现自动化的方式,断点为dvmCallMethodV;

系统定制法:

这里为了让所有代码全部解密,主动加载所有类,而后就变为全解密的dex了,通过dvmDefineClass实现,工具为DexHunter。

虚拟执行壳:

llvm pass 混淆壳,360壳就采用这种方式

类似vmprotect,大概有三种混淆方式:

1:指令替代:使用新的汇编级指令代替原有指令,造成逆向的困难,如a + b可替代为 (a|b)+(a&b)等;

2:控制流平坦化

3:伪造控制流

还有修改控制流、伪造控制流等方式。

Android中使用的方式是llvm编译,开源库为:Obfuscator-LLVM

破解方式:

如上a+b,可以替换为多种指令,可以使用模式匹配的方式还原。

针对控制流修改,通过对比CFG,修改bl指令的执行。

Android 加壳与脱壳方式总结相关推荐

  1. .NET程序的代码混淆、加壳与脱壳

    通常我们通过代码混淆.加密的形式达到软件保护的目的.在Web开发里我们接触过的可能就是JS代码加密了,可以通过对JS代码进行混淆.加密从而实现对核心JS代码的保护.如果没有接触过的可以在这里简单了解一 ...

  2. 什么是加壳和脱壳技术?加壳和脱壳技术是什么意思?

    什么是加壳和脱壳技术?加壳和脱壳技术是什么意思? 加壳,是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变(目前还有一些加壳软件可以压缩.加密驱动程序),以达到缩小文件体积或加密 ...

  3. BUUCTF-Reverse:新年快乐 + 加壳与脱壳

    题目地址:https://buuoj.cn/challenges#%E6%96%B0%E5%B9%B4%E5%BF%AB%E4%B9%90 用IDA打开文件: 怎么可能才两个函数,猜测加了壳,直接查: ...

  4. Python pyc文件 bytecode的压缩, 加壳和脱壳解析

    我们常常看到, 自己用PyInstaller等库打包的exe被别人反编译.而源代码在exe文件中是以字节码形式存储的.掌握了字节码的加密技巧, 就可以防止源代码的反编译. 目录 1.字节码是什么 2. ...

  5. 软件的壳和壳的含义、概念以及加壳和脱壳方法

    软件的壳和壳的含义.概念以及加壳和脱壳方法 PE(Portable Executable) 也就是EXE和DL)文件所具有的起压缩.加密.保护作用的东西.可以用PEiD等软件查壳. 加壳通过修改程序入 ...

  6. 实验四:使用UPX加壳与脱壳

    一.实验目的 了解程序加壳.脱壳原理 掌握PE文件结构 学习利用UPX Shell.LoardPE.IDA等工具完成软件的加.脱壳操作 二.实验题目 UPX加壳:对crackme加上UPX壳,用 Lo ...

  7. android 加壳 方案,android加壳思路

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 对java及dex代码保护的技术发展:第一代 dex文件加密,打包.在运作时通过一个自定义的类加载器进行解密. 第二代 ...

  8. 360 so加壳动态脱壳方法

    转载地址:http://mp.weixin.qq.com/s?__biz=MjM5NzAxMzk4NA==&mid=209300616&idx=1&sn=bcc440640f6 ...

  9. PE文件的简单加壳和脱壳(UPX和PEiD)

    先普及几个概念: PE文件:portable executable(可移植的可执行文件),主要在Windows系统中,包括exe/dll/sys文件. 加壳:是利用特殊的算法,对EXE.DLL文件里的 ...

最新文章

  1. SQL语句order by两个字段同时排序
  2. poj2418map或者字典树
  3. CTFshow php特性 web136
  4. 基于 Netty 如何实现高性能的 HTTP Client 的连接池
  5. 解决问题Can’t connect to local MySQL server through socket
  6. 霍尔电流传感器ACS712的性能参数和用法
  7. Building designing UVA - 11039
  8. 数据库分页技术的实现及高效率分页技术方案
  9. 成都东软学院php期末考试题,求大神。。。C语言期末项目答案。。。题在一楼。。。...
  10. linux essid 异常,关于BSSID,ESSID讨论
  11. mysql 索引使用不当_MySQL笔记:select默认使用不当索引导致的巨大性能损失问题_MySQL...
  12. 查看APP用到的图片方法
  13. 36.windbg-!peb(手工分析PEB结构)
  14. Python数据可视化 | 一文带你掌握Pyecharts地理数据可视化
  15. Java + OpenCV 实现图片年龄识别(JavaCV)
  16. Artifactory的搭建与使用简介
  17. 自动上传视频到B站和西瓜视频
  18. Navicat重新使自增id从1开始
  19. cba篮球暂停次数和时间_篮球比赛一节有几次暂停?
  20. C++ primer Plus(第六版)第十三章 类继承 章节编程练习答案

热门文章

  1. Web安全:跨站点攻击csrf
  2. 服务器防火墙 配置端口号
  3. 那些你可能不知道的 PDF 工具
  4. IQD文件模板以及cs7g.ini信息
  5. 计算机微格教学心得体会,微格教学心得体会范文
  6. NoSQL与MongoDB简介
  7. piv图像处理文献综述_体视2D-3cPIV相机标定方法研究
  8. 转:POI操作Excel:cell的背景颜色类型
  9. Accumulator累加器(一)
  10. [JVM]了断局: “运行时数据区“理论梳理