设为首页收藏本站官方微博

汉化资料 孤岛余生 The Island - Castaway 资源文件分析

  [复制链接]
查看: 4055|回复: 9
打印 上一主题 下一主题

[汉化资料] 孤岛余生 The Island - Castaway 资源文件分析

跳转到指定楼层
楼主
发表于 2010-10-12 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

孤岛余生 The Island - Castaway 资源文件分析

这个游戏蛮有意思的,看了下,资源文件是程序目录下的 localisation.lbm 。文件最后8字节是两个校验,随便改一下文件里面的字串内容会通不过校验。
6 [! H) q. E( K4 d* q8 ?
: d* S1 D% F% E最后8字节其中前面四个是普通的32位校验和,就是把除了最后8字节的所有字节sum总和。后四个字节是32位校验平方和,也就是最后8字节前面所有字节每个平方后总和。, G- V' u  Y5 I, _9 r4 H' }& `5 Y
同时产生验证两个校验,有点变态。。。
5 V- Y& g8 M6 ]. @- s6 Z# o6 O% d8 y: r+ q
用OD下在ReadFile上,1.0版本的Island.exe的0061EBE3处,程序首次就会读取localisation.lbm,读两次,第一次B000h个,第二次读剩下的。" b* S( A1 k$ r8 ~) r
  1. 0061EBD7  |.  6A 00         push    0                                ; /pOverlapped = NULL
  2. 0061EBD9  |.  50            push    eax                              ; |pBytesRead
  3. 0061EBDA  |.  8B03          mov     eax, dword ptr [ebx]             ; |
  4. 0061EBDC  |.  FF75 10       push    dword ptr [ebp+10]               ; |BytesToRead
  5. 0061EBDF  |.  51            push    ecx                              ; |Buffer
  6. 0061EBE0  |.  FF3430        push    dword ptr [eax+esi]              ; |hFile
  7. 0061EBE3  |.  FF15 80326300 call    dword ptr [<&kernel32.ReadFile>] ; \ReadFile
复制代码

( j& z- k4 M0 m1 \0 E下面就是校验代码了,patch程序的话把005A4FF4处的 jnz 改 jmp 就可以无视校验,不想改程序那就自己算校验和。。。下面程序里005A4F84到005A4FB8的循环就是算校验的,3 v4 ?  d$ {8 @7 y6 `  a
出循环后ebx是校验和,[esp+14]是“校验平方和”。005A4FEA处的repe    cmps进行比较,结果sete    al 。
! m( L6 u2 Y" b) l6 J5 S
  1. 005A4F84  |> /8B4424 10     /mov     eax, dword ptr [esp+10]         ;  CheckSum(32bit)
  2. 005A4F88 >|. |8A0C06        |mov     cl, byte ptr [esi+eax]
  3. 005A4F8B  |. |8BC1          |mov     eax, ecx
  4. 005A4F8D  |. |25 FF000000   |and     eax, 0FF
  5. 005A4F92  |. |99            |cdq
  6. 005A4F93  |. |03D8          |add     ebx, eax
  7. 005A4F95  |. |13EA          |adc     ebp, edx
  8. 005A4F97  |. |8AC1          |mov     al, cl
  9. 005A4F99  |. |F6E9          |imul    cl
  10. 005A4F9B  |. |8B4C24 14     |mov     ecx, dword ptr [esp+14]
  11. 005A4F9F  |. |25 FF000000   |and     eax, 0FF
  12. 005A4FA4  |. |99            |cdq
  13. 005A4FA5  |. |03C8          |add     ecx, eax
  14. 005A4FA7  |. |8B4424 18     |mov     eax, dword ptr [esp+18]
  15. 005A4FAB  |. |13C2          |adc     eax, edx
  16. 005A4FAD  |. |46            |inc     esi
  17. 005A4FAE  |. |3BF7          |cmp     esi, edi
  18. 005A4FB0  |. |894C24 14     |mov     dword ptr [esp+14], ecx
  19. 005A4FB4  |. |894424 18     |mov     dword ptr [esp+18], eax
  20. 005A4FB8  |.^\7C CA         \jl      short 005A4F84
  21. 005A4FBA  |>  8B4C24 18     mov     ecx, dword ptr [esp+18]
  22. 005A4FBE  |.  8B5424 14     mov     edx, dword ptr [esp+14]
  23. 005A4FC2  |.  6A 01         push    1
  24. 005A4FC4  |.  6A 00         push    0
  25. 005A4FC6  |.  51            push    ecx
  26. 005A4FC7  |.  52            push    edx
  27. 005A4FC8  |.  E8 73260700   call    00617640
  28. 005A4FCD  |.  03C3          add     eax, ebx
  29. 005A4FCF  |.  13D5          adc     edx, ebp
  30. 005A4FD1  |.  895424 18     mov     dword ptr [esp+18], edx
  31. 005A4FD5  |.  8B5424 10     mov     edx, dword ptr [esp+10]
  32. 005A4FD9  |.  03FA          add     edi, edx
  33. 005A4FDB  |.  894424 14     mov     dword ptr [esp+14], eax
  34. 005A4FDF  |.  33C0          xor     eax, eax
  35. 005A4FE1  |.  B9 02000000   mov     ecx, 2
  36. 005A4FE6  |.  8D7424 14     lea     esi, dword ptr [esp+14]
  37. 005A4FEA  |.  F3:A7         repe    cmps dword ptr es:[edi], dword p>
  38. 005A4FEC  |.  5F            pop     edi
  39. 005A4FED  |.  0F94C0        sete    al
  40. 005A4FF0  |.  84C0          test    al, al
  41. 005A4FF2  |.  5D            pop     ebp
  42. 005A4FF3  |.  5B            pop     ebx
  43. 005A4FF4      75 07         jnz     short 005A4FFD                   ;  校验
  44. 005A4FF6  |>  33C0          xor     eax, eax
  45. 005A4FF8  |.  5E            pop     esi
  46. 005A4FF9  |.  83C4 0C       add     esp, 0C
  47. 005A4FFC  |.  C3            retn
  48. 005A4FFD  |>  33C0          xor     eax, eax
  49. 005A4FFF  |.  8A02          mov     al, byte ptr [edx]               ;  文件头?
复制代码

$ d# R  H+ S/ i* [) b1 Q' r7 R6 V9 b
自己写代码算的话,可以把上面循环简化下,好像下面。。。假定pBuf指向内存中的文件头,nSize是文件长度
  1. xor ebx,ebx
  2. xor ebp,ebp
  3. mov esi,pBuf
  4. mov edi,pBuf
  5. add edi,nSize
  6. sub edi,8
  7. .while esi < edi
  8.     movzx eax,byte ptr[esi]
  9.     add ebx,eax
  10.     mov ecx,eax
  11.     mul ecx
  12.     and eax,0ffh
  13.     add ebp,eax
  14.     inc esi
  15. .endw
复制代码

6 q# j9 c) I) K出来ebx、ebp就是结果。
8 D0 ]9 M' B% G9 P7 g
- }" k) O/ o7 @代码005A4FFF后面就是解析文件了,每个字符串前的字节是字串长度,再前面的0意义不明。改LocalString后面的字串就行,不过汉字还是要做字库的,游戏用的DX8。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

沙发
 楼主| 发表于 2010-10-12 21:26 | 只看该作者
忘了“校验平方和”平方后只取字节值,其余丢弃,也就是要and  0ff
回复 支持 反对

使用道具 举报

板凳
发表于 2010-10-12 22:30 | 只看该作者
如果在这基础上能做个打包机就好了……另外不知字库资源图在哪里?
回复 支持 反对

使用道具 举报

地板
发表于 2010-10-13 07:52 | 只看该作者
楼主能否留个qq以备联系?
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2010-10-17 19:14 | 只看该作者
做打包工具好花时间。。。如下,使用看说明文件' E# R6 C8 z8 _" g+ L1 [/ B/ j

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

6#
发表于 2010-10-17 19:37 | 只看该作者
vvvvvv, 你好,是否愿意为AVG汉化贡献一份力量?
9 v: V" `5 k  W5 f$ h有一些AVG的汉化需要你的帮助。能否留下qq?
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2010-10-17 20:05 | 只看该作者
楼上版主看短消息
回复 支持 反对

使用道具 举报

8#
发表于 2010-11-8 12:31 | 只看该作者
字库应该在data.grp文件里0 Y* t. h& [* \  ?3 U# v* K9 _
没找到能解开这个grp的工具
回复 支持 反对

使用道具 举报

9#
发表于 2010-11-8 12:42 | 只看该作者
这个游戏应该不属于解迷类的吧
回复 支持 反对

使用道具 举报

10#
发表于 2010-11-8 12:51 | 只看该作者
还算是这类吧,动作解谜,挺好玩的,主要是最近老看找图游戏有点头晕了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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