※※※※※※《云之遥》脚本压缩格式分析※※※※※※
11 00 00
以《云之遥》繁体版V2.3.0脚本文件0000.C01为例,选择0x80h至0x218BF7,存入一个新文件,然后利用MiniLZO尝试进行解压,结果返回值为LZO_E_OK即成功解压,再用HEX工具打开解压后的文件,发现很多东西已经明码显示,这证明《云之遥》的脚本就是采用了LZO压缩
接下来是索引信息问题,首先通过直接观察可以发现(仍以0000.C01为例),0x8h处的一个long类型数值恰好是解压后的脚本文件大小,0xCh处的一个long类型数值恰好是解压前的脚本文件大小(不带索引信息),打开其他脚本文件,发现情况完全相同,所以这里可以确定这两个数值分别为解压后的大小和解压前的大小
前面还有2个数值,那又是做什么用的呢?所有文件都是一样的,只能调试分析了。
OD载入云之遥主程序,分别下断点CreateFileW和ReadFile,并对读入的数据设置硬件访问断点,可以很快定位到这段代码,整理后:
0060EE9A 53 push ebx
0060EE9B 55 push ebp
0060EE9C 56 push esi
0060EE9D 57 push edi
0060EE9E 68 44997B00 push 007B9944 ; ASCII “rb”
0060EEA3 50 push eax
0060EEA4 E8 1B251200 call 007313C4
0060EEA9 8BD8 mov ebx, eax
0060EEAB 83C4 08 add esp, 8
0060EEAE 85DB test ebx, ebx
0060EEB0 0F84 88010000 je 0060F03E ; if fp=fopen(“E:SwdCFTextOn_LineMainA�000.C01″, “rb”) != NULL
0060EEB6 BE 80000000 mov esi, 80
0060EEBB B9 1E000000 mov ecx, 1E
0060EEC0 33C0 xor eax, eax
0060EEC2 8D7C24 20 lea edi, dword ptr [esp+20]
0060EEC6 C74424 18 00000>mov dword ptr [esp+18], 0
0060EECE 897424 1C mov dword ptr [esp+1C], esi
0060EED2 F3:AB rep stos dword ptr es:[edi]
0060EED4 53 push ebx
0060EED5 6A 01 push 1
0060EED7 8D4C24 20 lea ecx, dword ptr [esp+20]
0060EEDB 56 push esi
0060EEDC 51 push ecx
0060EEDD E8 DA231200 call 007312BC ; fseek(fp, esi, 1)
0060EEE2 83C4 10 add esp, 10
0060EEE5 83F8 01 cmp eax, 1
0060EEE8 74 16 je short 0060EF00
0060EEEA 53 push ebx
0060EEEB E8 F21B1200 call 00730AE2
0060EEF0 83C4 04 add esp, 4
0060EEF3 32C0 xor al, al
0060EEF5 5F pop edi
0060EEF6 5E pop esi
0060EEF7 5D pop ebp
0060EEF8 5B pop ebx
0060EEF9 81C4 8C010000 add esp, 18C
0060EEFF C3 retn
0060EF00 397424 1C cmp dword ptr [esp+1C], esi ; if [esp+1C] != 0x80
0060EF04 74 16 je short 0060EF1C
0060EF06 53 push ebx
0060EF07 E8 D61B1200 call 00730AE2 ; fclose(fp)
0060EF0C 83C4 04 add esp, 4
0060EF0F 32C0 xor al, al
0060EF11 5F pop edi
0060EF12 5E pop esi
0060EF13 5D pop ebp
0060EF14 5B pop ebx
0060EF15 81C4 8C010000 add esp, 18C
0060EF1B C3 retn
0060EF1C 8B4424 18 mov eax, dword ptr [esp+18]
0060EF20 85C0 test eax, eax
0060EF22 74 16 je short 0060EF3A ; if [esp+18] != 0
0060EF24 53 push ebx
0060EF25 E8 B81B1200 call 00730AE2 ; fclose(fp)
很明显,如果开始两个long类型数值如果不分别是0x0和0x80,程序就会fclose然后退出读取,所以开头两个long类型数值必定为0x0和0x80
再根据fseek处,参数lOffset的esi为常量0x80(0x60EEB6处mov esi,80),故在索引和数据中间应该还要有0x70个空字节
因此,脚本文件结构就非常明显了,如下:
脚本文件索引头信息为四个long型数值,分别为0x0(常量),0x80(常量),lDecompressedSize(解压后大小),lCompressedSize(解压前大小),紧接着是0x70个空字节,后面就是压缩的脚本文件数据了
至于进一步的脚本反编译,这里不作探讨
能不能抽空做个新手视频什么的?
可以考虑考虑,这个难的地方不在工具怎么用,而在于脚本编写
求云之遥石皮解补丁 蛋疼的全程在线
……..
学弟给力啊!
这个也是基于LUA吧
当然是的
这个软件打不开,不知道是不是跟360有关
那个编译工具是控制台程序,要到cmd里面去运行
可以放出离线版本体和各种篇的全部的脚本吗,或者放出脚本解压解密工具也可以啊,很想收藏
离线版的脚本估计不会再单独做了,脚本逆向太麻烦了
大神,请问能不能做一个明星志愿3的脚本MOD制作工具,我看游戏文件夹中的脚本文件和云之遥脚本文件名字是一样的,可以有偿,求帮助
大神讲解一下脚本怎么逆向可以吗,想改明星志愿3QAQ
先lzo解压,解压后用luadec反编译,再配合人工修复,就逆出来了