安卓逆向这档事-第二课、初始APK文件结构、双开、汉化、基础修改

1、APK结构

apk 全称 Android Package,它相当于一个压缩文件,只要在电脑上将apk后缀改为zip即可解压。

文件 注释
assets目录 存放APK的静态资源文件,比如视频,音频,图片等
lib 目录 armeabi-v7a基本通用所有android设备,arm64-v8a只适用于64位的android设备,x86常见用于android模拟器,其目录下的.so文件是c或c++编译的动态链接库文件
META_INF目录 保存应用的签名信息,签名信息可以验证APK文件的完整性,相当于APK的身份证(验证文件是否又被修改)
res目录 res目录存放资源文件,包括图片,字符串等等,APK的脸蛋由他的layout文件设计
layout 文件夹用来存放布局文件,布局文件用来描述应用程序的界面结构。
values 文件夹用来存放值资源文件,值资源文件用来存放应用程序中使用的常量值和颜色信息。
AndroidMainfest.xml文件 APK的应用清单信息,它描述了应用的名字,版本,权限,引用的库文件等等信息
classes.dex文件 classes.dex是java源码编译后生成的java字节码文件,APK运行的主要逻辑
resources.arsc文件 resources.arsc是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源

2、双开及原理

双开:简单来说,就是手机同时运行两个或多个相同的应用,例如同时运行两个微信等

原理 解释
修改包名 让手机系统认为这是2个APP,这样的话就能生成2个数据存储路径,此时的多开就等于你打开了两个互不干扰的APP
修改Framework 对于有系统修改权限的厂商,可以修改Framework来实现双开的目的,例如:小米自带的应用多开
通过虚拟化技术实现 虚拟Framework层、虚拟文件系统、模拟Android对组件的管理、虚拟应用进程管理 等一整套虚拟技术,将APK复制一份到虚拟空间中运行,例如:平行空间
以插件机制运行 利用反射替换,动态代{过}{滤}理,hook了系统的大部分与system—server进程通讯的函数,以此作为“欺上瞒下”的目的,欺骗系统“以为”只有一个apk在运行,瞒过插件让其“认为”自己已经安装。例如:VirtualApp

2.1、修改包名实现双开

2.1.1 使用NP管理器自带功能修改包名实现双开

使用NP管理器提取APK安装包

点击apk文件->功能->APK共存 输入新包名或者直接使用给出的新包名->确定->点击新生成的apk文件->安装

注意:因为此双开方式是修改包名实现的,动了应用的签名信息,如果开发者做了签名校验,打开更改过包名的应用会有可能会出现闪退崩溃的情况
可以使用开发者助手查看包名与签名的MD5
包名:com.zj.wuaipojie
签名MD5:A3:1F:3A:26:F7:0B:34:84:F0:7A:8B:A9:42:AA:1E:0D

包名:com.zj.wuaipojiep
签名MD5:68:17:0B:6B:26:E5:23:38:BC:07:AE:66:53:03:CC:36

2.1.2 使用MT管理器手动修改包名实现双开

点击APK文件->查看->点击AndroidMainifest.xml文件->打开方式 反编译->修改package的值就是新的包名



MT管理器重新签名后的变化


包名:com.zj.wuaipojie.ok
签名MD5:E8:9B:15:8E:4B:CF:98:8E:BD:09:EB:83:F5:37:8E:87

3、汉化APK

汉化:使用专门的工具对外文版的软件资源进行读取、翻译、修改、回写等一系列处理,使软件的菜单、对话框、提示等用户界面显示为中文,而程序的内核和功能保持不变,这个过程即为软件汉化

基本上字符串都是在arsc里,建议一键汉化,然后再润色。 少量没汉化到的字符串参考视频中的方法定位去逐个汉化。
这里还需要注意的是,如果要直装应用,那就应该先签名安装,看看是否有签名校验导致的闪退!!!

3.1、XMl汉化

打开课件中的Demo,点击挑战->第一关,先来汉化这一句

点击APK文件->查看->右上的三个点->XML搜索->点击搜索到的文件,再点击Jf.xml->反编译->修改此处,回编译->签名,返回到APK文件点击安装,直接安装会提示“安装失败,与已安装APK签名不一致!”,卸载原来的应用,然后再来这里进行安装







修改后的效果

3.2、Arsc汉化

汉化这句俄语,使用开发者助手应用进行提取
Я не могу поверить, что это работает, почему?
查看APK点击右上角三个点->搜索->高级搜索->翻译模式->找到需要翻译的俄语,修改过后退出(保存退出)*2,签名->安装




在我看来,困惑是学习过程的第一阶段,这说明固有知识的局限开始被打破了。你要直面新的信息,这些新的信息会挑战你现有的观念和行为模式。由此产生的焦虑是让你改变的动力,很可能也会开启你的创造力。

最终效果

3.1、DEX汉化

先使用开发者助手提取这段话,回到MT管理器查看APK->右上角三个点 搜索(高级搜索),打开方式 Dex编辑器++ ->搜索,编辑保存,退回 保存 编译dex 签名 安装






最终效果

4、初识AndroidMainfest.xml

AndroidManifest.xml文件是整个应用程序的信息描述文件,定义了应用程序中包含的Activity,Service,Content provider和BroadcastReceiver组件信息。每个应用程序在根目录下必须包含一个AndroidManifest.xml文件,且文件名不能修改。它描述了package中暴露的组件,他们各自的实现类,各种能被处理的数据和启动位置。

属性 定义
versionCode 版本号,主要用来更新,例如:12
versionName 版本名,给用户看的,例如:1.2
package 包名,例如:com.zj.52pj.demo
uses-permission android:name=”” 应用权限,例如:android.permission.INTERNET 代表网络权限
android:label=”@string/app_name” 应用名称
android:icon=”@mipmap/ic_launcher” 应用名称
android:debuggable=”true” 应用是否开启debug权限

5、修改图标、修改名字 + 课后小作业

5.1、修改图标、应用名字

adb传入图片->打开np管理器->点击APK文件->功能(通用编辑)->修改后保存->这个时候的签名有所变化,变成了np管理器默认的签名,所以需要卸载原来的应用


最终效果

5.2、课后小作业-替换第一关挑战中的图片

res目录存放资源文件,包括图片,字符串等等,所以这个挑战的图片就在res这个目录里,也可使用开发者助手辅助,然后搜索
打开APK文件进入res目录,找到需要修改的图片cf.jpg,右边目录找到图片目录,重命名为cf.jpg然后复制过去->确定(自动)->安装,这时是MT管理器默认的应用签名



最终效果


安卓逆向这档事-第二课、初始APK文件结构、双开、汉化、基础修改
http://example.com/2023/11/10/安卓逆向这档事-第二课、初始APK文件结构、双开、汉化、基础修改/
作者
John Doe
发布于
2023年11月10日
许可协议