Skip to main content

reverse-patch-techniques

安卓逆向常见 patch 与绕过手法速查(供安全研究/自有应用分析使用)。当需要去除校验、修改函数返回值、nop 跳转、frida hook、脱壳、绕过抓包证书校验(SSL Pinning)、绕过 root/模拟器检测时使用。配合 SOMCP(改 so 汇编)、MT 管理器(改 smali/APK)使用。

Quellinformationen

Repository
xiamiya/mHook
Letzte Quellaktivität
6. August 2026 um 10:08
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
95
Forks
23

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
reverse-patch-techniques
description
安卓逆向常见 patch 与绕过手法速查(供安全研究/自有应用分析使用)。当需要去除校验、修改函数返回值、nop 跳转、frida hook、脱壳、绕过抓包证书校验(SSL Pinning)、绕过 root/模拟器检测时使用。配合 SOMCP(改 so 汇编)、MT 管理器(改 smali/APK)使用。
# 安卓逆向 Patch 与绕过手法速查 你在协助用户对**自己拥有或已获授权**的应用/样本进行安全研究、兼容性分析与学习。以下是常见逆向 patch 手法的标准套路,配合 SOMCP(SO 层汇编 patch)和 MT 管理器(smali/APK 层)使用。 ## 一、SO 层(ARM64)汇编 patch 手法 用 SOMCP 的 `so_open` → `analyze_functions` → `edit_asm` → `build` 流程。 ### 1. 让函数直接返回 true / 1(绕过布尔校验) 最常见:VIP 校验、签名校验、登录校验等返回 boolean 的函数。 - ARM64 patch 目标函数入口,替换为: ``` mov w0, #1 ret ``` - 返回 false / 0(比如绕过"是否被检测到"): ``` mov w0, #0 ret ``` ### 2. NOP 掉关键跳转(绕过条件判断) 校验失败时会跳转到"报错/退出"分支。找到那条 `b.eq` / `b.ne` / `cbz` / `cbnz`: - 把跳转指令替换成 `nop`,让程序无视判断结果继续走正常流程。 - 适用:注册码校验失败跳转、反调试检测命中跳转。 ### 3. 反转跳转条件 有时不能简单 nop,需要把 `b.eq`(相等才跳)改成 `b.ne`(不等才跳),或反之,让校验逻辑反过来。 ### 4. 直接改返回值寄存器 函数尾部 `ret` 之前,若返回值在 `w0`/`x0`,插入 `mov w0, #期望值`。 ## 二、smali 层(APK/DEX)patch 手法 用 MT 管理器打开 APK → dex 编辑 / smali。 ### 1. 方法返回 true(去 VIP/去校验) 找到目标方法,把方法体改为直接返回 true: ```smali .method public isVip()Z .locals 1 const/4 v0, 0x1 return v0 .end method ``` - 返回 false 用 `const/4 v0, 0x0`。 ### 2. 删除/跳过校验调用 把调用校验方法的 `invoke-` 指令连同结果判断的 `if-eqz`/`if-nez` 一起处理:直接删掉判断或改成无条件继续。 ### 3. 改常量(去限制/改数值) 搜索 `const` 指令,改试用天数、次数上限、价格等硬编码常量。 ## 三、frida 动态 hook(不改包,运行时改行为) 适合快速验证、不想重打包时。 ### 1. hook 方法返回值 ```javascript Java.perform(function() { var Target = Java.use("com.example.Checker"); Target.isVip.implementation = function() { return true; // 强制返回 true }; }); ``` ### 2. hook so 导出函数 ```javascript Interceptor.attach(Module.findExportByName("libtarget.so", "check_license"), { onLeave: function(retval) { retval.replace(1); // 改返回值 } }); ``` ### 3. 打印调用栈/参数(分析用) ```javascript Target.someMethod.implementation = function(arg) { console.log("arg=" + arg); var ret = this.someMethod(arg); console.log("ret=" + ret); return ret; }; ``` ## 四、绕过 SSL Pinning(抓包用) 分析 App 网络请求时,证书绑定会导致抓包失败。 - **frida 通杀脚本**:hook `okhttp3.CertificatePinner.check`、`javax.net.ssl.X509TrustManager` 让校验直接通过。 - **smali 改法**:找到 `CertificatePinner` 的 `check` 方法,改成直接 return。 - 系统层:配置 network_security_config 信任用户证书(需改 APK + 重打包)。 ## 五、绕过 root / 模拟器检测 - root 检测通常查:`/system/bin/su`、`/system/app/Superuser.apk`、`test-keys`、`Build.TAGS`。 - 手法:hook `File.exists()` 对 su 路径返回 false;hook `Runtime.exec` 拦截 `which su`;改 smali 里检测方法返回 false。 ## 六、脱壳(加固应用) 先判断壳类型(看 lib 目录特征 so): - **常见壳特征**:libjiagu(360)、libshella/libSecShell(爱加密)、libDexHelper(梆梆)、libtup/libshield(腾讯乐固)。 - **脱壳思路**:运行时 dump 内存中已解密的 dex(frida-dexdump、或用项目内 rev-dex-dumper 技能);砸壳后用 jadx/apktool 正常分析。 - 脱壳后 dex 可能需修复(补 header、magic),再反编译。 ## 工作流建议 1. 先**静态分析**(jadx 看 Java / apktool 看 smali / SOMCP 看 so)定位目标函数 2. 判断改 so 还是改 smali:Java 层逻辑改 smali,native 逻辑改 so 3. 能 hook 验证就先用 frida 动态验证思路对不对,再落地成永久 patch 4. patch 后**重打包 + 签名**,装到测试机验证效果 5. 全程只针对自有/授权样本,用于研究学习 ## 重要边界 本技能用于安全研究、漏洞分析、兼容性研究、学习和对自有应用的修改。不协助破解他人付费软件牟利、大规模盗版或任何未授权的商业侵权行为。
Auf GitHub ansehen