吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5675|回复: 4
收起左侧

[原创] 160个CrakeMe程序之013

[复制链接]
海天一色001 发表于 2017-6-24 17:20
本帖最后由 海天一色001 于 2017-6-24 17:53 编辑

第12个CM程序经一个多星期的努力终于无奈宣布失败,NE程序实在是不知道如何去爆破和追码!
第13个CM程序,作者badboy,难度一星,保护方式是Name/Serial,Serial(VB5),也显示出仍是一个VB程序。
01.png

02.png        03.png        04.png           05.png
先运行看一下程序基本情况,有两种情况,CrackMe 1.0版和CrackMe 2.0版,1.0只有序列号,2.0则是用户名/序列号方式。两种方式输入假码后,按Try按钮均不弹出窗口,在Serial文本框中显示出“Try Again!”的提示。
先查壳,无壳,VB5/6程序。
06.png
第一步,爆破(没完成!!!!):
导入OD,第11个CM时试用了按钮事件断点,这次再练一下:
在反汇编窗口中右键查找二进制字串或快捷键“Ctrl+B”,输入“816C24”,确定,
07.png
这一次没找到按钮事件断点!查字符串吧:
08.png
竟然也没找到任何字符串!
既然如此,只有用一下插件中的VB断点了:
09.png
点开VB,将“BP  __vbaStrComp”选上,则在OD下方的命令窗口已出现了这条命令。F9运行程序,点开CrackMe 1.0,输入“1111111111”,点击“Try”按钮,程序马上中断于74023563处,这是msvbvm50.dll的地盘,不是程序领空:
10.png
本想在堆栈窗口选返回到反汇编窗口,可仔细观察堆栈窗口,发现了疑似序列号的数字“7714890”!!!!
11.png
将这串数字复制入文本框,再点“Try”按钮,程序返回成功界面!
13.png                 12.png
再切换到CrackMe 2.0,输入用户“52pojie.cn”,密码“1111111111”,点击“Try”按钮,程序直接中断,堆栈中出现了“UNICODE "106993-697776"”的字符串!
14.png

15.png
和CrackMe 1.0相似,再将“106993-697776”复制入Serial文本框中,再试,成功了!
17.png           16.png         
等会儿,这个“OK”按钮又有什么作用?试一试!返回到用户名/序列号界面了!再点击一次“Try”按钮,没动静!再看堆栈,又有变化了!
18.png
出现了"Congratulation 52pojie.cn !"和“Try Again!”这两个字符串!试着将字符串“Congratulation 52pojie.cn !”复制入Serial文本框中,点击“Try”,程序界面如下,没有什么变化了。
19.png
那么再返回CrackMe 1.0中点击OK按钮看看:
在文本框中输入“1111111111”,点“Try”按钮,程序中断,堆栈中的数字变了!
20.png
昨天是“7714890”,今天是“7714934”!将这个数值复制入文本框,点“Try”,程序成功!
21.png           22.png
点击“OK”,程序又返回右上图界面:
点击“Try”,程序中断,F9运行,程序界面失败了!
24.png
而此时堆栈中出现了UNICODE "Congratulation !"的字符串!将这串字符复制入Serial文本框中,再点“Try”,又成功了!
23.png
再点“OK”,程序返回右下图界面,再点“Try”,程序再次变成左侧成功界面。说明本程序中需要输入两次序列号,一次是计算出来的注册码,一次是成功后界面上的“Congratulation !”
25.png           26.png         
昨天是一个注册码,今天是另一个,中间的数字在后三位不一样了,追码时要看看是怎么回事。
序列号在堆栈中很简单地以明码形式出来了,那么就要爆破及追码了!
在堆栈中第一行看到返回到XXXXX,还是在msvbvm50.dll中间。点右键到反汇编窗口跟随,再上下查找,没找到有用的返回用户代码的地方!选“返回到用户代码”反复执行,还是在msvbvm50.dll中打转。
还是换SmartCheck,一个调试VB的工具:
点击打开SmartCheck,出现如下界面:
27.png
点击“继续打开程序”,点“程序”菜单选“运行”命令或者按F5快捷键,CM程序启动,同时SmartCheck中出现被调试的CM程序的每一步动作:
28.png
输入序列号,点击“Try”按钮,程序动作到89了!
29.png
根据相关的VB编程知识,程序运行顺序是窗体创建(14号)—窗体引导(35号),然后是鼠标在窗体上经过(44号、48号),点击下拉框选CrackMe1.0(52号),又是鼠标在窗体上经过(76号、80号),点击“Try”按钮(84号),鼠标移动(89号)!依次点开各序号查看内容:
30.png
在52号下拉框中已经根据时间生成了序列号“7714934”!其中调用了几个非常熟悉的函数year、month 、day、now(年月日现在),但是具体计算过程看不出来。
再向下查看到84号,可以猜测是将text3.text与label3.caption比较,正确,则label3.caption输出“Congratulation !”;错误,则输出“Try Again!”。
31.png
那么将序列号复制入Serial文本框中,点“Try”,程序出现成功界面了,继续查看177号按钮事件,猜测是先得到序列号文本与标签的标题内容进行比较,正确了,则Frame3面板显示,一堆按钮或隐或显,标签3显示“Congratulation !”。
32.png
继续看CrackMe2.0:点下拉框选CrackMe2.0,输入用户名“52pojie.cn”,序列号“1111111111”,点“Try”,再查看SmartCheck中的事件记录:
33.png
从392至471号处,可以看出,是取用户名的每一位进行运算,得出“106993”和“697776”两个字符串,结合OD可知用“-”连接起来就是CrackMe2.0的第一次序列号;输入序列号后,继续运行,从SmartCheck的事件记录中看出第二次序列号是“Congratulation 52pojie.cn !”,也就是在CrackMe1.0的第二个序列号中间加了个用户名。
从SmartCheck这款软件中可以看出很多信息,但是想爆破和追码还是远远不够的。那么继续换工具,VB Decompiler来了!
34.png
根据SmartCheck中的记录,先查看Combo1_Click_405550区段的代码,与OD对照,发现竟然对不上!!!在代码中看到这两句:
[Visual Basic] 纯文本查看 复制代码
loc_4053A8: var_88 = CLng((((Day(Now) * Day(23)) + (Month(Now) * Month(2))) + (Year(Now) * Year(3))))
loc_4053DB: var_1D0 = CStr((((var_88 + var_88) + CLng((Day(14) * Year(2020)))) + CLng((Day(14) * Year(2020)))))

验证了一下,这就是利用当前时间来得到CrackMe1.0第一个序列号的算法:
再看Command4_Click_4052AC中的代码:
[Visual Basic] 纯文本查看 复制代码
Private Sub Command4_Click() '4052AC
  'Data Table: 403D90
  Dim var_88 As Variant
  loc_4051AD: var_8C = Me.Text3.Text
  loc_4051D3: var_88 = "" 'Ignore this
  loc_4051DA: If (var_8C = Me.Label3.Caption) Then
  loc_4051E9:   Me.Command2.Visible = False
  loc_4051EE:   var_88 = vbNull 'Ignore this
  loc_4051FD:   Me.Frame3.Visible = False
  loc_405202:   var_88 = vbNull 'Ignore this
  loc_405211:   Me.Command1.Visible = False
  loc_405216:   var_88 = vbNull 'Ignore this
  loc_405225:   Me.Command5.Visible = False
  loc_40522A:   var_88 = vbNull 'Ignore this
  loc_405239:   Me.Command3.Visible = True
  loc_40523E:   var_88 = vbNull 'Ignore this
  loc_40524D:   Me.Text2.Visible = False
  loc_405252:   var_88 = vbNull 'Ignore this
  loc_405261:   Me.Frame3.Visible = True
  loc_405266:   var_88 = vbNull 'Ignore this
  loc_405275:   Me.Command4.Visible = False
  loc_40527A:   var_88 = vbNull 'Ignore this
  loc_40528A:   Me.Label3.Caption = "Congratulation !"
  loc_40528F:   var_88 = vbNull 'Ignore this
  loc_405295: Else
  loc_4052A2:   Me.Text3.Text = "Try Again!"
  loc_4052A7:   var_88 = vbNull 'Ignore this
  loc_4052AA: End If
  loc_4052AA: Exit Sub
  loc_4052AB: IDE.GoTo loc_4052C3 'Ignore this
End Sub

从代码中可以很轻松地看出程序第二个注册码应该是这一句中显示的:
loc_40528A:   Me.Label3.Caption = "Congratulation !"
CrackMe1.0的注册机用VB编写应该如下:
[Visual Basic] 纯文本查看 复制代码
Serialcode = CLng((((Day(Now) * Day(23)) + (Month(Now) * Month(2))) + (Year(Now) * Year(3))))
Serial1 = CStr((((Serialcode + Serialcode) + CLng((Day(14) * Year(2020)))) + CLng((Day(14) * Year(2020)))))
Serial2="Congratulation !"
Text1.text=Serial1
Text2.text=Serial2

再看CrackMe2.0的“OK”按钮事件Command2_Click_4058EC():
[Visual Basic] 纯文本查看 复制代码
Private Sub Command2_Click() '4058EC
  'Data Table: 403D90
  Dim var_88 As Variant
  Dim var_118 As Variant
  Dim var_8C As String
  Dim var_138 As Integer
  Dim var_13C As String
  Dim var_90 As Long
  Dim var_1BC As String
  Dim var_1CC As Variant
  Dim var_1E0 As String
  loc_4055D9: var_8C = Me.Text1.Text
  loc_4055EB: var_88 = vbNull 'Ignore this
  loc_4055EE: If (Len(var_8C) < 5) Then
  loc_4055FE:   Me.Text2.Text = "At least 5 characters!"
  loc_405603:   var_88 = vbNull 'Ignore this
  loc_405606:   Exit Sub
  loc_405607: End If
  loc_40560A: var_94 = "0110617121214051216101106141404110614140411091211100810101608040610121608100416"
  loc_405622: var_98 = Me.Text1.Text
  loc_405625: var_88 = vbNull 'Ignore this
  loc_40562D: var_A8 = 1 'Variant
  loc_405641: For var_108 = 4 To CVar(Len(var_98)): var_C8 = var_108 'Variant
  loc_405698:   var_90 = CLng((CDbl(var_90) + (CDbl(Asc(Mid$(var_98, CLng(var_C8), 1))) * Val(Mid$(var_94, CLng((var_A8 * 3)), 3)))))
  loc_40569B:   var_8C = "" 'Ignore this
  loc_4056A2:   var_118 = "" 'Ignore this
  loc_4056C1:   HardType 'Ignore this
  loc_4056C4:   If ((var_A8 + 1) >= 39) Then
  loc_4056CC:     var_A8 = 0 'Variant
  loc_4056D0:   End If
  loc_4056D3: Next var_108 'Variant
  loc_4056DE: var_A8 = 1 'Variant
  loc_4056F2: For var_168 = 4 To CVar(Len(var_98)): var_C8 = var_168 'Variant
  loc_405764:   var_1CC = CVar((CDbl((Asc(Mid$(var_98, CLng(var_C8), 1)) * Asc(Mid$(var_98, CLng((var_C8 - 1)), 1)))) * Val(Mid$(var_94, CLng((var_A8 * 2)), 2)))) 'Double
  loc_40576C:   var_178 = (var_178 + var_1CC) 'Variant
  loc_405770:   var_8C = "": var_13C = "" 'Ignore this
  loc_405779:   var_118 = "": var_138 = "" 'Ignore this
  loc_40579A:   HardType 'Ignore this
  loc_40579D:   If ((var_A8 + 1) >= 39) Then
  loc_4057A5:     var_A8 = 0 'Variant
  loc_4057A9:   End If
  loc_4057AC: Next var_168 'Variant
  loc_4057E8: var_8C = "": var_13C = "": var_1BC = "": var_1E0 = "" 'Ignore this
  loc_405802: var_8C = Me.Text2.Text
  loc_405812: var_88 = vbNull 'Ignore this
  loc_405815: If (var_8C = LTrim$(Str$(var_90)) & "-" & LTrim$(Str$(var_178))) Then
  loc_405824:   Me.Command2.Visible = False
  loc_405829:   var_88 = vbNull 'Ignore this
  loc_405838:   Me.Command1.Visible = False
  loc_40583D:   var_88 = vbNull 'Ignore this
  loc_40584C:   Me.Command5.Visible = True
  loc_405851:   var_88 = vbNull 'Ignore this
  loc_405860:   Me.Command3.Visible = False
  loc_405865:   var_88 = vbNull 'Ignore this
  loc_405874:   Me.Text2.Visible = False
  loc_405879:   var_88 = vbNull 'Ignore this
  loc_405888:   Me.Frame3.Visible = True
  loc_40588D:   var_88 = vbNull 'Ignore this
  loc_4058BD:   Me.Label3.Caption = "Congratulation " & Me.Text1.Text & " !"
  loc_4058C2:   var_8C = "": var_13C = "" 'Ignore this
  loc_4058CB:   var_88 = "" 'Ignore this
  loc_4058D5: Else
  loc_4058E2:   Me.Text2.Text = "Try Again!"
  loc_4058E7:   var_88 = vbNull 'Ignore this
  loc_4058EA: End If
  loc_4058EA: Exit Sub
  loc_4058EB: IDE.GoTo loc_405903 'Ignore this
End Sub

和CrackMe1.0差不多找到了注册码算法,其中下面这六句代码中直接将loc_4056C4和loc_40579D地址中的“If ((var_A8 + 1) >= 39) Then”改成两句
[Visual Basic] 纯文本查看 复制代码
var_A8 = var_A8 + 1;
if var_A8>=39 then

才能在VB中正常运行。
[Visual Basic] 纯文本查看 复制代码
loc_4056C4:   If ((var_A8 + 1) >= 39) Then
  loc_4056CC:     var_A8 = 0 'Variant
  loc_4056D0:   End If

loc_40579D:   If ((var_A8 + 1) >= 39) Then
  loc_4057A5:     var_A8 = 0 'Variant
  loc_4057A9:   End If

VB中CrackMe2.0的注册码算法是:
[Visual Basic] 纯文本查看 复制代码
Private Sub Command3_Click()
    username = Text3.Text
    If Len(username) < 5 Then
       'Text1.Visible = True
       Text3.Text = "请至少输入5个字符!!!"
       Exit Sub
    End If
    'If username = "" Then username = "52pojie.cn"
    Key = "0110617121214051216101106141404110614140411091211100810101608040610121608100416"
    Z = 1
    For i = 4 To CVar(Len(username))
        fcode = CLng((CDbl(fcode) + (CDbl(Asc(Mid$(username, CLng(i), 1))) * Val(Mid(Key, CLng((Z * 3)), 3)))))
       'Print fcode
       Z = Z + 1
       If Z >= 39 Then Z = 0
    Next
    X = 1
    For j = 4 To CVar(Len(username))
      result = CVar((CDbl((Asc(Mid(username, CLng(j), 1)) * Asc(Mid$(username, CLng((j - 1)), 1)))) * Val(Mid$(Key, CLng((X * 2)), 2)))) 'Double
      scode = scode + result 'Variant
      X = X + 1
      If X >= 39 Then Z = 0
    Next
    'Print scode
    Text1.Text = LTrim$(Str$(fcode)) & "-" & LTrim$(Str$(scode))
    Text2.Text = "Congratulation " & Text3.Text & " !"
End Sub

本想先爆破的,可是却找到了注册码的明码和算法,怎么也没找到爆破点在哪里!P-code代码真的是搞不懂!到处搜索,在本论坛找到一篇,内容非常好,虽然我照着大神的方法去做,可是还是对WKTVBDebugger这个软件不熟悉啊!在虚拟机的XP系统中安装了,打开badboy.exe,错误频出,提示要运行在NT/2000系统下!好吧,又搜索win2000的虚拟机镜像,很不好找,下不来!最后下了一个2000的安装程序光盘iso镜像,新建了一个虚拟机的2000系统,WKTVBDebugger才正常打开!
具体爆破内容推荐《160个CrackMe之013 badboy》,网址是:http://www.52pojie.cn/thread-452085-1-1.html
附件 013.rar (20.1 KB, 下载次数: 8) ,含CM原程序、爆破后的程序及013注册机。
百度链接是:http://pan.baidu.com/s/1skMkJY9密码: 86pm,160个CM、我已练习过的前13个crackme程序(不含012)都在里面。

点评

这折腾精神点赞!  发表于 2017-6-24 17:33

免费评分

参与人数 8威望 +1 吾爱币 +14 热心值 +8 收起 理由
LDM233 + 1 + 1 我很赞同!
pk8900 + 1 + 1 刚研究完这个,你的注册机输入39个以上字符会出错,估计60多个也会,可以试.
Sound + 1 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
伤or悲 + 1 + 1 我很赞同!
朱朱你堕落了 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hcloveld + 1 + 1 用心讨论,共获提升!
wangsheng66 + 1 + 1 用心讨论,共获提升!
WYWZ + 1 + 1 继续努力加油!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lusu777 发表于 2017-6-26 18:54
好帖咋没人回呢。
fishinfire 发表于 2017-7-3 14:34
LDM233 发表于 2018-1-26 20:05
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表