Android逆向2

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文件设计
AndroidManifest.xml文件 APK的应用清单信息,它描述了应用的名字,版本,权限,引用的库文件等等信息
classes.dex文件 classes.dex是java源码编译后生成的java字节码文件,APK运行的主要逻辑
resources.arsc文件 resources.arsc是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源

应用双开

学习第一种,后面标记一下,目前对初学者较难

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

第一步,断网,因为看评论区np管理器要收费开会员,避免不能使用先断网

第二步,拖入安装包安装

第三步,设置手机版:

image-20241227235347081

第四步,提取安装包

image-20241227235552876

第五步,双开设置

image-20241227235651248

image-20241227235807923

要钱换np

np管理器被拒绝授予超级用户权限,面具授予即可

image-20241228000523165

打开np管理器

image-20241228000626818

确定后安装即可

image-20241228000742186

但是如果开发者作了签名校验,改包名后双开会出现闪退崩溃情况

汉化

逆向流程:

image-20241228000951970

基本上字符串都是在arsc里,建议一键汉化,然后再润色。少量没汉化到的字符串参考视频中的方法定位去逐个汉化。

这里还需要注意的是,如果要直装应用,那就应该先签名安装,看看是否有签名校验导致的闪退

image-20241228001654890

查看,右上角搜索

image-20241228001804680

image-20241228001820904

点击,然后进去再点反编译,又要登录,没办法换np,但是没有搜索字符串功能,只能手动换目录

image-20241228002353470

回mt管理器

image-20241228002607370

然后安装(这里我做错了,在哪改就在那安装,得回np管理器安装)

image-20241228002907263

成功,但是下面还又不知道什么语言,需要开发者助手

image-20241228003134590

点击页面资源分析

image-20241228003224664

image-20241228003321504

在resource.arsc里,点击选择翻译模式

image-20241228003423505

image-20241228003550891

右下角可汉化,或直接修改字符串

image-20241228003754262

这里又踩坑了,之前用的是np管理器,不能用mt修改,签名不一致

只能先卸载,再装

image-20241228004314475

点class,选第一个

image-20241228004418333

然后搜索字符串,改Reverse,保存后安装

image-20241228004655264

AndroidManifest.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权限

image-20241228144431428

image-20241228144617848

通用编辑修改图标(共享文件夹)

image-20241228144757851

image-20241228144918722

作业

一:

安装纸飞机

image-20241228155621509

image-20241228160419283

这句英文在resource里

image-20241228160659016

image-20241228161021459

双开

image-20241228161050558

image-20241228161155735

修改名字图标:

image-20241228161236725

image-20241228162339029

但不知道为啥不能改图像最后

image-20241228162747305

二:不要一个个找,用ID定位

image-20250107210207230

image-20250107210217705

复制,然后去resource里Arsc找ID

image-20250107210305069

image-20250107210321561

image-20241228153220722

52pj改成cf.jpg然后赋值过去

image-20241228154305891

image-20241228154605344

image-20241228154711147