160个新手crackme 001

       第一次实战逆向题,题比较简单。。但还是做了很久很久。。太菜了吧大概
解压第一题过后,先打开观察有无可用信息;
160个新手crackme 001_第1张图片

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

160个新手crackme 001_第2张图片 

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

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

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

name\serial

160个新手crackme 001_第5张图片
 同样的套路,瞎输值然后弹出 160个新手crackme 001_第6张图片
然后同样根据字符串找到相关汇编代码。而该字符串出现在了不止一个位置,先看第一个位置。 160个新手crackme 001_第7张图片

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

来到第二处分支,在关键跳转下断,程序运行到这里后
160个新手crackme 001_第8张图片

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

160个新手crackme 001_第9张图片

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

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

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


最后用C++写了个算出serial的小程序。 160个新手crackme 001_第11张图片 160个新手crackme 001_第12张图片

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

你可能感兴趣的:(160道新手CRACK题)