Project1

标题: VA新纸老虎寻求测试(2022) [打印本页]

作者: fux2    时间: 2022-4-23 14:33
标题: VA新纸老虎寻求测试(2022)
CrackMeV2.zip (4.6 MB, 下载次数: 141)

测试工程如上,已脱离RTP
测试目标:通过任何手段获得工程中包含的所有游戏图片资源

其实是一个很古早的玩意儿了,但是现在才想起来拿出来改造用用,如果有效会同时发布原生RM和RGD的纸老虎一键打包版本
作者: 喵呜喵5    时间: 2022-4-23 18:24
黄鸡牛逼
作者: 流浪杰哥    时间: 2022-4-23 21:34
终于圆了我多年前的梦想,终于黄鸡老哥要折腾新的纸老虎啦,其实有木有效不重要,简单地防止傻瓜解包就够了,网上有的rgss解包工具针对的是默认的包,没有刻意针对纸老虎,只要没人刻意针对纸老虎去做一键解包工具,其实这样也就够用了,不论怎么加密怎么保护,但毕竟游戏打开后终究还是要运行的
作者: xmbwg    时间: 2022-4-23 21:40


逻辑很清晰 甚至太清晰了 作为打包挺好的 但是加密强度比较弱
很久没逆向了 久违的参与一下
本来只是提取资源并不需要完全理清解码流程  因为可以在内存里取 但还是认真看完了 写了解码脚本
要不是RM已经卸载很久了 而且也比较忙 甚至想反打包一个data.fux2 用exe的解码函数去提取

近段时间科研日常深度学习 都不会写ruby和c了 用python应付一下啦

PYTHON 代码复制
  1. from pathlib import Path
  2. with open("Graphics.fux2", "rb") as f:
  3.     data = f.read()
  4. pointer = 8
  5. while any((b != 0 for b in data[pointer+0x10:pointer+0x14])):
  6.     key = data[pointer:pointer+2]
  7.     length = int.from_bytes(data[pointer+4:pointer+8], "little") * 2
  8.     start = int.from_bytes(data[pointer+8:pointer+0xC], "little")
  9.     filename = list(data[start:start+length])
  10.     for i in range(length):
  11.         filename[i] ^= key[i%2]
  12.     filename = str(bytes(filename), "utf-16").replace('\\', '/')
  13.     filename = Path(filename)
  14.     key = 0
  15.     fn = filename.stem
  16.     fn = list(fn.encode("utf-16"))
  17.     # 0xFF 0xFE
  18.     for i in range(2, len(fn), 2):
  19.         key = key * 0x83 + fn[i] + fn[i+1]*0x100
  20.         key &= 0xFFFFFFFF
  21.     length = int.from_bytes(data[pointer+0xC:pointer+0x10], "little")
  22.     start = int.from_bytes(data[pointer+0x10:pointer+0x14], "little")
  23.     img = list((int.from_bytes(data[start+k*4:start+k*4+4], "little") for k in range(length//4)))
  24.     imglist = []
  25.     for i, j in enumerate(img):
  26.         imglist.extend(list(int.to_bytes(j^key, 4, "little")))
  27.         key = key * 7 + 13
  28.         key &= 0xFFFFFFFF
  29.     img = bytes(imglist) + data[start+length//4*4:start+length]
  30.     filename.parent.mkdir(parents=True, exist_ok=True)
  31.     with open(filename, "wb") as f:
  32.         f.write(img)
  33.     pointer += 0x14

作者: orochi2k    时间: 2022-4-23 21:54
有突破RMVA那悲剧的3GB加密文件大小限制么?
作者: fux2    时间: 2022-4-24 11:18
xmbwg 发表于 2022-4-23 21:40
逻辑很清晰 甚至太清晰了 作为打包挺好的 但是加密强度比较弱
很久没逆向了 久违的参与一下
本来只是提取 ...


层主效率太高啦
这份exe本身没有做过特别的处理,目前看来确实有些简单过头了
不过在何强度目前心里已有数,感谢层主的协助!

(PS:其实之所以要求输出所有图片资源,是因为有一张图在游戏里没有用到,内存提取不方便
不过层主已经给出了完美答案)
作者: 小怪兽奇奇侠    时间: 2022-4-24 11:50
哇,你们都好厉害,令我大开眼界
作者: xmbwg    时间: 2022-4-24 12:09
本帖最后由 xmbwg 于 2022-4-24 12:10 编辑
fux2 发表于 2022-4-24 11:18
层主效率太高啦
这份exe本身没有做过特别的处理,目前看来确实有些简单过头了
不过在何强度目前心里已有 ...


恩 因为包头解码后 文件的名字 索引 长度 密钥 都是明文了
也就不需要再去看那部分流程
一个小想法
可以用两个不同的hash函数 输入是文件名
一个生成标识符 存储在包头用于索引
一个生成密钥
也就是 包头没有文件名这部分信息
读取时先由hash1定位文件 再由hash2解码文件
这样就不存在通用解包器了
或者说和游戏的耦合度大大增加了
作者: guoxiaomi    时间: 2022-4-24 13:27
本帖最后由 guoxiaomi 于 2022-4-24 13:50 编辑

我已经弃疗了,决定就用加密的zip格式,然后在Game.exe里某处藏一个密码算了……
(总觉得以前说过类似的话,不过这次是认真的了)
作者: BCJenbo    时间: 2023-9-3 02:55
你会释放这个吗?
作者: fux2    时间: 2023-9-3 03:16
BCJenbo 发表于 2023-9-3 02:55
你会释放这个吗?

目前看来,他的效果并不理想,所以暂时不考虑发布了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1