逆向入门CrackMe001(关键字符串)

逆向入门CrackMe001(关键字符串)

在这里插入图片描述

分析程序

整个程序分为两部分 一个是序列号+用户名 一个是单纯的序列号

在这里插入图片描述

Serial部分

OD打开程序,F9启动,随便输入一个序列号,验证,出现错误对话框,序列号错误提示“Try Again!”

在这里插入图片描述

在反汇编窗口右键->查找->所有参考文本字符串

在这里插入图片描述

找到错误提示Try Again!,双击跟随(如果相同的文本多次出现,需要多次定位才能命中)

在这里插入图片描述

分析一下,(0042F4F3)错误提示是由(0042FD5)跳转指令JNZ跳转来的,前面(0042F4D0)应该是它的判断函数,在(0042F4D0)处设置断点(F2),F9运行

在这里插入图片描述

黑底地址的就是程序执行到的地方,在我们设置的断点处停下来了

在这里插入图片描述

此时eax存放我们输入的序列号,edx存放着一个陌生字符串,合理猜测这就是序列号,call跳转的程序就是比较我们输入的序列号和正确序列号是否一致的

在这里插入图片描述

接下来验证我们的猜想

我们可以直接尝试输入正确序列号"Hello Dude!"重新尝试运行

此时F7进入CALL 子程序查看

(图中所有注释都是我一边查资料一边按自己理解写的,逐句分析也是为了尽快熟悉汇编语言;并且由于本人刚刚开始接触汇编语言,如有错漏请多包含)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

此时JNZ命令没有跳转,证明序列号正确

在这里插入图片描述

在这里插入图片描述

Serial/Name部分

随便输入尝试一下

在这里插入图片描述

查找报错文本

在这里插入图片描述

可以发现,这跟上面判断方式的很相似

在这里插入图片描述

先F7进入Call子程序查看

这段代码用于计算字符串长度

在这里插入图片描述

字符串为chuan,最后跟一个空字符0,也就是chuan\0(不知道是不是这么表示的)

因为多算了一个空字符,所以最后要减2

exc=-1 , 遍历字符串(chuan\0)完成后,exc=-7,eax=-2,length=eax-ecx=-2-(-7)=5

长度确实是5

在这里插入图片描述

CMP判断长度需要大于4,不然不跳转,就会报错

在这里插入图片描述

接下来这段一直出现[431750],它还执行IMUL命令,我们需要找到它的值,才能知道这里在算什么

在这里插入图片描述

往上面翻翻,原来[431750]的值为29

在这里插入图片描述

这应该是计算序列号的

在这里插入图片描述

结果=0x63*0x29*2=0x1FB6=8118(十进制)
注册机代码计算序列号部分就是按这个算法写

这里还有两个字符串,可能是用于拼接序列号的

在这里插入图片描述

这里同上,也是(0042FB03)JNZ命令判断是否跳转

经过我的分析,(0042FAE5)Call用于将CW, CRACKED,8118拼接成完整序列号"CW-8118-CRACKED"

在这里插入图片描述

其实继续运行下去,到(0042FAFB)会把拼接好的序列号移动到eax,用于和我们输入的字符串(0042FAF8)作比较,这也证明我们计算出的8118是正确的

在这里插入图片描述

完成~~

在这里插入图片描述

番外

在这里插入图片描述

  • 1个字=2个字节,1个字节=8位(bit二进制位)=2位十六进制(2^8 =16^2)

  • 单位地址=1个字=2个字节=4位十六进制

汇编跳转指令(转载):

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值