1.JS逆向快速定位关键点之9大通用hook脚本
2.Hikari源码分析 - AntiDebug
3.DASCTF 2023六月挑战赛 二进制专项 RE writeup
4.jnihookåç
5.技术解读 | SO文件的反调安全,就交给这6大核心技术吧!试源
6.windows加壳程序WinLicense与The码反mida
JS逆向快速定位关键点之9大通用hook脚本
在JavaScript逆向工程中,快速定位关键点是调试至关重要的。这里有九种通用的原理hook脚本策略,帮助我们深入分析代码行为: 首先,反调购物系统的源码Cookie Hook帮助我们定位Cookie中与关键字"v"相关的试源参数生成位置,一旦匹配,码反就会自动设置断点。调试 对于HTTP头部参数,原理header参数Hook可以用于跟踪请求中特定字段的反调变化。 通过简单地在代码中插入debugger,试源Hook过debugger方法为我们提供了一个直观的码反检查点,便于调试。调试 URL Hook专注于URL中的原理关键参数,当遇到包含"login"的请求时,会自动设立断点,便于追踪网络请求。 在处理加密的站点时,hook JSON.stringify和 JSON.parse可以让我们洞察数据在字符串和对象间的转换过程。 JavaScript的eval 功能,通过提前设置的hook,hook eval可以记录下所有动态执行的JS代码,便于分析。 同样,hook Function会捕获所有函数的执行,让我们看到将要运行的JS源码。最后,别忘了防范反调试,确保在执行过程中不会被检测到,这是逆向工程中必不可少的通用反调试技巧。
这些脚本工具为深入JavaScript代码提供了强大的支持,帮助我们轻松定位关键逻辑点。
Hikari源码分析 - AntiDebug
一、框架分析 针对PASS的具体实现进行深入分析。该PASS旨在提升编译后程序的抵抗调试能力,其核心逻辑包括两个主要方面: 链接预编译的反调试IR代码 特定于平台的内联汇编注入 针对Darwin操作系统上的AArch架构,若未找到ADBCallBack和InitADB函数,担保系统源码PASS会尝试直接注入内联汇编代码。该代码片段可能利用系统调用,如ptrace,来检测是否处于调试环境。 此外,配置允许用户指定预编译反调试IR文件的路径和函数混淆概率。 具体实现包括: 检查预编译IR路径,构建默认路径并链接预编译的IR文件。 修改ADBCallBack和InitADB函数属性,确保它们在编译和链接阶段表现出反调试行为。 初始化标志和目标三元组信息,准备为每个模块提供初始化和链接预编译IR的过程。 模块处理和函数处理涉及应用概率值来决定是否对模块和函数应用反调试混淆。 预编译的反调试IR文件包含了一系列用于反调试的函数和结构,如检测调试器的代码、修改执行路径以规避调试跟踪、以及插桩代码以检测异常行为。 通过LLVM工具链中的llvm-dis工具,可以将.bc文件转换为可读的LLVM IR文件。该文件结构包含多个结构体定义、全局声明、函数实现和属性。 函数ADBCallBack简单地终止程序并执行无法到达的指令。函数InitADB执行系统调用和检查来检测调试状态,可能涉及进程信息查询、动态库加载、系统调用、内存分配、异常端口检查等操作。 系统调用声明确保了程序能调用各种底层函数进行操作,如sysctl、dlopen、dlsym、task_get_exception_ports、isatty、ioctl等。 总结,卡巴斯基源码通过在编译器优化阶段插入反调试逻辑,相较于源代码实现,基于LLVM Pass的AntiDebug方法提供了更好的隐蔽性、可移植性、灵活性、维护性和混淆程度。然而,这种方法需要对LLVM框架有深入理解,可能增加构建和调试复杂度。DASCTF 六月挑战赛 二进制专项 RE writeup
在DASCTF 六月挑战赛的二进制专项中,针对目标网站Just_An_APIHk.com,首先在动态调试环境下设置断点,以捕获关键操作。检查后发现,壳程序具有反调试特性,其中包含了一个sleep指令以干扰分析。通过调整汇编指令,移除sleep,避免了反调试机制的触发。进一步分析得知,该程序在读取名为cod的资源后,对其进行了加密处理。为绕过检测,需在特定条件(即检测到调试器时)修改ZF标志位,从而改变算法行为。
使用IDA Pro打开并分析加密资源,发现存在混淆的RC4算法。通过Nop指令的插入,定位并修改关键代码段,生成伪代码进行后续分析。确认算法为魔改的RC4后,编写并验证了解密脚本。借助Python工具对壳程序进行逆向分析,使用pyinstxtractor脱壳后,通过在线工具查看了ez_py.pyc的源代码,最终发现原始字节码被加密。使用反汇编工具对加密的答题网站源码二进制文件进行反编译尝试,发现程序采用了复杂的加密机制,导致直接反编译失败。通过分析字节码,逐步理解加密逻辑,并编写了解密脚本。在反编译过程中,进一步细化了解密流程,最终获取了正常代码结构。
针对解密后的二进制文件,进一步分析发现其中包含了一个名为btea的函数,该函数实现了一种称为xxtea的加密算法。编写相应扩展指令以绕过该加密逻辑,完成解密过程。通过动态调试,观察到数组下标在特定范围内循环,利用BMP文件的属性(前两个字节为 4D),结合加密算法特性(对文件内容进行异或操作),构建了一个脚本,从密钥的第二位开始循环异或,最终得到了隐藏的flag信息。
针对另一部分问题,经过分析得知,目标程序为Go语言编写。通过特定的脚本恢复了Go语言符号,并进行了相应的调试操作。确认密钥验证机制后,使用yafu工具解密了RSA密钥,进而解出了密钥信息。继续分析后发现,iv和key在加密过程中保持一致,因此可以直接编写扩展指令来解密加密文件,运行解密后的执行文件,成功获取了最终的flag信息。
jnihookåç
jnihookæ¯ä¸ç§éè¿ä¿®æ¹Java Native Interface (JNI)æ¥å®ç°å¯¹Androidåºç¨ç¨åºçå¨æä¿®æ¹åæ§å¶çææ¯ãJNIæ¯Javaåæ¬å°ä»£ç ï¼é常æ¯C/C++ï¼ä¹é´çæ¡¥æ¢ï¼å®å 许å¨Java代ç ä¸è°ç¨æ¬å°ä»£ç ï¼å¹¶å®ç°Javaä¸åºå±æä½ç³»ç»æ硬件ç交äºã
jnihookçåçæ¯éè¿ä¿®æ¹JNIå½æ°è¡¨ï¼å称为å½æ°æé表ï¼ä¸çå½æ°æéæ¥å®ç°å¯¹ç®æ å½æ°çæ¿æ¢ãå½æ°è¡¨æ¯ä¸ä¸ªåå¨JNIå½æ°æéçæ°æ®ç»æï¼å®å°Javaæ¹æ³ååºå±å®ç°çæ¬å°æ¹æ³å¯¹åºèµ·æ¥ãéè¿ä¿®æ¹å½æ°è¡¨ä¸çå½æ°æéï¼å¯ä»¥å°ç®æ å½æ°çè°ç¨éå®åå°èªå®ä¹çå½æ°æè Hookå½æ°ï¼ä»èå®ç°å¯¹ç®æ å½æ°çä¿®æ¹ææ§å¶ã
jnihookçåå æ¯ä¸ºäºå®ç°ä¸äºç¹å®çç®çï¼æ¯å¦å®ç°åºç¨ç¨åºçéåå·¥ç¨ãç ´è§£ãè°è¯ãHookæ¡æ¶çãå®å¯ä»¥ç¨æ¥ä¿®æ¹åºç¨ç¨åºçè¡ä¸ºï¼çªç ´åæçéå¶ï¼å®ç°èªå®ä¹çåè½æè ç»è¿æäºå®å ¨æ£æµãåæ¶ï¼jnihookä¹ä¸ºå¼å人åæä¾äºä¸ç§è°è¯ååæåºç¨ç¨åºçæ段ï¼å¸®å©ä»ä»¬ç解åºç¨ç¨åºçå·¥ä½åçåå é¨æºå¶ã
ç¶èï¼éè¦æ³¨æçæ¯ï¼jnihookææ¯å¨ä¸äºæ åµä¸å¯è½ä¼è¢«æ»¥ç¨ï¼æ¯å¦ç¨äºéæ³éåå·¥ç¨ãç ´è§£çççæ´»å¨ï¼ä»èä¾µç¯äºè½¯ä»¶çç¥è¯äº§æååæ³æçãå æ¤ï¼å¨ä½¿ç¨jnihookææ¯æ¶ï¼éè¦éµå®æ³å¾æ³è§ï¼å¹¶å°é软件å¼åè çæçãåæ¶ï¼å¼åè ä¹åºè¯¥å¢å¼ºåºç¨ç¨åºçå®å ¨æ§ï¼é²æ¢è¢«æ¶æçjnihookæ»å»ã
技术解读 | SO文件的安全,就交给这6大核心技术吧!
在移动信息安全领域,SO文件因其较高的商城导航源码安全性而被广泛应用。然而,这也意味着,一旦被黑客获取,其潜在的威胁性也相对更大。为了解决这一问题,爱加密在SO加固方面投入了大量研究,并开发了一系列核心技术。
首先,爱加密的so VMP技术通过虚拟化保护,实现对SO文件源码的深度隐藏、防篡改和防dump,极大增加了逆向分析的难度。其次,so Linker技术通过加密压缩SO文件代码段、导出表和字符串等关键信息,在函数运行时动态解密,有效防止静态分析,同时通过内存DUMP源码,增加了代码的保护力度。此外,爱加密还提供了多重保护方案,将多种加固技术联合使用,以提高SO文件的安全性。
在Android SO加固方面,爱加密提供了包括so加壳、源码混淆、源码虚拟化保护、防调用、so Linker和so融合在内的六大核心技术。其中,so加壳通过自定义加密算法改变so文件编码,使其难以通过ida反编译工具查看导出符号,从而保护其核心代码。同时,源码混淆技术通过解析代码中字符串的位置,并采用加密和动态解密的方式,增加反编译难度,使破解者难以快速定位核心代码。基本块调度和分裂技术则通过将C/C++代码中的基本块进行分发和随机分裂,使控制流更加复杂,进一步增加了破解难度。而so源码虚拟化保护技术通过虚拟化SO文件中的源码,实现数据隐藏、防篡改和防dump,增加了逆向分析的难度。此外,so防调用技术可以支持绑定授权APP的包名或签名文件信息,通过动态校验确保应用的合法性。so Linker技术则通过加密压缩整个SO文件,并在运行时动态解密解压缩,有效防止数据泄露。最后,so融合技术对SO文件进行整体加密压缩,加大了代码反汇编调试的难度。
爱加密提供的so加固技术拥有五大优势:整体加密压缩保护,使用了函数运行时动态加解密技术,隐藏SO的基地址,使用高强度反调试技术,以及代码由VMP技术保护。这些技术的结合,使SO文件在被DUMP或调试时,其核心代码的安全性得到了极大提升。通过这些先进的技术手段,爱加密移动应用安全加固平台为开发者提供了全面的移动应用安全加固方案,确保了加固后的应用具备防逆向分析、防二次打包、防动态调试、防进程注入、防数据篡改等多重安全保护能力。
windows加壳程序WinLicense与Themida
在启动游戏时,若弹出警告框,通常表明程序已被加壳,以实现反外挂与反调试功能。
WinLicense与Themida均作为商业软件,提供lib与源代码,旨在无缝集成于游戏之中。
Themida通过加密、虚拟化、防调试等策略,强化程序安全与可控性。其核心原理在于对程序中的函数及代码进行加密与混淆,增加逆向工程与破解难度。同时,通过虚拟机技术,动态解密与执行程序代码,进一步提升安全与可控性。
Themida还增设防调试、防篡改、防注入机制,有效抵御程序被破解、篡改或恶意利用的风险。
举例来说,通过混淆代码结构,如将1+=变换为复杂的运算表达式,以干扰调试过程。
加壳虽能增强安全性,但亦存在负面影响,如影响游戏性能,导致帧率降低与效率下降。
集成过程需将sdk的lib文件导入项目,标记关键函数以进行保护。
具体操作示例涉及在游戏关键执行入口处添加保护标签,以确保安全执行。
制作游戏辅助需要学什么
以手游辅助为例,需要学习手游辅助基础、Java层逆向、Native层逆向、APK保护策略、 反调试与反-反调试、HOOK框架、按键+内存、篡改内存数据+注入技术+HOOK技术、 Unity 3D游戏、 游戏协议等。
一. 手游辅助基础(建议1周)
1. 想学习手游辅助第一步必须先把环境搭建好,这是你学习手游辅助的开始,环境搭建好后表示正式迈入手游辅助。在环境安装的工程中会遇到很多的坑,针对这些坑老师专门录制工具使用教程,同学们只需要跟着老师教程操作就可以了。
2. 第二步就是要了解我们要分析的是什么文件,很多0基础的同学都不知道手游辅助分析的什么文件。我们要分析的是应用程序或者安装包(就是.apk文件),了解apk是怎么生成的以及如何安装到我们的手机里面,apk是怎么运行的,也是我们探讨的内容。
3. 第三步如何逆向分析.apk文件,掌握apk反编译及回编译,完成这个操作使用的工具是apktool。
二. Java层逆向(建议3周)
1. 掌握Java语法基础,达到能看懂Java代码。
2. 了解smali语法,能看懂smali代码。
3. 掌握逆向分析apk中常用的方法和技巧。
三. Native层逆向(建议4周)
1. 了解安卓操作系统和四大组件。
2. 了解NDK开发流程,自己编写案例练习。
3. 掌握常用ARM汇编指令,达到能看懂ARM汇编指令。
4. 掌握ida工具的使用,熟练使用ida进行各种操作
四. APK保护策略(建议1周)
1. 了解Java代码混淆、资源混淆
2. 掌握签名验证、文件校验、模拟器检测
3. 本地验证、网络验证
4. 案例练习
五. 反调试与反-反调试(建议1周)
1. 掌握常用反调试方法及过反调试技巧,比如关键文件检测、调试端口检测、进程名称检测、防附加、轮训检测TracerPid值、时间检测、信号检测等反调试。
2. 掌握IDA过反调试思路
3. 案例练习。
六. HOOK框架(建议2周)
1. 掌握HOOK插件开发。
2. 掌握Xposed、Substrate、Fridad等框架。
3. 案例练习。
七. 按键+内存(建议2周)
1. 环境搭建,搜索内存数据,对内存数据进行读写操作。
2. 市面上的模拟器辅助,有一部分就是通过搜索内存数据来找特征码,因为游戏中有的数据是不会发生变化的,我们选择这部分不变的数据作为特征码。通过特征码来搜索内存数据,找到特征码的地址,再通过特征码的地址+距离(偏移)来实现定位。
3. 案例练习。
八. 篡改内存数据+注入技术+HOOK技术(建议4周)
1. 掌握模块基地址获取、非注入式篡改数据、注入式篡改内存数据。
2. 掌握注入技术原理(Ptrace注入、Zygote注入、静态感染ELF文件注入)。
3. 掌握HOOK技术的实质,就是对函数进行重写(Inline HOOK、异常HOOK、导入表HOOK)。
4. 掌握C++游戏逆向分析技巧。
5. 案例练习。
九. Lua游戏(建议4周)
1. 掌握Lua游戏逆向分析流程,第一步查看lib文件夹的so文件就可以确定该游戏是不是Lua游戏,第二步如果是Lua游戏就在assets文件夹下查找lua脚本。
2. Lua游戏功能实现都在Lua脚本,重点分析Lua脚本(Lua明文、LuaC、Luajit)。
3. Lua文件加密与加密,内存dump Lua脚本,HOOK插件开发。
4. Cocos2dx-Lua引擎源码分析
5. 案例练习
十. Unity 3D游戏(建议4周)
1. 掌握Unity 3D游戏逆向分析流程,第一步查看lib文件下的so文件就可以确定该游戏是不是Unity 3D游戏,第二步如果是Unity 3D游戏就在assets文件下查找相应的文件。
2. Unity 3D有两种框架(MONO框架、IL2CPP框架),MONO框架对应的游戏逻辑实现在dll文件,IL2CPP框架对应的游戏逻辑实现在libil2cpp.so文件。
3. Unity 3D引擎源码分析。
4. DLL文件处理,DLL混淆,DLL隐藏,DLL加密。
5. 内存dump dll文件,HOOK插件开发,注入+HOOK。
6. 案例练习
十一. 游戏协议(建议2周)
1. WPE环境搭建,拦截发送包和接收包,多截包对比分析封包数据。
2. 分析喊话功能,找出加密规律,各种游戏功能封包拦截分析。
3. 案例练习。