yayazhi 发表于 2010-6-3 16:55:06

杀大CM脱壳

本帖最后由 月之精灵 于 2010-6-3 17:21 编辑

【破文标题】杀大作业脱壳
【破文作者】yayazhi
【作者邮箱】[email protected]
【破解工具】OD
【破解平台】winxp
【软件名称】作业
【软件大小】233K
【原版下载】https://www.chinapyg.com/viewthread.php?tid=57001&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:, edx                  ; 要执行的地址,(最后变成OEP的VA)
004A5159    C3            retn                                           ; 跳到OEP
004A515A    B3 15         mov bl, 0x15
004A515C    0000            add byte ptr ds:, 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:                  ; 获取地址004A515A中的数据
004A516A    03C2            add eax, edx                                 ; 004015B3
004A516C    8B08            mov ecx, dword ptr ds:                  ; 004015B3数据
004A516E    894E F2         mov dword ptr ds:, 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:                        ; 4015B3出的数据放到eax中
004A5179    AD            lods dword ptr ds:                        ; 取下一个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:                  ; 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:, eax                  ; 目的地址,跟随下esi们可以看到一些数


004A519C    AD            lods dword ptr ds:
004A519D    AD            lods dword ptr ds:                        ; 待解密地址,eax
004A519E    03C2            add eax, edx
004A51A0    50            push eax                                       ; 待解密数据4010B9
004A51A1    AD            lods dword ptr ds:                        ; 偏移 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的数据填到eax去
004A51AA    50            push eax                                       ; 0008BCAF又一个偏移地址
004A51AB    6A 00         push 0x0                                       ; 0
004A51AD    FF53 08         call dword ptr ds:                  ; 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:                  ; 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:                  ; 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:                  ; 压VirtualFree的地址
004A51CC    FF3424          push dword ptr ss:                        ; 还是VirtualFree的地址
004A51CF    8BC8            mov ecx, eax                                 ; 把申请的内存地址传递给ecx
004A51D1    50            push eax                                       ; 3B0000
004A51D2    54            push esp
004A51D3    FF76 FC         push dword ptr ds:                  ; 偏移
004A51D6    57            push edi                                       ; 4E0000申请的地址
004A51D7    AD            lods dword ptr ds:                        ; 解压的参数吧?
004A51D8    50            push eax                                       ; 368B5
004A51D9    AD            lods dword ptr ds:                        ; 要解密数据的RVA000A5273
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:                   ; 前面解压出来的LZMA函数,我们的数据

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

1
004A51EC    50            push eax                                       ; 1
004A51ED    AD            lods dword ptr ds:
004A51EE    50            push eax
004A51EF    AD            lods dword ptr ds:
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:                  ; 用0填充401000,大小为600的数据,目

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


004A51FE    AC            lods byte ptr ds:                         ; 取出esi地址一个byte的数据放到eax
004A51FF    8BD0            mov edx, eax                                 ; eax=4=edx
004A5201    AD            lods dword ptr ds:                        ; 区段的RVA,1000,6A000,7C000
004A5202    8BF8            mov edi, eax                                 ; 区段的VA
004A5204    03FD            add edi, ebp                                 ; 加上基址=VA
004A5206    AD            lods dword ptr ds:                        ; 要拷贝数的大小,6872E,F26F,E17C,4A0E
004A5207    8BC8            mov ecx, eax                                 ; ecx做累加器
004A5209    F3:A4         rep movs byte ptr es:, byte ptr ds:; 拷贝
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:
004A5214    85C0            test eax, eax
004A5216    74 1B         je short 作业.004A5233
004A5218    8A07            mov al, byte ptr ds:
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:
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:
004A522E    2BC7            sub eax, edi
004A5230    AB            stos dword ptr es:
004A5231^ E2 E5         loopd short 作业.004A5218                        ; 这段循环是修复E8的,ecx是处理的大


004A5233    55            push ebp                                       ; 基址
004A5234    AD            lods dword ptr ds:
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:                  ; IID的VA
004A523E    56            push esi                                       ; KERNEL32.dll
004A523F    FF13            call dword ptr ds:                        ; LoadLibraryA装载kernel32
004A5241    8BE8            mov ebp, eax
004A5243    AC            lods byte ptr ds:
004A5244    84C0            test al, al
004A5246^ 75 FB         jnz short 作业.004A5243
004A5248    AD            lods dword ptr ds:
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:
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:                  ; 调用GetProcAddress来货API函数的

名字
004A5260    AB            stos dword ptr es:                        ; 填充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:
004A526D    AB            stos dword ptr es:
004A526E^ EB D8         jmp short 作业.004A5248
004A5270    5D            pop ebp                                        ; 弹出基址
004A5271    5F            pop edi                                        ; 弹出401000
004A5272    C3            retn                                           ; 返回到VirtualFree函数开始释放前面申请的内存

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



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

GGLHY 发表于 2010-6-3 17:05:18

膜拜下丫丫兽

杀很大 发表于 2010-6-3 17:08:34

本帖最后由 杀很大 于 2010-6-3 17:12 编辑

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

另外
这个是崛北
不是北掘

yangbing1990 发表于 2010-6-3 17:11:47

必须膜拜 yaya兽/:017

yayazhi 发表于 2010-6-3 17:22:35

回复 3# 杀很大


    这个名字我老搞错:lol:

kelvar 发表于 2010-6-3 17:52:47

丫丫弄壳的水平真的是眼看着一天一天的强大。膜拜

pao 发表于 2010-6-3 17:56:39

哈哈,丫丫脱壳很强的说!

assume 发表于 2010-6-3 18:20:53

膜拜YAYA啊@@

cjteam 发表于 2010-6-3 18:46:41

/:018yayazi,算法也很强大呀

wuhanqi 发表于 2010-6-3 22:08:26

...我本来周末也想跟下这个壳的,不难、
好帖子,值个精华、LZ强大!
页: [1]
查看完整版本: 杀大CM脱壳