欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

CrackMe分析4.11.12.28【第三关】

程序员文章站 2022-07-05 23:23:52
  【文章标题】: CrackMe分析1.11.12.28 【文章作者】: HcyRcer 【作者邮箱】: 421458119@qq.com 【...

 

【文章标题】: CrackMe分析1.11.12.28

【文章作者】: HcyRcer

【作者邮箱】: 421458119@qq.com

【作者主页】: http://hi.baidu.com/kao4ni/home

【作者QQ号】: 421458119

【加壳方式】: 无

【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

--------------------------------------------------------------------------------

下载地址:http://www.2cto.com/Article/201112/115448.html

【详细过程】

 

这是CrackMe的第三关,难度5,好怕怕!!!感觉应该不好弄!!! 但后来证明我 大错特错!!

不是太难了,,而是太容易了!!后面再告诉你!!!

开始!

看到这个CrackMe 一大堆 复选框!!心形的!!不用输入任何字符串!! 怎么Crack呢?很疑惑,

第一次见这种模式! 管他呢,直接点[CHECK] ,弹出一个错误对话框!!

CrackMe分析4.11.12.28【第三关】

 

那我们就打开OD下MessageBoxA 断点!! 结果无法断下!! 然后我又下了 很多类似对话框的断点

例如:ENDDLG DIALOGBOX cratewindow....等很多,,均无法断下!!很是疑惑!既然不能从对话框

入手,我们就换个方法吧,不浪费时间了(如果有高人知道 为什么MessageBox无法下,请告诉我,谢谢)。 我们仍旧DEDE!!!嘿嘿 !!!毫无疑问。就是它了SpeedButton3Click 0044C7F4!!!

OD重载后,对此地址下断!!

CrackMe分析4.11.12.28【第三关】

 

直接点击[CHECK],程序在0044C7F4 断下!!断下后,我们F8单步走!!走到第一个 判断处

0044C812   call dword ptr ds:[edx+B8]

0044C818   test al,al

0044C81A   je CrackMe_.0044C8ED             ;  跳就错

发现 只要跳到0044C8ED 地址程序就会结束并提示错误!!所以不能让它跳,如果才能不让它跳呢?

我们发现0044C81A je CrackMe_.0044C8ED 的上一句0044C818 test al,al 是判断是否跳转的 语句!!//test al,al  联合下句JE 的意思为: AL为0跳!!!

我们进入这个0044C812   call dword ptr ds:[edx+B8] 看看。为什么AL的 会为0!!

大家有没有感觉到这个CALL很奇怪,这个CALL 函数地址是个变量!!可以看出[edx+B8]是一个 函数

指针!!F8单步后,发现 是一大片,差不多的函数!! 只是常量稍微变下!!如下图


CrackMe分析4.11.12.28【第三关】

 

 

可以感觉到!!程序是不是在用指针 取变量!拿出其中一个看下

0044C820   mov eax,dword ptr ds:[ebx+328]  //每次只是这个328常量改变下,其他都一样

0044C826   mov edx,dword ptr ds:[eax]

0044C828   call dword ptr ds:[edx+B8]

0044C82E   test al,al

0044C830   je CrackMe_.0044C8ED             ;  跳就错

0044C836   mov eax,dword ptr ds:[ebx+32C]   //每次只是这个328常量改变下,其他都一样

0044C83C   mov edx,dword ptr ds:[eax]

0044C83E   call dword ptr ds:[edx+B8]

0044C844   test al,al

0044C846   je CrackMe_.0044C8ED             ;  跳就错

CrackMe分析4.11.12.28【第三关】

 

 

每次到F8到call dword ptr ds:[edx+B8]时,发现EDX始终为0041E398!

所以call dword ptr ds:[edx+B8] 每次都在调用同一个函数!!!//因为EDX值相同

我们进入call dword ptr ds:[edx+B8] 这个大量调用的CALL看看!!F7进入!、、

 

CrackMe分析4.11.12.28【第三关】

 

发现 影响跳转的AL值 是根据cmp byte ptr ds:[eax+1F2],1  !根据EAX来的!!

我们跳出CALL,向上追EAX的值 !EAX来源于 不同地址的值!

0044C836   mov eax,dword ptr ds:[ebx+变量]  

0044C83C   mov edx,dword ptr ds:[eax]

0044C83E   call dword ptr ds:[edx+B8]

0044C844   test al,al

0044C846   je CrackMe_.0044C8ED

难点来了!!CALL 中的EAX的值 与EAX有关,EAX来自[ebx+变量] !!感觉[ebx+变量] 应该是一个地址表!!没错,它就一个地址表!!

难点是什么?1.CALL是 指针,不是固定值

             2.eax既能影响CALL的地址,又能影响  cmp byte ptr ds:[eax+1F2],1 返回值

结果导致,看到满大片 都是 指针,与 指向指针的指针, 函数指针!!!!立刻晕倒!!!

我心想,这作者挺厉害的 整那么多 指针,也弄不错!!

继续我们的 追  mov eax,dword ptr ds:[ebx+变量]中EAX的来源 !!EAX与[ebx+变量]有关!

我们 找EBX ,晕倒,向上找到 按钮过程的起点,竟然没EBX的来源!!于是就不追了!!

反正就一个 劲的F8,向下跟 ,遇到调就 不让它跳,竟然 弹出 正确的 对话框!!!!!!

到此结束!!晕倒!!! 竟然没算法!!

究竟是怎么判断的呢? 然后我在想 是什么影响了[ebx+变量]的值!!

看到CHECK上的 选择框 !!心想是不是它呢? 于是就把所有的 勾打上,点击[CHECK] 竟然成功了!! 当即晕倒!!!

CrackMe分析4.11.12.28【第三关】

 

【经验总结】

 感觉像 开了一个玩笑,竟然被这个小小的CRACKME 忽悠了好几个小时!!

主要原因还是:它CALL 的是 变量值。。。让我搞不懂。。

现在总算明白了!!不是CRACKME的作者 对指针 熟练度高,而是DEPHIL 优化的结果!!

 破解方法:

把 心上 所有的 勾,选上即可!!!!!

--------------------------------------------------------------------------------

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

 

                                                       2011年12月28日 6:36:55