本帖最后由 十二 于 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------->返回
复制代码 |