- 博客(84)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 逆向防风控新技术EBP
eBPF是一种运行在Linux内核中的可编程虚拟机机制,最初用于网络数据包过滤,现已扩展到系统监控、性能分析等领域。其核心特点是无需修改内核即可安全执行用户态程序,并能挂载到多种系统事件上进行实时监控。虽然并非专为逆向工程设计,但在动态行为分析、反调试检测、无侵入跟踪等方面非常有用,可配合传统逆向工具获取程序运行时上下文。示例展示了如何用eBPF跟踪execve系统调用,监控进程启动行为。eBPF不能替代传统逆向工具,但可作为Linux环境下动态分析的有效补充手段。
2025-11-21 10:31:28
795
原创 安卓逆向与灰产防御总结
安卓逆向技术与灰色产业密切关联,常被用于非法牟利。典型应用包括破解付费应用、开发自动化黑产工具、窃取敏感数据以及制作钓鱼软件。尽管逆向技术本身中立,但未经授权用于牟利可能触犯《刑法》和《网络安全法》。开发者需采取代码混淆、反调试、加固等措施加强防护。法律明确禁止以牟利为目的的逆向行为,相关操作面临严重法律风险。
2025-11-21 07:30:00
1181
原创 如何将带图像的word导出为md
将Word文档(.docx)转换为Markdown(.md)格式的三种方法:1)使用Pandoc工具,支持图片提取并自动生成相对路径引用;2)通过Python脚本调用Pandoc接口实现转换;3)使用在线转换工具(需注意隐私风险)。推荐使用Pandoc,能保留图片且跨平台,但复杂格式可能无法完美转换。
2025-11-20 21:50:51
950
原创 逆向教程 ARM64寄存器详解
ARM64(AArch64)的寄存器模型包括31个64位通用寄存器(X0-X30)、特殊寄存器(SP、PC等)和32个128位向量寄存器(V0-V31)。通用寄存器中,X0-X7用于参数传递,X29/X30分别作为帧指针和链接寄存器。向量寄存器支持不同位宽访问(B/H/S/D/V),用于SIMD和浮点运算。调用约定(AAPCS64)规定整型参数通过X0-X7传递,浮点参数通过V0-V7传递,返回值使用X0或V0。栈需16字节对齐,特殊寄存器如SP和PC有特定访问限制。
2025-10-24 15:07:07
1442
原创 逆向教程 unity浮点数修改
Unity游戏数据修改技术分析 本文演示了如何通过修改堆栈数据而非源代码来改变Unity游戏逻辑。以一个简单的加法函数为例,原始功能是计算两个输入框数值的和(result=num1+num2)。通过分析汇编代码,发现关键指令是在0xA170B0处的FADD指令执行浮点加法。要修改为result=num1+myNum,可以在内存中定位并修改该指令的操作数,将S1寄存器(存储num2)替换为自定义的myNum值。这种技术适用于无法直接修改源代码的情况,通过操纵运行时堆栈和寄存器数据实现逻辑变更。
2025-10-24 14:53:15
423
原创 frida教程 frida防检测方法
摘要:通过修改frida-server默认端口可规避基于端口的frida检测。具体步骤包括:1)在目标设备启动frida-server并指定自定义端口;2)在本地主机通过-H参数或环境变量配置远程连接;3)使用frida-ps验证连接。需注意安全风险,建议仅在可信内网使用或通过SSH隧道转发端口,避免公网直接暴露frida-server服务。(150字)
2025-10-17 19:07:47
855
原创 逆向教程 android natives初始化优先级
在Android Native开发中,初始化机制的执行优先级为:1) __attribute__((constructor))函数(最高)→ 2) 已废弃的_init()函数 → 3) JNI_OnLoad()函数(最低)。现代Android系统中,__attribute__((constructor))会在so加载后最先执行,而_init()通常不会被执行。JNI_OnLoad在Java加载库后被调用。建议优先使用__attribute__((constructor))进行早期初始化,用JNI_OnLoa
2025-10-17 19:03:23
1427
原创 反编译教程 java 反射与反编译
Java和是两个完全不同的概念,但它们在 Android 安全、逆向工程和代码保护中经常被一起讨论。下面分别解释它们的含义、关系以及在实际中的作用。
2025-10-14 20:04:11
998
原创 反编译教程 java动态加载与反编译
动态加载DEX文件分析:通过加密assets中的DEX文件,运行时解密并加载到内存,提高反编译难度。代码首先从assets读取加密的xiaojianbang.dex,解密后写入应用私有目录,再通过DexClassLoader动态加载。为增强隐蔽性,加载完成后立即删除临时DEX文件。这种技术常用于加固保护,核心在于运行时解密和内存加载,防止静态分析提取原始代码。
2025-10-14 20:03:05
330
原创 Unity 游戏安全与 IL2CPP 逆向分析(二)
《IL2CPP逆向分析与Il2CppDumper使用指南》摘要: 本文介绍了Unity游戏IL2CPP脚本后端的逆向分析方法。IL2CPP会将托管代码编译为C++并打包进原生库,导致直接逆向困难。通过使用开源工具Il2CppDumper,结合global-metadata.dat和libil2cpp.so文件,可以恢复原始类型信息并生成可读DLL。文章详细解析了工具的工作流程和源码结构,包括加载文件、解析二进制、重建元数据和生成输出等步骤。同时提供了具体使用步骤和常见问题解决方案,如处理加密的metadat
2025-10-12 20:12:37
2203
原创 Unity 游戏安全与 IL2CPP 逆向分析(一)
摘要:Unity3D游戏开发中,IL2CPP逐渐取代Mono成为主流编译方案,以提高代码安全性。IL2CPP将C#代码转换为C++并编译为原生库(libil2cpp.so),相比Mono的直接IL代码更难以反编译。但未加密的global-metadata.dat仍可能被逆向工具还原类型结构。文章分析了Unity项目结构、IL2CPP的工作原理及其安全性特点,指出其防护效果依赖元数据加密、代码混淆等安全措施。(149字)
2025-10-12 12:27:52
2250
原创 逆向教程 寄存器详解
通用寄存器是CPU中用于临时存储数据、地址或中间结果的高速存储单元,具有用途广、访问快的特点。不同架构的寄存器数量和名称不同,如x86-64有RAX、RBX等16个64位寄存器,ARM64有X0-X30等31个寄存器。通用寄存器可用于算术运算、参数传递、保存返回值和中间结果等操作,能显著提升运算效率。受限于CPU设计,寄存器数量通常较少,但通过灵活使用可优化程序性能。
2025-10-09 22:03:03
1019
原创 逆向教程 堆栈详解
主流架构(ARM/x86/x86-64)的堆栈(stack)默认从高地址向低地址生长,压栈(push)使栈指针减小,弹栈(pop)使其增大。这是由操作系统和ABI约定的通用规范,而非CPU强制要求。内存布局中,栈位于高地址区向下扩展,堆位于低地址区向上增长,两者相向而行。这种设计被Linux、Windows等主流系统广泛采用,但在特殊场景中可能存在例外。
2025-10-09 21:53:52
1193
原创 逆向教程 绕过frida反调试
本文介绍了一种通过魔改Frida(Rusda版本)绕过应用反调试的方法。主要内容包括:1)使用魔改版Frida彻底移除特征字符串;2)手机端配置(CPU架构检测、服务端部署);3)PC端环境配置(版本匹配检查);4)连接设备并执行Hook脚本的完整流程。关键点在于使用Rusda的预编译版本或自行编译,确保与本地Frida版本严格匹配,并通过自定义脚本拦截目标应用的检测逻辑。该方法避免了传统字符串Hook的繁琐,提供了一种更彻底的解决方案。
2025-10-06 11:25:26
2023
原创 逆向教程 RPC协议介绍和使
摘要:在安卓逆向工程中,Hook dlopen 是关键操作,用于监控和修改动态库(.so文件)的加载过程。通过拦截dlopen,可实现动态库加载监控、关键函数注入、反调试绕过等功能。常见技术包括LD_PRELOAD、Inline Hook及Frida等工具。应用场景包括分析加密算法、绕过保护机制和动态注入功能。但需注意兼容性、反检测措施及法律合规性。该技术为深入分析和修改应用行为提供了强大支持。(150字)
2025-10-06 11:24:19
1539
原创 安卓逆向为什么需要hook dlopen
摘要:在安卓逆向工程中,Hook dlopen 是关键操作,用于监控和修改动态库(.so文件)的加载过程。通过拦截dlopen,可实现动态库加载监控、关键函数注入、反调试绕过等功能。常见技术包括LD_PRELOAD、Inline Hook及Frida等工具。应用场景包括分析加密算法、绕过保护机制和动态注入功能。但需注意兼容性、反检测措施及法律合规性。该技术为深入分析和修改应用行为提供了强大支持。(150字)
2025-10-03 11:51:37
1615
原创 安卓反编译与保护机制分析
安卓应用安全防护与反编译技术分析摘要: 本文系统分析了Android应用反编译原理与安全保护机制。APK文件由classes.dex、resources.arsc等核心组件构成,可通过解压、dex2jar/JADX反编译工具链进行逆向分析。应对措施包括代码混淆(ProGuard/R8)、字符串加密、反调试检测(/proc/self/status检查)、完整性校验(签名验证/SHA-256校验)等多层防护。特别提出Native层反调试(ptrace)和运行时动态解密等高级技术方案,以及模拟器检测(Build.
2025-10-03 11:47:10
1393
原创 下载早期app版本的办法
如何安全下载APP旧版本?安卓用户推荐使用APKMirror、APKPure等可信第三方网站,注意核对签名和包名。iOS用户可通过"已购项目"下载兼容版本,或使用旧版iTunes获取IPA文件。技术用户可用ADB备份或GitHub开源项目。关键提示:优先选择官方渠道,安装前扫描文件,关闭自动更新以防覆盖。不同平台方法不同,但安全验证必不可少。
2025-10-01 10:41:39
18252
原创 爬虫与 Frida 搭配
摘要:Frida与爬虫结合可解决现代Web/App的反爬难题,如JS加密、接口签名、混淆代码等。Frida通过动态Hook关键函数获取运行时数据(如签名参数、加密token),帮助爬虫构造合法请求。典型场景包括:绕过JS加密、逆向App接口、对抗反调试检测、自动化登录维持会话、分析动态协议(如WebSocket)。该方案特别适用于传统爬虫无法直接获取数据的高防护场景,通过动态注入和函数拦截实现稳定数据采集。
2025-10-01 10:38:16
1538
原创 逆向教程 ARM汇编基础
本文简要介绍了ARM汇编中的函数调用约定,重点对比了ARM32和ARM64架构下的返回值寄存器使用规则。在ARM32中,整数通过R0返回,而ARM64使用X0。文章通过一个加法函数的汇编实现示例(使用w0/w1寄存器传参,w0返回值),演示了ARM64汇编的编写和调用方法,并提供了编译运行指南。最后通过对比表格总结了x86-64、ARM32和ARM64三种架构的调用约定差异,指出ARM调用约定规整的特点:前几个参数用寄存器传递,多余参数压栈,浮点参数使用专用寄存器。
2025-09-30 18:28:16
1472
原创 unidbg教程 模拟测试京东app中的so函数
本文展示了一个使用Unidbg框架模拟京东App的JNI实现类JDJni。该代码主要实现了多个关键JNI方法的hook,包括: 获取静态字段(getStaticObjectField)和对象字段(getObjectField) 调用静态方法(callStaticObjectMethod)和对象方法(callObjectMethodV) 创建新对象(newObject/newObjectV) 重点模拟了BitmapkitUtils、BitmapkitZip等京东特有类的方法调用,处理APK路径、RSA证书解析
2025-09-30 17:14:21
962
原创 unidbg教程 模拟测试起点app中的so函数
文章摘要: 本文介绍了使用Unidbg框架模拟执行Android native加密库libttEncrypt.so的过程。通过创建32位模拟器实例,加载目标so库并调用JNI_OnLoad函数,实现对加密方法的分析。文章详细展示了如何查找符号表、Hook关键函数(如ss_encrypt)、监控参数传递等逆向分析技术,并比较了HookZz、Dobby和xHook三种Hook工具的使用方法。该案例为分析Android native层加密算法提供了完整的技术实现路径,包括内存数据提取、函数调用跟踪和参数监控等关键
2025-09-27 10:58:05
1481
原创 unidbg教程 典型案例代读二
本文介绍了使用Unidbg框架模拟安居客App签名过程的代码实现。通过构建32位Android模拟器环境,加载目标so库libsignutil.so,并解析Java类SignUtil,实现了对native方法getSign0的调用。代码展示了如何初始化Unidbg环境、处理参数转换、调用JNI方法以及资源释放等关键步骤。测试用例演示了输入参数的处理和签名结果的获取过程,为逆向分析移动应用签名算法提供了参考实现。
2025-09-27 10:36:18
1020
原创 unidbg教程 使用案例代读
本文使用Unidbg框架模拟执行snh48 app的加密库libencryptlib.so,主要实现了以下功能: 构建64位Android模拟环境(API 23),加载目标so库并初始化 通过内存分配和指针操作,调用so中的两个关键函数: 0x1EAD0地址函数(疑似MD5初始化) 0x1FA38地址函数(传入输入字符串"12345678"并获取32字节输出结果) 使用Inspector工具输出加密结果 代码展示了如何通过Unidbg在非Android环境下动态分析native代码,适用
2025-09-24 10:07:28
539
原创 逆向教程 frida通用hook教程
本文介绍了一个使用Frida框架Hook Android ART运行时中NewStringUTF JNI函数的脚本,用于监控Java层通过JNI创建UTF-8字符串的行为。脚本通过定位libart.so中的NewStringUTF函数,过滤掉CheckJNi相关函数,在函数调用时打印字符串内容及调用栈信息。使用时需注意不同Android版本符号差异,并确保在Frida注入环境下运行。该方案适用于监控敏感数据、定位字符串来源等安全分析场景。
2025-09-23 08:32:35
1158
原创 逆向教程 万能的frida hook方法
摘要:该Frida脚本封装了两个易用函数,简化原生函数hook过程。print_arg函数智能判断地址类型,安全打印内存内容或数值。hook_native_addr函数提供一站式hook方案,自动记录函数调用前后的参数和返回值,支持指定参数数量,并附带模块信息。两个函数配合使用可实现快速调试,特别适合初学者或需要快速验证的场景,避免了手动处理内存访问和参数解析的复杂性。
2025-09-23 08:30:17
1075
原创 逆向教程frida 如何效率打印函数堆栈
trace_natives工具可快速打印函数调用堆栈,效果如图所示。该工具通过Frida实现,使用命令frida-trace -UF -O 文件路径即可运行,适用于Android应用逆向分析场景。项目开源地址为https://github.com/Pr0214/trace_natives,能有效提升native函数调用的追踪效率。
2025-09-22 08:03:23
1134
原创 逆向教程 frida如何hook 难以hook的函数
该文章主要探讨了如何hook在so加载时执行的构造函数(initArray)。通过分析发现,传统hook方法无法捕获这些在so加载阶段就执行的函数。文章提出解决方案:先hook dlopen函数,在so加载时中断程序执行;然后hook linker64的call_constructors函数,在构造函数执行前完成hook操作。文中提供了完整的Frida实现代码,包括hook_dlopen、hook_call_constructors和hook_initArray三个关键函数,展示了如何替换so中的多个初始化
2025-09-22 07:57:05
983
原创 逆向教程 如何处理hook不到的函数
摘要:文章介绍了如何hook so文件中在加载时执行(main之前)的构造函数(如initArrayTest3)。由于常规hook方法无法捕获这些函数,提出了通过hook dlopen和android_dlopen_ext中断加载过程,再hook linker64的call_constructors函数来拦截初始化流程的方案。文中给出了Frida实现代码,包括查找符号地址、替换初始化函数等关键步骤,解决了so加载时函数hook的难题。该方法适用于需要捕获早期初始化函数的逆向分析场景。
2025-09-20 09:19:13
927
原创 逆向教程 frida获取寄存器对应的值
摘要:本文介绍了使用Frida进行inline hook技术来获取函数执行过程中寄存器值的方法。通过定位so库基地址和偏移量,在函数执行前后打印ARM64架构下x8寄存器的整数值。代码示例展示了如何实现这一功能,包括获取模块基地址、计算hook点地址以及使用Interceptor.attach注册回调函数。该方法适用于Android逆向分析场景,可帮助开发者监控函数执行时的寄存器状态变化。
2025-09-18 17:25:25
1148
原创 逆向教程 frida实战教程一
摘要:当使用Frida分析so文件时,若目标函数未在导出表中(如login()显示为sub_1002),通常是由于动态注册导致。可通过Hook libart.so中的RegisterNatives函数来追踪调用堆栈,结合抓包数据定位目标函数。代码示例展示了如何获取RegisterNatives地址并打印类名、方法名、签名、函数指针及所在模块信息,帮助确定未导出函数的位置。该方法适用于动态注册函数的逆向分析场景。
2025-09-18 17:19:17
1068
原创 逆向教程 unidbg调用so中函数完成签名
unidbg可以直接调用app中的so函数,可以不使用模拟器和frida的组合.因此可以节约很多资源,并且部署到服务器中,下面是执行代码,分别对应源码中的add,md5,encode函数。
2025-09-16 10:48:50
1014
原创 逆向教程 frida打印堆栈信息
本文介绍了使用Frida打印函数调用堆栈的方法。通过Process.getModuleByName获取模块符号表,查找目标函数地址后,使用Interceptor.attach进行hook。重点演示了在onEnter回调中使用Thread.backtrace()打印堆栈信息,其中Backtracer.ACCURATE参数提供精确堆栈跟踪(依赖so调试信息),若无调试信息则需改用Backtracer.FAST。代码示例展示了如何hook NewStringUTF函数并输出调用堆栈及字符串参数。该方法适用于逆向分
2025-09-15 19:29:30
1178
原创 逆向教程 frida如何在目标平台写入数据
本文介绍了使用Frida工具向目标平台目录写入数据的方法。通过hook系统函数fopen、fputs和fclose实现文件操作,代码演示了如何获取函数地址、创建NativeFunction对象、分配内存空间存储路径和内容,最终完成文件写入操作。关键点包括:获取libc.so中的函数地址,处理文件路径权限问题(使用应用数据目录),以及正确调用三个文件操作函数。该方法适用于需要在目标进程中进行文件操作的逆向分析场景。
2025-09-15 19:19:08
966
原创 滑块安全设计分析与对抗手段(五)
在之前的POST流程分析中,我们注意到x坐标并没有被直接加密处理,但后续添加的一些值实际上起到了类似加密的效果。该加密算法具有一定的复杂性,并且文件中存在混淆代码,这使得直接理解其逻辑变得困难。因此,我们需要采用特殊的方法来解析这些混淆的部分。
2025-03-13 23:19:10
446
adb logcat如何过滤多个条件
2017-03-05
C++读2进制文件会丢掉00字节以后的部分
2017-01-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅