160个新手crackme 001

       第一次实战逆向题,题比较简单。。但还是做了很久很久。。太菜了吧大概
解压第一题过后,先打开观察有无可用信息;

第一次做这个,serial都不知道是什么....  就直接点了第三个。
所以先看   serial   (难度很低。。。)

 

然后随便输了个数字,点了过后出现弹框
随后直接将该程序拖入od,查找所有字符串,发现了关键字符串
然后直接在反汇编窗口中跟随,
上方的JNE就是关键跳转,上方的两个Mov推测是call的参数,而这个call对这两个值进行比较,也就是说是个字符串比较的函数。  在这里下断点以后f9运行,随便输入一个字符串。然后....

2222就是我输入的字符串,而下面那个应该就是password了。 然后直接打开输入试了一下。 成功。

接下来重开软件,点第一个按钮

name\serial

 同样的套路,瞎输值然后弹出
然后同样根据字符串找到相关汇编代码。而该字符串出现在了不止一个位置,先看第一个位置。

上方跳转只是跳过错误信息,并且根据cmp EAX,4推测是比较字符串长度,大于等于4则跳过错误信息。测试过后证实推测。

来到第二处分支,在关键跳转下断,程序运行到这里后

和之前的serial一样,比较函数之前出现了password。 接下来就分析该字符串是如何生成的。
在往上翻的途中发现了前后的字符串,而并没有发现中间的数字,也就是说数字是由某个算法生成的,再与字符串拼接。

推测算法位于判断字符串长度之后,所以在判断长度那里下了断点,然后F9到断点处,再单步执行下来,到这里第一次看见调用参数(EBP-10所在的地址就是我输入的字符串)

!!!!!!其实在后面的函数里面找了半天关于加密的函数,一直摸不着头脑。
从这里看出把我们输入的字符串从4个字节变成了一个字节也就是获取第一个字符,并乘上了某个数,在内存中去找 乘的数是0x29,乘了过后又自加了一次。
然后查到了2的ASCII码为50,所以用计算器计算出了值
。。然后就看到了1004的十进制就为4001. 也就是我们要的password。 

到这里也就完事了,这个题的解决方案就是:
            1.先判断字符串长度是否大于4,小于4直接弹出错误信息。
            2.获取输入字符串的第一位,并用该位的ASCII码乘上0x29再自加一次,最后取这个值得十进制值。
            3.最后拼接CW-****-CRACKED


最后用C++写了个算出serial的小程序。

人生中第一道逆向题做完了  贼j8开心

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值