新手破解练习Crackme160之011 - Andrénalin.4
运行程序看到是自带键盘输入, 输入正确变更状态, 也没有特别的提示
-
打开OD搜索界面, 看到一大堆的注册成功字眼, 定位第一个00404AA3先试试, 往上看有一个跳00404A88, 打上断点
F9运行程序, 发现程序直接在断点处停下, 按几次F9都是一直停在这里, 由此可知, 这段代码是在一个timer里面,
OK, 不管三七二十一, 直接把je(00404A88)改nop, 程序直接进入注册成功支路, 暴力破解完成~ 欢呼一下, 还是这么的简单 -
正常破解, 刚才关键跳的前面又发现了跟先前几个一样的固定串"0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C", 继续往前几行看, 同样发现了大循环, 套路是一样一样的(果然还是同一个作者写的), 由于是timer事件, 没办法单步调试, 只能直接用VB Decomiler来分析代码了, 从工具看到, 作者竟然用了4个timer, 代码还一样呢, 分析timer1,
Private Sub Timer1_Timer() '404650
Dim var_54 As Variant
loc_0040479F: var_48 = Form1.Text1.Text
loc_004047ED: If (var_48 = global_00401E2C) + 1 = 0 Then GoTo loc_00404814
loc_004047FA: Set var_54 = Form1.Command13
loc_00404806: var_54.Enabled = False
loc_00404810: If var_54 >= 0 Then GoTo loc_0040484A
loc_00404812: GoTo loc_00404838
loc_00404814: ' Referenced from: 004047ED
loc_0040481F: Set var_54 = Form1.Command13
loc_0040482C: var_54.Enabled = True
loc_00404836: If var_54 >= 0 Then GoTo loc_0040484A
loc_00404838: ' Referenced from: 00404812
loc_00404844: var_54 = CheckObj(var_54, global_00401E30, 140)
loc_00404870: var_48 = Form1.Text1.Text
loc_004048AA: var_44 = var_48
loc_0040491D: For var_24 = 1 To Len(var_44) Step 1
loc_00404931: If var_F8 = 0 Then GoTo loc_00404A60
loc_00404A0C: var_34 = var_34 & Hex$((Asc(Mid$(CStr(var_44), CLng(var_24), 1)) + Val(CStr(Left(var_44, 1)))))
loc_00404A55: Next var_24
loc_00404A5B: GoTo loc_0040492F
loc_00404A60: ' Referenced from: 00404931
loc_00404A7F: var_8018 = (var_34 = "0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C")
loc_00404A88: If var_8018 = 0 Then GoTo loc_00404AD6
...
End Sub
代码太长, 中间就忽略了, 所有都是相同的, 都是将输入串(每一位的值 + 前几位的值)转16进制再连起来, 最后跟固定串对比,
那我们就把搜索框中所有的固定串都复制下来先,
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7G7C7D826D817E7B7C //这个不是16进制串, 排除
Q817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KEZB7C //这个不是16进制串, 排除
0817E747D7AFP7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747DüAFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个明显不是16进制串, 排除
0817E7WOD7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
http://beam.to/cugABCDEFGHIJKLMNOPQRSTUVWXYZ1234567 //这个明显不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D8KKE7B7C //这个不是16进制串, 排除
0817E747$7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747#7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7AFFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C
0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D8H7E7B7C //这个不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7G7C7D826D817E7B7C //这个不是16进制串, 排除
Q817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KEZB7C //这个不是16进制串, 排除
0817E747D7AFP7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747DüAFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E7WOD7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
http://beam.to/cugABCDEFGHIJKLMNOPQRSTUVWXYZ1234567 //这个明显不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D8KKE7B7C //这个不是16进制串, 排除
0817E747$7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747#7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7AFFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74G47A7F7E7B7C7D826D817E7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D8H7E7B7C //这个不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7G7C7D826D817E7B7C //这个不是16进制串, 排除
Q817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KEZB7C //这个不是16进制串, 排除
0817E747D7AFP7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747DüAFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E7WOD7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
http://beam.to/cugABCDEFGHIJKLMNOPQRSTUVWXYZ1234567 //这个明显不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D8KKE7B7C //这个不是16进制串, 排除
0817E747$7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个明显不是16进制串, 排除
0817E747#7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个明显不是16进制串, 排除
0817E747D7AFFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7B7C7R826D817E7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D8H7E7B7C //这个不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7G7C7D826D817E7B7C //这个不是16进制串, 排除
Q817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KEZB7C //这个不是16进制串, 排除
0817E747D7AFP7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747DüAFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个明显不是16进制串, 排除
0817E7WOD7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
http://beam.to/cugABCDEFGHIJKLMNOPQRSTUVWXYZ1234567 //这个明显不是16进制串, 排除
0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D8KKE7B7C //这个不是16进制串, 排除
0817E747$7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个明显不是16进制串, 排除
0817E747#7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个明显不是16进制串, 排除
0817E747D7AFFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D747W7A7F7E7B7C7D826D817E7B7C //这个不是16进制串, 排除
0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D8H7E7B7C //这个不是16进制串, 排除
经过肉眼的判断, 排除掉绝大部分答案, 就剩下1组可能是答案了:(因为16进制数只包含0~9, A~F, 没有别的字符了) 0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C, 我们在VB Decomiler代码中搜索可得:
loc_004064A2: For var_24 = 1 To Len(var_44) Step 1
loc_004064AA: If var_24 = 0 Then GoTo loc_004065D9
loc_00406585: var_34 = 0 & Hex$((Asc(Mid$(CStr(var_44), CLng(var_24), 1)) + Val(CStr(Left(var_44, 2)))))
loc_004065CE: Next var_24
loc_004065D4: GoTo loc_004064A8
loc_004065D9: ' Referenced from: 004064AA
loc_004065F8: var_811C = (var_34 = "0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C")
算法就是将每一位+前两位转16进制, 由此可得: val(str[0]) * 10 + val(str[1]) + ascii(str[0]) = 0x81 => 10s0+s1+s0+0x30 = 11s0+s1 = 0x81 - 0x30 = 0x51 = 11 * 7 + 4, 所以str[0] = '7', str[1] = '4'
所以前2位的值是74, , 验证一下, 第二位与前两位和转16进制是不是7E, 74(0x4A)+0x34 = 0x7E, 没问题, 是对的, 这样固定串, 每2位做为一个16进制数减去74再转回字符, 结果便是: 74*3032589#**0541238#7412, 一看这结果就有预感是对的, 因为这些全是程序自键盘中的字符, 输入后完全正确, 没问题, 状态成功变为已注册, 到此破解完成~
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号