继上次的第一个cm ‘’Acid burnl‘’算法逆向
第一关:Name Serial的算法逆向我输入的账户是:123456
直接找到关键字符然后在段首下断挨着跟就行
从这里开始就是Name Serial的序列号生成开始了(其实在更前面有个给数据段赋值为0x29的 解释了为什么要乘以0x29)
开始运行输入账户和序列号点“Check it Baby!”
程序断下 我们单步向下跟
可能想问为什么是31,我又没看到他有计算ascii码的函数 为什么都说是ascii码(可能只有我想问)
可以看到他已经在反汇编窗口下面那个小窗口(忘叫什么了!丢死人了!)说了ds:=31('1')
那我们知道ds是数据段 去数据窗口跟随一下这个地址就会发现,奥 从这取的啊 那这个疑问就解决了
继续向下F8
上图,为什么还要将结果赋值给eax啊eax本来不就是结果了吗 为什么还要赋值??我不是很理解
将结果乘以2后有431750这个数据段里存放了结果FB2 见下图
接下来终于到了关键call了
至此,我们终于分析完了他的算法(哇写这个真的用了我好长好长时间.....可能是我太菜了)
补充:
为什么要乘以0x29?
答: 因为前面已经向这个段地址赋值了,而赋的这个值就是0x29
为什么是从哪个地方才开始进行序列号生成?
答: 前面好像是判断我们输入的账户是否大于4 如果小于4就直接跳失败(当然这个失败是小于4的失败,和序列号不正确的失败不一样)
如果有大佬分析过求告诉我前面那一堆到底是什么,我也没具体分析
总结:
1、判断是否大于4 如果大于继续执行 如果小于等于直接报错
2、获取输入账户的第一个字符的ascii码值 然后乘以29 再将结果相加一遍 然后在拼起来
我们可以写注册机了
a=input('input:')
c=hex(ord(a))
d=hex(int(c,16)*int('29',16))
b=int(d,16)+int(d,16)
print("CW-%s-CRACKED"%b)
我们生成一个 52pojie的注册码试试
成了
下面那个等等在搞吧 让我休息一下。。。
推荐个小程序是yyhd大佬写的
玩玩破解番外篇1—快速分析汇编代码
https://www.52pojie.cn/thread-1623016-1-1.html
(出处: 吾爱破解论坛)
这里面有个附件 汇编自动翻译小助手,很不错,遇到不懂的可以直接粘贴进去让他翻译
我前面一通看,刚想说你这汇编功底很扎实啊。然后你就给我出个工具。让我本来准备好好去补汇编的动力有点团灭的感觉啊{:1_909:} niestcheer 发表于 2022-4-21 22:52
我前面一通看,刚想说你这汇编功底很扎实啊。然后你就给我出个工具。让我本来准备好好去补汇编的动力有点团 ...
用工具不也是在学汇编吗,用多了就不用看了对把,嘿嘿,我学过几个星期的汇编,也就浅浅的看了个皮毛 但还是有点看不懂的,大佬都给工具了,为什么不用呢,这比百度快多了
页:
[1]