首页
社区
课程
招聘
[原创]基于APK文件格式的反编译对抗机制
发表于: 2022-3-25 19:23 29511

[原创]基于APK文件格式的反编译对抗机制

2022-3-25 19:23
29511

基于APK文件格式的反编译对抗机制

商业APP为了防止反编译、被篡改,往往会采用第三方的APP加固方案,通过对源代码的混淆、加固、加壳等技术手段,隐藏源APP的逻辑结构,大大提高了反编译的难度,达到保障APP的安全与稳定运行的目的。而网赌、电诈、色情等涉网犯罪APP,基于成本考虑,其幕后的开发者往往不会采用第三方加固方案,但有可能会采用一些无成本的对抗机制,基于APK文件格式的反编译对抗就是其中的一种。该对抗机制主要利用了反编译工具的一些缺陷,导致APK反编译失败(图1)。

1 APK反编译失败

笔者研究发现,目前涉网犯罪APP主要利用了两种对抗机制,其一是修改APK文件,其二是修改AndroidManifest文件(AndroidManifest.xml)。两种对抗机制的原理本质上是一样的,都是修改对应二进制文件的一些特征数据,以达到“欺骗”反编译工具的目的,但是Android系统的包安装服务不会检测这些特征数据,因而又不影响APK的正常安装和运行。

一、基于ZIP文件格式的反编译对抗


1、ZIP文件格式


编译后生成的APK文件本质上就是一个ZIP压缩包,可以直接通过解压缩工具打开和解压。一个典型的ZIP文件的二进制数据由三部分组成:数据区、目录区、目录结束标记区。笔者新建一个txt文本文件(demo.txt),写入内容“this is  demo file”,保存后,压缩成一个ZIP文件(demo.zip),然后用十六进制编辑器010 Editor打开。如下图所示,该ZIP文件的二进制内容已被010 Editor识别并按颜色划分为三个不同的区域(黑色区域和灰色区域同属数据区,只是为了突出文件内容):

2 ZIP文件二进制内容组成

数据区


数据区记录了所有被压缩文件的内容信息,每个被压缩的文件由文件头、文件内容和文件描述三部分组成。其中,文件头和文件内容必然存在,文件描述则不一定存在。

1 文件头



文件头后则是文件内容,而文件描述只有当文件头的通用标记字段的第3位设为1时才会出现,一般在磁盘上存储的ZIP文件都没有文件描述。

目录区


目录区记录了压缩包里所有的子目录的描述信息。

2 目录区数据结构



目录结束标记区


目录结束标记区用于标记压缩包目录数据的结束。

3 目录结束标记区

偏移

字节

描述

0

4

目录结束标记(固定值0x06054b50)

4

2

当前磁盘编号

6

2

目录区开始位置的磁盘编号

8

2

当前磁盘上记录的目录数

10

2

目录总数

12

4

目录区大小

16

4

目录区开始位置偏移

20

2


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 23
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  波什   +1.00 2022/04/12
最新回复 (21)
雪    币: 122
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2

解压apk文件报错,提示头部错误,aapt解析apk也报错:

ziparchive W 04-12 11:37:00  8800  4864 Zip: gpb flag mismatch at bit 3. expected {0800}, was {ffee}

ziparchive W 04-12 11:37:00  8800  4864 Zip: size/crc32 mismatch. expected {9688, 57472, 9aea989}, was {134217738, 549781512, 4034b50}


用这个方法改了,能解压了  ,厉害厉害

最后于 2022-4-12 11:42 被波什编辑 ,原因:
2022-4-12 11:40
1
雪    币: 386
活跃值: (1336)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

之前遇到过,貌似被一些人拿来躲避安全软件查杀

最后于 2022-4-12 21:36 被笑对VS人生编辑 ,原因: 更正
2022-4-12 21:35
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4

https://bbs.pediy.com/thread-272920.htm
大佬能看下这个AndroidManifest吗?想知道怎么做到这样式的混淆或者说加密方式?

最后于 2022-5-22 00:00 被mb_ecsiujxp编辑 ,原因:
2022-5-21 18:47
0
雪    币: 1441
活跃值: (5605)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5

AndroidManifest 修改幻数后使用v2签名过不了怎么办?

最后于 2022-8-8 18:35 被唱过阡陌编辑 ,原因:
2022-5-24 14:49
0
雪    币: 201
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

你好楼主,通过你的讲解 从最开始打开就提示文件损坏且要密码到现在gda能看得到代码,但是AndroidManifest文件复制就说损坏获取不到这一步需要怎么操作你这所说的修改

2022-8-8 06:23
0
雪    币: 27
活跃值: (358)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我只想知道  怎么样在Android7.0以前安装这类apk
2022-9-15 11:55
0
雪    币: 12
活跃值: (168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
mark 下
2022-10-8 12:54
0
雪    币: 15
活跃值: (344)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我也遇到了一个很棘手的问题
2022-12-2 18:17
0
雪    币: 15
活跃值: (344)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
大佬,这能不能写个脚本批量修复字符串啊
2023-4-7 15:42
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
支持一下
2023-4-7 19:12
0
雪    币: 2852
活跃值: (30816)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2023-4-8 13:54
1
雪    币: 34
活跃值: (734)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这样处理后,能正常签名和安装?
2023-4-18 13:32
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
大佬,能不能帮忙看看一个软件
2023-4-28 16:42
0
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
mark
2023-5-7 16:14
0
雪    币: 999
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
mark
2023-6-17 22:31
0
雪    币: 1413
活跃值: (1567)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
以前遇到过打开要密码的apk, 涨见识了, 可以轮到我恶心别人了
2023-11-17 11:53
0
雪    币: 108
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
谢谢楼主分享学习了。
2023-11-17 12:31
0
雪    币: 2002
活跃值: (607)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
厉害,收藏慢慢看!
2023-11-21 18:54
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
Himeko 以前遇到过打开要密码的apk, 涨见识了, 可以轮到我恶心别人了[em_76]
apk改成需要密码,没看懂是改哪
2023-11-23 22:06
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
Himeko 以前遇到过打开要密码的apk, 涨见识了, 可以轮到我恶心别人了[em_76]
哦 懂了,改通用标记位第06位为单数,直接解压提示要密码,右键用7z打开,能直接打开,不会提示密码
2023-11-23 22:12
0
游客
登录 | 注册 方可回帖
返回
//