160个Crackme之044学习笔记
本帖最后由 海天一色001 于 2020-8-11 16:35 编辑上两个CM不能叫CM,目前还是一头雾水状态,需要学习新的知识才能应付啊。再来看第44个CM程序,难度仍是“?”,保护方式显示Name/Serial(Delphi)。
打开Dope2112.1.exe,在两个文本编辑框(Name/Serial)中输入“52pojie/1234567890”,点击Registrieren按钮,最下面的标签上显示出“Leider nicht versuchs noch mal !”的提示,这应该是错误提示吧,似英文非英文的。
第一步、查壳:
Delphi程序,无壳。
第二步、爆破:
DeDe无法加载Delphi 2.0版本,用IDR试一试,仍然出错了。
直接用OD载入:
程序前面倒是简洁的很,一大堆的call,不知道有什么用。
再用智能搜索字符串试一试:
找到了刚才的提示:
双击00421D5A这一行代码进入CPU窗口:
这两个字符串挨的很近,估计一个是正确提示一个是错误提示,还是百度一下:
德语!!!!
“Hey du hast es geschaft !”---嘿,你做到了!
“Leider nicht versuchs noch mal !”-----抱歉,请重试!
猜测没错,那么00421D40处的jnz跳过了正确提示,是关键跳了。
所以在这里nop掉,保存为Dope2112.1_nop.exe,打开,直接点击Registrieren按钮,又出了“Der Name muss min. 6 Zeichen lang sein”提示,猜测是Name要6个字符,用网上的德文翻译一下,没错。
重新输入“52pojie/1234567890”, 点击Registrieren按钮,出现正确提示,爆破成功。
第三步、追码:
撤消刚才爆破时nop的修改,来到段首处下断:
F9运行,输入“52pojie/1234567890”,点击Registrieren按钮,程序中断于00421BAE处。
F8单步慢慢向下,仔细查看信息窗口、寄存器窗口和堆栈窗口,基本上猜测判断出部分call的作用:
004117F8是得到文本的call
00405248 暂时不知道有什么用,反复F8、F7调试几次后发现是大写字母转换成小写字母的
00403364 得到字符串长度
00421BC1至00421BDB处代码为判断Name字符串是否满足至少6位,如不足6位则跳出“Der Name muss min. 6 Zeichen lang sein”提示;
00421BF2处将eax清零,作为下面循环数的暂存器;
00421BF4至00421CEA处,判断Name字符串中的每一个字符是否符合都是小写字母,如果不是,则统一定义对应值为0x5D;然后依次取name字符串中前5个字符的对应值,再加1个0x5D,存入dl中累加,得到一个数值;
00421CF0至00421CFE处,取Name字符串长度乘以0x4A7E的值,转换成10进制数值,存入SS :中;
00421D03至00421D0A处,将00421BF4至00421CEA处得到的累加值转换成10进制数值;
00421D0F至00421D22处将3个字符串连接起来组成真正的注册码;
从栈窗口中可以看到输入的Name、假码、真码;
00421D35至00421D5F处判断真假,在CM程序窗口中显示正确或错误的提示:
注册算法(VB编程):
Private Sub Command1_Click()
Dim Name, Serial As String
Dim i As Integer
Dim Num, Num1, Num2 As Double
Name = Text1.Text
If Len(Trim(Name)) < 6 Then
MsgBox ("Name必须超过6位,如不符合要求,默认Name为“52pojie”,Serial为“172-133490”!")
Text1.Text = "52pojie"
Text2.Text = "172-133490"
Exit Sub
End If
Name = LCase(Name)
Num1 = 93
For i = 1 To 5
Select Case Mid(Name, i, 1)
Case "a"
Num = 24
Case "b"
Num = 37
Case "c"
Num = 66
Case "d"
Num = 12
Case "e"
Num = 13
Case "f"
Num = 6
Case "g"
Num = 54
Case "h"
Num = 43
Case "i"
Num = 23
Case "j"
Num = 47
Case "k"
Num = 19
Case "l"
Num = 130
Case "m"
Num = 155
Case "n"
Num = 146
Case "o"
Num = 3
Case "p"
Num = 99
Case "q"
Num = 31
Case "r"
Num = 66
Case "s"
Num1 = 92
Case "t"
Num = 41
Case "u"
Num = 199
Case "v"
Num = 102
Case "w"
Num = 88
Case "x"
Num = 10
Case "y"
Num = 40
Case "z"
Num = 80
Case Else
Num = 93
End Select
Num1 = Num1 + Num
If Num1 >= 256 Then Num1 = Num1 - 256
Next i
Num2 = Len(Name) * 19070
Serial = Num1 & "-" & Num2
Text2.Text = Serial
End Sub
附件,含CM原程序、爆破后的程序、注册机、OD的调试文件等。
百度链接是:https://pan.baidu.com/s/1NEpyyUefbKcoJvMGG_9OmQ,提取码:p8dk。160个CM、我已练习过的前44个crackme程序(不含012、042、043)都在里面。 牛逼!你说你 十分感谢楼主分享!!楼主V587。。。万分感谢。。要比其他分享的,还慢慢优越感的楼主强多了。。。谢谢谢谢!! 谷歌翻译一下Leider nicht versuchs noch mal
是德语,意思是 抱歉,不要再试
评论能获得币吗? 感谢分享,很有用!
感谢分享。 学习了 厉害!精品啊。先谢谢了, 学习学习{:17_1068:}
感谢分享
页:
[1]
2