当前位置: 首页 > article >正文

[App逆向]环境搭建下篇 — — 逆向源码+hook实战

[App逆向]环境搭建下篇——逆向源码hook上篇[App逆向]环境搭建上篇——抓取apk https包免责声明本教程仅供技术学习和安全研究使用禁止用于任何非法用途。逆向他人 App 前请获得授权。环境搭建1. 安装jadx——逆向代码1.安装jadx方式一mac用户可直接通过brew安装brewinstalljadx# jadx --version1.5.1方式二如果不想通过brew安装的也可以直接下载zip包访问Githubhttps://github.com/skylot/jadx/releases/tag/v1.5.5下载jadx zip包2. 解析apk源文件# 1. 启动jadx可视化页面## mac/linux用户jadx-gui## Windows用户双击即可启动jadx-gui.bat# 2. 将需要反编译的apk拖入jadx可视化页面即可2. 安装Frida——HookHook 是一种在程序运行时动态修改或拦截函数调用、参数或返回值的技术。在 Android 安全研究、逆向分析以及自动化测试中Hook 技术扮演着至关重要的角色。目前 Android 生态中主流的 Hook 框架主要有两种而本文将重点介绍逆向中最常用的 Frida 框架。Frida 采用 C/S 架构客户端/服务端安装分为 PC 端客户端和手机端服务端两部分。1.安装 PC 端客户端# 确保已安装 Python 环境使用 pip 安装# 推荐指定版本安装PC 端和手机端版本保持一致以保证稳定性pipinstallfrida17.6.2 frida-tools# 安装最新版# pip install frida frida-tools2. 安装手机端服务端第一步确认设备 CPU 架构adb shell getprop ro.product.cpu.abi第二步下载对应版本的 frida-server前往 Frida Releases 下载。 下载原则版本号与 PC 端一致架构与手机匹配。 例如手机为 arm64-v8aPC 端 Frida 版本为 17.6.2则下载 frida-server-17.6.2-android-arm64.xz。下载后直接双击解压即可。第三步部署到手机# 1. 推送到手机临时目录adb push frida-server-17.6.2-android-arm64 /data/local/tmp/# 2. 进入手机 Shell 并提权adb shellsu# 3. 赋予执行权限并后台运行chmodx /data/local/tmp/frida-server-17.6.2-android-arm64 /data/local/tmp/frida-server-17.6.2-android-arm64## 如果要退出Frida hook执行exit命令即可 建议重命名 frida-server 文件如 fs既方便输入也能规避部分 App 对 “frida-server” 文件名的字符串检测。第四步检查是否能hook# 本地mac执行下面命令列出已连接的设备frida-ls-devices# 查看当前手机上活跃的进程frida-ps-U比如我就hook下我的设置应用首先打开设置应用然后编写js代码main.jsJava.perform(function(){console.log([*] Hook script loaded successfully!);// Hook android.util.Log 的 d() 方法调试日志输出函数varLogJava.use(android.util.Log);Log.d.overload(java.lang.String,java.lang.String).implementationfunction(tag,msg){console.log([] Log.d called);console.log( Tag: tag);console.log( Message: msg);// 调用原始方法保持原有日志输出returnthis.d(tag,msg);};});# 终端执行下面命令进行hook。然后点击任意子模块比如【通知模块】等frida-U-n设置-lmain.js出现有日志打印表示hook没问题。拓展Frida Hook 有两种方式分别是 附加模式(Attach) 和 孵化模式(Spawn)# 1. 附加模式 (Attach) – 进程已运行时#Frida 连接到已经在运行的进程适合对已经打开的应用进行 Hook或者需要动态注入脚本的场景。例如frida-U-n设置-lmain.js# 2. 孵化模式 (Spawn) – 应用未启动时#Frida 先启动应用孵化进程然后立即注入脚本适合需要 Hook 应用启动过程中的初始化代码或 onCreate 等早期方法。#-f 后跟包名表示启动该应用。#--no-pause 让应用自动继续运行否则需要手动调用 resume()。frida-U-fcom.android.settings-lmain.js --no-pause特性Attach (附加)Spawn (孵化)目标状态进程已存在进程未启动能否 Hook 启动过程❌ 可能错过早期方法✅ 可 Hook 从 onCreate 开始的所有代码命令标志-n 或 -p-f常见用途动态注入、调试已运行应用分析应用启动流程、绕过反调试实战案例App逆向常规思路从抓包找到可疑参数 → 静态分析定位代码 → 动态 Hook 验证猜想 → 编写脚本模拟请求。术语核心任务典型应用场景工具示例抓包反编译静态分析通过抓包获取接口参数再反编译APK找到对应的加密/签名代码逻辑分析通信协议、查找硬编码密钥、理解功能实现Charles Jadx抓包逆向动态分析在抓包基础上通过Hook技术动态监控或修改加密算法、签名参数破解加密参数、绕过签名校验、模拟请求、自动化脚本Charles Frida下面我们将以“尿大夫”App登录接口为例我们先用抓包反编译定位到 sign 字段的生成算法静态分析再用抓包逆向编写Frida脚本动态Hook该算法验证其输入输出甚至篡改签名动态分析。1. 抓包反编译尿大夫.apk反编译破解登录接口APK下载地址https://apkpure.com/niao-da-fu/com.uulife.medical.activity/download配置好Charles抓包然后手机打开apk输入用户名密码点击登录抓取对应接口观察请求体我们会发现主要是sign和devisetoken字段比较特殊那么我们就需要挨个尝试看哪些是需要我们逆向的尝试Charles compose移除部分字段观察哪些字段是必须的首先移除devisetoken字段我们会发现移除devisetoken字段后请求依然没问题按照上面流程我们尝试移除sign字段会发现移除之后状态码不一样了出现了报错那么说明sign字段是需要我们逆向的。其他字段都是除了时间戳都是固定的大家可以多请求几次观察6. 打开jadx将apk包拖入jad中。进行逆向分析主要是这个sign字段所以我们全局搜索这个sign这个sign字符是固定的我们推测目标是一个map且通过put方式设置到请求参数中双击进入该代码文件我们发现sign是通过SafeUtils.getSign方法获取到的那么我们选中getSign方法鼠标右键点击跳转到方法声明处查看底层实现逻辑于是我们就找到了底层加密逻辑接着直接复制给AI让它给我们一个python版本最后完善我们的python代码实现登录逻辑importrequestsimporttimeimporthashlibfromurllib.parseimportparse_qsl channelandroiddefgetSign(j):try:str1niaodaifustr(j)md5_1hashlib.md5(str1.encode(utf-8)).hexdigest()part1md5_1[12:30]str2channelstr(j)md5_2hashlib.md5(str2.encode(utf-8)).hexdigest()part2md5_2[12:26]returnpart1part2exceptException:returndefquery_to_dict(query_string):returndict(parse_qsl(query_string))phoneinput(请输入手机号/邮箱)passwordinput(请输入密码)signgetSign(int(time.time()))print(----,sign)qpassword%smobile%schannelandroidsign%stime%smechanism0platform1%(password,phone,sign,int(time.time()))# 实现query转字典dataquery_to_dict(q)resrequests.post(https://api.niaodaifu.cn/v4/site/loginnew,jsondata,verifyFalse)print(res.json())运行代码观察效果成功逆向2. 抓包逆向(动态Hook)目标使用 Frida 动态 Hook getSign 方法验证其输入输出甚至篡改签名。基于上面的反编译我们知道加密是通过SafeUtils.getSign方法实现的。于是可编写 Frida Hook 脚本 hook_sign.jsJava.perform(function(){// 定位 SafeUtils 类varSafeUtilsJava.use(com.uulife.medical.utils.SafeUtils);// Hook getSign 方法注意参数类型为 longSafeUtils.getSign.implementationfunction(timestamp){console.log([*] getSign 被调用);console.log( 参数 timestamp (long): timestamp);// 调用原始方法获取原始签名varoriginalSignthis.getSign(timestamp);console.log( 原始签名: originalSign);// 可选篡改签名例如在后面加 hackedvarfakeSignoriginalSignhacked;console.log( 篡改签名: fakeSign);// 返回篡改后的签名演示修改返回值returnfakeSign;// 若想保持原逻辑则返回 originalSign};console.log([*] Hook 安装成功等待登录操作...);});检查Frida-server是否运行若没运行则启动运行# 检查是否Android是否运行adb shellsups|grepfrida# 若未运行则运行Frida-server/data/local/tmp/frida-server-17.6.2-android-arm64检测到Android未运行Frida-server则执行命令运行。在手机上打开尿大夫 App然后运行Hook# 通过应用名定位frida-U-n尿大夫-lhook_sign.js# 或者通过包名进行hookfrida-U-ncom.uulife.medical.activity-lhook_sign.js输入尿大夫App账号密码点击登录观察 Frida 控制台输出[*]getSign 被调用 参数 timestamp(long):1775641135原始签名: d9828d465a091f9bba31f28710172db3 篡改签名: d9828d465a091f9bba31f28710172db3hacked由于我们篡改了签名服务器会返回签名错误如 401证明 Hook 生效且成功修改了参数。基于此我们可以确认apk登录后台确实调用了com.uulife.medical.utils.SafeUtils.getSign方法。当然验证猜想只是Hook最基础的功能。Hook 的真正威力在于动态篡改——可以让 App 做任何你想让它做的事比如绕过支付校验修改游戏金币禁用广告自动回复聊天消息抓取加密数据当然这些行为都需要遵循相关法律法规。

相关文章:

[App逆向]环境搭建下篇 — — 逆向源码+hook实战

[App逆向]环境搭建下篇——逆向源码hook 上篇:[App逆向]环境搭建上篇——抓取apk https包 免责声明:本教程仅供技术学习和安全研究使用,禁止用于任何非法用途。逆向他人 App 前请获得授权。 环境搭建 1. 安装jadx——逆向代码 1.安装jadx …...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf魄

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

终极解决方案:Windows 10 OneDrive 彻底卸载专业指南

终极解决方案:Windows 10 OneDrive 彻底卸载专业指南 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 在Windows 10系统中&#xf…...

[PL2303老芯片兼容性困境]:驱动适配方案实现设备激活(适用于工业控制与嵌入式开发场景)

[PL2303老芯片兼容性困境]:驱动适配方案实现设备激活(适用于工业控制与嵌入式开发场景) 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 …...

我不是狐狸,我是那Harness Engineering涯

Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT&#xff0…...

跨设备进度同步:多设备追番中断的智能解决方案——Kazumi无缝续播体验

跨设备进度同步:多设备追番中断的智能解决方案——Kazumi无缝续播体验 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Ka…...

为什么92%的PHP团队异步化失败?——高并发场景下I/O等待、内存泄漏与协程调度三大暗礁全曝光

第一章:PHP异步I/O的底层本质与失败全景图PHP 传统同步阻塞模型在 I/O 密集型场景中天然受限——每次 socket read/write、数据库查询或 HTTP 请求都会让整个进程挂起,直至内核返回结果。其底层本质并非缺乏异步能力,而是运行时(Z…...

yolo算法发展综述

YOLO(You Only Look Once)作为计算机视觉领域最具影响力的目标检测算法系列之一,自2016年首次提出以来经历了持续的技术革新与架构演进。从最初的YOLOv1到2026年最新发布的YOLO26,这一系列不仅实现了从"单阶段检测"到"端到端推理"的范式转变,更在速度…...

释放AutoCAD潜能:PyAutoCAD自动化开发指南

释放AutoCAD潜能:PyAutoCAD自动化开发指南 【免费下载链接】pyautocad AutoCAD Automation for Python ⛺ 项目地址: https://gitcode.com/gh_mirrors/py/pyautocad 重新定义CAD工作流:为什么选择PyAutoCAD? 你是否曾陷入AutoCAD重复…...

[AI/应用/MCP] MCP Server/Tool 开发指南蛊

简介 langchain专门用于构建LLM大语言模型,其中提供了大量的prompt模板,和组件,通过chain(链)的方式将流程连接起来,操作简单,开发便捷。 环境配置 安装langchain框架 pip install langchain langchain-community 其中…...

Zookeeper 选举机制解析

zk中有两种角色:Leader 和 FllowerLeader是集群各台电脑投票选举出来的。事务【非常重要】:一通操作,要么同时成立,要么都不成立。zookeeper:Leader:Zookeeper 集群工作的核心。1、事务请求(写操作&#xf…...

langchain初步认识

​LangChain提供了一系列方便的工具、组件和接口,大大降低了 AI 应用开发的门槛,也极大简化了大模型应用程序的开发过程。为什么需要 LangchainLangChain 尝试解决的问题:​prompt的结构如何标准化如果我想中途随时切换大模型,怎样…...

5分钟上手Krita智能选区插件:AI一键抠图,释放创作潜能 [特殊字符]

5分钟上手Krita智能选区插件:AI一键抠图,释放创作潜能 🎨 【免费下载链接】krita-vision-tools Krita plugin which adds selection tools to mask objects with a single click, or by drawing a bounding box. 项目地址: https://gitcode…...

英语常见插入语/固定短语总结

一、表示“据我所知/依我所见”(信息来源) 短语中文意思例句1. as far as I know据我所知As far as I know, she still works there.2. as far as I can see依我看/据我所见As far as I can see, theres no problem.3. as far as Im concerned就我而言/…...

3步颠覆《流放之路》角色构建:从数据混乱到精准规划的实战革命

3步颠覆《流放之路》角色构建:从数据混乱到精准规划的实战革命 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 当你在《流放之路》中第5次洗练装备属性却仍未达到预期效果,当…...

为什么你的AI Agent像个傻子?因为你没给它装“Skill”

今年刚开年,AI Agent的热度又上来了。Cursor 让不少人觉得编程要变天,Claude Code 被捧成“最强打工人”,OpenClaw 这类开源项目更是让动手能力强的人直接开始折腾自动化。但身边真正用起来的人,最近普遍开始烦躁。让 Agent 跑个测…...

开源模拟器Ryujinx配置指南:解决卡顿问题与性能优化全攻略

开源模拟器Ryujinx配置指南:解决卡顿问题与性能优化全攻略 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx作为一款采用C#语言开发的开源Nintendo Switch模拟器&…...

打破虚拟世界语言壁垒:VRCT实现VRChat跨语言交流的技术方案与实践指南

打破虚拟世界语言壁垒:VRCT实现VRChat跨语言交流的技术方案与实践指南 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中,语言差异…...

从48小时到15分钟:智能黑苹果配置工具的革命性突破

从48小时到15分钟:智能黑苹果配置工具的革命性突破 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 黑苹果配置长期以来被视为一项高门槛技…...

华为OD机考双机位C卷 - 游戏分组 (Java)

游戏分组 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录(Java)点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(Java题解) 题目描述 有n(n为2到24之间的偶数,包含2和24)位玩家参与一款在线对战游戏,游…...

10分钟搞定Linux打印机驱动:foo2zjs终极配置指南

10分钟搞定Linux打印机驱动:foo2zjs终极配置指南 【免费下载链接】foo2zjs A linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/ 项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs 你是否曾经为Linux系统下找不到合适的打印…...

G-Helper:你的华硕笔记本性能调校终极方案

G-Helper:你的华硕笔记本性能调校终极方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and oth…...

3个高效步骤打造智能研究助手:基于Gemini与LangGraph的全栈AI应用开发指南

3个高效步骤打造智能研究助手:基于Gemini与LangGraph的全栈AI应用开发指南 【免费下载链接】gemini-fullstack-langgraph-quickstart Get started with building Fullstack Agents using Gemini 2.5 and LangGraph 项目地址: https://gitcode.com/gh_mirrors/ge/g…...

掌握二叉搜索树:高效查找与有序遍历

一、先解答上次的思考题对这棵树:10/ \20 30\40层序遍历:10 20 30 40树的高度:3二、今天学习目标什么是 二叉搜索树 BSTBST 三个核心规则实现:查找、插入、中序遍历完整可运行代码三、什么是二叉搜索树 BST?Binary…...

CPU占用率过高排查步骤

CPU占用率过高排查指南:快速定位系统瓶颈 当电脑突然变卡、风扇狂转,很可能是CPU占用率过高导致的。这种情况不仅影响工作效率,还可能隐藏着病毒、软件冲突或硬件问题。本文将介绍一套系统化的排查步骤,帮助你快速定位问题根源。…...

【Vscode】Windows 7下Remote-SSH插件报错排查与SSH手动安装指南

1. Windows 7下Remote-SSH插件报错问题解析 最近有不少Windows 7用户反馈,在使用Vscode的Remote-SSH插件时遇到了"An SSH installation couldnt be found"的报错。这个问题的根源其实很简单:Windows 7系统默认没有预装SSH客户端。作为一个长期…...

BiliTools终极指南:2026年跨平台B站资源下载解决方案

BiliTools终极指南:2026年跨平台B站资源下载解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你…...

无网环境方案:OpenClaw离线调用SecGPT-14B的实践

无网环境方案:OpenClaw离线调用SecGPT-14B的实践 1. 为什么需要离线AI助手 在网络安全和涉密机构的工作场景中,数据安全永远是第一位的。我最近参与了一个特殊项目,需要在完全断网的环境下部署AI助手,用于自动化安全巡检和日志分…...

自动化内容审核:OpenClaw+Qwen3-4B-Thinking搭建个人防火墙

自动化内容审核:OpenClawQwen3-4B-Thinking搭建个人防火墙 1. 为什么需要个人内容防火墙 作为一个长期活跃在社交媒体平台的内容创作者,我最近遇到了一个棘手的问题。某天深夜发布的一条科普视频,因为背景音乐中出现了某段敏感旋律&#xf…...

CustomTkinter:如何用Python轻松打造现代化桌面应用界面

CustomTkinter:如何用Python轻松打造现代化桌面应用界面 【免费下载链接】CustomTkinter A modern and customizable python UI-library based on Tkinter 项目地址: https://gitcode.com/gh_mirrors/cu/CustomTkinter 厌倦了传统Tkinter老旧的界面风格&…...