170527 逆向-CrackMe(4)

1625-5 王子昂 总结《2017年5月27日》 【连续第238天总结】

A. CrackMe(4)

B. 先拖到PEiD,无壳,是Delphi

打开,是一个没有按钮的序列号验证

拖入OD,因为没有按钮,也就无法查找MSGBOX的API

直接查找字符串,发现成功提示

跟过去,看一下上下文,下断点

找到了关键跳转和前一条判断“cmp dword ptr ds:[esi+0x30c], 0x85"

把关键跳转NOP掉即爆破成功

序列号算法则非常麻烦:

按照上一个的经验,向上翻到头,开始跟

在尝试中发现这一段代码是在点击图片框的时候开始运行的

逐行运行下去,发现这一段提取了Name,进行了一番运算,但是没有跟关键判断有关的部分

关键判断是该数据是否等于85,推测应该在前方某处进行判断,使得该数据等于85,但是没有找到

无奈,查writeup 

综合3个和自己尝试得到最终结果:

使用Dede Dark来对Delphi反编译更有效,OD对于其常常很无奈

这个程序有三个关键流程,在Dede中可以看到这3个事件:chkcode,click,dbclick

在chkcode的代码中可以看到Dede标注好的函数名,有许多strcat,记下内存地址,进入OD进行跟踪

首先,修改序列号文本时会触发chkcode,进行验证码判断,为"黑头Sun Bird"+(len(Name)+5)+"dseloffc-012-OK"+Name"

如果校验成功,则将[esi+0x30c]的值设置为3e

然后,双击图片框会触发dbclick,如果该值为3e,则修改为85

最后,单机图片框触发click,如果该值为85,则成功

中间夹杂着许多无关的获取Name,计算等等

总的来说,序列号的算法很简单,但是中间的流程比较复杂,OD往往跟不到完整过程,比如双击图片框这个事件在给单击下了断点的情况下是触发不出来的_(:з」∠)_

C. 明日计划

CrackMe(5)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值