自己写的CrackMe2.0,求大神逆向分析出注册机
最近在学习脱壳和破解小程序,学习了不少知识,但又感觉欠缺不少,所以自己写了一个crackme,破解起来很简单,但是想根据OD中的代码来写出注册机,感觉无从下手,请大神帮忙写出附件的注册机的逆向详细过程,谢谢!本帖最后由 qzhsjz 于 2020-7-30 12:43 编辑
看图标得出是VB程序,所以直接上VB Decompiler Pro。
可得VB代码:
Private Sub Command1_Click() '402290
loc_00402319: var_40 = Text1.Text
loc_00402357: var_eax = %fobj
loc_0040236C: var_8C = "Seven"
loc_0040238E: var_18 = var_40 & "Seven"
loc_004023A3: var_eax = call Proc_1_0_4025C0(var_18, Me, edi)
loc_004023AD: var_1C = call Proc_1_0_4025C0(var_18, Me, edi)
loc_004023B9: var_8C = var_1C
loc_004023F1: var_2C = Mid(var_1C, 8, 16)
loc_00402419: var_40 = Text2.Text
loc_0040243D: var_4C = var_40
loc_0040245A: var_eax = %fobj
loc_00402487: If (var_40 = var_2C) = 0 Then GoTo loc_004024DB
loc_004024C0: MsgBox("Congratulations!", 0, var_64, var_74, var_84)
loc_004024D9: GoTo loc_0040252B
loc_004024DB: 'Referenced from: 00402487
loc_00402512: MsgBox("Try again!", 0, var_64, var_74, var_84)
loc_0040252B: 'Referenced from: 004024D9
loc_0040253E: GoTo loc_00402571
loc_0040254C: var_eax = %fobj
loc_00402570: Exit Sub
loc_00402571: 'Referenced from: 0040253E
End Sub
根据这段VB代码,可知:
关键判断点在var_40 = var_2C
然后var_40的来源是Text2.Text,也就是用户输入的SN,所以var_2C是用来判断的正确SN。
再来看var_2C的来源:
var_2C = Mid(var_1C, 8, 16) = Mid(call Proc_1_0_4025C0(var_18, Me, edi), 8, 16) = Mid(call Proc_1_0_4025C0(var_40 & "Seven", Me, edi), 8, 16) = Mid(call Proc_1_0_4025C0(Text1.Text & "Seven", Me, edi), 8, 16)
而Proc_1_0_425C0根据名称可以判断是MD5,所以整个注册码的公式应该是:
注册码 = 取8-16位(MD5(用户名 & “Seven”))。
qcz00622 发表于 2020-7-30 14:31
学习了,所以逆向获取注册机的思路就是先得知程序的编译环境,然后用对应的反编译工具去一点点的获取作者的 ...
不完全正确,其实也可以用debug一步步跟算法 学习了,所以逆向获取注册机的思路就是先得知程序的编译环境,然后用对应的反编译工具去一点点的获取作者的编程思路,然后得到最后的算法!{:1_893:} qzhsjz 发表于 2020-7-30 12:42
看图标得出是VB程序,所以直接上VB Decompiler Pro。
可得VB代码:
牛逼!不过mid函数不是取8-16位。是从第8位开始,取16位的长度。 天使无声 发表于 2020-7-30 15:37
牛逼!不过mid函数不是取8-16位。是从第8位开始,取16位的长度。
哈哈,不太懂VB其实,至今没写过一个VB程序 强啊大苏打啊 强势围观一波。。 厉害啊小白看蒙! 用心讨论,共获提升! 啊这,围观大佬
页:
[1]
2