返回第284章 江寒的操作(第1/3页)  重生学神有系统首页

关灯 护眼     字体:

上一章 目录 下一页

    “crackme”是很多逆向论坛里十分流行的玩法。

    一些人为了测试自己的软件保护技术,就会制作一些crackme程序,让别人来尝试破解。

    网上也经常会有一些cm(crackme)竞赛,一些安全软件公司,偶尔会在这种比赛中,选拔可用的员工。

    根据设计者的意图和加密技术水平,不同的crackme,破解难度天差地远。

    江寒点击了一下链接,很快就把题目给出的crackme,下载了下来。

    然后运行起来,先观察一下程序的外在表现。

    这是个windowspe文件,界面十分朴素,只提供了两个输入框。

    一个用来输入username(用户名),另一个用来输入sn(serialnumber,序列号),下面还有个【login】按钮,用来检测username和sn是否匹配。

    看完了这些内容,对程序的结构心里有数之后,江寒就将窗口关掉了。

    随后,他就打开了著名的调试工具ollyice,加载了crackme.exe。

    开始调试之前,先设置个断点。

    断点是调试器的一种功能,可以让程序中断在需要的地方,以方便分析。

    常用的断点有int3断点、硬件断点、内存断点、消息断点、条件断点等。

    例如lbutton_up,就是很常用的消息断点,功能是当鼠标左键抬起时,中断程序运行。

    又如getdlgitemtext断点,当程序试图调用windows的对应api,获取输入框里的文本内容时,就会被拦下。

    江寒先试着设置了getdlgitemtext和getdlgitemtexta断点,然后按了下f9,让程序跑了起来。

    crackme的窗口出现后,先随便输入一组username和sn,然后用鼠标点击了一下【login】按钮。

    结果……

    程序直接弹出了一个msgbox(消息框),提示【用户名和序列号不匹配】。

    很遗憾,在这次尝试中,断点并没有发挥作用。

    这说明在这个crackme里,并没有使用getdlgitemtext或者getdlgitemtexta来读取字符串。

    否则的话,就会被调试器拦截下来,而不会执行关键call了。

    所谓关键call,是指程序中用来计算用户名和序列号的函数,通常执行完关键call,很快就能找到一个条件跳转语句。

    如果序列号与用户名匹配,就会继续往下执行,否则就弹出出错提示……

    接下来,江寒又试了一下lbutton_up断点。

    这次终于成功断了下来。

    接下来就很简单了,交替使用f7(步入)、f8(步过)两个快捷键,单步跟踪即可。

    这个程序是那种很老实的程序。

    意思就是没有什么乱七八糟的,迷惑人的东西,也没有刻意为难挑战者。

    以江寒的调试功力,跟踪这么老实的程序,自然是易如反掌。

    他只花了3分钟就找到了关键call。

    随后就将这个call语句设为断点,再按下ctrl+f2,重新运行crackme。

    再次填写序列号、用户名,点击【login】……

    很快,程序中断在了关键call上。

    江寒按了一下f7,进入了函数体内部,这样就看到了一段以ret结尾的反汇编代码。

    这段代码的功能,就是根据us

『加入书签,方便阅读』

上一章 目录 下一页