Android逆向(1):APK文件结构、基础修改
APK文件结构
APK全程Android Package,相当于一个压缩文件。以压缩包的形式打开一个APK可以看到他的结构:

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

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

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

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

直接进行修改成“你好,吾爱破解”,然后保存并安装即可。
第二种方法适用于我们需要定位再复制内容的情况,例如上面俄文的部分,我们可以通过开发者助手这个app进行定位布局,并且复制再进行修改

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

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


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

AndroidManifest.xml
AndroidManifest.xml文件是整个应用程序的信息描述文件,定义了应用程序中包含的Activity
、Service
、Content provider
、BroadcastReceiver
组件信息。
它描述了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如下

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

课后作业
这个课程还有一个课后作业,第一个是自己尝试双开,第二个是替换图片。第一个就懒得做了,直接做第二个,在res文件夹里面找到图片替换即可
不知道有没有其他法子,目前只会这种(