设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3208|回复: 15
打印 上一主题 下一主题

[有事请教] VA新纸老虎寻求测试(2022)

[复制链接]

Lv2.观梦者

梦石
0
星屑
272
在线时间
15 小时
注册时间
2021-9-4
帖子
5
1
发表于 2022-4-23 21:40:14 | 显示全部楼层


逻辑很清晰 甚至太清晰了 作为打包挺好的 但是加密强度比较弱
很久没逆向了 久违的参与一下
本来只是提取资源并不需要完全理清解码流程  因为可以在内存里取 但还是认真看完了 写了解码脚本
要不是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

点评

真乃非常之人也  发表于 2022-4-24 11:51

评分

参与人数 1+1 收起 理由
fux2 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
272
在线时间
15 小时
注册时间
2021-9-4
帖子
5
2
发表于 2022-4-24 12:09:09 | 显示全部楼层
本帖最后由 xmbwg 于 2022-4-24 12:10 编辑
fux2 发表于 2022-4-24 11:18
层主效率太高啦
这份exe本身没有做过特别的处理,目前看来确实有些简单过头了
不过在何强度目前心里已有 ...


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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 09:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表