160个crackme 003 AfKayAs.2

半夜没事干继续考古=.=

二星难度AfKayAs.2,exeinfo看一下:


还是vb

运行一下主程序:先是一个好几秒的nag


再是注册界面:


作者给的任务是kill the nag并找到算法(猜

先上OD吧:







噗,说好的not packed呢?VBDecompiler貌似对packed的exe失效了。。。。,算了直接干:

老套路,输测试name和serial弹错误框后查看堆栈找到主程序的msgbox调用,显示调用后就能顺藤摸瓜找到主注册程序的位置(PS:详细操作和上一篇一毛一样,就不细说了):


在入口点下一断点,慢慢F8跟进会发现从004080F0到004081E3是取出name文本框内容压入栈中,之后


这一部分是求取name的长度,结果位于eax,再将长度转存至edi并乘以0x15B38.


这一段将name(unicode编码)重新压栈再调用函数将字符串第一位转化为ansi的十六进制值。


这里就是将edi加上刚刚转化的ansi值,再传入vbastri4函数中。这个函数有点奇怪=.=,在网上找了很久没找到介绍,后来多测试了几个值,发现是将push的值转化为10进制的字符串。


后面这个函数是将edx的string放入ecx(此时指向栈)的位置。

然后直道004082DD都是一堆没有卵用的释放string和obj的操作=.=


vbaR8Str经查阅发现是将string变成双精度浮点型的函数,所以这里将之前算得的string转换为浮点型并送入fpu。

后面就是一些比较容易分析的FPU操作了,用了很多常量。

总结一下是serial=((name长度*0x15B38+ansii(name首字符))+2)*3+13

测试:


成功T.T,分析vb是真的烦

(PS:看起来简单做起来难,手熟才能更快)






等等,别忘了还有个nag要消!(吐血),肝了好久没有肝出来,在网上找到一个4C法(逃


主程序的入口点有一个push,我们数据窗口跟踪一下看看:


从头往后推4C位找到地址00406868,跟进一下看看:


有从红色位置开始的两个相似的五行结构,其头部是标志这窗口优先级,一个是nag一个是注册窗口,程序执行时先执行00,再执行01,此时将程序数据修改为如图所示,就惊喜的可以发现nag没有啦o(* ̄▽ ̄*)ブ。

猜你喜欢

转载自blog.csdn.net/qq_21201963/article/details/79337954