标 题: 呱叽呱叽的CrackME
发信人: 呱叽呱叽
时 间:2003/01/12 10:54pm
详细信息:
CrackME
编译语言:VB6
壳:考虑到写给我一样的菜鸟没加
工具:W32Dasm Trw2000
前几天看了一下看雪老师的 Crack Tutorial中关于VB6的分析 msvbvm60!__vbavartsteq可以比较字符串(Variant型)于是联想到上次我写的CrackMe还没有动态分析出注册码,
呱叽呱叽的CrackME
。开工。既然是我写的CrackMe我当然知道我的变量定义的就是变体型了。那么首先我们已经找到程序比较的入口点了。用W32Dasm打开程序浏览一下程序调用的所有函数,果真有msvbvm60!__vbavartsteq 双击进入
:0040258D 89B578FFFFFF mov dword ptr [ebp+FFFFFF78] esi
:00402593 C78564FFFFFF08800000 mov dword ptr [ebp+FFFFFF64] 00008008
* Reference To: MSVBVM60.__vbaVarTstEq Ord:0000h<<-------------------睁大眼睛,就在这了
|
:0040259D FF1548104000 Call dword ptr [00401048]<<---------这里很可疑,进去看看
:004025A3 8D8D74FFFFFF lea ecx dword ptr [ebp+FFFFFF74] 注意要用Trw2000分析啊!
:004025A9 8BD8 mov ebx eax
* Reference To: MSVBVM60.__vbaFreeObj Ord:0000h
|
:004025AB FF15B0104000 Call dword ptr [004010B0]
:004025B1 8D8D64FFFFFF lea ecx dword ptr [ebp+FFFFFF64]
* Reference To: MSVBVM60.__vbaFreeVar Ord:0000h
|
:004025B7 FF150C104000 Call dword ptr [0040100C]
:004025BD B904000280 mov ecx 80020004
:004025C2 B80A000000 mov eax 0000000A
:004025C7 663BDE cmp bx si
:004025CA 898D3CFFFFFF mov dword ptr [ebp+FFFFFF3C] ecx
:004025D0 898534FFFFFF mov dword ptr [ebp+FFFFFF34] eax
:004025D6 898D4CFFFFFF mov dword ptr [ebp+FFFFFF4C] ecx
:004025DC 898544FFFFFF mov dword ptr [ebp+FFFFFF44] eax
:004025E2 0F84AC000000 je 00402694
* Reference To: MSVBVM60.__vbaVarDup Ord:0000h
|
:004025E8 8B1D94104000 mov ebx dword ptr [00401094]
:004025EE 8D9514FFFFFF lea edx dword ptr [ebp+FFFFFF14]
:004025F4 8D8D54FFFFFF lea ecx dword ptr [ebp+FFFFFF54]
* Possible StringData Ref from Code Obj ->"by lovemelovemydogs "
在 0040259D 按F8进入,再按大概三次F8来到
6610ABCE FF7424 08 PUSH DWORD PTR SS:[ESP+8]
6610ABD2 FF7424 08 PUSH DWORD PTR SS:[ESP+8]
6610ABD6 6A 00 PUSH 0
6610ABD8 E8 3A54FFFF CALL MSVBVM60.66100017<<--------------这里还有一个CALL进去看看
6610ABDD 8B0485 D4F7026>MOV EAXDWORD PTR DS:[EAX*4+6602F7D>
6610ABE4 C2 0800 RETN 8
6610ABE7 FF7424 08 PUSH DWORD PTR SS:[ESP+8]
6610ABEB FF7424 08 PUSH DWORD PTR SS:[ESP+8]
6610ABEF 6A 00 PUSH 0
6610ABF1 E8 2154FFFF CALL MSVBVM60.66100017
6610ABF6 8B0485 F4F7026>MOV EAXDWORD PTR DS:[EAX*4+6602F7F>
6610ABFD C2 0800 RETN 8
6610AC00 FF7424 08 PUSH DWORD PTR SS:[ESP+8]
进入6610ABD8 E8 3A54FFFF CALL MSVBVM60.66100017
来到
66100017 55 PUSH EBP
66100018 8BEC MOV EBPESP
6610001A 83EC 38 SUB ESP38
6610001D 8B55 10 MOV EDXDWORD PTR SS:[EBP+10]
66100020 8B4D 0C MOV ECXDWORD PTR SS:[EBP+C]
66100023 53 PUSH EBX
66100024 56 PUSH ESI
66100025 66:8B31 MOV SIWORD PTR DS:[ECX]
66100028 57 PUSH EDI
66100029 66:8B3A MOV DIWORD PTR DS:[EDX]
6610002C B8 FF7F0000 MOV EAX7FFF
66100031 23F8 AND EDIEAX
66100033 23F0 AND ESIEAX
66100035 66:83FF 09 CMP DI9
66100039 0F84 D3770000 JE MSVBVM60.66107812
6610003F 66:83FE 09 CMP SI9
66100043 0F84 C9770000 JE MSVBVM60.66107812
66100049 0FB745 08 MOVZX EAXWORD PTR SS:[EBP+8]
6610004D 68 01000300 PUSH 30001
66100052 50 PUSH EAX
66100053 51 PUSH ECX
66100054 52 PUSH EDX
66100055 FF15 60FE1066 CALL DWORD PTR DS:[6610FE60] ; OLEAUT32.VarCmp
6610005B 8945 08 MOV DWORD PTR SS:[EBP+8]EAX
6610005E 8B75 08 MOV ESIDWORD PTR SS:[EBP+8]
66100061 85F6 TEST ESIESI
66100063 0F8C E9780000 JL MSVBVM60.66107952
66100069 8D46 FF LEA EAXDWORD PTR DS:[ESI-1]
6610006C 5F POP EDI
6610006D 5E POP ESI
6610006E 5B POP EBX
6610006F C9 LEAVE
66100070 C2 0C00 RETN 0C
看这句 66100055 FF15 60FE1066 CALL DWORD PTR DS:[6610FE60] ; OLEAUT32.VarCmp
看雪老师说 OLEAUT32 在VB中提供了很多对VB中的Variant类型的变量进行操作的函数,主要是一系列
VarXXX( ),看来快到核心了,
电脑资料
《呱叽呱叽的CrackME》(http://meiwen.anslib.com)。进入66100055 FF15 60FE1066 CALL DWORD PTR DS:[6610FE60]来到
653BF4FE 55 PUSH EBP
653BF4FF 8BEC MOV EBPESP
653BF501 83EC 38 SUB ESP38
653BF504 53 PUSH EBX
653BF505 56 PUSH ESI
653BF506 8B75 08 MOV ESIDWORD PTR SS:[EBP+8]
653BF509 BB FF7FFFFF MOV EBXFFFF7FFF
653BF50E 57 PUSH EDI
省略部分
653BFBB0 FF75 10 PUSH DWORD PTR SS:[EBP+10]
653BFBB3 FF77 08 PUSH DWORD PTR DS:[EDI+8]
653BFBB6 FF76 08 PUSH DWORD PTR DS:[ESI+8]
653BFBB9 E8 5F080000 CALL OLEAUT32.VarBstrCmp<<------Crack Tutorial中介绍可以使用
653BFBBE ^E9 0DFAFFFF JMP OLEAUT32.653BF5D0 VarBstrCmp( )比较字符串
653BFBC3 8B76 08 MOV ESIDWORD PTR DS:[ESI+8]
653BFBC6 B9 0000FF1F MOV ECX1FFF0000
653BFBCB 8BDE MOV EBXESI
653BFBCD B8 00000A00 MOV EAX0A0000
653BFBD2 23D9 AND EBXECX
653BFBD4 BA FFFF0000 MOV EDX0FFFF
653BFBD9 3BD8 CMP EBXEAX
当然进去了,go 看来胜利就在眼前
653C041D 55 PUSH EBP<<-----------------首先来到这里了!!
653C041E 8BEC MOV EBPESP
653C0420 51 PUSH ECX
653C0421 53 PUSH EBX
653C0422 56 PUSH ESI
653C0423 8B75 08 MOV ESIDWORD PTR SS:[EBP+8]
653C0426 57 PUSH EDI
653C0427 85F6 TEST ESIESI
653C0429 75 4C JNZ SHORT OLEAUT32.653C0477
653C042B 2175 FC AND DWORD PTR SS:[EBP-4]ESI
653C042E 8B4D 0C MOV ECXDWORD PTR SS:[EBP+C]
653C0431 85C9 TEST ECXECX<<----------------这里是比较核心了,D ECX
653C0433 75 4A JNZ SHORT OLEAUT32.653C047F 是不是看见正确注册码和错误注册码了?
653C0435 33DB XOR EBXEBX
653C0437 395D FC CMP DWORD PTR SS:[EBP-4]EBX
653C043A 8B55 FC MOV EDXDWORD PTR SS:[EBP-4]
653C043D 72 02 JB SHORT OLEAUT32.653C0441
按F8 大约13次来到 653C0431 85C9 TEST ECXECX
这里是比较核心了,D ECX
正确注册码和错误注册码都在这 Q Q 5 0 3 8 2 1 8 7
7 8 7 8 7 8 7 8
总结: 1 VB6中__vbavartsteq 测试变量是否相等
2 oleaut32.dll 提供了很多对VB中的Variant类型的变量进行操作的函数主要 是一系列VarXXX( )。(具体内容见看雪的电子版教程Crack Tutorial)
3 VB6有可能用VarBstrCmp( )比较注册码(Variant类型的变量)
4 VB的程序真是麻烦。这是最后一条
希望本篇分析文章能对你有所帮助!
呱叽呱叽
2003.1.11
历时1小时45分
--------------------------------------------------------------------------------
Copyright©2000-2024 看雪学院(www.pediy.com) All Rights Reserved.