APK文件结构

APK全程Android Package,相当于一个压缩文件。以压缩包的形式打开一个APK可以看到他的结构:

image-20250719215326654
文件 描述
kotlin 使用kotlin编写的Android应用时携带的库
META-INF 保存应用的签名信息,用于验证应用完整性
okhttp3 一个依赖包
res 存放app前端用到的一些图形组件库,一些情况下APP会将证书放在里面的raw目录底下
assets 存放app的资源文件,通常存放图片之类的静态资源,有时候会存放app的证书,一些仅由HTML5封装的app,其前端代码也会存放在该文件夹下
AndroidManifest.xml APK的应用清单,描述了应用的名字、版本、权限、引用的库文件等信息
classes.dex java源码编译后的java字节码文件,应用运行的主要逻辑
resources.arsc 编译后的二进制资源文件,为一个映射表

汉化

流程图

image.png

现在我们的示例app里面有一个需要我们汉化的地方

image.png

现在我们用第一种方法:我们使用NP管理器,打开APK,搜索hello

image.png

通过这种方式我们可以找到我们需要修改的地方

image.png

直接进行修改成“你好,吾爱破解”,然后保存并安装即可。

第二种方法适用于我们需要定位再复制内容的情况,例如上面俄文的部分,我们可以通过开发者助手这个app进行定位布局,并且复制再进行修改

image-20250720184433576

我们通过第一种方法同样的操作后我们发现了这个语句被放在了resources.arsc文件内,通过np管理器的翻译功能我们可以进入到他的编辑页面,选择DEFAULT,找到对应的语句我们就可以进行修改了

image-20250720185151008

然后我们app内还有最后一个,最后一句是硬编码存放在classes.dex,我们用Dex编辑进入,搜索对应的字符串

image-20250720185530758 image-20250720185715156

保存,并让np管理器进行签名即可完成修改汉化。

image-20250720185841054

AndroidManifest.xml

AndroidManifest.xml文件是整个应用程序的信息描述文件,定义了应用程序中包含的ActivityServiceContent providerBroadcastReceiver组件信息。

它描述了package中暴露的组件和他们的实现类,还有各种能被处理的数据和启动位置。

几个比较常见的属性

属性 定义
versionCode 版本号
versionName 版本名
package 包名
uses-permission android:name="" 应用权限
android:label="@string/app_name" APP名称
android:icon="@mipmap/ic_launcher" APP图标位置
android:debuggable=“true” 是否开启DEBUG权限

通过反编译后编辑他的属性的值再签名打包,我们可以做到删除某些权限,或者修改他的名称图标之类的,当然对签名验证的APP直接采用这种方式不太可行。

反编译后的AndroidManifest.xml如下

image-20250720205028011

我们来尝试修改应用名字和图标,直接可以使用NP管理器的功能,里面有通用编辑功能,我们可以通过这种方式修改

image-20250720205153614

课后作业

这个课程还有一个课后作业,第一个是自己尝试双开,第二个是替换图片。第一个就懒得做了,直接做第二个,在res文件夹里面找到图片替换即可

image-20250720210510149

不知道有没有其他法子,目前只会这种(