LS两位不好意思我没说清楚。。。其实是因为我脱壳脱了近两个小时还没发现有什么进展,心情有点郁闷,在第N次OD载入时不小心在下面这里按了F8。。。。。
0040B001 60 PUSHAD
0040B002 E8 1B000000 CALL 例子三.0040B022 ;在这里应该F7进入的,我按错了F8。。。
0040B007 - E9 FC8DB50F JMP 0FF63E08
于是OD跳转到了这里(这里更正下,应该是19次,不是20次)
7C92EAF0 8B1C24 MOV EBX,DWORD PTR SS:[ESP]
7C92EAF3 51 PUSH ECX
7C92EAF4 53 PUSH EBX
7C92EAF5 E8 C78C0200 CALL ntdll.7C9577C1
7C92EAFA 0AC0 OR AL,AL
7C92EAFC 74 0C JE SHORT ntdll.7C92EB0A
7C92EAFE 5B POP EBX
7C92EAFF 59 POP ECX
7C92EB00 6A 00 PUSH 0
7C92EB02 51 PUSH ECX
7C92EB03 E8 11EBFFFF CALL ntdll.ZwContinue ;我在这里设断,第20次在这里跟入
7C92EB08 EB 0B JMP SHORT ntdll.7C92EB15
7C92EB0A 5B POP EBX
7C92EB0B 59 POP ECX
7C92EB0C 6A 00 PUSH 0
7C92EB0E 51 PUSH ECX
7C92EB0F 53 PUSH EBX
7C92EB10 E8 3DF7FFFF CALL ntdll.ZwRaiseException
然后我试着按了F9 N次,按第N+1次时主窗口居然就出现了!
那么我就重新载入证明N=19(应该是19的,我更正下),又一次重载后第20次我用F7跟入,到了下面
7C92D619 > B8 20000000 MOV EAX,20
7C92D61E BA 0003FE7F MOV EDX,7FFE0300
7C92D623 FF12 CALL DWORD PTR DS:[EDX] ; ntdll.KiFastSystemCall 这里也用F7跟入
7C92D625 C2 0800 RETN 8
然后再转到这里
7C92EB8B > 8BD4 MOV EDX,ESP
7C92EB8D 0F34 SYSENTER ;这里按F7或F8后返回
7C92EB8F 90 NOP
7C92EB90 90 NOP
7C92EB91 90 NOP
7C92EB92 90 NOP
7C92EB93 90 NOP
7C92EB94 > C3 RETN
又返回到这里
7C92EAF0 8B1C24 MOV EBX,DWORD PTR SS:[ESP]
7C92EAF3 51 PUSH ECX
7C92EAF4 53 PUSH EBX
7C92EAF5 E8 C78C0200 CALL ntdll.7C9577C1 ;这次在这里F7跟入
7C92EAFA 0AC0 OR AL,AL
7C92EAFC 74 0C JE SHORT ntdll.7C92EB0A
7C92EAFE 5B POP EBX
7C92EAFF 59 POP ECX
7C92EB00 6A 00 PUSH 0
7C92EB02 51 PUSH ECX
7C92EB03 E8 11EBFFFF CALL ntdll.ZwContinue
然后可以一直按F8到这里
7C957855 50 PUSH EAX
7C957856 FF75 0C PUSH DWORD PTR SS:[EBP+C]
7C957859 53 PUSH EBX
7C95785A 56 PUSH ESI
7C95785B E8 F3BEFCFF CALL ntdll.7C923753 ;这里按F7跟入
7C957860 F605 5AC3997C 8>TEST BYTE PTR DS:[7C99C35A],80
7C957867 8BF8 MOV EDI,EAX
7C957869 0F85 16720100 JNZ ntdll.7C96EA85
7C95786F 395D 08 CMP DWORD PTR SS:[EBP+8],EBX
7C957872 0F84 1B720100 JE ntdll.7C96EA93
7C957878 8BC7 MOV EAX,EDI
7C95787A 33C9 XOR ECX,ECX
7C95787C 2BC1 SUB EAX,ECX
然后到了这里
7C923772 FF7424 20 PUSH DWORD PTR SS:[ESP+20]
7C923776 FF7424 20 PUSH DWORD PTR SS:[ESP+20]
7C92377A FF7424 20 PUSH DWORD PTR SS:[ESP+20]
7C92377E FF7424 20 PUSH DWORD PTR SS:[ESP+20]
7C923782 FF7424 20 PUSH DWORD PTR SS:[ESP+20]
7C923786 E8 0E000000 CALL ntdll.7C923799 ;继续F7跟入
7C92378B 5F POP EDI
7C92378C 5E POP ESI
7C92378D 5B POP EBX
7C92378E C2 1400 RETN 14
7C923799 55 PUSH EBP
7C92379A 8BEC MOV EBP,ESP
7C92379C FF75 0C PUSH DWORD PTR SS:[EBP+C]
7C92379F 52 PUSH EDX
7C9237A0 64:FF35 0000000>PUSH DWORD PTR FS:[0]
7C9237A7 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
7C9237AE FF75 14 PUSH DWORD PTR SS:[EBP+14]
7C9237B1 FF75 10 PUSH DWORD PTR SS:[EBP+10]
7C9237B4 FF75 0C PUSH DWORD PTR SS:[EBP+C]
7C9237B7 FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C9237BA 8B4D 18 MOV ECX,DWORD PTR SS:[EBP+18]
7C9237BD FFD1 CALL ECX ;F7跟入
7C9237BF 64:8B25 0000000>MOV ESP,DWORD PTR FS:[0]
7C9237C6 64:8F05 0000000>POP DWORD PTR FS:[0]
7C9237CD 8BE5 MOV ESP,EBP
7C9237CF 5D POP EBP
7C9237D0 C2 1400 RETN 14
然后一直F8到下面
00E41EA6 3117 XOR DWORD PTR DS:[EDI],EDX
00E41EA8 4E DEC ESI
00E41EA9 F8 CLC
00E41EAA 47 INC EDI
00E41EAB 47 INC EDI
00E41EAC 47 INC EDI
00E41EAD 47 INC EDI
00E41EAE 83C8 A6 OR EAX,FFFFFFA6
00E41EB1 81C2 1D387F70 ADD EDX,707F381D
00E41EB7 8BC0 MOV EAX,EAX
00E41EB9 48 DEC EAX
00E41EBA 51 PUSH ECX
00E41EBB 8BCE MOV ECX,ESI
00E41EBD E3 03 JECXZ SHORT 00E41EC2
00E41EBF 59 POP ECX
00E41EC0 ^ EB E4 JMP SHORT 00E41EA6
00E41EC2 59 POP ECX ;不要在这里按F4,只能跟着按F8兜圈子
00E41EC3 61 POPAD
00E41EC4 03C0 ADD EAX,EAX
00E41EC6 C3 RETN
然后兜了3、4圈后retn到了这里
00E41E14 5B POP EBX ; 例子三.00400000
00E41E15 58 POP EAX
00E41E16 05 0AAC04D6 ADD EAX,D604AC0A
00E41E1B 5C POP ESP
00E41E1C 0BC9 OR ECX,ECX
00E41E1E ^ 74 E3 JE SHORT 00E41E03
00E41E20 8901 MOV DWORD PTR DS:[ECX],EAX
00E41E22 03C3 ADD EAX,EBX
00E41E24 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
00E41E28 61 POPAD
00E41E29 FFE0 JMP EAX ;这里便是OEP了
= =!!综上所述,整个过程非常误打误撞。。。有点不好意思。。。。。。。。