脱壳与加固 | 一代壳(落地加载)的学习

admin 2025年7月9日01:22:40评论0 views字数 1640阅读5分28秒阅读模式
脱壳与加固 | 一代壳(落地加载)的学习

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我会立即删除并致歉。谢谢

文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。

脱壳与加固 | 一代壳(落地加载)的学习

前言

在上一篇中,我们列举了互联网上常见的脱壳工具以及如何使用他们。

这本篇中,将会讲解一代壳整体加固中的落地加载方式。

N代壳的两种说法

在我学习和阅读其他师傅的文章时,发现对几代壳的理解有两种。

脱壳与加固 | 一代壳(落地加载)的学习

上一种将整体加固统一当成一代,我觉得哪种说法都可以。本文以教学为目的,所以就以划分更详细的第二种为主。

下面文章将介绍一代壳中(落地加载)方式。

  • • 通过apksheller对APK进行加固。
  • • 正向分析壳的代码逻辑。
  • • 010Editor手动修复dex。

一代壳的原理

过程中涉及到的修改AndroidManifest.xml和资源文件等在下面的解释中忽略了。
详细过程请参考:https://bbs.kanxue.com/thread-286929.htm

加固过程
将原DEX添加到壳DEX尾部。

脱壳与加固 | 一代壳(落地加载)的学习

解密过程
读取DEX文件,将解密后的DEX保存到本地,然后再加载到内存中使用。

apksheller对APK进行加固

apksheller项目地址:https://github.com/yongyecc/apksheller

下载项目,安装依赖

pip install pillow filetype

以frida-labs中的frida0x1为例

python sheller.py -f Challenge0x1.apk

注意:

  1. 1. 路径中不要存在空格和中文字符。
  2. 2. apksheller不支持多dex的APK加固。多dex加密是付费功能,不过我们只是学习,也不需要。

编译成功:result.apk

脱壳与加固 | 一代壳(落地加载)的学习

jadx反编译

脱壳与加固 | 一代壳(落地加载)的学习

成品APK可在文章最后的知识星球获取。

分析代码逻辑

Android 应用启动时,关键生命周期方法的执行顺序通常是Application.attachBaseContext->Application.onCreate->MainActivity.onCreate

我们搜索实现attachBaseContext的类。
壳程序 cn.yongye.stub.StubApp

StubApp继承Application类,重写attachBaseContext方法。

脱壳与加固 | 一代壳(落地加载)的学习
  1. 1. 构造解密后dex路径/data/user/0/com.ad2001.frida0x1/files/yongye.dex
  2. 2. 将路径和dex文件传入FileUtils中进行解密
脱壳与加固 | 一代壳(落地加载)的学习
  1. 1. 将传入的byte[] dex 文件解密,也就是对该字节数组与255(0xff)进行异或。
  2. 2. 取解密后的dex的最后四个字节,即原始dex的大小,保存到bArr2中。
  3. 3. 将原始的dex拷贝到bArr3中
  4. 4. 将原始dex写入文件,路径是/data/user/0/com.ad2001.frida0x1/files/yongye.dex

我们查看解密后的dex文件:

脱壳与加固 | 一代壳(落地加载)的学习

这就是一代壳中的落地加载。

在010Editor中手动修复

在上一部分,我们分析了代码逻辑,原始dex文件是拼接在壳dex的后面的,也就是说,用的是比较简单的异或形式,我们完全可以手动修复。

解压APK文件,用010Editor打开classes.dex,执行DEX脚本。

脱壳与加固 | 一代壳(落地加载)的学习

可以看到最后有一大块解析不了的

脱壳与加固 | 一代壳(落地加载)的学习

全选,通过XOR
Tools->Hex Operation->Binary Xor

脱壳与加固 | 一代壳(落地加载)的学习

和255异或

脱壳与加固 | 一代壳(落地加载)的学习

此时,可以看到开头文件还原为dex.039,复制相关dex字节另存为新dex

脱壳与加固 | 一代壳(落地加载)的学习

查看最后四个字节 0x007a9c84

脱壳与加固 | 一代壳(落地加载)的学习

长度还是8035460。

去掉最后四个字节,保存到new.dex

脱壳与加固 | 一代壳(落地加载)的学习

jadx解析,解析成功

脱壳与加固 | 一代壳(落地加载)的学习

参考资料

  • • Android从整体加固到抽取加固的实现及原理 https://bbs.kanxue.com/thread-286929.htm

欢迎加入知识星球~

脱壳与加固 | 一代壳(落地加载)的学习

原文始发于微信公众号(进击的HACK):脱壳与加固 | 一代壳(落地加载)的学习

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月9日01:22:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   脱壳与加固 | 一代壳(落地加载)的学习https://cn-sec.com/archives/4233744.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息