飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 23298|回复: 34

[原创] 主治医师考试宝典系列软件暴破分析(SMC详解Loader制作,感谢小Q和菜儿)

[复制链接]

该用户从未签到

发表于 2007-5-31 16:01:00 | 显示全部楼层 |阅读模式
说明:仅做解密交流,无它. 软件不错,但加密做的有点虚.这篇文章算是一个提醒吧.

官方地址:http://www.ksbao.com/


本文中SMC感谢小Q,内存Loader的制作上感谢菜儿, 感谢两位朋友的帮忙. 3人的教程送给论坛的初学者~~


  1. 00591EC4    55              push    ebp
  2. 00591EC5    8BEC            mov     ebp, esp
  3. 00591EC7    33C9            xor     ecx, ecx
  4. 00591EC9    51              push    ecx
  5. 00591ECA    51              push    ecx
  6. 00591ECB    51              push    ecx
  7. 00591ECC    51              push    ecx
  8. 00591ECD    53              push    ebx
  9. 00591ECE    8BD8            mov     ebx, eax
  10. 00591ED0    33C0            xor     eax, eax
  11. 00591ED2    55              push    ebp
  12. 00591ED3    68 A11F5900     push    00591FA1
  13. 00591ED8    64:FF30         push    dword ptr fs:[eax]
  14. 00591EDB    64:8920         mov     dword ptr fs:[eax], esp
  15. 00591EDE    E8 3128F8FF     call    00514714
  16. 00591EE3    A1 E4B25900     mov     eax, dword ptr [59B2E4]
  17. 00591EE8    8B00            mov     eax, dword ptr [eax]
  18. 00591EEA    8B48 1C         mov     ecx, dword ptr [eax+1C]
  19. 00591EED    A1 E4B25900     mov     eax, dword ptr [59B2E4]
  20. 00591EF2    8B00            mov     eax, dword ptr [eax]
  21. 00591EF4    8B50 14         mov     edx, dword ptr [eax+14]
  22. 00591EF7    8D45 F8         lea     eax, dword ptr [ebp-8]
  23. 00591EFA    E8 2535E7FF     call    00405424
  24. 00591EFF    E8 E019F8FF     call    005138E4
  25. 00591F04    8945 FC         mov     dword ptr [ebp-4], eax
  26. 00591F07    33C0            xor     eax, eax
  27. 00591F09    55              push    ebp
  28. 00591F0A    68 7F1F5900     push    00591F7F
  29. 00591F0F    64:FF30         push    dword ptr fs:[eax]
  30. 00591F12    64:8920         mov     dword ptr fs:[eax], esp
  31. 00591F15    8B45 FC         mov     eax, dword ptr [ebp-4]
  32. 00591F18    E8 63EBF7FF     call    00510A80                         ; 关键CALL,F7跟进
  33. 00591F1D    84C0            test    al, al                           ; 标志位比较
  34. 00591F1F    74 1C           je      short 00591F3D                   ; 关键跳转,若不跳转软件即可使用注册功能, 最简单的暴破方法就是直接NOP掉这里
  35. 00591F21    8D45 F4         lea     eax, dword ptr [ebp-C]
  36. 00591F24    B9 B81F5900     mov     ecx, 00591FB8                    ; [已注册]
  37. 00591F29    8B55 F8         mov     edx, dword ptr [ebp-8]
  38. 00591F2C    E8 F334E7FF     call    00405424
  39. 00591F31    8B55 F4         mov     edx, dword ptr [ebp-C]
  40. 00591F34    8BC3            mov     eax, ebx
  41. 00591F36    E8 118DF2FF     call    004BAC4C
  42. 00591F3B    EB 1F           jmp     short 00591F5C
  43. 00591F3D    8D45 F0         lea     eax, dword ptr [ebp-10]

复制代码

  1.   关键CALL:

  2. 00510A80    E8 EB010000     call    00510C70                       ; F7继续跟进
  3. 00510A85    C3              retn


  4. 00510C70    55              push    ebp                              ; F7跟进关键CALL后来到这里
  5. 00510C71    8BEC            mov     ebp, esp
  6. 00510C73    6A 00           push    0
  7. 00510C75    6A 00           push    0
  8. 00510C77    6A 00           push    0
  9. 00510C79    53              push    ebx
  10. 00510C7A    56              push    esi
  11. 00510C7B    8BF0            mov     esi, eax
  12. 00510C7D    33C0            xor     eax, eax
  13. 00510C7F    55              push    ebp
  14. 00510C80    68 090D5100     push    00510D09
  15. 00510C85    64:FF30         push    dword ptr fs:[eax]
  16. 00510C88    64:8920         mov     dword ptr fs:[eax], esp
  17. 00510C8B    837E 68 00      cmp     dword ptr [esi+68], 0
  18. 00510C8F    74 5B           je      short 00510CEC                   ; 注意,这个跳转已实现,跳向510CEC地址 我们这个暴破的目的就在于修改AL数值 那么我们从下向上找 AL数值的赋值地址 我们找到510CDD这个地址 这里我们修改为 JE 510CDD
  19. 00510C91    8D55 FC         lea     edx, dword ptr [ebp-4]
  20. 00510C94    8BC6            mov     eax, esi
  21. 00510C96    E8 EDFCFFFF     call    00510988
  22. 00510C9B    837D FC 00      cmp     dword ptr [ebp-4], 0
  23. 00510C9F    74 4B           je      short 00510CEC
  24. 00510CA1    8D45 F8         lea     eax, dword ptr [ebp-8]
  25. 00510CA4    50              push    eax
  26. 00510CA5    8D55 F4         lea     edx, dword ptr [ebp-C]
  27. 00510CA8    8BC6            mov     eax, esi
  28. 00510CAA    E8 D9FCFFFF     call    00510988
  29. 00510CAF    8B55 F4         mov     edx, dword ptr [ebp-C]
  30. 00510CB2    8B4E 68         mov     ecx, dword ptr [esi+68]
  31. 00510CB5    8BC6            mov     eax, esi
  32. 00510CB7    E8 34F6FFFF     call    005102F0
  33. 00510CBC    8B45 F8         mov     eax, dword ptr [ebp-8]
  34. 00510CBF    BA 200D5100     mov     edx, 00510D20                    ; ASCII "645364631365423154824"
  35. 00510CC4    E8 1BA9EFFF     call    0040B5E4
  36. 00510CC9    85C0            test    eax, eax
  37. 00510CCB    75 14           jnz     short 00510CE1
  38. 00510CCD    B1 01           mov     cl, 1
  39. 00510CCF    8B56 68         mov     edx, dword ptr [esi+68]
  40. 00510CD2    8BC6            mov     eax, esi
  41. 00510CD4    E8 77FEFFFF     call    00510B50
  42. 00510CD9    84C0            test    al, al
  43. 00510CDB    75 04           jnz     short 00510CE1
  44. 00510CDD    B3 01           mov     bl, 1                            ; EBX的赋值在这里
  45. 00510CDF    EB 0D           jmp     short 00510CEE
  46. 00510CE1    33DB            xor     ebx, ebx
  47. 00510CE3    8BC6            mov     eax, esi
  48. 00510CE5    E8 620B0000     call    0051184C
  49. 00510CEA    EB 02           jmp     short 00510CEE
  50. 00510CEC    33DB            xor     ebx, ebx                         ; 若软件未注册,上方的跳转则跳到这里
  51. 00510CEE    33C0            xor     eax, eax
  52. 00510CF0    5A              pop     edx
  53. 00510CF1    59              pop     ecx
  54. 00510CF2    59              pop     ecx
  55. 00510CF3    64:8910         mov     dword ptr fs:[eax], edx
  56. 00510CF6    68 100D5100     push    00510D10
  57. 00510CFB    8D45 F4         lea     eax, dword ptr [ebp-C]
  58. 00510CFE    BA 03000000     mov     edx, 3
  59. 00510D03    E8 1844EFFF     call    00405120
  60. 00510D08    C3              retn
  61. 00510D09  ^ E9 623CEFFF     jmp     00404970
  62. 00510D0E  ^ EB EB           jmp     short 00510CFB
  63. 00510D10    8BC3            mov     eax, ebx                         ; 注意,我们的标志位比较的就是AL,这里就是AL的赋值语句 那EBX来自那里呢? 我们向上找
  64. 00510D12    5E              pop     esi
  65. 00510D13    5B              pop     ebx
  66. 00510D14    8BE5            mov     esp, ebp
  67. 00510D16    5D              pop     ebp
  68. 00510D17    C3              retn


复制代码

下断提示:






由于是压缩壳,这里就给了我们使用SMC破解的可能. 下文要特别感谢小Q对SMC补丁上的指导.

OD载入原程序,ESP定律来到这里:


  1. 006113B0   /75 08           jnz     short 006113BA
  2. 006113B2   |B8 01000000     mov     eax, 1
  3. 006113B7   |C2 0C00         retn    0C
  4. 006113BA   \68 3C2D5900     push    00592D3C
  5. 006113BF    C3              retn
复制代码





由于我们已经分析出需要修改的数据:

原程序:
00510C8F    74 5B           je      short 00510CEC
修改为:
00510C8F    74 4C           je      short 00510CDD

即:74 5B 要修改为 74 4C

所以我们在外壳区段找一处空白地址开始写入SMC补丁数据. 如何找空白处呢,我和小Q的方法就是直接在OD中向下来,来到该区断的尾部,这一部分空白的几率更大一些.



  1. 00615FEE    66:C705 8F0C510>mov     word ptr [510C8F], 4C74          ; 我们在压缩壳的区段写入要填充的数据.
  2. 00615FF7  ^ E9 BEB3FFFF     jmp     006113BA                         ; 然后返回未修改壳区的下一个地址
复制代码



简单的解释一下这里填写的代码意思:

1.WORD==>表示一个字. 因为我们要修改两个字节,所以这里是WORD.如果是字节就用BYTE,双字就是DWORD。如果字节更多的话,那就多用几次MOV操作即可.
2.PTR   ==>汇编语言的一种格式,我们向内存中写入数据的时候,PTR前方要注明我们写入数据的字节大小.
3.[XXXXXX]==>[]中即我们要写入数据的地址,该地址加"[]"后代表该地址对应的数据,就是我们从该地址开始写数据. SMC破解我们一般用的都是MOV向内存写入数据.
4.写入数据时要根据高高低低原则,由于我们要修改的数据为74 4C. 这里"74"为低位,"4C"为高位,所以我们在MOV中写入"4C74"
5.最后一句是返回语句,就是JMP 到 我们跳来语句的下一行的地址. 本程序中为:即006113BA   \68 3C2D5900     push    00592D3C




写入数据后我们先保存一次. OD载入我们保存SMC数据的程序,ESP定律后来到这里开始做修改:



  1. 006113B0   /E9 394C0000     jmp     00615FEE                        ; 从壳区找一个地址写需要修改的数据
  2. 006113B5   |90              nop
  3. 006113B6   |90              nop
  4. 006113B7   |C2 0C00         retn    0C
  5. 006113BA   |68 3C2D5900     push    00592D3C                        ; 我们修改的数据返回到这里
  6. 006113BF   |C3              retn

复制代码




最后保存文件. SMC破解完工~ 保存后,文件仍加的是原壳.

内存Loader的制作,感谢菜儿提供帮助~~ 呵呵 这个帖子是3位朋友共同合作的 :24ab:  送给大家~~

DUP制作内存Loader

我们打开DUP,新建方案中选择"偏移量补丁"




然后我们双击"偏移量补丁",在控制界面中如下填写数据,由于我们就修改一处所以添写一个就OK了.
注意:    74 对应的地址是00510C8F 所以4C对应的地址就应该是00510C90




最后的步骤当然是生成了~~

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-6 09:28
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2007-5-31 16:42:21 | 显示全部楼层
    总版主不知道你破出来的宝典,题目是不是单选题,只有一个,
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-6 09:28
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2007-5-31 17:31:41 | 显示全部楼层
    不管怎么说,我还是下载回家再破解一次看看就知道了
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-5-31 17:42:48 | 显示全部楼层
    原帖由 bhcjl 于 2007-5-31 16:42 发表
    总版主不知道你破出来的宝典,题目是不是单选题,只有一个,



    和注册版有什么区别吗?未注册的版本无法考试,这个可以使用考试功能. 其他的不清楚是注册版有什么区别.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-31 19:31:31 | 显示全部楼层
    原帖由 Nisy 于 2007-5-31 16:01 发表
    最后保存文件. SMC破解完工~ 保存后,文件仍加的是原壳.

    还是不太明白...如果做个录象就好了.......支持兄弟分享技术...
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-31 23:45:02 | 显示全部楼层
    主要学习方法~~
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2015-8-24 20:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2007-6-1 03:17:12 | 显示全部楼层
    学习总版主的好文章!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-6-1 11:31:48 | 显示全部楼层
    向前辈学习。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-6-1 14:21:22 | 显示全部楼层
    郁闷,看不懂/:011
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2018-3-21 14:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2007-6-1 21:54:36 | 显示全部楼层
    哇,这个有的学了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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