1.虚幻4(ue4)引擎加密pak解包教程(初学者向x64源码逆向)
2.吸血鬼旋律2解包思路浅析
3.[Node.js]AdvHD 金婚文本ws2解包到封装Bug
4.UnAutoIt (AutoIt3文件解包工具)v1.1.1
5.spine纹ç解å
失败
6.将微信小程序(.wxapkg)解包及将包内内容还原为"编译"前的解包解析内容的"反编译"器
虚幻4(ue4)引擎加密pak解包教程(初学者向x64源码逆向)
文章总结:看雪论坛作者devseed分享了使用虚幻4(ue4)引擎的x源码逆向进行pak解包的教程,针对非魔改版和未加壳引擎,源码源码以ue 4.为例,解包解析初学者也能理解。源码源码教程从观察源码、解包解析定位切入点、源码源码javascript arpg源码分析函数与找到密钥,解包解析到最后解包的源码源码步骤详细展开,旨在帮助读者理解加密pak文件的解包解析解密过程。
步骤1:通过关键字"decrypt"在源码中找到FAES::Key结构,源码源码确定了AES-加密。解包解析确保游戏版本与源码同步,源码源码避免源码修改导致不匹配。解包解析
步骤2:在FPakFile::LoadIndex函数中,源码源码致命错误的解包解析log成为解密关键,通过xdbg定位到"Corrupted index offset in pak file."相关代码。
步骤3:在反汇编中,通过函数参数和编译器优化的特性,尤其是Jump指令,追踪DecryptData函数,找到与加密密钥相关的数据结构。
步骤4:经过调试,确认FPakPlatformFile::GetPakEncryptionKey和FAES::DecryptData的调用,解密密钥即在rcx和r8寄存器中找到,通常为bit的随机数据。
步骤5:使用加密密钥解包pak文件,通过Base转换和UnrealPak.exe工具,配合crypto.json文件,nfc tools 源码实现pak文件的解密和文件转换。
最后,读者可参考相关链接深入学习,逆向分析技术在游戏安全和开发领域具有实际应用价值。
吸血鬼旋律2解包思路浅析
解包思路浅析,以“吸血鬼旋律2”为例
首先,明确解包目标:文件。
深入分析游戏目录结构,发现Unity及以上版本,采用il2cpp方式,存在UnityPlayer.dll与GameAssembly.dll。
直接尝试AssetStudio解包Unity资源包,但发现仅包含视频、语音及极少数透明,CG未被找到。
推断CG可能在其他地方,考虑到CG体积庞大,使用WizTree查找大文件,发现rsinfo.db数据库。
通过十六进制查看,确定数据库加密。面对il2cpp带来的挑战,尝试通过dnSpy反编译解密数据库。
考虑到il2cpp对游戏逻辑的限制,选择在数据库加载后,通过sqlite3_rekey空密码的方法实现解密。
回忆前作经验,msdn windowsapi源码决定在数据库已经加载后直接解密,无需深入了解加密细节或动态调试获取密码。
聚焦于数据库加载后,从Unity到il2cpp再到sqlite3.dll的调用链中寻找解决点。
考虑sqlite3.dll的动态链接特性,决定创建dll wrapper来处理数据库解密。
利用现成的项目模板,创建dll wrapper,通过asm跳转执行真实地址,实现数据库加载后清除密码。
考虑到sqlite3开源,选择直接编译修改后的版本,但考虑到构建过程的复杂性,转而考虑创建dll wrapper。
创建wrapper项目,加载真实dll并获取导出地址,用asm跳转执行,提供与原dll兼容的接口。
分析sqlite3文档,确定sqlite3_key和sqlite3_rekey方法的参数需求,还原参数类型,重写sqlite3_key方法。
确保数据库加载后才进行解密操作,修改wrapper项目,实现解密逻辑,确保导出表指向新写方法。
编译得到wrapper dll,ios 源码 bilibili替换原sqlite3.dll,启动游戏,等待数据库解密过程完成。
成功进入游戏后,使用DB Browser打开数据库,所有CG可直接查看。
导出至Json,使用js小工具转换为png,所有CG完整提取。
提供完整解包流程,强调实践价值,鼓励自行购买正版游戏并动手提取,实践过程是提升技术的有效途径。
[Node.js]AdvHD 金婚文本ws2解包到封装Bug
面对AdvHD这个复杂的领域,我的理解仅限于皮毛。这个挑战并不是我主动接受的,而我使用的ahdprc工具也遇到了问题,这使情况更加棘手。我决定利用自己在二进制逆向上的微薄知识,尽管这并不深厚。
在这个过程中,我借助了iconv-lite库,成功解决了一些编码难题,尤其是ANSI格式的问题。Node.js的内置Buffer类和文件写入方法与C++或C语言中的文件操作流有所不同,这让我认识到封装一个类似的工具将会很有价值,特别是dqn 源码下载使用Seek功能。
在逆向操作中,我发现循环位移是关键,其值为-2用于解包,2用于封包。位移后,我能看到原始的二进制脚本,包括对话文本和游戏指令。
文本提取阶段充满了挑战,由于缺乏相关文档,我需要反复试验。最终,我完成了基本的提取和封包功能,但还需手动调整选项跳转的偏移以实现更完善的功能。尽管代码不够完美,我仍然为自己的解决方案感到自豪。
JSON数据结构在组织和管理数据方面表现出色,相比于传统的TXT文件格式,它提供了更高效、更直观的访问和操作方式。对于文本转换,我将提取的文本与翻译合并,进行格式调整,以便最终输出到JSON文件中。
在文本转换过程中,由于ahdprc提取的不可靠性,我采用indexOf方法来进行全文匹配,以确保文本的正确性。此外,对于脚本中getMsgSkip函数后的偏移,我需要对翻译文本的长度进行修正,以避免逻辑错误。
封包阶段同样需要细心处理,确保每个步骤都无缝衔接。整个过程虽然冗长且繁琐,但通过不断尝试和调整,我最终完成了任务。
UnAutoIt (AutoIt3文件解包工具)v1.1.1
UnAutoIt是一款专业的视频抓包解包工具,提供跨平台的反编译操作环境,适用于主流编译设备,支持多种系统环境。单文件程序设计,无需额外安装,直接双击运行即可进行文件解包处理。最新版本已提供下载。
UnAutoIt的优势在于其跨平台兼容性以及对AutoItv3+的支持。特色功能包括脚本的自动缩进,确保代码可读性,以及在不执行目标二进制文件的情况下完成解包操作。此外,它还具备从UPX打包的二进制文件中提取资源的能力。
使用UnAutoIt进行文件解包操作简便高效。通过命令行界面,您可以进行以下操作:
1. 列出资源(以表格形式显示):输入命令`./unautoit list target-file.bin`,获取目标文件的所有资源列表。
2. 列出资源(以JSON格式显示):使用命令`./unautoit list target-file.bin --json`,以JSON格式输出资源信息。
3. 提取单个资源:使用命令`./unautoit extract --id N [--output-dir out] target-file.bin`,提取指定ID的资源。如果提供了输出目录参数`out`,则将提取的资源保存至该目录。默认保存位置为`$PWD/dump`。
4. 提取所有资源:运行命令`./unautoit extract-all [--output-dir out] target-file.bin`,一次性提取目标文件中的所有资源。同样,通过`out`参数自定义输出目录,否则将文件默认存至`$PWD/dump`。
安装UnAutoIt非常简单,根据您的需求选择对应版本运行即可。无需复杂配置,轻松实现文件解包任务。
spine纹ç解å 失败
失败åå å¯è½æ¿å°çä¸æ¯æºæ件ã
ææ¶åæ们ä»åç§æ¸ éæ¿å°çspineèµæºå¹¶ä¸æ¯.spineæºæ件ï¼æ¯å¦
spineboyå¨ç»æ°æ®æ件
èæ们éè¦å¯¹è¯¥å¨ç»æ°æ®è¿è¡å å·¥å¤çï¼å¯¼å ¥æ.spineå¨ç»æ件ãæ¬æç¨å°±æ¯æä½ å¦ä½å°å¨ç»æ°æ®æ件ååå¯¼å ¥spineå¶ä½å¨ç»æ件
æä½æ¥éª¤å¦ä¸ï¼
1.使ç¨spineèªå¸¦ç纹ç解å å¨(textureunpacker)
æ¤å¤ä»¥å®æ¹çspineboy-proä½ä¸ºæ¡ä¾ï¼ä½¿ç¨jsonæ件解å¼åæå¾é
å³å¯å¨æ件夹imageä¸ï¼å¾å°spineboyæ£å¾
注ï¼å¨ä½çæ¬spine没æ纹ç解å å¨ï¼éè¦å°spineæ´æ°è³è¾é«çæ¬
2.使ç¨å¯¼å ¥æ°æ®åè½å¯¼å ¥å¨ç»æ°æ®
æ¤æ¶æ们常常ä¼å¾å°ç±»ä¼¼å¾ç丢失çå¨ç»æ°æ®ï¼å æ¤æ们éè¦å¯¹å¾çå¼ç¨æ件夹è¿è¡éæ°å®ä½
3.éå®ä½å¼ç¨å¾é
è¥åºç°å¾åå¼ç¨é误çæ åµï¼å¯ä»¥å ç¨é¼ æ æ¬åè³è¯¥å¾åä¸ï¼è§å¯é»åå çæåï¼å ¶ä¸ä¼æ¾ç¤ºå¼ç¨å¾ççè·¯å¾ä¸å¾çå称ã
(ä¾åï¼å¦æå¨å¼ç¨æ件夹ä¸çâskin1âæ件夹å çâå¾ç1âï¼æ¤å¤å°±ä¼æ¾ç¤ºâskin1/å¾ç1â)
å¨è£ é 模å¼ä¸ï¼ç¹å»âå¾çâï¼å¨åºé¨å¯è¿è¡éå®ä½æä½
éå®ä½å®æåå³å¯æ£ç¡®æ¾ç¤ºspineå¨ç»ä¿¡æ¯ï¼è®°å¾ä¿åã
将微信小程序(.wxapkg)解包及将包内内容还原为"编译"前的内容的"反编译"器
在探索微信小程序应用过程中,我注意到微信小程序应用的解包文件不能直接在微信开发者工具中运行,这激发了我对小程序源代码与wxapkg包内文件转换关系的研究。包的结构由文件名、文件内容起始地址及长度信息组成,文件明文存储于包中。通过特定脚本,我们能够轻松获取包内文件。包内容主要包括:app-config.json、app-service.js、page-frame.html、其他html文件、等资源文件。
微信开发者工具要求提供以wxml、wxss、js、wxs、json形式的源代码进行模拟和调试。包内文件需通过特定转换,例如,js文件由define函数恢复,wxss文件通过setCssToHead函数处理引用和转换,json文件直接还原page对象内容,wxs文件转为np_%d函数,wxml文件编译为js代码。
在处理wxml文件时,微信将xml格式的文件编译为js代码,通过一系列js指令进行解析和渲染。解析过程中,将动态计算的变量放入数组z中,结构较为复杂。通过识别指令与操作数的组合,分析出数组元素实际内容,包括wx:if和wx:for的递归处理,以及import和include的特殊处理。z数组优化后,仅加载所需部分以提高小程序运行速度。
解析后的内容可能较为臃肿,考虑自动简化以提升可读性和性能。通过解析js和理解wxml结构,我们实现了几乎所有wxapkg包内容的还原,为开发者提供了深入理解和修改小程序源代码的基础。
为了进一步优化解包过程,我们更新了wcc-v0.5vv__syb_zp,通过加载z数组中特定部分提高小程序运行速度,同时,对开发版和含分包的子包进行了特殊处理。此更新主要修改了z数组的获取和处理方式,以适应不同的小程序包结构。
综上所述,通过深入研究和实践,我们实现了微信小程序包内容的解析与还原,为开发者提供了更灵活的修改和测试途径,进一步推动了微信小程序生态的发展。
isEqual、for安全遍历、json解包(小bug记)
isEqual 踹坑
在使用 isEqual 判断对象内容时,曾遇到误解。原本设计用于判断 BNObject 中三个 string 是否改变的 isEqual 方法,存在问题。方法仅通过[A isEqualToString:B]进行判定,即使A和B都是nil,结果依然为NO。修正方法为使用 yy_modelIsEqual,简化判定过程。
for 安全遍历踩坑
在遍历数组并安全删除元素时,发现安全问题。最初使用 for 循环的删除逻辑在删除一个元素时正常,但在使用 enumerateObjectsUsingBlock 遍历删除多个元素时,出现 index 跳位,导致 crash。最稳妥的做法是将需要删除的元素筛选并存储在临时数组中,再统一删除原始数组中的元素。
json 解包问题
曾遇到 json 解包问题,实际是因接口传入的 json 格式错误,预期为 NSString,实际为 Dictionary。通过 NSJSONSerialization 解析并未出现递归问题,结论错误。最终确认问题源于接口数据类型不符。解 json 串时,推荐使用 yy_model,方法更清晰。