当年汉化过的一款游戏的分析记录,由于项目关系,这个游戏没有上市,当然,我也没拿到钱,所以共享出来,应该不算违法吧
源码,也有,以后有机会或者谁敢兴趣,我再贴吧
当然,如果有人认为以下内容侵犯了他的利益,请和我联系,如果确实是我不对,我会及时更正的!:)
owar.exe
游戏菜单
owar.exe run
直接运行游戏
*********************************************************************
.owp 文件格式分析
-20
DWORD file index compress size
DWORD file index real size
DWORD
DWORD
DWORD
file index 格式
DWORD 0d 0a 02 00
DWORD XX XX XX XX
DWORD compress data length
DWORD real data length
DWORD filepointer
BYTE[5] XX XX XX XX XX
*********************************************************************
*********************************************************************
owar.exe文件分析
0x4064f4 jmp CreateWindowEx
push ebp;
mov ebp,esp;
[ebp+0x10] lpName
*********************************************************************
实际上,游戏主程序就是owarlite.dll
**********************************************************************
owarlite.exe文件分析
0x424804读文件并解文件头
0x424b40从owp文件内解出单个文件
----------------------------------------
0x41a764解码函数
具体代码分析
0x41a88b eax->解开后的指针
[ecx]->eax
[ebp-38]->length
----------------------------------------
0x41c664 解码函数,由0x41a764直接调用
0x402898 free
0x4028b0 realloc mem
0x402880 get mem
ox402dec fill mem
0x408360 create file
0x4083c4 read file
0x4083f0 write file
0x408428 close handle
0x40841c set file pointer
0x464b24 得到字符串宽度,eax为返回值
0x4044d0 得到字符串length,eax为返回值,两个写字串函数在写字串之前,均调用此函数得到字符串长度
-----------------------------------------
0x466f90 调用0x4671a8
参数
ecx y
edx x
[ebp+0x14] lpchar
[ebp+0x18]
[ebp+0x1c]
[ebp+0x20] 很可能是Width,和上面的x有关
代码分析
0x4670c7 eax 行数
-----------------------------------------
------------------------------------------
0x4671a8 写字符串函数 1
参数
ebp+0x8 color
ebp+0x14 字符串
变量
ebp-0x04 lpstruct
lpstruct+34 Width
lpstruct+30 Dst
offset=([ebp-0x0c]+[ebp-0x20]+[ebp-0x28])*(W/2)+[ebp-0x08]+[ebp-0x1c]+[ebp-0x34]+[ebp-0x24]
写字串部分代码
0x4672db 大循环开始 +
0x467315 确定字符串长度 +
0x4673fc 跳转 |
0x467461-| edx=dst |
| eax=offset |
| cx=color |
0x46750a 写字符部分结束 +
0x467517 大循环结束 +
------------------------------------------
------------------------------------------
0x52461c 调用0x471088
0x524690 [eax] 0x280,应该是屏幕宽度
[eax+4] 0x158,很可能是行宽
byte ptr [edx] 字符串长度
[edx+1] 字符串
------------------------------------------
------------------------------------------
0x471088 写字串函数 2 人物对话,背景做了融合效果的那种
参数
ecx y
edx x
ebp+0x0c color
ebp+0x10 字符串
变量
ebp-04 lpstruct
lpstruct+0x1c 表面首地址
lpstruct+0x14 表面Width
lpstruct+0x08
具体代码分析
0x4710f0 确定字符串长度 +
0x4712b7 跳转则不写点,否则写点 |
0x4713db 写字串部分结束 +
------------------------------------------
字库格式 没有压缩,单色字库,byte/pixel,01代表有颜色
**********************************************************************
unp??.zip 解游戏资源程序,直接调用游戏内部解压缩函数进行解资源包
cowar??.zip 汉化程序