本帖最后由 十二 于 2011-3-14 15:44 编辑
F3载入Game.exe
bp ReadFile
堆栈:
- 0241FB74 75FADAFD /CALL 到 ReadFile 来自 kernel32.75FADAF8
- 0241FB78 000000C0 |hFile = 000000C0 (window)
- 0241FB7C 03C0CF68 |Buffer = 03C0CF68
- 0241FB80 00001000 |BytesToRead = 1000 (4096.)
- 0241FB84 0241FBE8 |pBytesRead = 0241FBE8
- 0241FB88 00000000 \pOverlapped = NULL
复制代码
直接Alt+F9返回,Ctrl+A分析。
- 03B00595 83C4 1C ADD ESP,1C
- 03B00598 57 PUSH EDI
- 03B00599 8BCE MOV ECX,ESI
- 03B0059B E8 A0FBFFFF CALL RGE.03B00140 校验RGE脚本,检测RGE脚本是否有效。
- 03B005A0 85C0 TEST EAX,EAX
- 03B005A2 75 15 JNZ SHORT RGE.03B005B9
- 03B005A4 C745 D8 A081B60>MOV DWORD PTR SS:[EBP-28],RGE.03B681A0
- 03B005AB 68 08C4B403 PUSH RGE.03B4C408
- 03B005B0 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
- 03B005B3 51 PUSH ECX
- 03B005B4 E8 E9460300 CALL RGE.03B34CA2 ; JMP 到 msvcrt._CxxThrowException
- 03B005B9 8B96 D8000000 MOV EDX,DWORD PTR DS:[ESI+D8]
- 03B005BF 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
- 03B005C2 03C2 ADD EAX,EDX
- 03B005C4 8946 14 MOV DWORD PTR DS:[ESI+14],EAX
- 03B005C7 8946 10 MOV DWORD PTR DS:[ESI+10],EAX
- 03B005CA 885E 19 MOV BYTE PTR DS:[ESI+19],BL
- 03B005CD 885E 18 MOV BYTE PTR DS:[ESI+18],BL
- 03B005D0 C745 FC FFFFFFF>MOV DWORD PTR SS:[EBP-4],-1
- 03B005D7 B8 01000000 MOV EAX,1
- 03B005DC 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
- 03B005DF 64:890D 0000000>MOV DWORD PTR FS:[0],ECX
- 03B005E6 5F POP EDI
- 03B005E7 5E POP ESI
- 03B005E8 5B POP EBX
- 03B005E9 8BE5 MOV ESP,EBP
- 03B005EB 5D POP EBP
- 03B005EC C2 0800 RETN 8
复制代码
直接Ctrl+F9执行到RETN 8然后F8单步,两次Ctrl+F搜索CALL RGE.rb_str_new2指令,在它上一句PUSH ESI下断F9执行跟踪ESI的地址得到解密脚本。
F7步入CALL RGE.rb_str_new2指令。
- 03AF1770 >/$ 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]
- 03AF1774 |. 85D2 TEST EDX,EDX
- 03AF1776 |. 75 10 JNZ SHORT RGE.03AF1788
- 03AF1778 |. A1 A0F3BB03 MOV EAX,DWORD PTR DS:[rb_eArgError]
- 03AF177D |. 68 B837B603 PUSH RGE.03B637B8 ; ASCII "NULL pointer given"
- 03AF1782 |. 50 PUSH EAX
- 03AF1783 |. E8 A8B1FAFF CALL RGE.rb_raise
- 03AF1788 |> 57 PUSH EDI
- 03AF1789 |. 8BFA MOV EDI,EDX
- 03AF178B |. 83C9 FF OR ECX,FFFFFFFF
- 03AF178E |. 33C0 XOR EAX,EAX
- 03AF1790 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
- 03AF1792 |. F7D1 NOT ECX
- 03AF1794 |. 49 DEC ECX
- 03AF1795 |. 51 PUSH ECX
- 03AF1796 |. 52 PUSH EDX
- 03AF1797 |. E8 04FFFFFF CALL RGE.rb_str_new
- 03AF179C |. 83C4 08 ADD ESP,8
- 03AF179F |. 5F POP EDI
- 03AF17A0 \. C3 RETN
复制代码 03AF1790 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
03AF1792 |. F7D1 NOT ECX
03AF1794 |. 49 DEC ECX
得到脚本的大小,Ctrl+F9结束此子程。停到03A6F29A |. 8945 D4 |MOV [LOCAL.11],EAX
- 03A6F29A |. 8945 D4 |MOV [LOCAL.11],EAX
- 03A6F29D |. 6A 03 |PUSH 3
- 03A6F29F |. 53 |PUSH EBX
- 03A6F2A0 |. 8B55 DC |MOV EDX,[LOCAL.9]
- 03A6F2A3 |. 52 |PUSH EDX
- 03A6F2A4 |. 50 |PUSH EAX
- 03A6F2A5 |. 6A 04 |PUSH 4
- 03A6F2A7 |. A1 D081B603 |MOV EAX,DWORD PTR DS:[3B681D0]
- 03A6F2AC |. 50 |PUSH EAX
- 03A6F2AD |. 8B0D 90F2BB03 |MOV ECX,DWORD PTR DS:[rb_mKernel]
- 03A6F2B3 |. 51 |PUSH ECX
- 03A6F2B4 |. E8 27790300 |CALL RGE.rb_funcall
- 03A6F2B9 |. 83C4 24 |ADD ESP,24
- 03A6F2BC |. 8B75 08 |MOV ESI,[ARG.1]
- 03A6F2BF |. 8B7D E4 |MOV EDI,[LOCAL.7]
- 03A6F2C2 |. 8B5D E0 |MOV EBX,[LOCAL.8]
- 03A6F2C5 |.^ E9 B3FEFFFF \JMP RGE.03A6F17D
复制代码
03A6F2B4 |. E8 27790300 |CALL RGE.rb_funcall 初步猜测是实例化脚本的过程因为我步过的时候程序就跑起来了(汗- =)
但是它上面的几个PUSH参数我无解。
|