【逆向入门】 CrackMe160-004 分析思路

CrackMe160-004

爆破思路

养成个好习惯,打开文件之前先用exeinfo检查一下加壳/使用语言的情况,如果没有加壳就可以直接搜索,并且也可以知道使用的什么语言,可以用专门的软件去爆破

这里我们直接用Exeinfo打开,如图,没有加壳,使用的是Delphi

img

不知道什么是Delphi?百度如下:

img

提取关键字:是一个集成开发环境(IDE)、使用的语言是Object Pascal,虽然不知道是什么,但是之前遇到的都是VB,总之不一样就是了,而且这个现在已经基本不适用了,了解一下就可以(其实我也不了解哈哈)

好,既然没有壳,我们直接打开看看好了

img

我擦捏,连点的地方都不给一个吗。。真黑啊。。

直接拿到x64db看了很久,无功而返

查阅了很多师傅的博客发现了一个好软件:DelphiDecompiler

img

点开之后发现是毛子的软件哈哈哈

我们可以看到这里有很多Events(事件),还有很多Controls(控件)

img

以前学过一点安卓,很明显这个Controls就是一堆控件了,没什么用,我们看回事件,依次翻译一下应该是

  • 表格创建
  • 检查代码
  • 按键释放(不知道也没关系)
  • 面板双击
  • 面板单击

而旁边就是RVA,我们可以直接复制到x64dbg,Ctrl+g跳转

这里根据翻译,看起来这个检查代码(chkcode)比较像关键的对比序列事件,所以我们跳转这个

img

跳转之后设置断点,然后输入111111,然后输一个Serial就断在这里了那么就一行行执行一下看看

00457C42 | EC | in al,dx | 00457C43 | 51 | push ecx | 00457C44 | B9 05000000 | mov ecx,5 | 00457C49 | 6A 00 | push 0 | 00457C4B | 6A 00 | push 0 | 00457C4D | 49 | dec ecx | 00457C4E | 75 F9 | jne ckme.457C49 | 00457C50 | 51 | push ecx | 00457C51 | 874D FC | xchg dword ptr ss:[ebp-4],ecx | 00457C54 | 53 | push ebx | ebx:"紋E" 00457C55 | 56 | push esi | 00457C56 | 8BD8 | mov ebx,eax | ebx:"紋E", eax:"紋E" 00457C58 | 33C0 | xor eax,eax | eax:"紋E" 00457C5A | 55 | push ebp | 00457C5B | 68 3D7E4500 | push ckme.457E3D | 00457C60 | 64:FF30 | push dword ptr fs:[eax] | 00457C63 | 64:8920 | mov dword ptr fs:[eax],esp | 00457C66 | 8BB3 F8020000 | mov esi,dword ptr ds:[ebx+2F8] | 00457C6C | 83C6 05 | add esi,5 | 00457C6F | FFB3 10030000 | push dword ptr ds:[ebx+310] | [ebx+310]:"黑头Sun Bird" 00457C75 | 8D55 F8 | lea edx,dword ptr ss:[ebp-8] | [ebp-8]:"11"头Sun Bird11dseloffc-012-OK111111" 00457C78 | 8BC6 | mov eax,esi | eax:"紋E" 00457C7A | E8 85FEFAFF | call <ckme.sub_407B04> | 执行出现10 00457C7F | FF75 F8 | push dword ptr ss:[ebp-8] | [ebp-8]:"11" 00457C82 | FFB3 14030000 | push dword ptr ds:[ebx+314] | [ebx+314]:"dseloffc-012-OK" 00457C88 | 8D55 F4 | lea edx,dword ptr ss:[ebp-C] | [ebp-C]:"111111"un Bird11dseloffc-012-OK111111" 00457C8B | 8B83 D4020000 | mov eax,dword ptr ds:[ebx+2D4] | eax:"紋E", [ebx+2D4]:"聪A" 00457C91 | E8 B2B6FCFF | call <ckme.sub_423348> | 这里出现Name 00457C96 | FF75 F4 | push dword ptr ss:[ebp-C] | [ebp-C]:"111111" 00457C99 | 8D83 18030000 | lea eax,dword ptr ds:[ebx+318] | eax:"紋E", [ebx+318]:"黑头Sun Bird11dseloffc-012-OK111111" 00457C9F | BA 04000000 | mov edx,4 | edx:"黑头Sun Bird11dseloffc-012-OK111111" 00457CA4 | E8 93BFFAFF | call <ckme.sub_403C3C> | 00457CA9 | 33D2 | xor edx,edx | edx:"黑头Sun Bird11dseloffc-012-OK111111" 00457CAB | 8B83 F4020000 | mov eax,dword ptr ds:[ebx+2F4] | eax:"紋E", [ebx+2F4]:&"HPB" 00457CB1 | E8 AAB5FCFF | call <ckme.sub_423260> | 00457CB6 | 8B93 18030000 | mov edx,dword ptr ds:[ebx+318] | edx:"黑头Sun Bird11dseloffc-012-OK111111", [ebx+318]:"黑头Sun Bird11dseloffc-012-OK111111" 00457CBC | 8B83 F4020000 | mov eax,dword ptr ds:[ebx+2F4] | eax:"紋E", [ebx+2F4]:&"HPB" 00457CC2 | E8 B1B6FCFF | call <ckme.sub_423378> |

这里可以看到产生了有点像序列的东西,输入尝试一下,发现直接通过了,显示了图片!

黑头Sun Bird11dseloffc-012-OK111111

然后我们继续往下看,找关键对比跳转,注意看J开头的指令

img

一看这个就是啦,填充nop后果然就显示了照片!

img

序列生成

已知序列之后,我们只需要分析这个序列是怎么生成的就可以

简单分析之后可以看出:这个序列应该是由“黑头Sun Bird”、“11”、“dseloffc-012-OK”、“111111”拼接而成

img

而其中,“黑头Sun Bird”、“dseloffc-012-OK”都是直接从ds数据段中提取的,也就是固定的值,不会改变,而“111111”很明显就是我们输入的Name了,所以只要搞清楚“11”是怎么产生的就可以生成序列了

通过一行行执行发现11产生的函数调用位置在457C7A

img

那么这时候我们不要急着F7进入函数一行行读(因为我就这么做了5555)

可以先看看此时寄存器的情况

img

尤其发现一个在457C78这一行刚执行的,放入eax的值是0000000B,转换成十进制就是11哦

所以函数就不用看了,它的功能就是十六进制转十进制

那么这个B是怎么来的呢,追溯发现

img

这里是在一个数(6)加了5得到的

那么这个6是怎么得到的呢,我一看就感觉是获取的Name的长度,改变长度之后果然这里也变为相应的数字!

那么至此就完成了!

当然也可以直接搜索字符串啦,想一想一般搜 “ 成功 ” 准没错:)

等等!怎么还有

晕,做完题之后像往常一样逛师傅们的博客发现——咦?怎么还有单击双击事件?我擦

突然回想起我图片好像点了好多下才出来

可恶。。。

这里就直接贴一下师傅的分析好了,并不难理解

接下来对panel1的两个事件(单击事件和双击事件。)代码分别下好断点,点击panel1触发:

img

00458031 |. 81BE 0C030000>cmp dword ptr ds:[esi+0x30C],0x85 ; 比较注册标志,正确则调用显示图片代码
0045803B |. 75 76 jnz short CKme.004580B3
0045803D |. 33DB xor ebx,ebx
这里比较**[esi+0x30C**]是否为0x85 ,而之前chkcode中的值是0x3E,所以程序没有什么反应。接下来,取消单击事件的断点,对panel1双击,断了下来。

img

00457EF5 |. 83BE 0C030000>cmp dword ptr ds:[esi+0x30C],0x3E ; 检查注册标志,如果是3E则不跳转,改为85
00457EFC |. 75 0A jnz short CKme.00457F08
00457EFE |. C786 0C030000>mov dword ptr ds:[esi+0x30C],0x85 ; 改为85
这回看明白了,在双击事件中若**[esi+0x30C]地址值为0x3E则改为0x85刚好满足单击事件中对[esi+0x30C]**地址值的检查。接下来,继续进行程序,对panel1单击,图片显示出来了。

至些程序破解完成,注册码是:黑头Sun Bird11dseloffc-012-OK+你输入的用户名,输入注码必须触发键盘事件(粘贴无效),后对图片框双击,此时如果在OD中对单击事件下了断点,则无法触发双击事件,也就不能把注册标志改为0x85,也就不能至达注册的最后步骤,也许这里就是作者说的“另外这个CKme还作了一点别的手脚”,只有双击事件触发成功后,再点击图片框才能完成最后的注册效果,本程序的重点不在于注册码的算法,而是注册的过程。

所以假如说不改这里的话嘛,点3下也会出来,这个出题的人就是想让我错过吧喂!

然后这个是对所有事件的分析,我就懒得一个个分析啦:)

用户名的KeyUp事件是计算了用户名的长度
序列号的chkcode事件是生成了序列号并验证,然后给个状态值0x3E
图片Panel双击事件,判断是否是0x3E,然后给个状态之0x85
图片Panel单击时间,判断是否是0x85,判断是否显示图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 [安全攻防进阶篇] 中,有关于逆向分析的教程可以帮助你了解如何使用OllyDbg逆向CrackMe程序。 OllyDbg是一种常用的逆向工具,可以用于分析和修改程序的执行流程和内存。使用内存断点和普通断点,可以在程序执行过程中捕获关键的代码位置,帮助我们找到CrackMe程序的OEP(Original Entry Point),即程序的入口点。 在 [安全攻防进阶篇] 中还有关于逆向分析两个CrackMe程序的详细教程,包括逆向分析和源码还原的步骤。这些教程将帮助你理解逆向分析的基本概念和技巧,提升你的安全能力。 如果你想深入学习如何使用OllyDbg逆向CrackMe程序,可以参考这些教程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [[安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断](https://blog.csdn.net/Eastmount/article/details/107777190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [逆向crackme之ESp定律脱壳](https://blog.csdn.net/qq_58970968/article/details/125357834)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值