type
status
date
slug
summary
tags
category
icon
password
第一课是配置模拟器的,我使用的是测试机,所以跑完就跳了
第二课
APK文件结构
结构 | 作用/内容 |
assets目录 | 存放APK的静态资源文件,比如视频、音频、图片等 |
lib目录 | 其目录下的.so文件是c或者c++编译的动态链接库文件 |
META-INF目录 | 保存应用的签名信息,签名信息可以验证APK文件的完整性,相当于APK的身份证 |
res目录 | 存放资源文件,包括图片、字符串等等,APK的脸蛋由他的layout文件设计 |
AndroidMainfest.xml文件 | APK的应用清单信息,它描述了应用的名字,版本,权限,引用的库文件等 |
classes.dex文件 | 是java源码编译后生成的java字节码文件,APK运行的主要逻辑 |
resources.arsc文件 | 是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源 |
基础逆向流程
查壳→反编译→得到smali代码→修改smali代码
pc与测试机建立文件直传
PC与安卓端使用同一局域网!!!!(有很多其它方法,我用的这种)
MT管理器里搞出ftp
在pc的“此电脑”处右键→添加一个网络位置→一直下一步→
这里输入刚刚提取的ftp→下一步直到完成
双开
- 修改包名:让手机系统认为这是2个APP,这样的话可以生成2个数据存放路径,此时的多开就等于你打开了两个互不干扰的APP.点击APK共存,勾上自动签名即可
- 修改Framework:对于有系统修改权限的厂商,可以修改来实现双开的目的
- 荣光虚拟化技术实现:虚拟Framework层、虚拟文件系统、模拟Android对组件的管理、虚拟应用进程管理等一整套虚拟技术,将APK复制一份到虚拟空间中运行
- 以插件机制运行:利用反射替换、动态代理,hook了系统大部分与system-server进程通讯的函数,以此作为“欺上瞒下”的目的,欺骗系统“以为”只有一个apk在运行,瞒过插件让其“认为”自己已经安装
汉化
只针对少量句子
MT管理器里配置好Yandex翻译引擎
根据待翻译句子搜索到对应文件,打开方式使用翻译模式→[DEFAULT]→下面图标第四个,选择翻译引擎开始翻译→保存修改,重新安装即可
初识AndroidMainfest.xml
名称 | 作用 |
versionCode | 版本号,主要用来更新 |
versionName | 版本名,给用户看的 |
package | 包名 |
uses-permission android:name="" | 应用权限 |
android:label="@string/app_name" | 应用名称 |
android:icon="@mipmap/ic_launcher" | 应用图标路径 |
android:debuggable="true" | 应用是否开启debug权限(重要) |
第三课
什么是JVM、Dalvik、ART
java虚拟机,运行java字节码程序
Dalvik是Google专门为Android设计的一个虚拟机,有专属的文件执行格式dex(Dalvik executable)
ART(Android Runtime)相当于Dalvik的升级版,本质无异
smali语法
是Dalvik的寄存器语法,是dex反编译来的
关键字
名称 | 作用 |
.class | 类名 |
.super | 父类名,继承的上机类名名称 |
.source | 源名 |
.field | 变量 |
.method | 方法名 |
.register | 寄存器 |
.end method | 方法名结束 |
public | 共有 |
private | 私有,只能自己使用 |
protected | 半公开 |
.parameter | 方法参数 |
.prologue | 方法开始 |
.line xxx | 位于第xxx行 |
寄存器
smali中所有的操作都必须经过寄存器来进行:在本地寄存器用v开头数字结尾的符号来表示,如v0、v1、v2。参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2。特别需要注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指‘this’,p1表示函数中的第一个参数。而在static函数中p0才对应第一个参数(java语法中static方法没有this方法)
常用指令
关键字 | 注释 |
const | 重写整数属性,真假属性内容,只能是数字类型 |
const-string | 重写字符串内容 |
const-wide | 重写长整数类型,多用于修改带期时间 |
return | 返回指令 |
if-eq | 全称equal(a = b),比较寄存器a、b的内容,相同则跳 |
if-ne | 全称equal(a != b),ab内容不同则跳 |
if-eqz | 全称equal zero(a = 0),z即是0的标记,a = 0则跳 |
if-nez | 全称equal zero(a != 0), a != 0则跳 |
if-ge | 全称garden equal(a >= b),a >= 0则跳 |
if-le | 全称little equal(a <= b),a <= 0则跳 |
goto | 强制跳转到指定位置 |
switch | 分支跳转,一般会有多个分支线,并根据指令跳转到适合位置 |
iget | 获取寄存器数据 |
JADX
PC端反编译apk文件
核心破解工具
需要加载lsposed模块
作用:防止签名冲突,直接覆盖安装
- 作者:Sh4d0w
- 链接:https://sh4d0w.life//article/736b1edb-c111-4a31-a4f2-f1210c40cd52
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。