里面有一碗毒鸡汤,就问你们敢不敢喝!

快,关注这个公众号,一起涨姿势~

本文作者:hacker_mao

感谢hacker_mao来稿,此文为连续的合集,当然,都是有稿费滴!持续小广告:各位大佬有安全方面新的创作都可以向小编砸过来,将文章以Word形式发送至邮箱minwei.wang@dbappsecurity.com.cn

听说今天是平安夜?

大家准备怎么过?

理想?

现实!

所以

我们还是好好学习吧

适合破解新手的

160个crackme练手之02

先运行程序,一个普通的注册码验证程序,直接上od调试

可以看到有You Get Wrong 和 You Get It 明确显示错误与正确的语句,查看到具体地址

这里我们可以看到有je语句会跳过输出正确的语句从而打印You Get Wrong,于是猜测会有判断语句,需要对汇编有一点了解即可知道这里的判断语句是test si,si 这个语句,想要验证自己的想法只需在寄存器中改变esi的值就可以看到输出了正确语句

既然有判断语句,那么前面应该会有语句用输入的Serial与正确的Serial作比较

同时上面不远处有个vbaStrCmp函数也算是验证了我们的想法,在这个函数下个断点,然后单步步入函数观察

在这里可以看到我们输入的Serial:123123 与 正确的Serial值:AKA-292642

至此,我们Crack的任务可以说只完成了一半,虽然我们能得到正确的Serial,但是我们并不知道它是怎么产生的,所以我们继续调试这个程序,观察到这里

这里对我们输入的字符串首先取了长度,然后用这个长度×0x17cfb,最后加上字符串第一位的ascii码生成一个中间值

这里的逻辑就是利用上一步生成的中间值不断去模0xa然后进行一系列操作,直到为0终止,最终每次循环中eax的最后一个数字所组成的字符串加上AKA-便是正确的Serial,如某次循环中eax的值为0x39 那么便取9出来

以下便是针对程序算法逻辑生成Serial的一个python脚本

name = "123"

Serial = ""

a = len(name) * 0x17cfb

a += ord(name[0:1])

while True:

if a / 10.0 == 0: #循环结束

break

edx = a % 10 #取除0xa的余数

a = a / 10 #取除0xa的商

edx += 0x30

Serial += hex(edx)[-1:]

Serial = "AKA-"+Serial[::-1]

print Serial

大功告成!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171224G042CB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券