【文章标题】: 我的第四个Cracker me 破文
【文章作者】: kanghtta
【作者邮箱】: kanghtta@hotmail.com
【作者主页】:
ba3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3E0S2L8X3N6Z5N6s2c8S2i4K6u0W2j5%4g2T1L8r3!0Y4i4K6u0W2j5$3^5`.
【作者QQ号】: 18381291
【软件名称】: echap516
【软件大小】: 169
【下载地址】: 自己搜索下载
【加壳方式】: 无
【编写语言】: Borland Delphi 2.0
【使用工具】: peid OllyICE
【操作平台】: windows XP
【软件介绍】: code 中
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
大家好, 今天不知道清明节,清明时节雨纷纷。。。。。不过我这今天阳光不错。前两天看了点密码编码学的书,
觉得很不错,过几天把我的读书心得写给大家分享,不过可能要一段时间后吧,凡事,遇速则不达,学问之事,
在于细心,谨慎。
大家都放假了吧,祝大家节日愉快,你怎么又来论坛泡了!我由于离家远,不能回家,只好玩玩破解来抵挡抵挡那股思乡之情了。
嘿嘿。。今天练手的是看雪加密与解密的习题补充练习第6题,废话不说了,总是改不了这个习惯!jmp 正文
正文:
还是老套路,运行程序,界面出来了,嘿嘿,随便输入几个字符看看,这里有两个编辑框。我输入的是:
Enter the first serial here : Cracker Enter the second serial here: kanghtta
然后点击:text 按钮,没反应,字串查找看来是不可能的拉。也对嘛,要是随便一个程序你都用字串下断,
那对另外的下断方法就不能很好的掌握了! 程序上面有串文本,英文的,
作者的目的主要想让我们用Win32DASM静态分析的,大意是不让使用调试器,哪怕是win32Dasm的也不行,
不过我的重点在代码的算法分析,而不是调试,好了,接下来用Peid 收集信息。 收集好信息后OD载入。
在反汇编窗口中:Ctrl+ N 打开名称察看窗口,也可以用 查找->当前模块中的名称 (标签)来打开这一窗口;
名称很多哦;不过不用怕,我们的目标并不多,往下拉拉看,看有没有Get XXXXX的函数,你输入的文本,
程序要获取的话肯定要用获取文本的函数。
嘿嘿,,,, 找到一个。 GetDlgItemText 在拉拉看 又有一个,GetWindowTextA 先不管它,
右键-〉在每个参考上设置断点 后, F9 运行程序 , 工具栏: 查看-〉断点 两个断点,分别是:
GetDlgItemText 和 GetWindowTextA ,接下来我们在文本框中输入:
Enter the first serial here : Cracker Enter the second serial here: kanghtta
点击:TEXT 按钮。 我们什么都没断下来。(是我把它想得太难,还是它本来就简单)
在那个断点处双击 来到反汇编处,我们看到两个程序位于操作系统的领空。 到此为止,我还是什么信息都没。
那还是回头看看字串参考吧 ! 因为我又看了一遍程序文本框的内容/
Greetings
问候
this is the second CrackMe I wrote for you to crack in W32Dasm (or any other
disassembler). This means you aren't allowed to use a debugger (not even the
W32Dasm debugger). This CrackMe is coded in a way that it can be cracked
by looking at the dead listing.
译文:这是我为你写的在W32Dasm中破解的第二个CrackeME(或者是其它的反汇编程序)。这意味着你并不允许使用调试器,
(甚至不能用用win32Dasm的调试器)这个CrackeME只需要看看死的代码清单就能被破解 。
看到这我就明白我犯的是什么错误了,下面这段CCDebuger写的:
*******************************************
先说一下一般软件破解的流程:拿到一个软件先别接着马上用 OllyDBG 调试,先运行一下,有帮助文档的最好先看一下帮助,
熟悉一下软件的使用方法,再看看注册的方式。如果是序列号方式可以先输个假的来试一下,看看有什么反应,也给我们破解留下一些有用的线索。
如果没有输入注册码的地方,要考虑一下是不是读取注册表或 Key 文件(一般称 keyfile,就是程序读取一个文件中的内容来判断是否注册),这些可以用其它工具来辅助分析。
如果这些都不是,原程序只是一个功能不全的试用版,那要注册为正式版本就要自己来写代码完善了。
******************************************
看看我犯的错误,就是在破解前对信息收集不充分,全面.
犯了一个很低级的错误,信息收集不充分,只知道Peid ,英文就随便瞟一眼,就过了,结果我做了半天无用功。
好了,重新来过,我们并不需要像作者写的那样用Win32Dasm,因为,OllyICE同样具备静态分析的功能;
开始吧!我已经走了很长的一段弯路了。汉,(清明是不是不适合写破文阿,,哎。。 )
Ctrl+ F2 重新载入 在分汇编窗口中 右键: 查找 -〉 所有参考文本字串
你一开始看到的就是这几个:
ASCII "Delphi"
ASCII "Well done"
ASCII " Now Write a Tut "
我们再向上拉拉看,基本是应用程序用的 EDIT Button之类; 我们在NowWrite a Tut 处右键,反汇编窗口中跟随
代码如下:
00421D98 /. 55 push ebp
00421D99 |. 8BEC mov ebp, esp 堆栈初始化
00421D9B |. 6A 00 push 0
00421D9D |. 53 push ebx
00421D9E |. 56 push esi
00421D9F |. 57 push edi 堆栈保存
00421DA0 |. 8BD8 mov ebx, eax
00421DA2 |. 33C0 xor eax, eax 清0
00421DA4 |. 55 push ebp
00421DA5 |. 68 091F4200 push 00421F09
00421DAA |. 64:FF30 push dword ptr fs:[eax]
00421DAD |. 64:8920 mov dword ptr fs:[eax], esp
00421DB0 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421DB3 |. 8B83 B0010000 mov eax, dword ptr [ebx+1B0]
00421DB9 |. E8 9AFAFEFF call 00411858
00421DBE |. 8B45 FC mov eax, dword ptr [ebp-4]
00421DC1 |. BA 201F4200 mov edx, 00421F20 ; ASCII "Delphi"
00421DC6 |. E8 A916FEFF call 00403474
00421DCB |. 0F85 22010000 jnz 00421EF3 在OD中鼠标点一下,留意地址00421EF3
00421DD1 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421DD4 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421DDA |. E8 79FAFEFF call 00411858
00421DDF |. 8B45 FC mov eax, dword ptr [ebp-4]
00421DE2 |. E8 4117FEFF call 00403528
00421DE7 |. E8 9437FEFF call 00405580
00421DEC |. 83F8 09 cmp eax, 9 上一次调用的函数和9比较 ,不等就跳(跳楼哦︿ _ ︿ )
00421DEF |. 0F85 FE000000 jnz 00421EF3 在OD中鼠标点一下,留意地址00421EF3
00421DF5 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421DF8 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421DFE |. E8 55FAFEFF call 00411858
00421E03 |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E06 |. 8038 48 cmp byte ptr [eax], 48
00421E09 |. 0F85 E4000000 jnz 00421EF3 不等则跳,地址:00421EF3
00421E0F |. 8D55 FC lea edx, dword ptr [ebp-4]
00421E12 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421E18 |. E8 3BFAFEFF call 00411858
00421E1D |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E20 |. 8078 01 65 cmp byte ptr [eax+1], 65
00421E24 |. 0F85 C9000000 jnz 00421EF3 不等则跳,地址:00421EF3
00421E2A |. 8D55 FC lea edx, dword ptr [ebp-4]
00421E2D |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421E33 |. E8 20FAFEFF call 00411858
00421E38 |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E3B |. 8078 02 6C cmp byte ptr [eax+2], 6C
00421E3F |. 0F85 AE000000 jnz 00421EF3 不等则跳,地址:00421EF3
00421E45 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421E48 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421E4E |. E8 05FAFEFF call 00411858
00421E53 |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E56 |. 8078 03 6C cmp byte ptr [eax+3], 6C
00421E5A |. 0F85 93000000 jnz 00421EF3 不等则跳,地址:00421EF3
00421E60 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421E63 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421E69 |. E8 EAF9FEFF call 00411858
00421E6E |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E71 |. 8078 04 66 cmp byte ptr [eax+4], 66
00421E75 |. 75 7C jnz short 00421EF3 不等则跳,地址:00421EF3
00421E77 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421E7A |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421E80 |. E8 D3F9FEFF call 00411858
00421E85 |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E88 |. 8078 05 6F cmp byte ptr [eax+5], 6F
00421E8C |. 75 65 jnz short 00421EF3 不等则跳,地址:00421EF3
00421E8E |. 8D55 FC lea edx, dword ptr [ebp-4]
00421E91 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421E97 |. E8 BCF9FEFF call 00411858
00421E9C |. 8B45 FC mov eax, dword ptr [ebp-4]
00421E9F |. 8078 06 72 cmp byte ptr [eax+6], 72
00421EA3 |. 75 4E jnz short 00421EF3 不等则跳,地址:00421EF3
00421EA5 |. 8D55 FC lea edx, dword ptr [ebp-4]
00421EA8 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421EAE |. E8 A5F9FEFF call 00411858
00421EB3 |. 8B45 FC mov eax, dword ptr [ebp-4]
00421EB6 |. 8078 07 67 cmp byte ptr [eax+7], 67 不等则跳,地址:00421EF3
00421EBA |. 75 37 jnz short 00421EF3
00421EBC |. 8D55 FC lea edx, dword ptr [ebp-4]
00421EBF |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421EC5 |. E8 8EF9FEFF call 00411858
00421ECA |. 8B45 FC mov eax, dword ptr [ebp-4]
00421ECD |. 8078 08 65 cmp byte ptr [eax+8], 65
00421ED1 |. 75 20 jnz short 00421EF3 不等则跳,地址:00421EF3
00421ED3 |. BA 301F4200 mov edx, 00421F30 ; ASCII "Well done"
00421ED8 |. 8B83 B0010000 mov eax, dword ptr [ebx+1B0]
00421EDE |. E8 A5F9FEFF call 00411888
00421EE3 |. BA 441F4200 mov edx, 00421F44 ; ASCII "Now write a tut"
00421EE8 |. 8B83 B4010000 mov eax, dword ptr [ebx+1B4]
00421EEE |. E8 95F9FEFF call 00411888
00421EF3 |> 33C0 xor eax, eax
00421EF5 |. 5A pop edx
00421EF6 |. 59 pop ecx
00421EF7 |. 59 pop ecx
00421EF8 |. 64:8910 mov dword ptr fs:[eax], edx
00421EFB |. 68 101F4200 push 00421F10
00421F00 |> 8D45 FC lea eax, dword ptr [ebp-4]
00421F03 |. E8 E812FEFF call 004031F0
00421F08 \. C3 retn
由于有两个输入框:
00421DC1 |. BA 201F4200 mov edx, 00421F20 ; ASCII "Delphi"
00421DC6 |. E8 A916FEFF call 00403474
00421DCB |. 0F85 22010000 jnz 00421EF3 这个跳转地址和后面比较不等后跳转的地址一样;
初步估计:第一个输入应该是: Delphi
统计一下jnz比较不等跳的字符,为:48 65 6C 6C 66 6F 72 67 65
总 字符数 9 ;
而上面代码有这几句
00421DEC |. 83F8 09 cmp eax, 9
00421DEF |. 0F85 FE000000 jnz 00421EF3
所以初步判定第二个输入为: 48 65 6C 6C 66 6F 72 67 65
对应的字符: H e l l f o r g e
字符串: Hellforge
现在来看看我们的猜测对不对: 分别输入上面字符串
最后在编辑框中看到了吧: 第一个: well done 第二个: Now write a tut
怪不得没对话框出来哦!
好了,到此也就弄玩了吧!注册码到是找出来,明码比较,难度不大!
最后 祝看雪的朋友们,节日愉快, 也希望我稳步前进, forge ;
--------------------------------------------------------------------------------
【经验总结】
我应该在把 CCDebuger写的这段话好好的再多看几遍:
先说一下一般软件破解的流程:拿到一个软件先别接着马上用 OllyDBG 调试,先运行一下,有帮助文档的最好先看一下帮
助,
熟悉一下软件的使用方法,再看看注册的方式。如果是序列号方式可以先输个假的来试一下,看看有什么反应,也给我们破
解留下一些有用的线索。
如果没有输入注册码的地方,要考虑一下是不是读取注册表或 Key 文件(一般称 keyfile,就是程序读取一个文件中的内
容来判断是否注册),这些可以用其它工具来辅助分析。
如果这些都不是,原程序只是一个功能不全的试用版,那要注册为正式版本就要自己来写代码完善了。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年04月04日 下午 05:33:32
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
上传的附件: