飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5402|回复: 9

[分享] 杀大CM脱壳

[复制链接]
  • TA的每日心情

    2017-7-19 15:45
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-6-3 16:55:06 | 显示全部楼层 |阅读模式
    本帖最后由 月之精灵 于 2010-6-3 17:21 编辑

    【破文标题】杀大作业脱壳
    【破文作者】yayazhi
    【作者邮箱】[email protected]
    破解工具】OD
    【破解平台】winxp
    【软件名称】作业
    【软件大小】233K
    【原版下载】https://www.chinapyg.com/viewthr ... &extra=page%3D1
    【保护方式】山寨版北掘
    【软件简介】很强大的cm
    【破解声明】偶是一只小菜鸟,偶的一点经验原和大家分享:)
    ------------------------------------------------------------------------
    【破解过程】PEID查看--什么都没找到,我很好奇,OD载入跟...


    00401000 >  68 4B514A00     push 作业.004A514B                               ; 要跳向的地址
    00401005    C3              retn

    004A514B    68 5E510A00     push 0xA515E                                   ; Offset,这句最后会被修改为OEP的RVA
    004A5150    68 00004000     push 作业.00400000                               ; 基址
    004A5155    5A              pop edx                                        ; 弹到edx
    004A5156    011424          add dword ptr ss:[esp], edx                    ; 要执行的地址,(最后变成OEP的VA)
    004A5159    C3              retn                                           ; 跳到OEP
    004A515A    B3 15           mov bl, 0x15
    004A515C    0000            add byte ptr ds:[eax], al
    004A515E    60              pushad                                         ; 保护现场
    004A515F    E8 00000000     call 作业.004A5164                               ; 获取004A5164这行的地址
    004A5164    5E              pop esi                                        ; 弹到esi
    004A5165    83EE 0A         sub esi, 0xA                                   ; esi-A
    004A5168    8B06            mov eax, dword ptr ds:[esi]                    ; 获取地址004A515A中的数据
    004A516A    03C2            add eax, edx                                   ; 004015B3
    004A516C    8B08            mov ecx, dword ptr ds:[eax]                    ; 004015B3数据
    004A516E    894E F2         mov dword ptr ds:[esi-0xE], ecx                ; 修改入口代码
    004A5171    83EE 10         sub esi, 0x10
    004A5174    56              push esi                                       ; 004A514A
    004A5175    52              push edx                                       ; 基址
    004A5176    8BF0            mov esi, eax
    004A5178    AD              lods dword ptr ds:[esi]                        ; 4015B3出的数据放到eax中
    004A5179    AD              lods dword ptr ds:[esi]                        ; 取下一个dword,A5136
    004A517A    03C2            add eax, edx                                   ; 加上基址,获取LoadLibraryA的指针
    004A517C    8BD8            mov ebx, eax                                   ; 备份一个
    004A517E    6A 04           push 0x4                                       ; 内存属性,可读可写
    004A5180    BF 00100000     mov edi, 0x1000
    004A5185    57              push edi                                       ; 申请的内存以0 填充
    004A5186    57              push edi                                       ; 申请的大小
    004A5187    6A 00           push 0x0                                       ; 0
    004A5189    FF53 08         call dword ptr ds:[ebx+0x8]                    ; VirtualAlloc申请内存
    004A518C    5A              pop edx                                        ; 恢复edx的值400000
    004A518D    59              pop ecx                                        ; ecx4A514A
    004A518E    BD 00800000     mov ebp, 0x8000                                ; 8000
    004A5193    55              push ebp
    004A5194    6A 00           push 0x0
    004A5196    50              push eax                                       ; 3A0000申请的内存地址
    004A5197    51              push ecx                                       ; 004A514A
    004A5198    52              push edx                                       ; 基址
    004A5199    50              push eax                                       ; 3A0000
    004A519A    8906            mov dword ptr ds:[esi], eax                    ; 目的地址,跟随下esi们可以看到一些数


    004A519C    AD              lods dword ptr ds:[esi]
    004A519D    AD              lods dword ptr ds:[esi]                        ; 待解密地址,eax
    004A519E    03C2            add eax, edx
    004A51A0    50              push eax                                       ; 待解密数据4010B9
    004A51A1    AD              lods dword ptr ds:[esi]                        ; 偏移 100E
    004A51A2    03C2            add eax, edx                                   ; 0040100E
    004A51A4    FFD0            call eax                                       ; Aplib的解压函数,我发现解出来的是LZMA的压缩

    算法
    004A51A6    6A 04           push 0x4                                       ; 4
    004A51A8    57              push edi                                       ; Size1000
    004A51A9    AD              lods dword ptr ds:[esi]                        ; 把esi的数据填到eax去
    004A51AA    50              push eax                                       ; 0008BCAF又一个偏移地址
    004A51AB    6A 00           push 0x0                                       ; 0
    004A51AD    FF53 08         call dword ptr ds:[ebx+0x8]                    ; VirtualAlloc申请内存,4E000
    004A51B0    5A              pop edx                                        ; 恢复edx的值400000
    004A51B1    55              push ebp                                       ; 8000
    004A51B2    6A 00           push 0x0                                       ; 0
    004A51B4    50              push eax                                       ; 申请的地址4E0000
    004A51B5    FF73 0C         push dword ptr ds:[ebx+0xC]                    ; VirtualFree的地址
    004A51B8    52              push edx                                       ; 400000
    004A51B9    6A 04           push 0x4                                       ; 4
    004A51BB    57              push edi                                       ; Size1000
    004A51BC    8BF8            mov edi, eax                                   ; 目的地址
    004A51BE    55              push ebp                                       ; 8000
    004A51BF    6A 00           push 0x0                                       ; 0
    004A51C1    FF53 08         call dword ptr ds:[ebx+0x8]                    ; VirtualAlloc申请内存,3B000
    004A51C4    5A              pop edx                                        ; 400000
    004A51C5    55              push ebp                                       ; 8000
    004A51C6    6A 00           push 0x0                                       ; 0
    004A51C8    50              push eax                                       ; 3B0000申请的内存地址
    004A51C9    FF73 0C         push dword ptr ds:[ebx+0xC]                    ; 压VirtualFree的地址
    004A51CC    FF3424          push dword ptr ss:[esp]                        ; 还是VirtualFree的地址
    004A51CF    8BC8            mov ecx, eax                                   ; 把申请的内存地址传递给ecx
    004A51D1    50              push eax                                       ; 3B0000
    004A51D2    54              push esp
    004A51D3    FF76 FC         push dword ptr ds:[esi-0x4]                    ; 偏移
    004A51D6    57              push edi                                       ; 4E0000申请的地址
    004A51D7    AD              lods dword ptr ds:[esi]                        ; 解压的参数吧?
    004A51D8    50              push eax                                       ; 368B5
    004A51D9    AD              lods dword ptr ds:[esi]                        ; 要解密数据的RVA  000A5273
    004A51DA    03C2            add eax, edx                                   ; 要解密数据的VA,004A5273
    004A51DC    50              push eax                                       ; 004A5273
    004A51DD    55              push ebp                                       ; 8000
    004A51DE    51              push ecx                                       ; 3B0000
    004A51DF    8BEA            mov ebp, edx                                   ; 把基址传给ebp
    004A51E1    FF56 E8         call dword ptr ds:[esi-0x18]                   ; 前面解压出来的LZMA函数,我们的数据

    解压到4E0000
    004A51E4    58              pop eax                                        ; 0008BCAF
    004A51E5    012E            add dword ptr ds:[esi], ebp                    ; 区段 RVA 1000
    004A51E7    8B3E            mov edi, dword ptr ds:[esi]                    ; 放到edi
    004A51E9    AD              lods dword ptr ds:[esi]                        ; 401000区段的VA
    004A51EA    50              push eax                                       ; 401000
    004A51EB    AD              lods dword ptr ds:[esi]                        ; 1,用来还原E8,E9,1要处理的区段个数为

    1
    004A51EC    50              push eax                                       ; 1
    004A51ED    AD              lods dword ptr ds:[esi]
    004A51EE    50              push eax
    004A51EF    AD              lods dword ptr ds:[esi]
    004A51F0    50              push eax
    004A51F1    33C0            xor eax, eax                                   ; eax清零
    004A51F3    B9 80010000     mov ecx, 0x180                                 ; Size,要填充数据的大小
    004A51F8    F3:AB           rep stos dword ptr es:[edi]                    ; 用0填充401000,大小为600的数据,目

    的清空壳的数据
    004A51FA    8B7424 28       mov esi, dword ptr ss:[esp+0x28]               ; 4E0000,我们解压数据存放的地


    004A51FE    AC              lods byte ptr ds:[esi]                         ; 取出esi地址一个byte的数据放到eax
    004A51FF    8BD0            mov edx, eax                                   ; eax=4=edx
    004A5201    AD              lods dword ptr ds:[esi]                        ; 区段的RVA,1000,6A000,7C000
    004A5202    8BF8            mov edi, eax                                   ; 区段的VA
    004A5204    03FD            add edi, ebp                                   ; 加上基址=VA
    004A5206    AD              lods dword ptr ds:[esi]                        ; 要拷贝数的大小,6872E,F26F,E17C,4A0E
    004A5207    8BC8            mov ecx, eax                                   ; ecx做累加器
    004A5209    F3:A4           rep movs byte ptr es:[edi], byte ptr ds:[esi]  ; 拷贝
    004A520B    4A              dec edx                                        ; 区段数减一
    004A520C  ^ 75 F3           jnz short 作业.004A5201
    004A520E    59              pop ecx
    004A520F    5A              pop edx
    004A5210    58              pop eax
    004A5211    8B3C24          mov edi, dword ptr ss:[esp]
    004A5214    85C0            test eax, eax
    004A5216    74 1B           je short 作业.004A5233
    004A5218    8A07            mov al, byte ptr ds:[edi]
    004A521A    47              inc edi
    004A521B    2C E8           sub al, 0xE8
    004A521D    3C 01           cmp al, 0x1
    004A521F  ^ 77 F7           ja short 作业.004A5218
    004A5221    8B07            mov eax, dword ptr ds:[edi]
    004A5223    3AC2            cmp al, dl
    004A5225  ^ 75 F1           jnz short 作业.004A5218
    004A5227    32C0            xor al, al
    004A5229    0FC8            bswap eax
    004A522B    030424          add eax, dword ptr ss:[esp]
    004A522E    2BC7            sub eax, edi
    004A5230    AB              stos dword ptr es:[edi]
    004A5231  ^ E2 E5           loopd short 作业.004A5218                        ; 这段循环是修复E8的,ecx是处理的大


    004A5233    55              push ebp                                       ; 基址
    004A5234    AD              lods dword ptr ds:[esi]
    004A5235    85C0            test eax, eax
    004A5237    74 37           je short 作业.004A5270                           ; IID的RVA64170,为空说明IAT处理完毕
    004A5239    8BF8            mov edi, eax
    004A523B    033C24          add edi, dword ptr ss:[esp]                    ; IID的VA
    004A523E    56              push esi                                       ; KERNEL32.dll
    004A523F    FF13            call dword ptr ds:[ebx]                        ; LoadLibraryA装载kernel32
    004A5241    8BE8            mov ebp, eax
    004A5243    AC              lods byte ptr ds:[esi]
    004A5244    84C0            test al, al
    004A5246  ^ 75 FB           jnz short 作业.004A5243
    004A5248    AD              lods dword ptr ds:[esi]
    004A5249    85C0            test eax, eax                                  ; dll 中API是否获取完毕
    004A524B  ^ 74 E7           je short 作业.004A5234                           ; 完了就取下一个dll
    004A524D    83EE 04         sub esi, 0x4
    004A5250    AD              lods dword ptr ds:[esi]
    004A5251    A9 00000080     test eax, 0x80000000                           ; 是不是以序号方式输入
    004A5256    75 0B           jnz short 作业.004A5263
    004A5258    83EE 04         sub esi, 0x4                                   ; esi-4就是API的名字
    004A525B    56              push esi                                       ; API 函数名
    004A525C    55              push ebp                                       ; 所在dll的模块基址
    004A525D    FF53 04         call dword ptr ds:[ebx+0x4]                    ; 调用GetProcAddress来货API函数的

    名字
    004A5260    AB              stos dword ptr es:[edi]                        ; 填充IAT
    004A5261  ^ EB E0           jmp short 作业.004A5243
    004A5263    25 FFFFFF7F     and eax, 0x7FFFFFFF
    004A5268    50              push eax
    004A5269    55              push ebp
    004A526A    FF53 04         call dword ptr ds:[ebx+0x4]
    004A526D    AB              stos dword ptr es:[edi]
    004A526E  ^ EB D8           jmp short 作业.004A5248
    004A5270    5D              pop ebp                                        ; 弹出基址
    004A5271    5F              pop edi                                        ; 弹出401000
    004A5272    C3              retn                                           ; 返回到VirtualFree函数开始释放前面申请的内存

    LordPE脱壳,ImportREC修复,如果想还原区段可以根据前面分析的数据来还原。输入表放在rdata段。



    ------------------------------------------------------------------------
    【破解总结】
    其实这是北掘壳的山寨版或者说是衍生版吧,就入口改了一下,其他代码都没变。
    ------------------------------------------------------------------------

    评分

    参与人数 1飘云币 +40 收起 理由
    月之精灵 + 40 您的贴子很精彩,希望能再次分享!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2010-6-3 17:05:18 | 显示全部楼层
    膜拜下丫丫兽
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-6-3 17:08:34 | 显示全部楼层
    本帖最后由 杀很大 于 2010-6-3 17:12 编辑

    是的基本没变
    除了入口还改了一些特征,使不报毒
    个人觉得这个壳还是很不错的

    另外
    这个是崛北
    不是北掘
    PYG19周年生日快乐!
  • TA的每日心情

    2015-11-21 19:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-6-3 17:11:47 | 显示全部楼层
    必须膜拜 yaya兽/:017
    PYG19周年生日快乐!
  • TA的每日心情

    2017-7-19 15:45
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2010-6-3 17:22:35 | 显示全部楼层
    回复 3# 杀很大


        这个名字我老搞错:lol:
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-6-3 17:52:47 | 显示全部楼层
    丫丫弄壳的水平真的是眼看着一天一天的强大。膜拜
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-6-3 17:56:39 | 显示全部楼层
    哈哈,丫丫脱壳很强的说!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-7-16 11:27
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2010-6-3 18:20:53 | 显示全部楼层
    膜拜YAYA啊@@
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2010-6-3 18:46:41 | 显示全部楼层
    /:018yayazi,算法也很强大呀
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-6-3 22:08:26 | 显示全部楼层
    ...我本来周末也想跟下这个壳的,不难、
    好帖子,值个精华、LZ强大!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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