肥牛 发表于 2017-6-15 09:45

160个CM之22

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的内容,见下图:

当然,这是内存的部分,我把它复制出来。
001629C462 00 50 00 65 00 20 00 43 00 72 00 61 00 63 00b.P.e. .C.r.a.c.
001629D46B 00 4D 00 65 00 20 00 20 00 20 00 76 00 31 00k.M.e. . . .v.1.
001629E42E 00 30 00 20 00 20 00 20 00 20 00 20 00 20 00..0. . . . . . .
001629F420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A0420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A1420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A2420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A3420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A4420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A5420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A6420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A7420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A8420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162A9420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162AA420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162AB420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162AC420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162AD420 00 20 00 20 00 20 00 20 00 54 00 68 00 69 00   . . . . .T.h.i.
00162AE473 00 20 00 43 00 72 00 61 00 63 00 6B 00 4D 00s. .C.r.a.c.k.M.
00162AF465 00 20 00 69 00 74 00 27 00 73 00 20 00 74 00e. .i.t.'.s. .t.
00162B046F 00 20 00 74 00 72 00 61 00 69 00 6E 00 65 00o. .t.r.a.i.n.e.
00162B1472 00 20 00 79 00 6F 00 75 00 72 00 20 00 56 00r. .y.o.u.r. .V.
00162B2442 00 20 00 63 00 72 00 61 00 63 00 6B 00 69 00B. .c.r.a.c.k.i.
00162B346E 00 67 00 20 00 61 00 62 00 69 00 6C 00 69 00n.g. .a.b.i.l.i.
00162B4474 00 79 00 20 00 20 00 20 00 20 00 20 00 20 00t.y. . . . . . .
00162B5420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162B6420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162B7420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162B8420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162B9420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162BA420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162BB420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162BC420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162BD420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162BE420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162BF420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162C0420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162C1420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162C2420 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
00162C3420 00 20 00 20 00 20 00 20 00 44 00 65 00 76 00   . . . . .D.e.v.
00162C4465 00 6C 00 6F 00 70 00 65 00 64 00 20 00 62 00e.l.o.p.e.d. .b.
00162C5479 00 20 00 43 00 61 00 72 00 4C 00 69 00 74 00y. .C.a.r.L.i.t.
00162C646F 00 5A 00                                    o.Z.

从这段内存中可以看到,Label1是由三段文字组成,并且每段之间是用若干空格分开。而且是Unicode字符,每个字符占两个字节。
我们把它转为ANSI格式,就形成了如下的文字:

于是,按照刚才得到的算法,取第6、9、143、16、161、171、166、168个字符,组成的字符串就是“rkh1oyie”。
在CM22中输入此字符串,注册成功!

注册以后,程序就变为已注册状态,不能再次注册了。

其实,从上面的代码中我们也能看出来,其实是把注册信息写到了c:\windows\MTR.dat文件中了,这里我们就不管它了。
如果想重新注册,就点菜单里的Restart就好了。

附上CM22的程序,供大家练手。

snccwt 发表于 2017-6-15 14:05

热心帮顶帖

ricroon 发表于 2017-6-15 20:57

这些cm能一次性打包下载吗?第一次看到这个帖子。

铜江998 发表于 2017-6-16 18:25

感谢感谢感谢

上善若水app 发表于 2017-6-17 15:20

好详细,学习了,楼主66哒

违规昵称109 发表于 2017-6-19 14:07

666练练手

snddman 发表于 2017-6-21 09:45

谢谢分享,有空下载下来练习练习。
页: [1]
查看完整版本: 160个CM之22