关于vcrkme01的算法分析
程序:vcrkme01
作者:[v0!d] 我入行时间短不知道是否是他,如果有错误还请见谅
以下是作者的文档资料:
[v0!d] - Crackme v0.01 :
~~~~~~~~~~~~~~~~~~~~~~~~
[This crack me is totally written for newbiez]
RuleZ :
~~~~~~~
1. Patching is not allwoed, cuz it is 2 easy to crack ...
2. Find a correct code for ur name...
3. Code a keygen, write a tut, then send it to me...
that's it!
P.S : to all advanced crackers plz don't try to crack this
cuz u will really be wasting ur time !!! :P
send ur solution to : v0id2k1@hotmail.com
cya
[v0!d]
工具:这次工具很简单的,就是一个OD,作者说得很清楚了, Patching is not allwoed,呵呵
说明:近来对算法有点兴趣了,今天又做了一个。不过例子是来自《加密解密实战》,只是算法和调试是我自己独立完成的。呵呵,主要是上次的那个精给了我很大的动力,我喜欢显摆,呵呵,不要见笑拉。有错的还望指出,在此先谢过!
感谢:CCDebuger的OD教程和小敏给我传的ASCII速查手册。
首先还是先运行
输入注册名:rockandtcl
注册码:123456
没有提示居然???
只好启动OD
载入后搜索所有的参看文本,找到GOOD JOB,双击进入
0040124D . 68 306A4000 push vcrkme01.00406A30
00401252 . 68 30694000 push vcrkme01.00406930
00401257 . E8 A4FDFFFF call vcrkme01.00401000
关键的CALL,设断
0040125C . 83C4 08 add esp,8
0040125F . 83F8 01 cmp eax,1
00401262 . A3 646C4000 mov dword ptr ds:[406C64],eax
00401267 . 75 65 jnz short vcrkme01.004012CE
00401269 . 8B15 28694000 mov edx,dword ptr ds:[406928]
0040126F . 6A 40 push 40
; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401271 . 68 80604000 push vcrkme01.00406080
; |Title = "GOOD JOB! - CRACKED!"
00401276 . 68 50604000 push vcrkme01.00406050
; |Text = "Send your solution to : v0id2k1@hotmail.com "
0040127B . 52 push edx
; |hOwner => NULL
0040127C . FF15 C4504000 call dword ptr ds[<&USER32.Message>;
\MessageBoxA
重新栽入:
点check后程序在
00401257 . E8 A4FDFFFF call vcrkme01.00401000
被断了下来,按F8进入
00401000 /$ 53 push ebx
00401001 |. 8B5C24 0C mov ebx,dword ptr ss:[esp+C] ;vcrkme01.00406A30
装入假的注册号
00401005 |. 55 push ebp
00401006 |. 56 push esi
00401007 |. 8B7424 10 mov esi,dword ptr ss:[esp+10]
装入注册名
0040100B |. 8A0B mov cl,byte ptr ds:[ebx]
取注册号第一位
0040100D |. 33ED xor ebp,ebp
0040100F |. 57 push edi
00401010 |. 8A06 mov al,byte ptr ds:[esi]
取注册名第一位
00401012 |. 3AC1 cmp al,cl
00401014 |. 0F85 69010000 jnz vcrkme01.00401183
比较,不相等则结束
0040101A |. 8BFE mov edi,esi
把注册名放在[EDI]首地址中
0040101C |. 83C9 FF or ecx,FFFFFFFF
对ECX赋值:FFFFFFFF
0040101F |. 33C0 xor eax,eax
EAX 清零
00401021 |. F2:AE repne scas byte ptr es:[edi]
00401023 |. F7D1 not ecx
00401025 |. 49 dec ecx
得到注册名的位数
00401026 |. 83F9 05 cmp ecx,5
小于5则死
00401029 |. 0F82 54010000 jb vcrkme01.00401183
0040102F |. 807B 01 2D cmp byte ptr ds:[ebx+1],2D
00401033 |. /0F85 4A010000 jnz vcrkme01.00401183
比较注册码的第二位是否为2D就是‘-’否则就死
看来我们开始的注册码就不对
重新载入
注册名不变,注册码改为:r-1234
继续上面的地方开始
00401039 |. 8BFE mov edi,esi
把注册名放入EDI的地址中
0040103B |. 83C9 FF or ecx,FFFFFFFF
0040103E |. 33C0 xor eax,eax
00401040 |. 33D2 xor edx,edx
00401042 |. F2:AE repne scas byte ptr es:[edi]
00401044 |. F7D1 not ecx
00401046 |. 49 dec ecx
以上还是计算注册名的位数
00401047 |. 74 17 je short vcrkme01.00401060
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!