突然想玩玩crackme的,因为觉得最近稍微进步了那么一点点,想看看以前玩不了的crackme现在能不能处理掉。就发现crackmes.de给暂停掉了:
We received an abuse mail and had to close this site. Hopefully we are back soon!
还有喜欢crackmes.de的朋友,不知道他们是怎么回事的?论坛之类的地方有没有消息的啊。不知道还有其他的好玩的crack站没。
发在水区怕没人看,为了避免显得太水,就多了下面这些:
我写东西比较啰嗦,所以不喜欢写太简单的东西,显得过于无聊,今天就算无聊下了。 /:^|
1.
先运行程序,发现有一个按钮,然后中间一大块黑黑的地方可以输序列号,点击后设置对话框上的字符串来提示失败。乍一看挺晕,以为很简单的,说不定得找对话框上的绘图部分了比较麻烦了。
然后用PE id查,发现这个是.net程序。
那就找.net专用工具好了,我找到了以前下载的看雪DVD,.net\文件结构\NetDasm这个就挺好用。
直接打开原.net程序,发现只有二个按钮事件,第二个是NOP空的,那当然第一个就是了 /:^)
直接进去就看到一个长得像注册码的字符串。然后看API的名字,发现有5个GetText,前面还跟着"-"。按照经验, 跳转类型的指令,不是 "J"开头的CISC intel这样的,就是"B"开头的RISC那样的MIPS、ARM那样的。找了找只有一个B,Brture,一看就知道是判断字符串相等不相等后来一个关键跳。这样把click里面的代码大概略一遍会发现,除了读取text外和一个比较外什么指令也没了。
那就把54765-37658-76542-36853-12344-76432 输进去试试。
2.
第二个运行后发现是一个cmd程序,而且peid查发现编译器是很奇怪的dev-cpp。 /:^) 这个是鸟撞枪了!我以前觉得VC太大就用了dev-cpp好久,它默认的是gcc的编译器,用的mingw的C和C++运行时库代码,然后配上微软的头文件和库。但它编译出来的代码很有意思的,里面的压栈等是 mov [esp], reg32这样的指令来实现的。看大小感觉上是带debug信息的,喜欢的可以用ida挂上去试试看,应该流程们都有很明显的符号命名。
运行,发现有提示,直接输入123按确定就清屏了重新显示那些字符串。那就找找scanf,还有printf试试。
在printf断下后,本想往上找找有没有执行过来重新显示的代码,直接在跟前发现
004019D3 E8 78F70000 CALL <JMP.&msvcrt.strcmp>
004019D8 85C0 TEST EAX,EAX
004019DA 75 75 JNZ SHORT Software.00401A51
之后就是" Congratulations!"了。唔:
0022FE74 003E3EFC ASCII "y2eBKWGo"
3.
先上PEid好了,是命令行的,dev-cpp的,看大小觉得应该也是有debug信息的。
那就直接上ida,不过看起来会比较晕,在每个call之前,先看看
mov [esp+0E8h+var_E8], offset dword_446470
之类的局部变量的右键里是不是
DWORD PTR [esp],是就改过来看。
option->demangled name里的也打上assmue GCC那个勾。
不过我是直接shft+F12打开string参考看字符串的
一开始就又是" Congratulations!"了。点进去看引用到它的地址,其上面又有一个je跳过这个MessageBoxA。
看看Congratulations前面的函数符号,里面是一个
call __ZNKSs7compareERKSs ; std::string::compare(std::string const&)
看来这次是c++写的 cmp eax, ebx; je YouWin!
dev-cpp的string,其结构的第一个元素就是字符串开头的指针。
但用来和输入cmp的这个string里的字符串不知道怎么输入了:
004421FC 00 00 00 00
这是一个空的序列号?
求教怎么给cin>>string 输入一个内容为 0的字符串?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!