• 2007-06-06

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

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://playboyjin.blogbus.com/logs/5680470.html

    说明:仅做解密交流,无它. 软件不错,但加密做的有点虚.这篇文章算是一个提醒吧.

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


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

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



      关键CALL:

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


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



    QUOTE:
    下断提示:




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

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

    006113B0   /75 08           jnz     short 006113BA
    006113B2   |B8 01000000     mov     eax, 1
    006113B7   |C2 0C00         retn    0C
    006113BA   \68 3C2D5900     push    00592D3C
    006113BF    C3              retn




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

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

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

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

    00615FEE    66:C705 8F0C510>mov     word ptr [510C8F], 4C74          ; 我们在压缩壳的区段写入要填充的数据.
    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定律后来到这里开始做修改:

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

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

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

    DUP制作内存Loader

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




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




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


    收藏到:Del.icio.us




    评论

  • 我看到过几个都不能完全破解,不要贬低人家的加密做的有点虚.你才是一叶障目,不见泰山呢。你完全破解了吗,估计不可能,大概也是只能看5%的题,题库是4000道题,自己赶紧去重做破解文件吧。免得人家看轻你。
  • 能给个注册机吗谢谢
  • 能解决只能看5%的限制码,还没见到解决的特别完美的。以上可以吗,如果行那就太佩服你了。
  • liyejun9981@163.com

    你好能否给份这个破解的主治医师考试宝典系列软件

    谢谢你
  • 你好能否给份这个破解的主治医师考试宝典系列软件

    谢谢你l6189029@126.com
  • 能否给份已破解的口腔版2.0给我,急用!谢谢
  • 能否给份已破解的口腔版2.0给我,急用!谢谢