| 本帖最后由 十二 于 2010-12-1 21:10 编辑 
 复制代码FXT FXTZ 部分解包过程
0067D112 > $  E8 658C0000   CALL th105.00685D7C------->入口点
F9 运行程序
进入FXT选择music room选项 
切换回OD
[bp setfilepointer]------->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,[ARG.3]
0041B5C0  |.  8B11          MOV EDX,DWORD PTR DS:[ECX]
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,[ARG.3]------->EBP+10送ECX
0041B5C0  |.  8B11          MOV EDX,DWORD PTR DS:[ECX]------->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
[bp readfile]------->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:[EBP+14]
7C80181F    3BCB            CMP ECX,EBX
7C801821    74 02           JE SHORT kernel32.7C801825
7C801823    8919            MOV DWORD PTR DS:[ECX],EBX
7C801825    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
7C80182B    8B40 30         MOV EAX,DWORD PTR DS:[EAX+30]
7C80182E    8B7D 08         MOV EDI,DWORD PTR SS:[EBP+8]
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:[ESI+8]             ; |
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:[EBP]------->停在此处,在此下断循环F9即可得到解密的OGG音乐文件
/
01CB2008  70 58 58 6C 3F 3D 3F 3F 3F 3F 3F 3F 3F 3F C1 4A  pXXl?=????????罦
01CB2018  3F 3F 3F 3F 3F 3F DE BD 0C B2 3E 21 3E 49 50 4D  ??????藿.?!>IPM
01CB2028  5D 56 4C 3F 3F 3F 3F 3D 7B 93 3F 3F 3F 3F 3F 3F  ]VL????={??????
01CB2038  3C 4E 3D 3F 3F 3F 3F 3F 87 3E 70 58 58 6C 3F 3F  <N=??????pXXl??
01CB2048  3F 3F 3F 3F 3F 3F 3F 3F C1 4A 3F 3F 3E 3F 3F 3F  ????????罦??>???
01CB2058  92 5B 82 EE 2E 7D C0 C0 C0 C0 C0 C0 C0 C0 C0 C0  抂傤.}览览览览览
01CB2068  C0 C0 C0 C0 C0 C0 3C 49 50 4D 5D 56 4C 22 3F 3F  览览览<IPM]VL"??
01CB2078  3F 67 56 4F 57 11 70 4D 58 1F 53 56 5D 69 50 4D  ?gVOWpMXSV]iPM
01CB2088  5D 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]------->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:[ESI+14],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:[ESI+18]---->\
0041B645   .  300C18        XOR BYTE PTR DS:[EAX+EBX],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------->返回
 |