谈谈VB程序的破解(5千字)
有很多人说破解VB程序的利器是SmartCheck,我不敢苟同,因为我一直以为,只要有一个调试器就能完成所有的破解才是我向往的境界.当然这不一定最简便,但无疑是最有效的.
这次就说说VB程序的破解,当然,我不知道是否有其它可行的途径,我只知道,通过调试器就能完成一个破解.
示例程序:随便写段VB代码,然后编译为本机代码(P-Code不在本文的讨论范围之内,我也发现了一些相关的规律,还在研究中)
Private Sub Form_Load()
If ax = 0 Then
MsgBox ("hi!")
End
Else
MsgBox ("ok!")
End
End If
End Sub
用TR载入
0187:00401166 FF2570104000 JMP NEAR [00401070] //从00401171到了这里.
0187:0040116C 68A0124000 PUSH DWORD 004012A0 //载入后停在这里
0187:00401171 E8F0FFFFFF CALL `MSVBVM60!ThunRTMain` //这个Call一定要进入
0187:00401176 0000 ADD [EAX],AL
0187:00401178 0000 ADD [EAX],AL
0187:0040117A 0000 ADD [EAX],AL
......
MSVBVM60!ThunRTMain
0187:6600DE22 55 PUSH EBP
0187:6600DE23 8BEC MOV EBP,ESP
0187:6600DE25 6AFF PUSH BYTE -01
0187:6600DE27 6898980166 PUSH DWORD 66019898
0187:6600DE2C 6871EF0E66 PUSH DWORD 660EEF71
0187:6600DE31 64A100000000 MOV EAX,[FS:00]
0187:6600DE37 50 PUSH EAX
0187:6600DE38 64892500000000 MOV [FS:00],ESP
0187:6600DE3F 51 PUSH ECX
0187:6600DE40 51 PUSH ECX
0187:6600DE41 83EC4C SUB ESP,BYTE +4C
0187:6600DE44 53 PUSH EBX
0187:6600DE45 56 PUSH ESI
0187:6600DE46 57 PUSH EDI
0187:6600DE47 8965E8 MOV [EBP-18],ESP
0187:6600DE4A 8B7508 MOV ESI,[EBP+08]
0187:6600DE4D 8935DCF71066 MOV [6610F7DC],ESI
0187:6600DE53 8365FC00 AND DWORD [EBP-04],BYTE +00
0187:6600DE57 8D45A0 LEA EAX,[EBP-60]
0187:6600DE5A 50 PUSH EAX
0187:6600DE5B FF1518110066 CALL `KERNEL32!GetStartupInfoA`
0187:6600DE61 0FB745D0 MOVZX EAX,WORD [EBP-30]
0187:6600DE65 A3D8F71066 MOV [6610F7D8],EAX
0187:6600DE6A FF35CCF61066 PUSH DWORD [6610F6CC]
0187:6600DE70 56 PUSH ESI
0187:6600DE71 BE70F41066 MOV ESI,6610F470
0187:6600DE76 8BCE MOV ECX,ESI
0187:6600DE78 E860000000 CALL 6600DEDD //这个Call一定要进去哦.
......(其实不要看在DLL中转,其实并不难,很快就可以返回到程序的领空,我的目的就是要在程序运行前进入程序领空)
0187:******** FFD0 CALL EAX //最后到了这里,ok,返回程序领空了哦!
......
0187:0040146C 816C240433000000 SUB DWORD [ESP+04],33 //停在这里,这里已经是程序领空了哦!
0187:00401474 E9B7040000 JMP 00401930 //跳到什么地方,你看下面吧!
0187:00401479 0000 ADD [EAX],AL
......
0187:00401930 55 PUSH EBP //看看象什么?是不是和汇编,delphi程序开始的地方一样啊?我们终于来到VB程序真正开始的地方了.
0187:00401931 8BEC MOV EBP,ESP
0187:00401933 83EC0C SUB ESP,BYTE +0C
0187:00401936 68A6104000 PUSH DWORD 004010A6
0187:0040193B 64A100000000 MOV EAX,[FS:00]
......
0187:00401991 C7458C02800000 MOV DWORD [EBP-74],8002
0187:00401998 FF1538104000 CALL `MSVBVM60!__vbaVarTstEq`
0187:0040199E 6685C0 TEST AX,AX
0187:004019A1 B904000280 MOV ECX,80020004
0187:004019A6 B80A000000 MOV EAX,0A
0187:004019AB 894DA4 MOV [EBP-5C],ECX
0187:004019AE 89459C MOV [EBP-64],EAX
0187:004019B1 894DB4 MOV [EBP-4C],ECX
0187:004019B4 8945AC &n