飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6361|回复: 10

[原创] 某工程造价软件微狗脱壳

[复制链接]
  • TA的每日心情
    开心
    2020-12-31 08:08
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2010-6-1 13:46:25 | 显示全部楼层 |阅读模式
    某工程造价软件微狗脱壳
    高手飘过!

    00DB43AE > $  60            pushad                              ;  载入停在这里 F8单步!
    00DB43AF   .  55            push    ebp                         ;  此时下 hr ESP断点!F9运行!
    00DB43B0   .  8BEC          mov     ebp, esp
    00DB43B2   .  81EC 34040000 sub     esp, 434
    00DB43B8   .  53            push    ebx
    00DB43B9   .  56            push    esi
    00DB43BA   .  57            push    edi
    00DB43BB   .  C685 B8FEFFFF>mov     byte ptr [ebp-148], 0
    00DB43C2   .  C685 B9FEFFFF>mov     byte ptr [ebp-147], 0
    00DB43C9   .  C685 BAFEFFFF>mov     byte ptr [ebp-146], 0
    00DB43D0   .  C685 BBFEFFFF>mov     byte ptr [ebp-145], 0
    00DB43D7   .  8DBD BCFEFFFF lea     edi, dword ptr [ebp-144]
    00DB43DD   .  33C0          xor     eax, eax



    00DB5636   >-/FF25 0861DB00 jmp     dword ptr [DB6108]          ;  停在这里,F8单步!
    00DB563C   . |C3            retn
    00DB563D     |90            nop
    00DB563E     |90            nop
    00DB563F     |90            nop
    00DB5640     |90            nop
    00DB5641     |90            nop
    00DB5642     |90            nop
    00DB5643  /$ |55            push    ebp
    00DB5644  |. |8BEC          mov     ebp, esp
    00DB5646  |. |83EC 28       sub     esp, 28

    007AF742    55              push    ebp                         ; 来到这里!这里就是真正的狗壳了!
    007AF743    8BEC            mov     ebp, esp
    007AF745    81EC D4030000   sub     esp, 3D4
    007AF74B    53              push    ebx
    007AF74C    56              push    esi
    007AF74D    57              push    edi
    007AF74E    56              push    esi
    007AF74F    57              push    edi
    007AF750    52              push    edx
    007AF751    51              push    ecx
    007AF752    53              push    ebx
    007AF753    50              push    eax
    007AF754    833D 68047E00 0>cmp     dword ptr [7E0468], 1
    007AF75B    0F85 9D170000   jnz     007B0EFE
    由于无狗会有提示,找不到加密狗,那么就可以下bp MessageBoxA断点

    77D507EA >  8BFF            mov     edi, edi                    ; 这里断下,取消断点返回
    77D507EC    55              push    ebp
    77D507ED    8BEC            mov     ebp, esp
    77D507EF    833D BC14D777 0>cmp     dword ptr [77D714BC], 0
    77D507F6    74 24           je      short 77D5081C

    返回到这里
    007B08FF    C8 100000       enter   10, 0
    007B0903    71 00           jno     short 007B0905
    007B0905    0000            add     byte ptr [eax], al
    007B0907    90              nop
    007B0908    817D FC E903000>cmp     dword ptr [ebp-4], 3E9      ; 在这里下硬件执行断点!
    007B090F    74 68           je      short 007B0979              ; 这里可以跳过!
    007B0911    A1 A4097E00     mov     eax, dword ptr [7E09A4]
    007B0916    48              dec     eax
    007B0917    6BC0 66         imul    eax, eax, 66
    007B091A    05 CCFE7D00     add     eax, 007DFECC
    007B091F    8985 84FDFFFF   mov     dword ptr [ebp-27C], eax
    007B0925    833D 8AFE7D00 0>cmp     dword ptr [7DFE8A], 0
    007B092C    74 20           je      short 007B094E
    007B092E    A1 58047E00     mov     eax, dword ptr [7E0458]
    007B0933    8985 E8FDFFFF   mov     dword ptr [ebp-218], eax
    007B0939    6A 40           push    40
    007B093B    68 8EFE7D00     push    007DFE8E
    007B0940    FFB5 84FDFFFF   push    dword ptr [ebp-27C]
    007B0946    6A 00           push    0
    007B0948    FF95 E8FDFFFF   call    dword ptr [ebp-218]         ; 这个CALL提示找不到加密狗!
    007B094E    C705 68047E00 0>mov     dword ptr [7E0468], 2       ; 返回到这里!
    007B0958    833D AC097E00 0>cmp     dword ptr [7E09AC], 0
    007B095F    74 09           je      short 007B096A
    007B0961    6A 01           push    1
    007B0963    E8 313B0000     call    007B4499                    ; 这里退出了!
    007B0968    EB 0F           jmp     short 007B0979
    007B096A    6A 01           push    1

    重新来过,在007B0908下硬件执行断点
    007B0903   /71 00           jno     short 007B0905
    007B0905   \0000            add     byte ptr [eax], al
    007B0907    90              nop
    007B0908    817D FC E903000>cmp     dword ptr [ebp-4], 3E9      ; 停在这里!此时看[EBP-4]的值
    堆栈 ss:[ebp-4]=[0013FFBC]=0000000B
    可见此时的值不等于3E9,所以没有跳走,就出现找不到加密狗了
    因此,直接把[ebp-4]的值改为3E9,让程序跳走执行。

    然后往下拉,直到这里下F2断点

    007B0EFE    58              pop     eax
    007B0EFF    5B              pop     ebx
    007B0F00    59              pop     ecx
    007B0F01    5A              pop     edx
    007B0F02    5F              pop     edi
    007B0F03    5E              pop     esi
    007B0F04    C9              leave
    007B0F05  ^ FF25 88F87D00   jmp     dword ptr [7DF888]          ; 在这里下断点
    007B0F0B    5F              pop     edi
    007B0F0C    5E              pop     esi
    007B0F0D    5B              pop     ebx
    007B0F0E    C9              leave
    007B0F0F    C3              retn

    断下来了,F8单步就到OEP了。

    007A9A60    55              push    ebp                         ; 这里就是OEP
    007A9A61    8BEC            mov     ebp, esp
    007A9A63    B9 09000000     mov     ecx, 9
    007A9A68    6A 00           push    0
    007A9A6A    6A 00           push    0
    007A9A6C    49              dec     ecx
    007A9A6D  ^ 75 F9           jnz     short 007A9A68
    007A9A6F    51              push    ecx
    007A9A70    53              push    ebx
    007A9A71    56              push    esi
    007A9A72    57              push    edi
    007A9A73    B8 288E7A00     mov     eax, 007A8E28
    007A9A78    E8 13DCC5FF     call    00407690            
    007A9A7D    33C0            xor     eax, eax
    可见是Delphi程序,现在可以DUMP了。

    接下来是找IAT
    007A9A71    56              push    esi
    007A9A72    57              push    edi
    007A9A73    B8 288E7A00     mov     eax, 007A8E28
    007A9A78    E8 13DCC5FF     call    00407690                    ; 在这里回车跟进!
    来到这里
    00407690    53              push    ebx
    00407691    8BD8            mov     ebx, eax
    00407693    33C0            xor     eax, eax
    00407695    A3 10477D00     mov     dword ptr [7D4710], eax
    0040769A    6A 00           push    0
    0040769C    E8 2BFFFFFF     call    004075CC                  ; 正常情况下这里应该就是GetModuleHandleA函数!
    跟进这个CALL
    004075CC    90              nop
    004075CD    E9 08AE3B00     jmp     007C23DA           ; 在来到这里,在这里新建EIP,跟进!
    004075D2    8BC0            mov     eax, eax
    004075D4    90              nop
    004075D5    E9 09AE3B00     jmp     007C23E3

    007C23DA    E8 ECCAFEFF     call    007AEECB           ; 来到这里!
    007C23DF    FB              sti
    007C23E0    A6              cmps    byte ptr [esi], by>

    程序调用call    007AEECB  代码如下
    007AEECB    55              push    ebp
    007AEECC    8BEC            mov     ebp, esp
    007AEECE    53              push    ebx
    007AEECF    56              push    esi
    007AEED0    57              push    edi
    007AEED1    50              push    eax
    007AEED2    53              push    ebx
    007AEED3    51              push    ecx
    007AEED4    52              push    edx
    007AEED5    56              push    esi
    007AEED6    57              push    edi
    007AEED7    8B5D 04         mov     ebx, dword ptr [ebp+4]
    007AEEDA    8BC3            mov     eax, ebx
    007AEEDC    25 FFFF0000     and     eax, 0FFFF
    007AEEE1    8B1B            mov     ebx, dword ptr [ebx]
    007AEEE3    2BD8            sub     ebx, eax
    007AEEE5    8B03            mov     eax, dword ptr [ebx]       ;执行到这里时出现函数 kernel32.GetModuleHandleA
    ds:[007E831C]=7C80B741 (kernel32.GetModuleHandleA)
    eax=000023DF


    007AEEE7    8945 04         mov     dword ptr [ebp+4], eax
    007AEEEA    5F              pop     edi
    007AEEEB    5E              pop     esi
    007AEEEC    5A              pop     edx
    007AEEED    59              pop     ecx
    007AEEEE    5B              pop     ebx
    007AEEEF    58              pop     eax
    007AEEF0    C9              leave
    007AEEF1    C3              retn

    数据窗口跟随007E831C发现这里就是IAT了,上下找一下IAT的开始和结束处。
    007E81F0  00000000                                    ;这里开始
    007E81F4  7C93137A  ntdll.RtlDeleteCriticalSection
    007E81F8  7C9210E0  ntdll.RtlLeaveCriticalSection
    007E81FC  7C921000  ntdll.RtlEnterCriticalSection
    007E8200  7C809F91  kernel32.InitializeCriticalSection
    007E8204  7C809B84  kernel32.VirtualFree
    ...............
    007E91B8  76B14E4F  winmm.timeGetTime
    007E91BC  76B2A8BF  winmm.PlaySoundA
    007E91C0  00000000
    007E91C4  01C50424  access.LockupFile
    007E91C8  00000000
    007E91CC  7C809866  kernel32.MulDiv
    007E91D0  00000000                          ;这里结束

    好了,现在知道了OEP,IAT及IAT大小,就可以DUMP和修复了。

    下面是找OEP脚本!
    VAR addr
    FindOEP:
    STI
    MOV addr,esp
    BPHWS addr, "r"
    run
    BPHWS 007B0908, "x"
    run
    mov [ebp-4],3E9
    BPHWS 007B0F05, "x"
    RUN
    STI
    BPHWCALL
    MSG  "这里就是传说中的OEP了,呵呵!"
    ret
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2019-12-22 16:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-6-1 19:03:35 | 显示全部楼层
    好深奥,现在还看不懂
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    昨天 08:03
  • 签到天数: 1901 天

    [LV.Master]伴坛终老

    发表于 2010-6-1 19:26:21 | 显示全部楼层
    学习一下破狗!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-3-8 12:43
  • 签到天数: 92 天

    [LV.6]常住居民II

    发表于 2010-6-4 19:57:34 | 显示全部楼层
    看不懂呀。支持了。、
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-7-25 19:24:24 | 显示全部楼层
    先回复下。再看
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-7-25 23:43:13 | 显示全部楼层
    确实是很难看懂啊,也没有图啊
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-7-27 19:43:33 | 显示全部楼层
    简直是值得学习的
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-2-18 13:23:50 | 显示全部楼层
    很难看懂啊,也没有值得学习的
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-1-27 18:38
  • 签到天数: 58 天

    [LV.5]常住居民I

    发表于 2011-3-16 08:16:03 | 显示全部楼层
    确实是很难看懂啊,也没有图啊
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2017-7-2 18:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2012-4-13 10:18:44 | 显示全部楼层
    值得学习
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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