好友
阅读权限25
听众
最后登录1970-1-1
|
肥牛
发表于 2017-6-15 09:45
CM22是一个VB写的程序,我对VB程序的调试是很抵触的。我觉得VB做的程序,反编译后代码的可读性实在是太差,而且它对寄存器的使用也非常奇怪,所以一直以来遇到VB的程序我都是绕着走。
这次看到CM22应该是属于入门级的,闲来无事,拿它练手也是不错的。
程序运行后,只有一个注册码的输入框,类似这样的情况,要么是读了机器的特征码而计算出的注册码,要么就是固定的注册码。
随便输入一个,弹出错误提示。
另外,我们还注意到这个CM还有菜单,
Restart就是重启该程序,Quit就是退出程序,点击About,会弹出下面的窗口,好像没有什么特别吧?
我的习惯,调试前先用工具反编译查看代码。所以用VB Decompiler Pro去反编译一下。虽然用这个工具反编译的结果往往不尽如人意,但聊过于无,至少有助于我们理解程序的算法逻辑。
首先是注册点击按钮的事件。
这个时间中先调用了rgr这个函数,而且调用完直接就判断是否是正确的注册码,说明rgr这个函数是关键的注册码生成函数。那我们再去看rgr函数。
这个函数就很好理解了,前面那么多变量其实是同一个,就是About窗口的Label1的内容。后面那段
var_ret_5 = Mid(var_1C, 6, 1) + Mid(var_20, 9, 1) + Mid(var_24, 143, 1) + Mid(var_28, 16, 1) + Mid(var_2C, 161, 1) + Mid(var_30, 171, 1)
var_ret_7 = var_ret_5 + Mid(var_34, 166, 1) + Mid(var_38, 168, 1)
其实就是把Label1的内容,分别取第6、9、143、16、161、171、166、168个字符重新组合起来就是注册码。
那么Label1的内容是什么?
在VB Decompiler Pro中看不到,从刚才About窗口显示的内容大概能猜出来,可是因为是字符的组合,差一点儿都不行,必须要确认。
没办法,只能用OD了。
在OD中按步骤调试,因为我们刚才通过VB Decompiler Pro的rgr函数,看到地址是00403373,所以Ctrl+G在这里下断点,随便输入注册码后,点击注册按钮,断下,F8单步跟踪。
因为程序中反复调用msvbvm50.rtcMidCharVar函数,所以我们很容易就能在调用这个函数之前的EAX中找到Label1的内容,见下图:
当然,这是内存的部分,我把它复制出来。
[Asm] 纯文本查看 复制代码 001629C4 62 00 50 00 65 00 20 00 43 00 72 00 61 00 63 00 b.P.e. .C.r.a.c.
001629D4 6B 00 4D 00 65 00 20 00 20 00 20 00 76 00 31 00 k.M.e. . . .v.1.
001629E4 2E 00 30 00 20 00 20 00 20 00 20 00 20 00 20 00 ..0. . . . . . .
001629F4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A04 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A14 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A24 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A34 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A44 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A54 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A64 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A74 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A84 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162A94 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162AA4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162AB4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162AC4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162AD4 20 00 20 00 20 00 20 00 20 00 54 00 68 00 69 00 . . . . .T.h.i.
00162AE4 73 00 20 00 43 00 72 00 61 00 63 00 6B 00 4D 00 s. .C.r.a.c.k.M.
00162AF4 65 00 20 00 69 00 74 00 27 00 73 00 20 00 74 00 e. .i.t.'.s. .t.
00162B04 6F 00 20 00 74 00 72 00 61 00 69 00 6E 00 65 00 o. .t.r.a.i.n.e.
00162B14 72 00 20 00 79 00 6F 00 75 00 72 00 20 00 56 00 r. .y.o.u.r. .V.
00162B24 42 00 20 00 63 00 72 00 61 00 63 00 6B 00 69 00 B. .c.r.a.c.k.i.
00162B34 6E 00 67 00 20 00 61 00 62 00 69 00 6C 00 69 00 n.g. .a.b.i.l.i.
00162B44 74 00 79 00 20 00 20 00 20 00 20 00 20 00 20 00 t.y. . . . . . .
00162B54 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162B64 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162B74 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162B84 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162B94 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162BA4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162BB4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162BC4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162BD4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162BE4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162BF4 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162C04 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162C14 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162C24 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
00162C34 20 00 20 00 20 00 20 00 20 00 44 00 65 00 76 00 . . . . .D.e.v.
00162C44 65 00 6C 00 6F 00 70 00 65 00 64 00 20 00 62 00 e.l.o.p.e.d. .b.
00162C54 79 00 20 00 43 00 61 00 72 00 4C 00 69 00 74 00 y. .C.a.r.L.i.t.
00162C64 6F 00 5A 00 o.Z.
从这段内存中可以看到,Label1是由三段文字组成,并且每段之间是用若干空格分开。而且是Unicode字符,每个字符占两个字节。
我们把它转为ANSI格式,就形成了如下的文字:
于是,按照刚才得到的算法,取第6、9、143、16、161、171、166、168个字符,组成的字符串就是“rkh1oyie”。
在CM22中输入此字符串,注册成功!
注册以后,程序就变为已注册状态,不能再次注册了。
其实,从上面的代码中我们也能看出来,其实是把注册信息写到了c:\windows\MTR.dat文件中了,这里我们就不管它了。
如果想重新注册,就点菜单里的Restart就好了。
附上CM22的程序,供大家练手。
CarLitoZ.1.zip
(6.88 KB, 下载次数: 10)
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|