苏紫方璇 发表于 2013-7-3 10:18

尝试一下恒大的第六课

恒大的第二季第六课这次并没有给出答案,提供了一个错误的方法来让我们思考,为什么追出了真正的注册码,但无法注册。
这其中的原因就是,并没有看下面的比较call。他的比较是和用户名作比较,并不是我们常见的注册码比较,所以在注册码中输入真码是不对的。在这个例子中注册码才是真正的用户名,二用户名才是真正的注册码。
下面接着恒大的教程开始分析。。
在教程中恒大已经告诉我们段首在什么地方,所以前面的我就不说了,直接在段首下断,F8单步步过。
你会发现程序会取用户名,注册码,然后比较是否为空。

然后在下面又取了一次注册码,经过运算的得出一个数字,这个数字先不管他继续F8
在这里,这个call运行了一段vb脚本代码,得出一个字串。

下面的一个call获取了一个数字,之后和上面vb脚本获取的那个字串拼接起来,得到真码

细心地你会发现,上面取注册码后运算出的那个数字就是和vb脚本获取的字串拼接的那个数字。

然后继续单步
在这里你会发现,他把假的用户名和真码压栈,然后是一个call,这应该就是关键call了。


关键call下面有什么呢,当然是关键跳了。。。这里在关键跳的上方还有一个call(这个貌似是清理数据用的)。

如果要爆破的话就是从这个地方下手,直接nop
如果获取注册码的话,就把真码输到用户名的地方就可以了

十分期待恒大的300楼的谜底。。。。。。也不知道自己分析的对不对。。。如果有什么不对的地方,还请各位大大指出。
许多地方有些文不达意,可能有些人会看不明白,望各位见谅。。。

最后我也附上一个注册机。。。。
If (Text2.Text = "") Then
MsgBox "注册码不能为空"
Exit Sub
End If

Dim dm As String
Dim cpuSet, cpu
Set cpuSet = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_Processor")
For Each cpu In cpuSet
dm = cpu.ProcessorId
Exit For
Next
dm = dm & Len(Text2) * 2
Text1 = dm


Galaxy无名 发表于 2013-7-3 14:21

分析得很仔细,蛋是有个奇葩的问题...没人会用这样的奇葩注册码来加密软件吧.....

llstyy 发表于 2013-7-3 10:24

哇靠。这个犀利了,看来要学习一下

寒枫雨雪 发表于 2013-7-3 10:34

本帖最后由 寒枫雨雪 于 2013-7-3 17:00 编辑

哦!难道是这个意思?我去试试

joson 发表于 2013-7-3 10:44

经过大大的分析,貌似有了一点头绪。汇编不会是硬伤啊。我去试下,

qiusuo 发表于 2013-7-3 10:55

补习汇编才是硬道理

小雨细无声 发表于 2013-7-3 11:01

膜拜会破解的大牛

948413534 发表于 2013-7-3 11:30

不错啊,学习了

710030676 发表于 2013-7-3 11:37

不错啊~~~come

1354669803 发表于 2013-7-3 11:43

注册机各种都写出来了膜拜大大

coverme 发表于 2013-7-3 13:18

好贴
楼主讲得不错!!!在下很受用
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 尝试一下恒大的第六课