[反汇编练习] 160个CrackMe之022(CarLitoZ.1)分析思路及过程
本帖最后由 pk8900 于 2017-11-30 23:07 编辑最近天气很冷,没外出,除了继续学习C++,就是在论坛里看看帖子,还有继续学习 【适合破解新手的160个crackme练手】,本文就是第22个CrackMe: CarLitoZ.1
分析完后,在论坛里搜索了一下,只有一篇14年的文章,思路差不多,写的不是太详细,就决定发这个帖子,以供论坛里和我一样的新手查阅和对照。
【crackme简介】
下载地址:http://pan.baidu.com/share/link?shareid=541269&uk=4146939145
VB编写,无壳,是一个序列号式验证方式,有错误提示:“ Wrong Code! Try Again”及未注册字样:"Unregistered"。
【crackme截图】
【初步观察推测】
软件对你输入的序列号进行验证,不对的话,就会调用一个VB的MxgBox信息框,并清空输入框。File菜单里有 RestartAbout Quit三个子菜单,Restart 点击没有变化,About有个信息框,有三行英文说明。
【进行分析步骤】
0x01:先不要急于用OD调试,因为VB程序在调试器里的代码可读性太差,还是请出VB反编译软件:VB Decompiler,说心里话,这软件分析的还真不错,至少会让你看清软件的大致轮廓,截图01。
左栏中事件代码:reg_Click_402D20,一看就是我们的注册按钮事件,观察前几行代码:
注册成功字样:"Registration Successful"
之前的关键跳转:If (arg_8.SaveProp = 1) = 0 Then GoTo loc_00402F49
跳转之前的判断:var_eax = Call Crack.rgr ,因为在左栏中有个事件是:rgr_403230,由此可以判断,算法部分的代码就在rgr_403230代码里。
另外发现可疑文件路径:"c:\windows\MTR.dat" 和可疑字符串 “trv2156j0e”,该字符串测试并非注册码。
0x02:判断算法部分rgr_403230,截图02
顶部一串{ XXXXX = abt.Label1.Caption var_eax = abt.Label1 ...}的代码,下方若干 {Mid(XXXX, M, N)}的函数,初步判断为Mid取Label1.Caption字串中间的字符,连接成一个字串,具体是不是还要到调试器里验证。
0x03:Label1.Caption究竟是什么?
在abt窗体中,有如下代码:{Begin Label Label1 'Offset: 00001A0C Caption = "abt.frx":0},并没有实际的字符串值,在十六进制编辑器中可以看到。截图03
Label1.Caption是“bPe CrackMe v1.0 (若干空格) This CrackMe it's to trainer your VB cracking ability(若干空格) Developed by CarLitoZ”
以上三点弄清楚后,接下来就是动态调试,验证了,X64DBG载入,来到loc_00403662: var_8C = Mid(var_1C, 6, 1),第一个Mid函数代码处,可以看到如下图:
call edi,也就是 <msvbvm50.rtcMidCharVar>:,上面压栈参数中:push 6,即第6位,运行过call edi后,EAX即返回值,是一个堆栈地址,有许多新手朋友会认为EAX堆栈地址里或堆栈指向的地址里的数据就是函数返回值,实际上是错误的,实际上EAX+8堆栈指向的地址里才是返回的数据。这是VB程序的特殊之处,验证第一个字符为:r,继续F8跑代码,会取出多个字符,然后程序调用了<msvbvm50._vbaVarAdd>,依次连接,最后调用<msvbvm50._vbaVarTstEq>函数将字符串跟我们输入的序列号进行对比,如果一样的话,就会在"c:\windows\MTR.dat" 写入“trv2156j0e”(下次启动程序会较验这个字符串以确定是否注册成功了,可以通过菜单中的Restart事件清除注册记录),并显示注册成功信息框及字样,正确的注册码是:rkh1oyie,因代码过长,就不贴代码上来了。
附注册机VB代码:
Private Sub Command1_Click()
lable_str = "bPe CrackMe v1.0" & String(123, Chr(32)) & _
"This CrackMe it's to trainer your VB cracking ability" & _
String(123, Chr(32)) & "Developed by CarLitoZ"
Text1.Text = Mid(lable_str, 6, 1) & Mid(lable_str, 9, 1) + Mid(lable_str, 143, 1) _
+ Mid(lable_str, 16, 1) + Mid(lable_str, 161, 1) + Mid(lable_str, 171, 1) _
+ Mid(lable_str, 166, 1) + Mid(lable_str, 168, 1)
End Sub
因为是新手,也就只能写这些了,不对的地方,请大家给予指正。
mayl8822 发表于 2017-12-1 11:01
请问一下楼主用的什么画图工具?
picpick,截图工具,可以直接修改保存。 试了下,用OD直接字符串查找很快能爆破,但是要算法的话看着还是头大。
看了楼主的操作,受益匪浅!感谢 跟着学习下,谢谢楼主的经验分享! 感谢楼主分享
厉害啊!! 感谢分享,学习一下 跟着学习一下,谢谢楼主 谢谢楼主分享 先试试去看看那 非常感谢提供!我也该努力了 请问一下楼主用的什么画图工具?