FXT FXTZ 部分解包过程
本帖最后由 十二 于 2010-12-1 21:10 编辑FXT FXTZ 部分解包过程
0067D112 > $E8 658C0000 CALL th105.00685D7C------->入口点
F9 运行程序
进入FXT选择music room选项
切换回OD
------->setfilepointer下断
回到FXT选择音乐,程序被断下
0258FF14 0041B5CE/CALL 到 SetFilePointer 来自 th105.0041B5C8
0258FF18 00000544|hFile = 00000544 (window)
0258FF1C 03B96A79|OffsetLo = 3B96A79 (62483065.)
0258FF20 00000000|pOffsetHi = NULL
0258FF24 00000000\Origin = FILE_BEGIN
堆栈结构
清除断点Alt+F9返回程序领空
0041B59D|> \6A 00 PUSH 0 ; /hTemplateFile = NULL
0041B59F|.68 80000000 PUSH 80 ; |Attributes = NORMAL
0041B5A4|.6A 03 PUSH 3 ; |Mode = OPEN_EXISTING
0041B5A6|.6A 00 PUSH 0 ; |pSecurity = NULL
0041B5A8|.6A 01 PUSH 1 ; |ShareMode = FILE_SHARE_READ
0041B5AA|.68 00000080 PUSH 80000000 ; |Access = GENERIC_READ
0041B5AF|.50 PUSH EAX ; |FileName
0041B5B0|.FF15 6CC06A00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
0041B5B6|.8BF0 MOV ESI,EAX
0041B5B8|.83FE FF CMP ESI,-1
0041B5BB|.74 1C JE SHORT th105.0041B5D9
0041B5BD|.8B4D 10 MOV ECX,
0041B5C0|.8B11 MOV EDX,DWORD PTR DS:
0041B5C2|.6A 00 PUSH 0 ; /Origin = FILE_BEGIN
0041B5C4|.6A 00 PUSH 0 ; |pOffsetHi = NULL
0041B5C6|.52 PUSH EDX ; |OffsetLo
0041B5C7|.56 PUSH ESI ; |hFile
0041B5C8|.FF15 58C06A00 CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi>; \SetFilePointer
0041B5CE|.8BC6 MOV EAX,ESI------->停在这里
在0041B59D下断,F9运行,再次选择音乐,程序被断。
0041B59D|> \6A 00 PUSH 0 ; /hTemplateFile = NULL------->停在这里
0041B59F|.68 80000000 PUSH 80 ; |Attributes = NORMAL
0041B5A4|.6A 03 PUSH 3 ; |Mode = OPEN_EXISTING
0041B5A6|.6A 00 PUSH 0 ; |pSecurity = NULL
0041B5A8|.6A 01 PUSH 1 ; |ShareMode = FILE_SHARE_READ
0041B5AA|.68 00000080 PUSH 80000000 ; |Access = GENERIC_READ
0041B5AF|.50 PUSH EAX ; |FileName------->文件指针
0041B5B0|.FF15 6CC06A00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA------->打开文件
0041B5B6|.8BF0 MOV ESI,EAX------->返回的文件句柄送ESI
0041B5B8|.83FE FF CMP ESI,-1------->比较ESI
0041B5BB|.74 1C JE SHORT th105.0041B5D9------->等于则跳走
0041B5BD|.8B4D 10 MOV ECX,------->EBP+10送ECX
0041B5C0|.8B11 MOV EDX,DWORD PTR DS:------->ECX送EDX,为SetFilePointer偏移量做准备
0041B5C2|.6A 00 PUSH 0 ; /Origin = FILE_BEGIN------->文件末尾开始偏移
0041B5C4|.6A 00 PUSH 0 ; |pOffsetHi = NULL
0041B5C6|.52 PUSH EDX ; |OffsetLo------->压入偏移量
0041B5C7|.56 PUSH ESI ; |hFile------->压入文件句柄
0041B5C8|.FF15 58C06A00 CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi>; \SetFilePointer
------->readfile下断
F9运行
7C80180E >6A 20 PUSH 20
7C801810 68 D89B807C PUSH kernel32.7C809BD8
7C801815 E8 B10C0000 CALL kernel32.7C8024CB
7C80181A 33DB XOR EBX,EBX
7C80181C 8B4D 14 MOV ECX,DWORD PTR SS:
7C80181F 3BCB CMP ECX,EBX
7C801821 74 02 JE SHORT kernel32.7C801825
7C801823 8919 MOV DWORD PTR DS:,EBX
7C801825 64:A1 18000000MOV EAX,DWORD PTR FS:
7C80182B 8B40 30 MOV EAX,DWORD PTR DS:
7C80182E 8B7D 08 MOV EDI,DWORD PTR SS:
7C801831 83FF F4 CMP EDI,-0C
0258FE1C 0041B629/CALL 到 ReadFile 来自 th105.0041B623
0258FE20 00000544|hFile = 00000544 (window)------->读取文件的句柄
0258FE24 01CDD2D8|Buffer = 01CB2008------->缓冲区指针
0258FE28 00002134|BytesToRead = 2134 (8500.)------->被读取的大小
0258FE2C 01D0CC30|pBytesRead = 01D0CC30------->等同BytesToRead,等于BytesToRead的指针
0258FE30 00000000\pOverlapped = NULL
堆栈结构
内存窗口跟踪|Buffer = 01CB2008
ALt+F9返回
0041B61A .6A 00 PUSH 0 ; /pOverlapped = NULL
0041B61C .8D6E 08 LEA EBP,DWORD PTR DS: ; |
0041B61F .55 PUSH EBP ; |pBytesRead
0041B620 .57 PUSH EDI ; |BytesToRead
0041B621 .53 PUSH EBX ; |Buffer
0041B622 .50 PUSH EAX ; |hFile
0041B623 .FF15 5CC06A00 CALL DWORD PTR DS:[<&KERNEL32.ReadFile>] ; \ReadFile
0041B629 .8B6D 00 MOV EBP,DWORD PTR SS:------->停在此处,在此下断循环F9即可得到解密的OGG音乐文件
/
01CB200870 58 58 6C 3F 3D 3F 3F 3F 3F 3F 3F 3F 3F C1 4ApXXl?=????????罦
01CB20183F 3F 3F 3F 3F 3F DE BD 0C B2 3E 21 3E 49 50 4D??????藿.?!>IPM
01CB20285D 56 4C 3F 3F 3F 3F 3D 7B 93 3F 3F 3F 3F 3F 3F]VL????={??????
01CB20383C 4E 3D 3F 3F 3F 3F 3F 87 3E 70 58 58 6C 3F 3F<N=??????pXXl??
01CB20483F 3F 3F 3F 3F 3F 3F 3F C1 4A 3F 3F 3E 3F 3F 3F????????罦??>???
01CB205892 5B 82 EE 2E 7D C0 C0 C0 C0 C0 C0 C0 C0 C0 C0抂傤.}览览览览览
01CB2068C0 C0 C0 C0 C0 C0 3C 49 50 4D 5D 56 4C 22 3F 3F览览览<IPM]VL"??
01CB20783F 67 56 4F 57 11 70 4D 58 1F 53 56 5D 69 50 4D?gVOWpMXSV]iPM
01CB20885D 56 4C 1F 76 1F 0D 0F 0F 0D 0F 08 0E 08 3D 3F]VLv..=?
|Buffer = 01CB2008 被填充 SetFilePointer 的偏移内容
这里是解密过程看不看都无所谓在0041B629循环F9即可解密文件
0041B629 .8B6D 00 MOV EBP,DWORD PTR SS:------->EBP的堆栈赋值
0041B62C .85ED TEST EBP,EBP------->与测试
0041B62E .75 09 JNZ SHORT th105.0041B639------->不等于则跳转
0041B630 .5F POP EDI
0041B631 .5E POP ESI
0041B632 .5D POP EBP
0041B633 .32C0 XOR AL,AL
0041B635 .5B POP EBX
0041B636 .C2 0800 RETN 8
0041B639 > \016E 14 ADD DWORD PTR DS:,EBP
0041B63C .33C0 XOR EAX,EAX
0041B63E .85FF TEST EDI,EDI
0041B640 .76 0D JBE SHORT th105.0041B64F
0041B642 >8A4E 18 MOV CL,BYTE PTR DS:---->\
0041B645 .300C18 XOR BYTE PTR DS:,CL \
0041B648 .83C0 01 ADD EAX,1 / 循环 解密01CB2008数据得到OGG音频文件
0041B64B .3BC7 CMP EAX,EDI /
0041B64D .^ 72 F3 JB SHORT th105.0041B642------->/
0041B64F >5F POP EDI
0041B650 .5E POP ESI
0041B651 .5D POP EBP
0041B652 .B0 01 MOV AL,1
0041B654 .5B POP EBX
0041B655 .C2 0800 RETN 8------->返回 看不懂,感觉很厉害的样子。。。 理解不能,话说这个貌似可以修改游戏内容吧?很想自己做套SC出来...我自重... 只是部分解包,自己跟踪的。不完全。 不过似乎TAC上有封包程序了。详见二小姐那个补丁 本帖最后由 bao_zi 于 2010-12-1 23:58 编辑
好触 能用来干嘛
问了下.....可以改资源神马的.....换歌么= = 没有任何的编程知识的咱完全看不懂……泪目 对这类东西完全是一个小白,能写得详细一些么,比如解包常用工具之类的 回复 7# 红色不夜城
网上没有什么FXTZ的解包文章,所以自己跟了一下。至于工具http://bbs.nyasama.com/viewthread.php?tid=342&extra=page%3D1看此贴吧有一个解包程序。封包暂时没找到。解包很简单只是一个与算法。
有能力可以自己写一个。我是不会 - = 只会跟踪一下 - = 其實我一直在找封包的方法………… 可以用XOR BYTE PTR DS:,CL 把需要的文件还原成加密数据段,但不知道索引表怎么加密的- =
页:
[1]
2