飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2854|回复: 3

五个crackme中的第五个分析

[复制链接]

该用户从未签到

发表于 2006-3-21 03:46:24 | 显示全部楼层 |阅读模式
【破文标题】五个crackme中的第五个分析
【破文作者】surge[PYG]
【作者邮箱】surgefree@163.com
【作者主页】http://surge.blog.com.cn

这是我发的五个crackme中的第五个,提供的答案是老外用delphi写的控制台程序源代码,不过他没有给出第五个的答案。这里简单分析一下。

程序加壳了,od载入就出现异常,shift+F9通过异常后,单步几下,用esp定律很容易脱去。
这个crackme的关键其实是keyfile,下面的代码载入了map文件,map文件可以用ida生成,因为是borland c++程序,用dede也应该可以生成map,不过我用了ida。
为了看起来更整齐一点我将机器码删了。

  1. 004012B0    push    ebp                            ;  DialogFunc
  2. 004012B1    mov     ebp, esp
  3. 004012B3    push    ebx
  4. 004012B4    mov     ebx, 0040D878
  5. 004012B9    mov     eax, [ebp+C]
  6. 004012BC    sub     eax, 10                      ;  Switch (cases 10..111)
  7. 004012BF    je      00401394
  8. 004012C5    sub     eax, 8
  9. 004012C8    je      short 004012DA
  10. 004012CA    sub     eax, 0F9
  11. 004012CF    je      004013A5
  12. 004012D5    jmp     004013CF
  13. 004012DA    push    0040B26F                   ; /step 5 of 5  by: [xorolc]
  14. 004012DF    push    dword ptr [ebp+8]     ; |hWnd
  15. 004012E2    call    <SetWindowTextA>     ; \SetWindowTextA
  16. 004012E7    push    0040B296                    ; /r
  17. 004012EC    push    0040B289                   ; |step5key.key
  18. 004012F1    call    <_fopen>                      ; \5.004040C0
复制代码

上面可以知道是在读step5key.key文件,所以创建这个文件,随便输入点内容。
再次载入脱壳的程序。

  1. 004012F6   add     esp, 8
  2. 004012F9   mov     [40D89C], eax
  3. 004012FE   cmp     dword ptr [40D89C], 0
  4. 00401305   je      004013D3
  5. 0040130B   xor     edx, edx
  6. 0040130D   mov     [ebx], edx
  7. 0040130F   jmp     short 00401331
  8. 00401311   /push    dword ptr [40D89C]      ; /Arg1 = 00000000
  9. 00401317   |call    00404C5C                        ; \5.00404C5C
  10. 0040131C   |pop     ecx
  11. 0040131D   |mov     [40D875], al                  ;  al=文件中的一个字节内容
  12. 00401322   |mov     ecx, [ebx]
  13. 00401324   |mov     al, [40D875]
  14. 00401329   |mov     [ecx+40B14C], al         ;  文件中的内容放到40b14c开始的内存处
  15. 0040132F   |inc     dword ptr [ebx]               ;  计数加1
  16. 00401331    cmp     dword ptr [ebx], 0F       ;  读0x0F个字节
  17. 00401334   \jb      short 00401311
  18. 00401336   push    dword ptr [40D89C]       ; /Arg1 = 00000000
  19. 0040133C   call    <_fclose>                         ; \5.00403D54
  20. 00401341   pop     ecx
  21. 00401342   xor     edx, edx
  22. 00401344   mov     [ebx], edx                      ;  计数清0
  23. 00401346   jmp     short 00401357
  24. 00401348   /mov     cl, [ebx]
  25. 0040134A   |add     cl, 77                             ;  循环次数加上0x77
  26. 0040134D   |mov     eax, [ebx]
  27. 0040134F   |xor     [eax+40B14C], cl          ;  (读入文件内容的每一个字节) 异或 (循环次数加0x77)
  28. 00401355   |inc     dword ptr [ebx]
  29. 00401357    cmp     dword ptr [ebx], 0F      ;  计数加1
  30. 0040135A   \jb      short 00401348
  31. 0040135C   push    0040B15C                     ;  step 5 was fun!
  32. 00401361   push    0040B14C                     ;  计算结果与[40b15c]开始的内容比较,相等ok
  33. 00401366   call    <_strcmp>
复制代码

构造正确的step5key.key内容,先不着急计算,因为算法只是简单的异或一次,根据异或原理,a==a xor a xor a,所以把40b15c的内容输入到step5key.key中,并在401361下断点,让程序自己来帮我们算正确的key,重新运行,断下来后看40b14c的内容是什么240C1C0A5B495D091EF3A1E4F6EAA400,找个十六进制编辑器,把这些写入step5key.key。


再次运行程序显示:
Step5 has been solved
Step5 unlock code is: 1A2E3D
这应该是crackme的作者想看到的答案吧。


【版权声明】本文纯属技术交流,转载请注明作者信息并保持文章的完整,谢谢!
PYG19周年生日快乐!

该用户从未签到

发表于 2006-3-21 13:52:54 | 显示全部楼层
支持一下,呵呵
PYG19周年生日快乐!

该用户从未签到

发表于 2006-5-1 03:33:23 | 显示全部楼层
写的不错,支持!!!
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-2-3 06:45
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-2-15 19:02:20 | 显示全部楼层
    支持一下,呵呵/:001 /:001
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表