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

 找回密码
 少女注册中
搜索
查看: 11260|回复: 16

[编程算法] FXT FXTZ 部分解包过程

  [复制链接]
发表于 2010-12-1 17:24:49 | 显示全部楼层 |阅读模式
本帖最后由 十二 于 2010-12-1 21:10 编辑
  1. FXT FXTZ 部分解包过程

  2. 0067D112 > $  E8 658C0000   CALL th105.00685D7C------->入口点
  3. F9 运行程序
  4. 进入FXT选择music room选项
  5. 切换回OD
  6. [bp setfilepointer]------->setfilepointer下断
  7. 回到FXT选择音乐,程序被断下
  8. 0258FF14   0041B5CE  /CALL 到 SetFilePointer 来自 th105.0041B5C8
  9. 0258FF18   00000544  |hFile = 00000544 (window)
  10. 0258FF1C   03B96A79  |OffsetLo = 3B96A79 (62483065.)
  11. 0258FF20   00000000  |pOffsetHi = NULL
  12. 0258FF24   00000000  \Origin = FILE_BEGIN
  13. 堆栈结构
  14. 清除断点Alt+F9返回程序领空
  15. 0041B59D  |> \6A 00         PUSH 0                                   ; /hTemplateFile = NULL
  16. 0041B59F  |.  68 80000000   PUSH 80                                  ; |Attributes = NORMAL
  17. 0041B5A4  |.  6A 03         PUSH 3                                   ; |Mode = OPEN_EXISTING
  18. 0041B5A6  |.  6A 00         PUSH 0                                   ; |pSecurity = NULL
  19. 0041B5A8  |.  6A 01         PUSH 1                                   ; |ShareMode = FILE_SHARE_READ
  20. 0041B5AA  |.  68 00000080   PUSH 80000000                            ; |Access = GENERIC_READ
  21. 0041B5AF  |.  50            PUSH EAX                                 ; |FileName
  22. 0041B5B0  |.  FF15 6CC06A00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
  23. 0041B5B6  |.  8BF0          MOV ESI,EAX
  24. 0041B5B8  |.  83FE FF       CMP ESI,-1
  25. 0041B5BB  |.  74 1C         JE SHORT th105.0041B5D9
  26. 0041B5BD  |.  8B4D 10       MOV ECX,[ARG.3]
  27. 0041B5C0  |.  8B11          MOV EDX,DWORD PTR DS:[ECX]
  28. 0041B5C2  |.  6A 00         PUSH 0                                   ; /Origin = FILE_BEGIN
  29. 0041B5C4  |.  6A 00         PUSH 0                                   ; |pOffsetHi = NULL
  30. 0041B5C6  |.  52            PUSH EDX                                 ; |OffsetLo
  31. 0041B5C7  |.  56            PUSH ESI                                 ; |hFile
  32. 0041B5C8  |.  FF15 58C06A00 CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi>; \SetFilePointer
  33. 0041B5CE  |.  8BC6          MOV EAX,ESI------->停在这里
  34. 在0041B59D下断,F9运行,再次选择音乐,程序被断。
  35. 0041B59D  |> \6A 00         PUSH 0                                   ; /hTemplateFile = NULL------->停在这里
  36. 0041B59F  |.  68 80000000   PUSH 80                                  ; |Attributes = NORMAL
  37. 0041B5A4  |.  6A 03         PUSH 3                                   ; |Mode = OPEN_EXISTING
  38. 0041B5A6  |.  6A 00         PUSH 0                                   ; |pSecurity = NULL
  39. 0041B5A8  |.  6A 01         PUSH 1                                   ; |ShareMode = FILE_SHARE_READ
  40. 0041B5AA  |.  68 00000080   PUSH 80000000                            ; |Access = GENERIC_READ
  41. 0041B5AF  |.  50            PUSH EAX                                 ; |FileName------->文件指针
  42. 0041B5B0  |.  FF15 6CC06A00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA------->打开文件
  43. 0041B5B6  |.  8BF0          MOV ESI,EAX------->返回的文件句柄送ESI
  44. 0041B5B8  |.  83FE FF       CMP ESI,-1------->比较ESI
  45. 0041B5BB  |.  74 1C         JE SHORT th105.0041B5D9------->等于则跳走
  46. 0041B5BD  |.  8B4D 10       MOV ECX,[ARG.3]------->EBP+10送ECX
  47. 0041B5C0  |.  8B11          MOV EDX,DWORD PTR DS:[ECX]------->ECX送EDX,为SetFilePointer偏移量做准备
  48. 0041B5C2  |.  6A 00         PUSH 0                                   ; /Origin = FILE_BEGIN------->文件末尾开始偏移
  49. 0041B5C4  |.  6A 00         PUSH 0                                   ; |pOffsetHi = NULL
  50. 0041B5C6  |.  52            PUSH EDX                                 ; |OffsetLo------->压入偏移量
  51. 0041B5C7  |.  56            PUSH ESI                                 ; |hFile------->压入文件句柄
  52. 0041B5C8  |.  FF15 58C06A00 CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi>; \SetFilePointer
  53. [bp readfile]------->readfile下断
  54. F9运行
  55. 7C80180E >  6A 20           PUSH 20
  56. 7C801810    68 D89B807C     PUSH kernel32.7C809BD8
  57. 7C801815    E8 B10C0000     CALL kernel32.7C8024CB
  58. 7C80181A    33DB            XOR EBX,EBX
  59. 7C80181C    8B4D 14         MOV ECX,DWORD PTR SS:[EBP+14]
  60. 7C80181F    3BCB            CMP ECX,EBX
  61. 7C801821    74 02           JE SHORT kernel32.7C801825
  62. 7C801823    8919            MOV DWORD PTR DS:[ECX],EBX
  63. 7C801825    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
  64. 7C80182B    8B40 30         MOV EAX,DWORD PTR DS:[EAX+30]
  65. 7C80182E    8B7D 08         MOV EDI,DWORD PTR SS:[EBP+8]
  66. 7C801831    83FF F4         CMP EDI,-0C
  67. 0258FE1C   0041B629  /CALL 到 ReadFile 来自 th105.0041B623
  68. 0258FE20   00000544  |hFile = 00000544 (window)------->读取文件的句柄
  69. 0258FE24   01CDD2D8  |Buffer = 01CB2008------->缓冲区指针
  70. 0258FE28   00002134  |BytesToRead = 2134 (8500.)------->被读取的大小
  71. 0258FE2C   01D0CC30  |pBytesRead = 01D0CC30------->等同BytesToRead,等于BytesToRead的指针
  72. 0258FE30   00000000  \pOverlapped = NULL
  73. 堆栈结构
  74. 内存窗口跟踪|Buffer = 01CB2008
  75. ALt+F9返回
  76. 0041B61A   .  6A 00         PUSH 0                                   ; /pOverlapped = NULL
  77. 0041B61C   .  8D6E 08       LEA EBP,DWORD PTR DS:[ESI+8]             ; |
  78. 0041B61F   .  55            PUSH EBP                                 ; |pBytesRead
  79. 0041B620   .  57            PUSH EDI                                 ; |BytesToRead               
  80. 0041B621   .  53            PUSH EBX                                 ; |Buffer
  81. 0041B622   .  50            PUSH EAX                                 ; |hFile
  82. 0041B623   .  FF15 5CC06A00 CALL DWORD PTR DS:[<&KERNEL32.ReadFile>] ; \ReadFile
  83. 0041B629   .  8B6D 00       MOV EBP,DWORD PTR SS:[EBP]------->停在此处,在此下断循环F9即可得到解密的OGG音乐文件
  84. /
  85. 01CB2008  70 58 58 6C 3F 3D 3F 3F 3F 3F 3F 3F 3F 3F C1 4A  pXXl?=????????罦
  86. 01CB2018  3F 3F 3F 3F 3F 3F DE BD 0C B2 3E 21 3E 49 50 4D  ??????藿.?!>IPM
  87. 01CB2028  5D 56 4C 3F 3F 3F 3F 3D 7B 93 3F 3F 3F 3F 3F 3F  ]VL????={??????
  88. 01CB2038  3C 4E 3D 3F 3F 3F 3F 3F 87 3E 70 58 58 6C 3F 3F  <N=??????pXXl??
  89. 01CB2048  3F 3F 3F 3F 3F 3F 3F 3F C1 4A 3F 3F 3E 3F 3F 3F  ????????罦??>???
  90. 01CB2058  92 5B 82 EE 2E 7D C0 C0 C0 C0 C0 C0 C0 C0 C0 C0  抂傤.}览览览览览
  91. 01CB2068  C0 C0 C0 C0 C0 C0 3C 49 50 4D 5D 56 4C 22 3F 3F  览览览<IPM]VL"??
  92. 01CB2078  3F 67 56 4F 57 11 70 4D 58 1F 53 56 5D 69 50 4D  ?gVOWpMXSV]iPM
  93. 01CB2088  5D 56 4C 1F 76 1F 0D 0F 0F 0D 0F 08 0E 08 3D 3F  ]VLv..=?
  94.                                                    
  95. |Buffer = 01CB2008 被填充 SetFilePointer 的偏移内容
  96. 这里是解密过程看不看都无所谓在0041B629循环F9即可解密文件
  97. 0041B629   .  8B6D 00       MOV EBP,DWORD PTR SS:[EBP]------->EBP的堆栈赋值
  98. 0041B62C   .  85ED          TEST EBP,EBP------->与测试
  99. 0041B62E   .  75 09         JNZ SHORT th105.0041B639------->不等于则跳转
  100. 0041B630   .  5F            POP EDI
  101. 0041B631   .  5E            POP ESI
  102. 0041B632   .  5D            POP EBP
  103. 0041B633   .  32C0          XOR AL,AL
  104. 0041B635   .  5B            POP EBX
  105. 0041B636   .  C2 0800       RETN 8
  106. 0041B639   > \016E 14       ADD DWORD PTR DS:[ESI+14],EBP
  107. 0041B63C   .  33C0          XOR EAX,EAX
  108. 0041B63E   .  85FF          TEST EDI,EDI
  109. 0041B640   .  76 0D         JBE SHORT th105.0041B64F
  110. 0041B642   >  8A4E 18       MOV CL,BYTE PTR DS:[ESI+18]---->\
  111. 0041B645   .  300C18        XOR BYTE PTR DS:[EAX+EBX],CL     \
  112. 0041B648   .  83C0 01       ADD EAX,1                        / 循环 解密01CB2008数据得到OGG音频文件
  113. 0041B64B   .  3BC7          CMP EAX,EDI                     /
  114. 0041B64D   .^ 72 F3         JB SHORT th105.0041B642------->/
  115. 0041B64F   >  5F            POP EDI
  116. 0041B650   .  5E            POP ESI
  117. 0041B651   .  5D            POP EBP
  118. 0041B652   .  B0 01         MOV AL,1
  119. 0041B654   .  5B            POP EBX
  120. 0041B655   .  C2 0800       RETN 8------->返回
复制代码

评分

参与人数 2积分 +6 收起 理由
r6144 + 1 跟踪起来更辛苦啦,莉莉抱抱
真PKS同志 + 5 汇编写起来很累的,值得鼓励

查看全部评分

发表于 2010-12-1 20:33:32 | 显示全部楼层
看不懂,感觉很厉害的样子。。。
回复

使用道具 举报

发表于 2010-12-1 20:56:34 | 显示全部楼层
理解不能,话说这个貌似可以修改游戏内容吧?很想自己做套SC出来...我自重...
回复

使用道具 举报

 楼主| 发表于 2010-12-1 21:01:21 | 显示全部楼层
只是部分解包,自己跟踪的。不完全。    不过似乎TAC上有封包程序了。  详见二小姐那个补丁
回复

使用道具 举报

发表于 2010-12-1 21:55:47 | 显示全部楼层
本帖最后由 bao_zi 于 2010-12-1 23:58 编辑

好触 能用来干嘛


问了下.....可以改资源神马的.....换歌么= =
回复

使用道具 举报

发表于 2010-12-1 23:39:13 | 显示全部楼层
没有任何的编程知识的咱完全看不懂……泪目
回复

使用道具 举报

发表于 2010-12-2 15:56:14 | 显示全部楼层
对这类东西完全是一个小白,能写得详细一些么,比如解包常用工具之类的
回复

使用道具 举报

 楼主| 发表于 2010-12-2 16:10:21 | 显示全部楼层
回复 7# 红色不夜城


     网上没有什么FXTZ的解包文章,所以自己跟了一下。  至于工具http://bbs.nyasama.com/viewthread.php?tid=342&extra=page%3D1看此贴吧有一个解包程序。封包暂时没找到。解包很简单只是一个与算法。

有能力可以自己写一个。我是不会 - = 只会跟踪一下 - =
回复

使用道具 举报

发表于 2010-12-2 18:38:53 | 显示全部楼层
其實我一直在找封包的方法…………
回复

使用道具 举报

 楼主| 发表于 2010-12-2 18:51:46 | 显示全部楼层
可以用  XOR BYTE PTR DS:[EAX+EBX],CL     把需要的文件还原成加密数据段,但不知道索引表怎么加密的- =
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 03:37

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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