当前位置: 首页 > news >正文

安卓加固脱壳

侦查壳

MT管理器

在MT管理器中/DATA/apk 找到对应app的apk,点击即可。

加固方案

  • 反模拟器
    模拟器运行apk,可以用模拟器监控到apk的各种行为,所以在实际的加固apk运行中,一旦发现模拟器在运行该APK,就停止核心代码的运行。

  • 虚拟机保护
    代码虚拟化在桌面平台应用保护中已经是非常的常见了,主要的思路是自建一个虚拟执行引擎,然后把原生的可执行代码转换成自定义的指令进行虚拟执行。

  • 加密
    样本的部分可执行代码是以压缩或者加密的形式存在的,比如,被保护过的代码被切割成多个小段,前面的一段代码先把后面的代码片段在内存中解密,然后再去执行解密之后的代码,如此一块块的迭代执行。

加固流程

将源apk拆分,将dex文件进行加密,然后和壳进行合并成新的dex,再与原来的apk合并成新的apk,进行签名。

通过 apkbuilder 工具打包成 Android Package(.apk)文件。

apk->解压缩->加密dex文件->转换为byte数组并加密->写回到源dex文件

arr解压->jar->把jar打包为dex壳文件

混合打包签名。

解密过程

AndroidManifest.xml

所有的加壳在解密时,都会替换掉AndroidManifest.xml中的第一入口,只有替换掉第一入口之后软件才能正常运行加载dex文件。
所以我们的目的就是找到第一入口,通常第一入口可以在加壳的dex文件中找到,我们可以通过MT管理器在常量中寻找,如果找不到需要考虑是否使用了加密,此时我们可以借助算法助手工具,进行hook。

Dex文件构造

struct header_item
{ubyte[8]    magic;uint        checksum;ubyte[20]   siganature;uint        file_size;uint        header_size;uint        endian_tag;uint        link_size;uint        link_off;uint        map_off;uint        string_ids_size;uint        string_ids_off;uint        type_ids_size;uint        type_ids_off;uint        proto_ids_size;uint        proto_ids_off;uint        method_ids_size;uint        method_ids_off;uint        class_defs_size;uint        class_defs_off;uint        data_size;uint        data_off;
};
addressnamesize / bytevalue
0Magic[8]80x6465 780a 3033 3500
8checksum40xc136 5e17
CSignature[20]20
20file_size40x02e4
24header_size40x70
28endan_tag40x12345678
2Clink_size40x00
30link_off40x00
34map_off40x0244
38string_ids_size40x0e
3Cstring_ids_off40x70
40type_ids_size40x07
44type_ids_off40xa8
48proto_ids_size40x03
4Cproto_ids_off40xc4

apk打包流程

aapt(Android Asset Packaging Tool,安卓资源打包工具)
它会进行资源索引生成,扫描并处理应用程序中的所有资源文件,比如布局文件(.xml)、图片、字符串等 ,将这些资源进行编译、压缩等处理,并为每个资源生成唯一的标识符,最终生成 R.java 文件。在代码中可以通过 R 类来引用这些资源,例如 R.drawable.icon 引用图标资源 、R.string.app_name 引用字符串资源等。
资源打包:将处理后的资源文件打包到 APK 文件中合适的位置。
处理 AndroidManifest.xml 文件,这是安卓应用的配置文件,包含了应用的组件信息(如 Activity、Service 等)、权限声明等重要信息。aapt 会验证 AndroidManifest.xml 文件的正确性,并将其编译后打包进 APK 中 。

AIDL(Android Interface Definition Language,安卓接口定义语言)
AIDL 本质上是一种描述语言,用于定义客户端和服务端之间进行通信的接口。通过 AIDL 定义的接口,一个 Android 应用中的不同进程(例如一个应用中的主进程和后台服务进程)可以相互调用对方提供的方法,就像调用本地方法一样。

apkbuilder
通过 apkbuilder 工具打包成 Android Package(.apk)文件。

脱壳工具教程

脱壳工具

首先启动脱壳工具,打开需要脱壳的app

脱壳的文件输出到/storage/emulated/0/_DexOutput
将bin文件重命名为classes.dex文件

沙盒脱壳

导入apk运行后自动脱壳到/storage/emulated/0/cloudInject/dexDump

去卡密系列

基础一

MT去签名

功能->去除签名校验->确定->安装

点击apk->查看->Dex编辑器+±>全选

常量搜索关键字,搜索到关键字后,点击关键字在弹出的窗口点击搜索,然后点击搜索到的结果

进阶一

脱壳工具脱壳

正常流程,无额外收获
注意此工具可能导致游戏无法打开,可以先启动游戏再安装工具打开。

hook入口

打开lsposed->模块->算法助手->启动模块,勾选需要hook的目标程序。
选择AES加密,打开应用,查看日志。

发现有一个像是入口的,但它是application:android.app.Application,是系统入口,显然不是我们想要找的第一入口。如果不在第一入口,只能一定在第二入口。

由于没有第一入口,我们直接找到app的安装包,修改它的AndroidManifest.xml文件,查看里面的dex文件(壳的dex文件),发现类名com.beingyi.encrypt,这就是调用的解密壳。
<application
android:name=“com.beingyi.encrypt” //删除掉这一行,

后续直接把dump下来的已经解密的dex文件,使用mt管理器修复后直接拖入apk替换掉原来壳dex文件即可。

hook检验

算法助手->打开hook监听

复制回调类:使用mt管理器打开dex文件,搜索这个回调类

修改代码后,退出保存,就会自动签名。进行安装就好。

http://www.dtcms.com/a/313038.html

相关文章:

  • js--2048小游戏
  • C++23 Concepts:用类型约束重构泛型编程的终极方案
  • 构造类型--结构体,共同体联合体,枚举
  • 【AI论文】Rep-MTL:释放表征级任务显著性在多任务学习中的潜力
  • 影响人类发音的疾病类型种类和数据集
  • CMake 命令行参数完全指南(2)
  • 界面规范4-按钮
  • All the Mods 9 - To the Sky - atm9sky 局域网联机报错可能解决方法
  • spring batch处理数据模板(Reader-Processor-Writer模式)
  • 【Mysql】日志--错误日志、二进制日志、查询日志、慢查询日志
  • Timer实现定时调度的原理是什么?
  • Python开发环境PyCharm下载与安装
  • RSA 解密逻辑
  • Spring lookup-method实现原理深度解析
  • 悬挂的绳子,它的函数方程是什么样子的?
  • 嵌入式学习日志——数据结构(一)
  • RAG与智能体技术全景解析:架构革新、场景落地与未来趋势
  • 【前端:Html】--1.2.基础语法
  • Redis面试精讲 Day 10:Redis数据结构底层实现原理
  • RK3568 AB分区+OTA升级(Linux)
  • 在微信小程序中使用本地存储的方法
  • 《volatile 与 synchronized 底层实现与性能比较》
  • ubuntu syslog中appindicator报错解决
  • 深入理解C++缺省参数:从基础用法到最佳实践
  • 8-verilog-串口接收与发送模块
  • Python切片命名技术详解:提升代码可读性与维护性的专业实践
  • linux下jvm之jstack的使用
  • 洛谷——P1048 [NOIP 2005 普及组] 采药
  • 【openlayers框架学习】九:openlayers中的交互类(select和draw)
  • GaussDB SQL执行计划详解