本帖最后由 十二 于 2010-12-19 11:36 编辑
F3打开程序载入 = =
bp CreateFileA 下断直到堆栈窗口显示FileName的名字为td00.dat。
Alt+F9返回
- 00412967  |.  FF15 6C404500 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
- 0041296D  |.  8BF0          MOV ESI,EAX-----------------------------停在此处
- 0041296F  |.  83FE FF       CMP ESI,-1
- 00412972  |.  75 07         JNZ SHORT game.0041297B
- 00412974  |.  32C0          XOR AL,AL
- 00412976  |.  E9 71010000   JMP game.00412AEC
- 0041297B  |>  57            PUSH EDI
- 0041297C  |.  68 04010000   PUSH 104
- 00412981  |.  55            PUSH EBP
- 00412982  |.  E8 EB710100   CALL game.00429B72
- 00412987  |.  8B1D 3C404500 MOV EBX,DWORD PTR DS:[<&KERNEL32.ReadFil>;  kernel32.ReadFile
- 0041298D  |.  83C4 0C       ADD ESP,0C
- 00412990  |.  6A 00         PUSH 0                                   ; /pOverlapped = NULL
- 00412992  |.  8D4424 24     LEA EAX,DWORD PTR SS:[ESP+24]            ; |
- 00412996  |.  50            PUSH EAX                                 ; |pBytesRead
- 00412997  |.  6A 02         PUSH 2                                   ; |BytesToRead = 2
- 00412999  |.  8D4C24 24     LEA ECX,DWORD PTR SS:[ESP+24]            ; |
- 0041299D  |.  51            PUSH ECX                                 ; |Buffer
- 0041299E  |.  56            PUSH ESI                                 ; |hFile
- 0041299F  |.  FFD3          CALL EBX                                 ; \ReadFile
- 004129A1  |.  6A 00         PUSH 0                                   ; /pOverlapped = NULL
- 004129A3  |.  8D5424 24     LEA EDX,DWORD PTR SS:[ESP+24]            ; |
- 004129A7  |.  52            PUSH EDX                                 ; |pBytesRead
- 004129A8  |.  6A 04         PUSH 4                                   ; |BytesToRead = 4
- 004129AA  |.  8D4424 28     LEA EAX,DWORD PTR SS:[ESP+28]            ; |
- 004129AE  |.  50            PUSH EAX                                 ; |Buffer
- 004129AF  |.  56            PUSH ESI                                 ; |hFile
- 004129B0  |.  FFD3          CALL EBX                                 ; \ReadFile
- 004129B2  |.  8B4C24 1C     MOV ECX,DWORD PTR SS:[ESP+1C]
- 004129B6  |.  51            PUSH ECX
- 004129B7  |.  E8 ED380000   CALL game.004162A9
- 004129BC  |.  83C4 04       ADD ESP,4
- 004129BF  |.  6A 00         PUSH 0
- 004129C1  |.  8BF8          MOV EDI,EAX
- 004129C3  |.  8B4424 20     MOV EAX,DWORD PTR SS:[ESP+20]
- 004129C7  |.  8D5424 24     LEA EDX,DWORD PTR SS:[ESP+24]
- 004129CB  |.  52            PUSH EDX
- 004129CC  |.  50            PUSH EAX
- 004129CD  |.  57            PUSH EDI
- 004129CE  |.  56            PUSH ESI
- 004129CF  |.  897C24 44     MOV DWORD PTR SS:[ESP+44],EDI
- 004129D3  |.  FFD3          CALL EBX-----------------------给此处下断,注释变为ReadFile,查看堆栈。
- 0012FC14   000000C4
- 0012FC18   010A3F48-------------点此右键跟踪,F8步过CALL EBX。010A3F48被填充为解密的索引表数据
- 0012FC1C   00001D9E
- 0012FC20   0012FC48
- 0012FC24   00000000
- 0012FC28   FDF2EE5F
- 0012FC2C   00400000  game.00400000
- 004129D5  |.  56            PUSH ESI                                 ; /hObject
- 004129D6  |.  FF15 38404500 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle-----------------关闭句柄
- 004129DC  |.  8B5C24 1C     MOV EBX,DWORD PTR SS:[ESP+1C]
- 004129E0  |.  8D43 06       LEA EAX,DWORD PTR DS:[EBX+6]
- 004129E3  |.  E8 4899FFFF   CALL game.0040C330
- 004129E8  |.  33F6          XOR ESI,ESI
- 004129EA  |.  85DB          TEST EBX,EBX
- 004129EC  |.  76 13         JBE SHORT game.00412A01
- 004129EE  |.  8BFF          MOV EDI,EDI
- 004129F0  |>  E8 7B99FFFF   /CALL game.0040C370-------------索引表解密密匙
- 004129F5  |.  30043E        |XOR BYTE PTR DS:[ESI+EDI],AL
- 004129F8  |.  83C6 01       |ADD ESI,1
- 004129FB  |.  3B7424 1C     |CMP ESI,DWORD PTR SS:[ESP+1C]
- 004129FF  |.^ 72 EF         \JB SHORT game.004129F0-------------循环解密
- 00412A01  |>  66:837C24 18 >CMP WORD PTR SS:[ESP+18],0-------------下断此处F9运行得到010A3F48解密后的索引表。
- 00412A07  |.  8BF7          MOV ESI,EDI
- 00412A09  |.  C74424 24 000>MOV DWORD PTR SS:[ESP+24],0
- 00412A11  |.  0F86 CA000000 JBE game.00412AE1
- 00412A17  |.  81C5 04010000 ADD EBP,104
- 00412A1D  |.  896C24 2C     MOV DWORD PTR SS:[ESP+2C],EBP
- 00412A21  |> /8B1E          /MOV EBX,DWORD PTR DS:[ESI]
- 00412A23  |. |8B4E 04       |MOV ECX,DWORD PTR DS:[ESI+4]
- 00412A26  |. |83C6 04       |ADD ESI,4
- 00412A29  |. |8A46 04       |MOV AL,BYTE PTR DS:[ESI+4]
- 00412A2C  |. |83C6 04       |ADD ESI,4
- 00412A2F  |. |0FB6F8        |MOVZX EDI,AL
- 00412A32  |. |57            |PUSH EDI
- 00412A33  |. |83C6 01       |ADD ESI,1
- 00412A36  |. |8D5424 50     |LEA EDX,DWORD PTR SS:[ESP+50]
- 00412A3A  |. |56            |PUSH ESI
- 00412A3B  |. |52            |PUSH EDX
- 00412A3C  |. |894C24 34     |MOV DWORD PTR SS:[ESP+34],ECX
- 00412A40  |. |E8 0B810100   |CALL game.0042AB50
- 00412A45  |. |83C4 0C       |ADD ESP,0C
- 00412A48  |. |8D4424 4C     |LEA EAX,DWORD PTR SS:[ESP+4C]
- 00412A4C  |. |C6443C 4C 00  |MOV BYTE PTR SS:[ESP+EDI+4C],0
- 00412A51  |. |03F7          |ADD ESI,EDI
- 00412A53  |. |8D78 01       |LEA EDI,DWORD PTR DS:[EAX+1]
- 00412A56  |> |8A08          |/MOV CL,BYTE PTR DS:[EAX]
- 00412A58  |. |83C0 01       ||ADD EAX,1
- 00412A5B  |. |84C9          ||TEST CL,CL
- 00412A5D  |.^|75 F7         |\JNZ SHORT game.00412A56
- 00412A5F  |. |2BC7          |SUB EAX,EDI
- 00412A61  |. |8D68 01       |LEA EBP,DWORD PTR DS:[EAX+1]
- 00412A64  |. |55            |PUSH EBP
- 00412A65  |. |E8 3F380000   |CALL game.004162A9
- 00412A6A  |. |8BF8          |MOV EDI,EAX
- 00412A6C  |. |83C4 04       |ADD ESP,4
- 00412A6F  |. |8D4424 4C     |LEA EAX,DWORD PTR SS:[ESP+4C]
- 00412A73  |. |50            |PUSH EAX
- 00412A74  |. |55            |PUSH EBP
- 00412A75  |. |57            |PUSH EDI
- 00412A76  |. |897C24 40     |MOV DWORD PTR SS:[ESP+40],EDI
- 00412A7A  |. |E8 F3700100   |CALL game.00429B72
- 00412A7F  |. |8B4C24 34     |MOV ECX,DWORD PTR SS:[ESP+34]
- 00412A83  |. |83C4 0C       |ADD ESP,0C
- 00412A86  |. |894C24 38     |MOV DWORD PTR SS:[ESP+38],ECX
- 00412A8A  |. |895C24 3C     |MOV DWORD PTR SS:[ESP+3C],EBX
- 00412A8E  |. |8B4C24 2C     |MOV ECX,DWORD PTR SS:[ESP+2C]
- 00412A92  |. |8D5424 34     |LEA EDX,DWORD PTR SS:[ESP+34]
- 00412A96  |. |52            |PUSH EDX                                ; /Arg3
- 00412A97  |. |8D4424 44     |LEA EAX,DWORD PTR SS:[ESP+44]           ; |
- 00412A9B  |. |50            |PUSH EAX                                ; |Arg2
- 00412A9C  |. |51            |PUSH ECX                                ; |Arg1
- 00412A9D  |. |C78424 680100>|MOV DWORD PTR SS:[ESP+168],0            ; |
- 00412AA8  |. |E8 23030000   |CALL game.00412DD0                      ; \game.00412DD0
- 00412AAD  |. |85FF          |TEST EDI,EDI
- 00412AAF  |. |C78424 5C0100>|MOV DWORD PTR SS:[ESP+15C],-1
- 00412ABA  |. |74 09         |JE SHORT game.00412AC5
- 00412ABC  |. |57            |PUSH EDI
- 00412ABD  |. |E8 C46C0100   |CALL game.00429786
- 00412AC2  |. |83C4 04       |ADD ESP,4
- 00412AC5  |> |8B4424 24     |MOV EAX,DWORD PTR SS:[ESP+24]
- 00412AC9  |. |0FB75424 18   |MOVZX EDX,WORD PTR SS:[ESP+18]
- 00412ACE  |. |83C0 01       |ADD EAX,1
- 00412AD1  |. |3BC2          |CMP EAX,EDX
- 00412AD3  |. |894424 24     |MOV DWORD PTR SS:[ESP+24],EAX
- 00412AD7  |.^\0F82 44FFFFFF \JB game.00412A21
复制代码
已经完了 - =。。。。。。。。。。。随后的文件解密两次CreateFile后会有SetFilePointer。。。。。。
和ZUN的解包是一样的 = = 和FXTZ的解包和封包器通用 = = |