常见android app加固厂商脱壳方法研究

目录简述(脱壳前学习的知识、壳的历史、脱壳方法)
第一代壳
第二代壳
第三代壳
第N代壳
简述Apk文件结构Dex文件结构壳史壳的识别Apk文件结构

Dex文件结构

壳史

第一代壳 Dex加密

Dex字符串加密资源加密对抗反编译反调试自定义DexClassLoader

第二代壳 Dex抽取与So加固

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

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

Dex Method代码动态解密So代码膨胀混淆对抗之前出现的所有脱壳法

第四代壳 arm vmp(未来)

vmp壳的识别

1.用加固厂商特征:

娜迦: libchaosvmp.so , libddog.solibfdog.so爱加密:libexec.so, libexecmain.so梆梆: libsecexe.so, libsecmain.so , libDexHelper.so360:libprotectClass.so, libjiagu.so通付盾:libegis.so网秦:libnqshield.so百度:libbaiduprotect.so

2.基于特征的识别代码

第一代壳内存Dump法文件监视法Hook法定制系统动态调试法内存Dump法内存中寻找dex.035或者dex.036/proc/xxx/maps中查找后,手动Dump

android-unpacker https://github.com/strazzere/android-unpacker

drizzleDumper https://github.com/DrizzleRisk/drizzleDumper 升级版的android-unpacker,read和lseek64代替pread,匹配dex代替匹配odex

IDA Pro + dumpDEXdumpDex https://github.com/CvvT/dumpDex

文件监视法Dex优化生成odexinotifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android监视文件变化

notifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android监视DexOpt输出

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

定制系统修改安卓源码并刷机

DumpApk https://github.com/CvvT/DumpApk只针对部分壳

动态调试法IDA Pro

gdb gcore法

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


coredump文件中搜索“dex.035”

第二代壳内存重组法Hook法动态调试定制系统静态脱壳机内存重组法

Dex篇

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

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

so篇

elfrebuild

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

Hook法

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

Hook dexFileParse

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

https://github.com/WooyunDota/DumpDex

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

Hook memcmp

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

定制系统

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

https://github.com/bunnyblue/DexExtractor

Hook dexfileParse

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

https://github.com/zyq8709/DexHunter

DexHunter的工作流程:

DexHunter的工作原理:

绕过三进程反调试

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

修改系统源码后:

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

ls /proc/345/task


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


gcore防Dump解决方案:

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

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

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

静态脱壳机

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

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

自定义linker脱so壳

https://github.com/devilogic/udog

main() -> dump_file()


第三代壳dex2oat法定制系统dex2oat法

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

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

定制系统

Hook Dalvik_dalvik_system_DexFile_defineClassNative

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

第N代壳so + vmp动态调试 + 人肉还原

(0)

相关推荐

  • 常见android app加固厂商脱壳方法研究

    目录简述(脱壳前学习的知识.壳的历史.脱壳方法) 第一代壳 第二代壳 第三代壳 第N代壳 简述Apk文件结构Dex文件结构壳史壳的识别Apk文件结构 Dex文件结构 壳史 第一代壳 Dex加密 Dex字符串加密资源加密对抗反编译反调试自定义DexClassLoader 第二代壳 Dex抽取与So加固 对抗第一代壳常见的脱壳法Dex Method代码抽取到外部(通常企业版)Dex动态加载So加密 第三代壳 Dex动态解密与So混淆 Dex Method代码动态解密So代码膨胀混淆对抗之前出现的所有

  • Android app启动图适配方法实例

    目录 前言 1.设置splash主题 2. splash_bg 设置: 3.splash布局文件设置: 附问题:项目启动时,会有白屏现象(在点击 应用图标到看到启动页之间). 总结 前言 app启动后的白屏问题,默认都是在splash页面加主题配置,主题配置一个背景来达到用户点击app图标就立马启动app的假象,大多情况下,使用背景单一的图片作为启动图,我们在设置背景颜色,就能适配的很不错了(背景颜色+logo图片的模式).但是当启动图不再单一,而且复杂的图形时候,适配就成大问题了,下面介绍我的

  • 修改Android App样式风格的方法

    android中可以自定义主题和风格.风格,也就是style,我们可以将一些统一的属性拿出来,比方说,长,宽,字体大小,字体颜色等等.可以在res/values目录下新建一个styles.xml的文件,在这个文件里面有resource根节点,在根节点里面添加item项,item项的名字就是属性的名字,item项的值就是属性的值,如下所示: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><resou

  • Android App数据格式Json解析方法和常见问题

    (1).解析Object之一: 复制代码 代码如下: {"url":"http://www.cnblogs.com/qianxudetianxia"} 解析方法: 复制代码 代码如下: JSONObject demoJson = new JSONObject(jsonString);String url = demoJson.getString("url"); (2).解析Object之二: 复制代码 代码如下: {"name"

  • Android webview加载H5方法详细介绍

    目录 1,安卓APP 怎么用webview加载H5 2,H5怎么调用安卓定义的方法 3,安卓怎么调用H5定义的方法 这篇文章主要阐述3个知识点 安卓APP 怎么用webview加载H5 H5怎么调用安卓定义的方法 安卓怎么调用H5定义的方法 1,安卓APP 怎么用webview加载H5 安卓端定义个webview xml 页面,代码如下所示: <?xml version="1.0" encoding="utf-8"?> <WebView xmlns

  • 详解Android App卸载后跳转到指定的反馈页面的方法

    很多人也许会问:360被卸载之后会跳转到指定的反馈页面,是怎么弄的? 其实这个问题的核心就在于:应用被卸载了,如果能够做到后续的代码逻辑继续执行 我们再来仔细分析一下场景和流程 一个应用被用户卸载肯定是有理由的,而开发者却未必能得知这一重要的理由,毕竟用户很少会主动反馈建议,多半就是用得不爽就卸,如果能在被卸载后获取到用户的一些反馈,那对开发者进一步改进应用是非常有利的.目前据我所知,国内的Android应用中实现这一功能的只有360手机卫士.360平板卫士,那么如何实现这一功能的? 我们可以把

  • Android APP之WebView校验SSL证书的方法

    Android系统的碎片化很严重,并且手机日期不正确.手机根证书异常.com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点.SSL错误的处理方式十分关键,如果处理不当,可能导致中间人攻击,黑客窃听数据,进而引发安全事故. 严谨地处理onReceivedSslError尤为重要.请参考以下代码,原理是:如果webview报告SSL错误,程序将会对服务器证书进行强校验,如果服务器传入证书的指纹(sha256)与记录值一致,说

  • 实例讲解Android App使用自带的SQLite数据库的基本方法

    SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大,而且android系统中不允许通过JDBC操作远程数据库,所以只能通过webservice等手段于php.servlet交互获取数据. 基础 SQLiteDatabase类,代表了一个数据库对象,通过SQLiteDatabase来操作管理数据库. 一些基本的用法: static  SQLiteDa

  • Android App实现应用内部自动更新的最基本方法示例

    这只是初步的实现,并没有加入自动编译等功能.需要手动更改更新的xml文件和最新的apk.    共涉及到四个文件! 一.客户端 AndroidUpdateTestActivity:程序首页 main.xml:首页布局 Update:更新类 softupdate_progress:更新等待界面 Updage package majier.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce

  • Android App更改应用的图标的实现方法

    Android App更改应用的图标的实现方法 一般情况下,我们App图标在Androidmanifest.xml中设置,通过Application android:icon属性指定,写法如下: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=&q

随机推荐