小七先生ヽ 的博客 - 小七先生ヽ
type: channel
link: https://www.xiao7post.com/index.php/author/1/
description: 小七先生ヽ
items: 安卓逆向环境篇--魔改aosp打造一个属于自己的逆向环境
items: Mac 下 UTM Arm64 Ubuntu虚拟机编译AOSP 14源码 记录
items: IDA Pro 9.0 beta MacOS,Linux，Win全版本下载
items: IOS版本某手游 算法逆向
items: frida hook java
items: Frida Hook so
items: 某app zzReqSign 算法还原分析过程
items: Android 7.0 及以上系统、雷电4模拟器抓包设置
items: 关于我
items: 欢迎使用 Typecho

安卓逆向环境篇--魔改aosp打造一个属于自己的逆向环境
type: item
date: 2025-12-13T14:07:33+08:00
description: 安卓逆向环境篇--魔改aosp打造一个属于自己的逆向环境魔改安卓系统实现绕过基本环境监测usb 开发者检测adb检测解锁检测指纹伪装抓包证书检测基本sslpinning 校验vpn 检测代理检测root 检测自编译webview 开启调试自编译内核绕过调试检测 魔改frida 或lsposed 绕过hook检测以上检测器均已完成hook状态与取消hook状态的过检测 包括frida lsposed均已实现同样效果关于设备环境 测试多款国内外app 金融类 社交类 均可正常运行关于hook调试环境 测试多款国内外加固 某梆 某加密 某60 海外dexprp 谷歌加固 vos 均可正常hook后期规划准备开发系统管理器 对接魔改api 完成设备指纹一键换新 一键新机

Mac 下 UTM Arm64 Ubuntu虚拟机编译AOSP 14源码 记录
type: item
date: 2025-04-23T16:53:00+08:00
description: Mac 下 UTM Arm64 Ubuntu虚拟机编译AOSP 14源码 记录Mac 安装utm虚拟机 创建一个arm64版本的ubuntu 勾选虚拟化和 Rosetta 模拟x86_64一路安装虚拟化引擎选择部分，务必勾选 Apple Virtualization 。如果不勾选此项，那么后续的 Rosetta 是没办法选择的，并且性能是不足以进行系统编译的。内存，CPU 部分，建议尽量多给一些，这样编译速度更快，但是不一太多，太多会导致宿主机卡顿，这个需要均衡考虑，尤其是宿主机还需要同步执行其他事情的时候。磁盘部分，建议至少 400GB 以上，如下图：共享目录部分，如果是编译代码，不建议使用，性能不够，如果是常规的文件共享，问题不大。如下图：最终的配置如下：设置 Rosetta 启用对于 x86_64 架构应用的支持$ sudo mkdir /media/rosetta $ sudo mount -t virtiofs rosetta /media/rosetta $ sudo apt install binfmt-support # 此命令的是通知操作系统 0x7f 开头的ELF文件委托给 rosetta 进行加载 # 0x7f 开头代表的是 x86_64 的可执行文件， rosetta 会把文件进行动态转译成 ARM64 指令，从而提升执行性能 # 另外注意，rosetta 只支持 x86_64 , 不支持 x86_32 的应用 $ sudo /usr/sbin/update-binfmts --install rosetta /media/rosetta/rosetta \ --magic "\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00" \ --mask "\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \ --credentials yes --preserve no --fix-binary yes 添加到系统文件加载项，要求系统启动的时候自动加载 rosetta 。$ sudo apt install vim $ sudo vim /etc/fstab 在文件尾部新增一行：rosetta /media/rosetta virtiofs ro,nofail 0 0 修改后的配置文件类似如下：/etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/vda2 during curtin installation /dev/disk/by-uuid/c564e919-be8a-40fc-89cf-bba11fbc6c45 / ext4 defaults 0 1 # /boot/efi was on /dev/vda1 during curtin installation /dev/disk/by-uuid/92AB-2A45 /boot/efi vfat defaults 0 1 /swap.img none swap sw 0 0 rosetta /media/rosetta virtiofs ro,nofail 0 0 执行 df 命令,应该可以看到 rosetta 已经被正常加载，如下：$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 2.6G 1012K 2.6G 1% /run /dev/vda2 392G 11G 361G 3% / tmpfs 13G 0 13G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda1 1.1G 6.4M 1.1G 1% /boot/efi tmpfs 2.6G 4.0K 2.6G 1% /run/user/1000 rosetta 1.9…

IDA Pro 9.0 beta MacOS,Linux，Win全版本下载
type: item
date: 2024-08-30T08:34:00+08:00
description: 专治各中验证码 点我直达链接: https://pan.baidu.com/s/1CtCUjhtuASqTwDHrmrkCBA?pwd=7777 提取码: 7777 复制这段内容后打开百度网盘手机App，操作更方便哦

IOS版本某手游 算法逆向
type: item
date: 2024-03-16T17:06:00+08:00
description: 工具及环境配置Mac电脑 或者虚拟机iphone手机（需越狱）Frida hook框架抓包工具，不多介绍 推荐使用SunnyIDA 反编译Frida-ios-dump 砸壳环境配置电脑安装frida,需先安装pythonbrew install python3 pip install fria pip install frida-tools 手机端添加Cydia源 https://build.frida.re 安装即可 注意：电脑端跟手机端一定要保持版本一致下载frida-ios-dump备用 git clone https://github.com/AloneMonkey/frida-ios-dump.git cd frida-ios-dump-master sudo python3 -m pip install -r requirements.txt --upgrade 抓包应用商店下载app开始抓包（抓包配置由于工具不同请自行百du）这里使用sunny进行抓包ios端代理推荐使用 Shadowrocket抓包如下：提交与返回均已加密，猜测可能是对称算法 经验之谈 没有技巧砸壳手机usb连接到手机将iphone端口转发到本地iproxy 2222 22查看已安装应用frida-ps -Uai运行 dump.py砸壳获取到ipa文件解压得到我们的主文件拖入ida分析搜索 字符串 “kuangbao” 定位到如下位置采用cccrypt加密库进行加密编写fridahook代码 进行hook插播广告 点我直达注册 新用户注册加群即送10000点余额 有需要的可以注册frida-trace -UF -i CCCrypt 生成CCCrypt.js 修改输出显示frida 注入js文件 点击登录发现是3DES 加密 明文 key iv 均已打印出来写代码测试解密完成Android ios 逆向交流群 468241990 欢迎加群交流学习 共同进步！

frida hook java
type: item
date: 2023-04-17T21:16:00+08:00
description: 验证码服务平台 谷歌人机 ReCaptcha（v2/v3 通用版）, 直接返回 token ReCaptcha（v2/v3 企业版）, 直接返回 token ReCaptcha（steam）, 直接返回 token CloudFlare 盾通用版, 返回 cf_clearance、__cf_bm 、正确响应源码 html、验证流程使用的 tls 指纹 Incapsula 盾 reese84 通用版, 返回 reese84 cookie 或 solution 参数 Incapsula 盾 __utmvc 通用版, 服务器直接无感验证 或 __utmvc cookie Hcaptcha 通用版, 直接返回 generated_pass_UUID 直接返回 _abck tls 转发接口, 针对校验 ja3、http2 等指纹（akamai/cloudflare）的接口 更多支持后续敬请期待..... 注册连接：https://3ii.cc/V2J 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额Frida 启动attach 启动直接附加到指定包名的应用中frida -U com.kevin.android -l hook.js直接附加到当前应用中frida -UF -l hook.jsimport sys import time import frida def on_message(message,data): print("message",message) print("data",data) device = frida.get_usb_device() session = device.attach("com.kevin.demo1") with open("./demo1.js","r") as f: script = session.create_script(f.read()) script.on("message",on_message) script.load() sys.stdin.read()spawn 启动frida -U -f com.kevin.android -l demo1.js --no-pauseimport sys import time import frida def on_message(message,data): print("message",message) print("data",data) device = frida.get_usb_device() pid = device.spawn(["com.kevin.demo1"]) device.resume(pid) session = device.attach(pid) with open("./rpc_demo.js",'r') as f: script = session.create_script(f.read()) script.on("message",on_message) script.load() sys.stdin.read()frida-server 自定义端口frida server更改 frida server 默认端口: 27042 并开启远程连接adb shell su - cd /data/local/tmp # 输入 wifiadb 对应的 ip 和自定义端口 ./frida-server -l 192.168.0.1:6666 # 也可以使用默认端口启动 ./frida-server -l 192.168.0.1fridafrida 远程连接自定义端口# 连接指定 6666 端口 frida -H 192.168.0.1:6666 com.demo1.app -l demo1.js # 默认使用端口 27042 frida -H 192.168.0.1 -l demo1.jspython# -*- coding: UTF-8 -*- import frida, sys jsCode = """ console.log("test"); """ def message(message, data): if message['type'] == 'send': print(f"[*] {message['payload']}") else: print(message) # ./fs120800 -l "0.0.0.0:6666" # adb wifi 10.0.0.23 process = frida.get_device_manager().add_remote_device('127.0.0.1:6666').attach('…

Frida Hook so
type: item
date: 2023-04-17T13:00:00+08:00
description: 验证码服务平台 谷歌人机 ReCaptcha（v2/v3 通用版）, 直接返回 token ReCaptcha（v2/v3 企业版）, 直接返回 token ReCaptcha（steam）, 直接返回 token CloudFlare 盾通用版, 返回 cf_clearance、__cf_bm 、正确响应源码 html、验证流程使用的 tls 指纹 Incapsula 盾 reese84 通用版, 返回 reese84 cookie 或 solution 参数 Incapsula 盾 __utmvc 通用版, 服务器直接无感验证 或 __utmvc cookie Hcaptcha 通用版, 直接返回 generated_pass_UUID 直接返回 _abck tls 转发接口, 针对校验 ja3、http2 等指纹（akamai/cloudflare）的接口 更多支持后续敬请期待..... 注册连接：https://3ii.cc/V2J 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额IDA 判断 Thumb 指令集和 Arm 指令集IDA - Options - General - number of opcode bytes - 设置为 4此时查看 IDA VIew 中 opcode 的长度, 如果出现 2 个字节和 4 个字节的, 说明为 thumb 指令集如果都是 4 个字节的, 说明是 arm 指令集;在 Thumb 指令集下, inline hook 的偏移地址需要进行 +1 操作;获取所有 JNI 函数函数地址通过 hook ArtMethod 的 RegisterNative 函数, 可以监控所有的静态注册和动态注册的 JNI 函数的地址;frida14 仅在Android 8.1下测试成功，其他版本可能需要重新修改适配 原作者: Simp1er const STD_STRING_SIZE = 3 * Process.pointerSize; class StdString { constructor() { this.handle = Memory.alloc(STD_STRING_SIZE); } dispose() { const [data, isTiny] = this._getData(); if (!isTiny) { Java.api.$delete(data); } } disposeToString() { const result = this.toString(); this.dispose(); return result; } toString() { const [data] = this._getData(); return data.readUtf8String(); } _getData() { const str = this.handle; const isTiny = (str.readU8() & 1) === 0; const data = isTiny ? str.add(1) : str.add(2 * Process.pointerSize).readPointer(); return [data, isTiny]; } } function prettyMethod(method_id, withSignature) { const result = new StdString(); Java.api['art::ArtMethod::PrettyMethod'](result, method_id, withSignature ? 1 : 0); return result.disposeToString(); } function readStdString(str) { if ((str.readU8() & 1) === 1) { // size LSB (=1) indicates if it's a long string return str.add(2 * Process.pointerSize).readPointer().readUtf8String(); } return str.add(1).readUtf8String(); } function attach(addr) { Interceptor.attach(addr, { onEnter: function (args) { this.arg0 = args[0]; // this }, onLeave: function (retval) { var modulemap = new ModuleMap() mod…

某app zzReqSign 算法还原分析过程
type: item
date: 2023-03-29T17:10:00+08:00
description: 验证码服务平台 谷歌人机 ReCaptcha（v2/v3 通用版）, 直接返回 token ReCaptcha（v2/v3 企业版）, 直接返回 token ReCaptcha（steam）, 直接返回 token CloudFlare 盾通用版, 返回 cf_clearance、__cf_bm 、正确响应源码 html、验证流程使用的 tls 指纹 Incapsula 盾 reese84 通用版, 返回 reese84 cookie 或 solution 参数 Incapsula 盾 __utmvc 通用版, 服务器直接无感验证 或 __utmvc cookie Hcaptcha 通用版, 直接返回 generated_pass_UUID 直接返回 _abck tls 转发接口, 针对校验 ja3、http2 等指纹（akamai/cloudflare）的接口 更多支持后续敬请期待..... 注册连接：https://3ii.cc/V2J 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额工欲善其事必先利其器工具：真机or模拟器 Fiddler 或任意一款抓包工具 VSCode frida 老规矩 先抓包其中 zzReqSign 便是我们需要还原的算法 我们查课发现没有加固 直接丢进jadx进行反编译搜索定位 我们来到如下位置发现是个 native 方法 那么加密在so层 上面 System.loadLibrary("signLib"); 就是加载so的指令 其中 signLib就是so名字解压apk 去lib目录寻找是否有这个文件拖入IDA 导出函数 搜索 getSign定位如下位置：代码如下：int __fastcall Java_com_zhuanzhuan_sign_SignUtil_getSign(JNIEnv_ *a1, int a2, int a3, int a4) { const char *app_sign_sha1; // r0 struct _jobject *v9; // r8 signed int v10; // r5 int DevID; // r0 struct _jobject *v12; // r8 int v13; // r9 jbyte *v14; // r6 jsize v15; // r10 _BYTE *v16; // r8 signed int i; // r11 jbyte v18; // r4 int v19; // r1 JNIEnv_ *v20; // r4 int v21; // r9 int MD5; // r10 int v24; // [sp+8h] [bp-30h] struct _jobject *v25; // [sp+Ch] [bp-2Ch] struct _jobject *v26; // [sp+10h] [bp-28h] JNIEnv_ *v27; // [sp+14h] [bp-24h] jbyte *v28; // [sp+18h] [bp-20h] if ( !a3 ) return 0; app_sign_sha1 = get_app_sign_sha1(a1, a4); if ( !app_sign_sha1 ) return 0; if ( strcmp(app_sign_sha1, app_sing_str) ) return 0; v9 = toBytes(a1, a3); v10 = a1->functions->GetArrayLength(a1, v9); v28 = a1->functions->GetByteArrayElements(a1, v9, 0); DevID = getDevID(a1, a2); if ( !DevID ) return 0; v26 = v9; v24 = DevID; v12 = toBytes(a1, DevID); v13 = 0; v14 = a1->functions->GetByteArrayElements(a1, v12, 0); v27 = a1; v25 = v12; v15 = a1->functions->GetArrayLength(a1, v12); v16 = malloc(v10); for ( i = 0; i < v10; ++i ) { v18 = v28[v13 % v10]; v19 = (v13 + 1) % v15; v13 += 2; v16[i] = v14[v19] ^ v18; } v20 = v27; v21 = v27->functions->NewByteArray(&v27->…

Android 7.0 及以上系统、雷电4模拟器抓包设置
type: item
date: 2022-07-14T08:58:00+08:00
description: 验证码服务平台 谷歌人机 ReCaptcha（v2/v3 通用版）, 直接返回 token ReCaptcha（v2/v3 企业版）, 直接返回 token ReCaptcha（steam）, 直接返回 token CloudFlare 盾通用版, 返回 cf_clearance、__cf_bm 、正确响应源码 html、验证流程使用的 tls 指纹 Incapsula 盾 reese84 通用版, 返回 reese84 cookie 或 solution 参数 Incapsula 盾 __utmvc 通用版, 服务器直接无感验证 或 __utmvc cookie Hcaptcha 通用版, 直接返回 generated_pass_UUID 直接返回 _abck tls 转发接口, 针对校验 ja3、http2 等指纹（akamai/cloudflare）的接口 更多支持后续敬请期待..... 注册连接：https://3ii.cc/V2J 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额关于Android7.0及以上系统设置方法：由于Android7.0及以后系统不再信任外部证书，故以前导入证书的方法已经成为过去式，那么7.0以上系统真的就不能抓包了吗？答案当然是否定的，我们都知道Android系统不信任外部证书了 那他自己的内部证书总得信任吧？答案是肯定的 方法如下：导出 Fiddler 证书到桌面安装OpenSSL 建议Linux 我用的Ubuntu转换命令：openssl x509 -inform der -in fiddler.cer -out fiddler.pem openssl x509 -inform PEM -subject_hash_old -in fiddler.pem | head -1 得到类似字符串：9a5ba575 cat fiddler.pem > 9a5ba575.0 openssl x509 -inform PEM -text -in fiddler.pem -out /dev/null >> 9a5ba575.0 openssl x509 -inform PEM -subject_hash -in fiddler.pem | head -1 得到类似字符串：425356aa cat fiddler.pem > 425356aa.0 openssl x509 -inform PEM -text -in fiddler.pem -out /dev/null >> 425356aa.0 把生成好的9a5ba575.0、 425356aa.0这两个文件放入手机/system/etc/security/cacerts 目录下，并修改9a5ba575.0、 425356aa.0这2个文件的读写权限： 修改读写权限命令：chmod 777 9a5ba575.0 重启手机，如果生成的文件正确，可以在 信任的凭据 -> 系统中找到如下Fiddler的证书,就可以正常抓取HTTPS的包了雷电4 FD抓包我看到很多人说雷电4抓不到包，设置代理后即使转换了证书也是抓不到，这可能是雷电的Bug 不过是可以解决的，方法如下：1.完成以上步骤。2.通过ADB SHEEL的方式配置全局的代理有效。adb shell settings put global http_proxy 代理IP地址:端口号如果代理ip或端口号更改则需要重新设置，如需取消设置如下：adb shell settings delete global http_proxy adb shell settings delete global global_http_proxy_host adb shell settings delete global global_http_proxy_port注意：移除代理后要重启手机才能生效。设置代理可以多次设置，立即生效。如果你用的是谷歌Pixel手机 那么你买回来连接wifi会发现上不了网并且wifi图标有一个叉号，解决方法如下：adb shell "settings put global captive_portal_https_url https://captive.v2ex.co/generate_204"

关于我
type: item
date: 2022-06-30T20:01:00+08:00
description: 验证码服务平台 谷歌人机 ReCaptcha（v2/v3 通用版）, 直接返回 token ReCaptcha（v2/v3 企业版）, 直接返回 token ReCaptcha（steam）, 直接返回 token CloudFlare 盾通用版, 返回 cf_clearance、__cf_bm 、正确响应源码 html、验证流程使用的 tls 指纹 Incapsula 盾 reese84 通用版, 返回 reese84 cookie 或 solution 参数 Incapsula 盾 __utmvc 通用版, 服务器直接无感验证 或 __utmvc cookie Hcaptcha 通用版, 直接返回 generated_pass_UUID 直接返回 _abck tls 转发接口, 针对校验 ja3、http2 等指纹（akamai/cloudflare）的接口 更多支持后续敬请期待..... 注册连接：http://c.nxw.so/Aqi 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额 新用户注册加群即送10000点余额自我介绍name：小七先生、QQ：1158184029年龄：18(永远18)性别：男技能：Android、ios程序 、手游逆向、Js解密等人在江湖，身不由己。 行走在逆向这条路，犹如逆水行舟 不进则退。

欢迎使用 Typecho
type: item
date: 2022-06-30T14:07:40+08:00
description: 如果您看到这篇文章,表示您的 blog 已经安装成功.