前言:千呼万唤始出来,终于开始学安卓逆向
初识APK文件
环境搭建的相关步骤可以参考安卓逆向1 | iyheart的博客(很详细),本文不再赘述。
apk文件全称Andoriod Package,它相当于一个压缩文件,在电脑上将其后缀改为.rar或.zip即可解压。
一个完整的apk文件包含被编译的代码文件(.dex文件)、文件资源(resourses)、
assets、证书(certifications)和清单文件(mainifest file)
assets目录 | 存放apk的静态资源文件,如视频,音频,图片等 |
---|---|
lib目录 | armeabi-v7a基本通用所有的android设备,arm64-v8a只适用于64位的android设备,x86常见用于android模拟器,其目录下的.so文件是c或c++编译的动态链接库文件 |
META-INF目录 | 保存应用的前签名信息,签名信息可以验证apk文件的完整性,相当于apk的身份验证(验证文件是否又被修改) |
res目录 | res目录存放资源文件,包括图片,字符串等等,apk的脸蛋由它的layout文件设计 |
AndroidMainfest.xml文件 | apk的应用信息清单,它描述了应用的名字,版本,权限,引用的库文件等等信息 |
classes.dex文件 | class.dex是java源码编译后生成的java字节码文件,apk运行的主要逻辑 |
resources.arsc文件 | resources.arsc是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源 |
kotlin | 说明部分或者完全由koltin开发 |
okhttp3 | 说明在开发的时候导入的该包 |
双开及其原理
先了解一下双开的四种原理:
修改包名 | 让手机系统认为这是2个APP,这样的话就能生成2个数据存储路径,此时的多开就等于你打开了两个互不干扰的APP |
---|---|
修改Framework | 对于有系统修改权限的厂商,可以修改Framework来实现双开的目的,例如:小米自带多开 |
通过虚拟化技术实现 | 虚拟Framework层、虚拟文件 |
以插件机制运行 | 利用反射替换,动态代理,hook了系统的大部分与system——server进程通讯的函数,一次作为”欺上瞒下”的目的,欺骗系统”以为”只有一个apk在运行,瞒过了插件,让其”认为”自己已经安装,如VirtualApp |
后三者不适合新手学习,这里我们以第一种为例子:
记得把屏幕分辨率修改为900✖1600(dpi 320)
首先将这三个文件拖入到模拟器中:
打开MT管理器,在左上角找到安装包提取
,提取”wuaipojie”(图中两个wuaipojie是双开后的结果)

点击wuaipojie,选择提取安装包,定位到该.apk文件,在功能
中选择APK共存
,勾选自动签名
,确认即可完成双开
APK汉化
在安卓逆向的过程中,我们通常需要汉化APK文件。一下主要有三种汉化方式:
- Arsc汉化
- Xml汉化
- Dex汉化
Arsc汉化
用MT管理器打开wuaipojie,点击查看该文件,右上角选择搜索,选择搜索子目录
和高级搜索
,这样会搜索整个文件。在下方输入你要寻找的字符串:

根据搜索结果找到文件
如图所示:
打开该文件就能找到”Hello 52pojie’”,修改它并进行保存,此时系统会跳出提示:

点击确定,返回到文件名下选择安装,系统会给出提示:

这里直接选择确定会将之前的应用卸载然后安装修改过后的应用,重新安装再打开就发现已经修改成功
Arsc汉化
Arsc汉化通常用于非英文的外文的情况下,同时我们也需要用到开发者工具
。安装好它再界面会有悬浮窗的显示(在左上角):

我们返回到之前的关卡界面,点击开发者工具的悬浮窗,找到并点击界面资源分析
,就能识别出该界面的文字。点击该文字就能显示对应的文字信息:

复制该文字并回到MT管理器,搜索该文字,结果如下:

找到并点击该文件,选择翻译模式,选择第一个,下滑找到该字符串:

修改翻译后的句子。其实 我们可以选择右小角的网络的图标,这个是机翻(需要VIP),机翻后的句子比较生硬,需要安装插件:
我们在设置中找到插件管理
,
将修改好的APK文件重新安装,发现这次并没有出现安装失败的弹窗或者提示两次签名并不同,这是因为这次跟上次用的签名文件都是由MT提供的,所以不会出现签名信息冲突的问题
结果如下:

Dex汉化
最后一句话是在Dex文件中,打开MT管理器,找到classes.dex
文件,打开并选择Dex编辑器++的打开方式:

选择搜索
,同时使用开发者工具捕捉到这句话并复制到搜索中:

这里我们找到这句话的位置并修改为:“逆向决定高度,开发决定深度”

然后更新该文件,重新安装wuaipojie,结果如图:

初识AndroidMainfest.xml
AndroidMainfest.xml是整个应用程序的信息描述文件,定义了应用程序中包含的Activity,Service,Content provider和BroadcastReceiver组件信息。每个应用程序在根目录下必须包含一个AndroidMainfest.xml文件,且文件名不能修改,它描述了package中暴露的组件,他们各自的实现类,各种能被处理的数据和启动位置。
属性 | 定义 |
---|---|
VersionCode | 版本号,主要用来更新,例如:1 2 |
versionName | 版本名,给用户看的,例如1.2 |
package | 包名,例如:com.zj.52pojie.demo |
users-permission android:name=”” | 应用权限,例如:android.permission.INTERNAT代表网络权限 |
android:label=”@string/app_name” | 应用名称 |
android:icon=”@mipmap/ic_launcher” | 应用图标路径 |
android:debuggable=”true” | 应用是否开启debug权限 |
第四个应用的权限,当我们在使用一些需要允许访问你摄像头权限等,而你不允许就会让你闪退的情况下,我们可以通过反编译打开这个软件的这个文件来删除这条权限来愉快使用该软件(doge)。
使用MT管理器修改.xml文件时属于会员功能,所以我们使用np管理器,文件路径:stortage/emulated/0/MT2/apks
。
选择查看该文件,选择编辑的方式打开AndroidMainfest.xml文件:

在这里我们可以看到版本号,版本名,包名,权限,标签和图标路径名:

最后,我们使用np管理器来修改demo和图标:
我们回到文件开始的地方,选择功能,找到通用编辑:

这里我们可以看到软件名称和图表等信息:

打开共享文件,将电脑上已经准备好的图片传进来。回到之前的通用编辑,点击图标,选择系统图库,选择上传好的图片就修改成功了,顺便也把名字也修改了,再安装这个文件,此时弹出提示:两次的签名不同,这是因为原来的软件我们使用的是MT的签名,现在使用的是np的签名即可:
