【文章标题】: 【原创】Riijjpack (version 1.0) notepad脱壳分析
【文章作者】: 绫濑遥
【作者主页】: www.pediy.com
【软件名称】: Riijjpack (version 1.0) notepad
【下载地址】: http://bbs.pediy.com/showthread.php?s=&threadid=37856
【加壳方式】: Riijjpack
【使用工具】: OD + ImportRec+LordPE
【操作平台】: WinXP
【软件介绍】: Riijj大侠的新壳
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
用OD载入后停在这里,如果我们在这里使用ESP定理,那么最终将可耻的失败,没办法,只有一步步往下跟
010014D0 55 push ebp
010014D1 8BEC mov ebp,esp
010014D3 83EC 40 sub esp,40
010014D6 53 push ebx
010014D7 56 push esi
010014D8 57 push edi
010014D9 6A 00 push 0
010014DB FF15 10200001 call dword ptr ds:[<&KERNEL32.GetModuleHa>; kernel32.GetModuleHandleA
010014E1 8945 C0 mov dword ptr ss:[ebp-40],eax
010014E4 8B45 C0 mov eax,dword ptr ss:[ebp-40]
010014E7 05 00300000 add eax,3000
010014EC 8945 C4 mov dword ptr ss:[ebp-3C],eax
010014EF 8B4D C4 mov ecx,dword ptr ss:[ebp-3C]
010014F2 8B11 mov edx,dword ptr ds:[ecx]
010014F4 8955 EC mov dword ptr ss:[ebp-14],edx
010014F7 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
010014FA 83C0 04 add eax,4
010014FD 8945 C4 mov dword ptr ss:[ebp-3C],eax
01001500 6A 40 push 40
01001502 68 00301000 push 103000
01001507 8B4D EC mov ecx,dword ptr ss:[ebp-14]
0100150A 51 push ecx
0100150B 6A 00 push 0
0100150D FF15 04200001 call dword ptr ds:[<&KERNEL32.VirtualAllo>; kernel32.VirtualAlloc 调用VirtualAlloc申请一块空间
01001513 8945 E8 mov dword ptr ss:[ebp-18],eax
01001516 8B4D EC mov ecx,dword ptr ss:[ebp-14]
01001519 8B75 C4 mov esi,dword ptr ss:[ebp-3C]
0100151C 8B7D E8 mov edi,dword ptr ss:[ebp-18]
0100151F 8BD1 mov edx,ecx
01001521 C1E9 02 shr ecx,2
01001524 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:> 将压缩数据复制到申请的空间中
01001526 8BCA mov ecx,edx
01001528 83E1 03 and ecx,3
0100152B F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[e>
0100152D 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
01001530 0345 EC add eax,dword ptr ss:[ebp-14]
01001533 8B08 mov ecx,dword ptr ds:[eax]
01001535 894D E4 mov dword ptr ss:[ebp-1C],ecx
01001538 8B55 E4 mov edx,dword ptr ss:[ebp-1C]
0100153B 52 push edx
0100153C 8B45 EC mov eax,dword ptr ss:[ebp-14]
0100153F 50 push eax
01001540 8D4D E8 lea ecx,dword ptr ss:[ebp-18]
01001543 51 push ecx
01001544 E8 87FDFFFF call notepad2.010012D0 解压缩
01001549 83C4 0C add esp,0C
0100154C 8D55 E4 lea edx,dword ptr ss:[ebp-1C]
0100154F 52 push edx
01001550 8D45 E8 lea eax,dword ptr ss:[ebp-18]
01001553 50 push eax
01001554 E8 F7FDFFFF call notepad2.01001350
01001559 83C4 08 add esp,8
0100155C 8B4D E8 mov ecx,dword ptr ss:[ebp-18]
0100155F 51 push ecx
01001560 E8 8BFCFFFF call notepad2.010011F0
01001565 83C4 04 add esp,4
01001568 8945 CC mov dword ptr ss:[ebp-34],eax
0100156B 8B55 E8 mov edx,dword ptr ss:[ebp-18]
0100156E 52 push edx
0100156F E8 8CFCFFFF call notepad2.01001200
01001574 83C4 04 add esp,4
01001577 8B4D C4 mov ecx,dword ptr ss:[ebp-3C]
0100157A 03C8 add ecx,eax
0100157C 894D C8 mov dword ptr ss:[ebp-38],ecx
0100157F 8B55 E8 mov edx,dword ptr ss:[ebp-18]
01001582 52 push edx
01001583 E8 88FCFFFF call notepad2.01001210
01001588 83C4 04 add esp,4
0100158B 8945 DC mov dword ptr ss:[ebp-24],eax
0100158E 8D45 F0 lea eax,dword ptr ss:[ebp-10]
01001591 50 push eax
01001592 6A 40 push 40
01001594 8B4D E4 mov ecx,dword ptr ss:[ebp-1C]
01001597 51 push ecx
01001598 8B55 DC mov edx,dword ptr ss:[ebp-24]
0100159B 52 push edx
0100159C FF15 00200001 call dword ptr ds:[<&KERNEL32.VirtualProt>; kernel32.VirtualProtect
010015A2 85C0 test eax,eax
010015A4 75 08 jnz short notepad2.010015AE
010015A6 83C8 FF or eax,FFFFFFFF
010015A9 E9 88000000 jmp notepad2.01001636
010015AE 6A 40 push 40
010015B0 68 00301000 push 103000
010015B5 68 00200000 push 2000
010015BA 6A 00 push 0
010015BC FF15 04200001 call dword ptr ds:[<&KERNEL32.VirtualAllo>; kernel32.VirtualAlloc
010015C2 8945 E0 mov dword ptr ss:[ebp-20],eax
010015C5 C745 FC A014000>mov dword ptr ss:[ebp-4],notepad2.010014A>
010015CC B9 00080000 mov ecx,800
010015D1 8B75 C0 mov esi,dword ptr ss:[ebp-40]
010015D4 8B7D E0 mov edi,dword ptr ss:[ebp-20]
010015D7 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:>
010015D9 8B45 FC mov eax,dword ptr ss:[ebp-4]
010015DC 2B45 C0 sub eax,dword ptr ss:[ebp-40]
010015DF 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
010015E2 03C8 add ecx,eax
010015E4 894D F4 mov dword ptr ss:[ebp-C],ecx
010015E7 8B55 E8 mov edx,dword ptr ss:[ebp-18]
010015EA 52 push edx
010015EB E8 10FCFFFF call notepad2.01001200
010015F0 83C4 04 add esp,4
010015F3 8B4D DC mov ecx,dword ptr ss:[ebp-24]
010015F6 03C8 add ecx,eax
010015F8 894D D0 mov dword ptr ss:[ebp-30],ecx
010015FB 8B55 DC mov edx,dword ptr ss:[ebp-24]
010015FE 8955 D4 mov dword ptr ss:[ebp-2C],edx
01001601 8B45 E8 mov eax,dword ptr ss:[ebp-18]
01001604 50 push eax
01001605 E8 56FEFFFF call notepad2.01001460 这里恢复输入表
0100160A 83C4 04 add esp,4
0100160D 50 push eax
0100160E 52 push edx
0100160F 8B55 D4 mov edx,dword ptr ss:[ebp-2C]
01001612 64:A1 18000000 mov eax,dword ptr fs:[18]
01001618 3E:8B40 30 mov eax,dword ptr ds:[eax+30]
0100161C 3E:8950 08 mov dword ptr ds:[eax+8],edx
01001620 5A pop edx
01001621 58 pop eax
01001622 FF75 D0 push dword ptr ss:[ebp-30]
01001625 FF75 E4 push dword ptr ss:[ebp-1C]
01001628 FF75 E8 push dword ptr ss:[ebp-18]
0100162B FF75 DC push dword ptr ss:[ebp-24]
0100162E FF75 D0 push dword ptr ss:[ebp-30]
01001631 FF65 F4 jmp dword ptr ss:[ebp-C] 可疑跳转1,我们跟进去看
01001634 33C0 xor eax,eax
01001636 5F pop edi
01001637 5E pop esi
01001638 5B pop ebx
01001639 8BE5 mov esp,ebp
0100163B 5D pop ebp
0100163C C2 1000 retn 10
可疑跳转1来到这里,一开始我以为是系统dll的代码,可是仔细一看,发现不是系统dll的代码,太厉害了
7FF614A0 55 push ebp
7FF614A1 8BEC mov ebp,esp
7FF614A3 53 push ebx
7FF614A4 56 push esi
7FF614A5 57 push edi
7FF614A6 8B4D 10 mov ecx,dword ptr ss:[ebp+10]
7FF614A9 8B75 0C mov esi,dword ptr ss:[ebp+C]
7FF614AC 8B7D 08 mov edi,dword ptr ss:[ebp+8]
7FF614AF 8BC1 mov eax,ecx
7FF614B1 C1E9 02 shr ecx,2
7FF614B4 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:> 拷贝数据, 恢复原来的PE头和各个区段
7FF614B6 8BC8 mov ecx,eax
7FF614B8 83E1 03 and ecx,3
7FF614BB F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[e>
7FF614BD FF65 14 jmp dword ptr ss:[ebp+14] 可疑跳转2,我们跟进去看
7FF614C0 5F pop edi
7FF614C1 5E pop esi
7FF614C2 5B pop ebx
7FF614C3 5D pop ebp
7FF614C4 C3 retn
可疑跳转2来到这里,发现这里好眼熟,可能就是oep
01006420 55 push ebp
01006421 8BEC mov ebp,esp
01006423 6A FF push -1
01006425 68 88180001 push notepad2.01001888
0100642A 68 D0650001 push notepad2.010065D0 ; jmp to msvcrt._except_handler3
0100642F 64:A1 00000000 mov eax,dword ptr fs:[0]
01006435 50 push eax
01006436 64:8925 0000000>mov dword ptr fs:[0],esp
0100643D 83C4 98 add esp,-68
01006440 53 push ebx
01006441 56 push esi
01006442 57 push edi
01006443 8965 E8 mov dword ptr ss:[ebp-18],esp
01006446 C745 FC 0000000>mov dword ptr ss:[ebp-4],0
0100644D 6A 02 push 2
0100644F FF15 60110001 call dword ptr ds:[1001160] ; msvcrt.__set_app_type
这时,我用LordPE来脱壳,我的LordPE是这样选的
以这样的选项选完后直接dump下来,发现一件非常奇妙的事情,居然不用修输入表和oep就能直接跑,并且各个区段也完美的还原了
附上我脱壳后的文件, 还请各位大侠指点
--------------------------------------------------------------------------------
【经验总结】
能够完成这次脱壳,应该算运气好, Riijj大侠的壳很多地方还看不懂,希望能和大家一起进步
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年01月12日 21:48:25
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课