新手破解练习Crackme160之013 - badboy

这个程序是两个版本整合在一起了, OD搜索界面没发现有用的东东, 先用PEiD分析是VB写的, 然后用VB Decompiler分析
是P-Code方式编译的, 由于OD无法定位跟踪就没办法暴力破解了, OD上没法玩了, 我们就直接在VB Decompiler上看每个事件的代码

  1. 左侧 Code -> Form1 -> Combo1_Click_405550, 右侧:
    Private Sub Combo1_Click() '405550
	  'Data Table: 403D90
	  Dim var_15C As Variant
	  Dim var_1CC As Variant
	  loc_405374: var_15C = ((Day(Now) * Day(23)) + (Month(Now) * Month(2)))
	  loc_4053A2: var_1CC = (var_15C + (Year(Now) * Year(3)))
	  loc_4053DB: var_1D0 = CStr((((CLng(var_1CC) + CLng(var_1CC)) + CLng((Day(14) * Year(2020)))) + CLng((Day(14) * Year(2020)))))
	  loc_4053EA: Me.Command1.Visible = True
	  loc_4053FE: Me.Command3.Visible = False
	  loc_405412: Me.Frame3.Visible = False
	  loc_405435: If (Me.Combo1.ListIndex = 1) Then     (如果选择的是第一个, 程序都是从0开始的, 所以就是排在第二的那个了)
	  loc_405444:   Me.Command2.Visible = True
	  loc_405458:   Me.Command4.Visible = False
	  loc_40546C:   Me.Frame1.Visible = True
	  loc_405480:   Me.Frame4.Visible = False
	  loc_405494:   Me.Frame2.Visible = False
	  loc_4054A7:   Form1.Height = CDbl(2265)
	  loc_4054B8:   Me.Text2.Visible = True
	  loc_4054C3: Else        (那这里就是选择第0个了)
	  loc_4054CF:   Me.Command4.Visible = True    (这个为true, 就是说明这个显示了,  其它隐藏了, 那我们就看这个对应的事件)
	  loc_4054E3:   Me.Command2.Visible = False
	  loc_4054F7:   Me.Frame4.Visible = True
	  loc_40550C:   Me.Label3.Caption = var_1D0
	  loc_405520:   Me.Frame1.Visible = False
	  loc_405534:   Me.Frame2.Visible = False
	  loc_405547:   Form1.Height = CDbl(2265)
	  loc_40554C: End If
	  loc_40554C: Exit Sub
	End Sub

继续看这里Code -> Form1 -> Command4_Click_4052AC, 右侧代码:

	Private Sub Command4_Click() '4052AC
	  'Data Table: 403D90
	  loc_4051DA: If (Me.Text3.Text = Me.Label3.Caption) Then
	  loc_4051E9:   Me.Command2.Visible = False
	  loc_4051FD:   Me.Frame3.Visible = False
	  loc_405211:   Me.Command1.Visible = False
	  loc_405225:   Me.Command5.Visible = False
	  loc_405239:   Me.Command3.Visible = True
	  loc_40524D:   Me.Text2.Visible = False
	  loc_405261:   Me.Frame3.Visible = True
	  loc_405275:   Me.Command4.Visible = False
	  loc_40528A:   Me.Label3.Caption = "Congratulation !"
	  loc_405295: Else
	  loc_4052A2:   Me.Text3.Text = "Try Again!"
	  loc_4052AA: End If
	  loc_4052AA: Exit Sub
	End Sub

代码比较简单, 如果输入框的值等于label3的Caption值就显示"Congratulation !", 我们找找看label3的Caption值是什么
不就成功了吗, 返回上段代码, 我们看到了其值是var_1D0, 这个又是三行代码算出来的:
var_15C = ((Day(Now) * Day(23)) + (Month(Now) * Month(2)))
var_1CC = (var_15C + (Year(Now) * Year(3)))
var_1D0 = CStr((((CLng(var_1CC) + CLng(var_1CC)) + CLng((Day(14) * Year(2020)))) + CLng((Day(14) * Year(2020)))))
那我们直接就用网页写VB代码执行上面的算法, 如下代码保存为KeyGen.hta就可以直接运行得到系列号了

	<html>
	<head>
	<title>1.0注册码</title>
	</head>
	<body>
	<div>系列号为: <span id="rlt"></span></div>
	<script language="VBScript">
	window.resizeTo 300,90 '设置窗体大小
	a = Day(Now) * Day(23) + Month(Now) * Month(2)
	b = a + Year(Now) * Year(3)
	c = 2 * b +  2 * Day(14) * Year(2020)
	document.getElementById("rlt").innerHTML = c
	</script>
	</body>
	</html>

也可以直接写VBS代码, 如下代码保存为KeyGen.vbs, 也可以直接运行

	no = 2 * (Day(Now) * Day(23) + Month(Now) * Month(2) + Year(Now) * Year(3)) +  2 * Day(14) * Year(2020)
	msgbox "系列号: " & no, 0, "系列号1.0"
  1. 同理, 从2.0版本的按钮事件 Code -> Form1 -> Command2_Click_4058EC 代码中取得算法如下:
    1). hta (网页写的界面比vbs的漂亮)
	<html>
	<head>
	<title>2.0注册码</title>
	</head>
	<body>
	<script language="VBScript">
	window.resizeTo 300,120

	sub btn_click
	  name = document.getElementById("name").value
	  if ((Len(name) < 5) or ( Len(name) > 30)) Then
		document.getElementById("name").value = "用户名5~30位"
		exit sub
	  end if

	  str = "0110617121214051216101106141404110614140411091211100810101608040610121608100416"
	  c = 0
	  d = 0
	  n = 1
	  for i=4 to len(name)
		c = CLng((CDbl(c) + (CDbl(Asc(Mid(name, CLng(i), 1))) * CInt(Mid(str, CLng((n * 3)), 3)))))
		if (n + 1 >= 26) then n = 0
		n = n + 1
	  next
	  n = 1
	  for i=4 to len(name)
		d = d + CLng(CDbl(Asc(Mid(name, CLng(i), 1))) * CDbl(Asc(Mid(name, CLng((i - 1)), 1))) * CInt(Mid(str, CLng((n * 2)), 2)))
		if (n + 1 >= 39) then n = 0
		n = n + 1
	  next

	  document.getElementById("rlt").innerHTML = c & "-" & d
	end sub
	</script>
	<div>用户名: <input type="text" id="name" style="width:120px" /> <input type="button" value="生成" onclick="btn_click" /></div>
	<div>系列号: <span id="rlt"></span></div>
	</body>
	</html>

2). 下面用vbs来写:

	do
	  name = inputbox("请输入用户名: ")
	  if name="" Then Wscript.Quit()
	  if ((Len(name) < 5) or (Len(name) > 30)) Then
		msgbox("用户名5~30位")
	  else
		exit do
	  end if
	loop

	str = "0110617121214051216101106141404110614140411091211100810101608040610121608100416"
	c = 0
	d = 0
	n = 1
	for i=4 to len(name)
	  c = CLng((CDbl(c) + (CDbl(Asc(Mid(name, CLng(i), 1))) * CInt(Mid(str, CLng((n * 3)), 3)))))
	  n = n + 1
	  if (n >= 39) then n = 0 '这里应该是26, 不能39, 3位, 3位的取, 只能最大取26次
	next
	n = 1
	for i=4 to len(name)
	  d = d + CLng(CDbl(Asc(Mid(name, CLng(i), 1))) * CDbl(Asc(Mid(name, CLng((i - 1)), 1))) * CInt(Mid(str, CLng((n * 2)), 2)))
	  n = n + 1
	  if (n >= 39) then n = 0
	next
	msgbox "系列号: " & c & "-" & d, 0, "系列号2.0"

到此两个都正常破解完成了 VB Decompiler的反编译器灰常强大, 出来的代码基本上小调整就可以直接执行了,

这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-04-12 16:09  hankerstudio  阅读(28)  评论(0)    收藏  举报