-
-
[原创] 一个比较有意思的CRACKME
-
发表于: 2008-9-4 21:40 3645
-
【文章标题】: 一个比较有意思的CRACKME
【文章作者】: 我本寂寞
【作者主页】: hi.baidu.negcit/negcit_k
【软件名称】: elf_cm1.exe
【使用工具】: OD
【操作平台】: WIN XP
【作者声明】: 只是玩玩。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
介绍:(来自原作者)
此类的CRACKME我之前也见过一回,确实挺有意思,loooootts of jumps。挺好跟踪的,在每个JMP语句上按ENTER键即可跳到目的地,只不过很难知晓大局,也就比原来的程序难破解多了。只要整理了思路,或是跟对了路,也是很简单的。
先观察程序的行为:运行程序,只有一个BUTTON,双击,弹出一对话框,显示"no,not really",输入negcit,结果一样。用OD载入:
Ctrl+N,哇,输入函数很少,就几个,嘿,有GetDlgItemTextA,bp GetDlgItemTextA下断,F9运行,输入negcit,双击check按钮,Ctrl+F9返回程序领空,程序停在此处:
在此顺便提下,上两条相当于,JMP 004012D5。F8跟踪,看到JMP就F8跳过,来到
比较读入的字符数,不等于5就跳到失败的地方,调用MessageBoxA显示"no,not really"。再F8,到了004013EC,红线,表示跳转将会发生,现我们在寄存器的窗口中双击Z标志位的值,比如此时为0,双击之后为1,红线变为灰色,F8,哈,跳过了BAD BOY。一路F8,直到
现ESI将指向我们输入的字符串,继续F8,
现EDI指向"fubar",嘿,程序想干什么?比较吗?很有可能,继续,若干个F8之后来到:
将这两字符串的前四个相比较,不相等就跳走,所以此时我们又得双击Z位的值了,使程序不会跳到“坏”的地方。一路F8,来到:
将剩余的最后一个字符相比,相等就跳,呵,我们的又不等,所以还得双击Z位,使程序跳转,一跳F8,嘿,不对劲啊,怎把BAD BOY入栈了?
先不管它,继续,哐,弹出一个对话框,显示"terrible spaghetti, isn't it?",切,确实terrible spaghetti,看来我们输入的不能等于fubar,不然也不对。
接下来只好回到我们当初比较这两字符串的地方了。
那就让它们不相等吧,直接F8跳走,
唉?EDI减10作啥?F8,哈,此时EDI指向了另一字符串:"word?",哈,也5字,是不这就是最终的KEY了呢?呵,还得继续往下看,
ESI也减4,F8,此时ESI又指向我们输入的字符串。哈,看来又得比较一次了,继续:
前四不相等跳走,双击Z位,还是让程序不跳走,呵,这可是第二个希望啊,只希望这个不再是假的了。GO ON:
比较最后一个字符,相当就跳,双击Z位,继续:哈,此时还是按F9好,再一看我们的程序,哈,图像显示Correct!
哈,总算对了,好了,赶快输入KEY吧,word?,呵呵,作者还给了你奖励呢——把源代码都给附上了,密码也就是这个密码。
致此,破解完结。
总结:
此CRACKME在程序里加入了很多的JUMP及JUNKS,因此对程序的理解就相对困难了许多,而且还经过了两次比较,第一次比较是假比较,必需不等才行,第二次比较才得相等,从而得到了我们要找的KEY。这个CRACKME比较新颖,有趣,但都是些常用指令,算法也很简单,只是简单的字符串比较,因此还是比较简单破解。
--------------------------------------------------------------------------------
转载请注明原出处。 2008年09月04日
【文章作者】: 我本寂寞
【作者主页】: hi.baidu.negcit/negcit_k
【软件名称】: elf_cm1.exe
【使用工具】: OD
【操作平台】: WIN XP
【作者声明】: 只是玩玩。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
介绍:(来自原作者)
I just wanted to show you an interesting and naughty kind of hmmm... protection, in case you haven't seen it before, and there is possibility that you will find it in some real protection schemes (I did, and that's why I had this idea of writing crackme).
此类的CRACKME我之前也见过一回,确实挺有意思,loooootts of jumps。挺好跟踪的,在每个JMP语句上按ENTER键即可跳到目的地,只不过很难知晓大局,也就比原来的程序难破解多了。只要整理了思路,或是跟对了路,也是很简单的。
先观察程序的行为:运行程序,只有一个BUTTON,双击,弹出一对话框,显示"no,not really",输入negcit,结果一样。用OD载入:
Ctrl+N,哇,输入函数很少,就几个,嘿,有GetDlgItemTextA,bp GetDlgItemTextA下断,F9运行,输入negcit,双击check按钮,Ctrl+F9返回程序领空,程序停在此处:
004012CD 68 D5124000 push 004012D5 004012D2 C3 retn
在此顺便提下,上两条相当于,JMP 004012D5。F8跟踪,看到JMP就F8跳过,来到
004013E9 83F8 05 cmp eax, 5 004013EC ^ 0F85 3AFFFFFF jnz 0040132C
比较读入的字符数,不等于5就跳到失败的地方,调用MessageBoxA显示"no,not really"。再F8,到了004013EC,红线,表示跳转将会发生,现我们在寄存器的窗口中双击Z标志位的值,比如此时为0,双击之后为1,红线变为灰色,F8,哈,跳过了BAD BOY。一路F8,直到
004010BC BE 69304000 mov esi, 00403069 ; ASCII "negcit"
现ESI将指向我们输入的字符串,继续F8,
004012DC BF 3C304000 mov edi, 0040303C ; ASCII "fubar"
现EDI指向"fubar",嘿,程序想干什么?比较吗?很有可能,继续,若干个F8之后来到:
004012E9 A7 cmps dword ptr [esi], dword ptr es:[edi] 004012EA /75 1D jnz short 00401309
将这两字符串的前四个相比较,不相等就跳走,所以此时我们又得双击Z位的值了,使程序不会跳到“坏”的地方。一路F8,来到:
00401359 66:A7 cmps word ptr [esi], word ptr es:[edi] 0040135B ^ 74 B4 je short 00401311
将剩余的最后一个字符相比,相等就跳,呵,我们的又不等,所以还得双击Z位,使程序跳转,一跳F8,嘿,不对劲啊,怎把BAD BOY入栈了?
004012A3 68 00304000 push 00403000 ; ASCII "terrible spaghetti, isn't it?"
先不管它,继续,哐,弹出一个对话框,显示"terrible spaghetti, isn't it?",切,确实terrible spaghetti,看来我们输入的不能等于fubar,不然也不对。
接下来只好回到我们当初比较这两字符串的地方了。
004012E9 A7 cmps dword ptr [esi], dword ptr es:[edi] 004012EA 75 1D jnz short 00401309
那就让它们不相等吧,直接F8跳走,
00401080 83EF 0A sub edi, 0A
唉?EDI减10作啥?F8,哈,此时EDI指向了另一字符串:"word?",哈,也5字,是不这就是最终的KEY了呢?呵,还得继续往下看,
004011A0 83EE 04 sub esi, 4
ESI也减4,F8,此时ESI又指向我们输入的字符串。哈,看来又得比较一次了,继续:
004011F3 A7 cmps dword ptr [esi], dword ptr es:[edi] 004011F4 /0F85 32010000 jnz 0040132C
前四不相等跳走,双击Z位,还是让程序不跳走,呵,这可是第二个希望啊,只希望这个不再是假的了。GO ON:
00401374 66:A7 cmps word ptr [esi], word ptr es:[edi] 00401376 /74 0C je short 00401384
比较最后一个字符,相当就跳,双击Z位,继续:哈,此时还是按F9好,再一看我们的程序,哈,图像显示Correct!
哈,总算对了,好了,赶快输入KEY吧,word?,呵呵,作者还给了你奖励呢——把源代码都给附上了,密码也就是这个密码。
致此,破解完结。
总结:
此CRACKME在程序里加入了很多的JUMP及JUNKS,因此对程序的理解就相对困难了许多,而且还经过了两次比较,第一次比较是假比较,必需不等才行,第二次比较才得相等,从而得到了我们要找的KEY。这个CRACKME比较新颖,有趣,但都是些常用指令,算法也很简单,只是简单的字符串比较,因此还是比较简单破解。
--------------------------------------------------------------------------------
转载请注明原出处。 2008年09月04日
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [原创] 一个比较有意思的CRACKME 3646
- [原创]破解NTS之路(一) 2789
- [求助]请问Overlay是什么意思? 13631
- [转帖]常用断点设置 & 常用断点设置API函数原型 7234
- [原创]破解WinRAR之(二)——清除标题栏的“(评估版本)” 10128
看原图
赞赏
雪币:
留言: