【文章标题】: eXcalibur V1.03通用脱壳方法
【文章作者】: ayarei
【下载地址】: 自己搜索下载
【使用工具】: ollyice
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
天某群里有人问到eXcalibur V1.03的脱壳问题。因为很久没有脱过这个壳了,不过记得脱起来还是比较简单的一个壳。这个壳算是取当时众家之长逆向出来的,另外背景音乐是仙剑3的《望海潮》,都是比较好玩的东西。(不过那时候的壳现在看来难度都是很低的,就是有些比较复杂,比如SVK那个需要修很长时间stolen code)正好很久没有使用过调试工具了,也算是复习一下吧,不过感觉手生了很多,od都不会使了,哈哈。另外考虑到通用性原因,很多地方都不是下断中断,因为由于选择项导致部分代码可能并不执行。
Ollydbg载入某VC加壳程序,HideOD插件隐藏一下ollydbg:
代码:
00405000 > /E9 00000000 jmp 00405005
代码:
003D021B 8985 A4394000 mov dword ptr [ebp+4039A4], eax 003D0221 E8 0D000000 call 003D0233 003D0226 45 inc ebp 003D0227 6E outs dx, byte ptr es:[edi] 003D0228 61 popad 003D0229 626C65 57 bound ebp, qword ptr [ebp+57] 003D022D 696E 64 6F77005>imul ebp, dword ptr [esi+64], 5600776> 003D0234 FFD7 call edi 003D0236 8985 94394000 mov dword ptr [ebp+403994], eax 003D023C 6A 00 push 0 //这里改成push 1 003D023E FFB5 A4394000 push dword ptr [ebp+4039A4] 003D0244 FFD0 call eax
代码:
003D02EB FF15 12544000 call dword ptr [<&KERNEL32.VirtualAll>; kernel32.VirtualAlloc 003D02F1 FC cld 003D02F2 8BF8 mov edi, eax 003D02F4 8BB5 3C374000 mov esi, dword ptr [ebp+40373C] 003D02FA 46 inc esi 003D02FB B9 10000000 mov ecx, 10 003D0300 E8 5E000000 call 003D0363 //找到这里 003D0305 85C0 test eax, eax 003D0307 74 07 je short 003D0310 //改成jmp short 003D0310 003D0309 E8 08000000 call 003D0316 //这里处理Stolen Call 003D030E ^ E2 F0 loopd short 003D0300 003D0310 61 popad 003D0311 E9 BE000000 jmp 003D03D4
代码:
003D03E4 6A 00 push 0 003D03E6 6A 00 push 0 003D03E8 6A 11 push 11 003D03EA 50 push eax 003D03EB FFD7 call edi //这里nop掉 003D03ED BE A8250000 mov esi, 25A8 003D03F2 85F6 test esi, esi 003D03F4 0F84 CA050000 je 003D09C4 //到003D09C4上下个断
代码:
003D0975 61 popad 003D0976 3385 E0394000 xor eax, dword ptr [ebp+4039E0] 003D097C 8907 mov dword ptr [edi], eax //这三句指令要修改 003D097E 8385 E4394000 0>add dword ptr [ebp+4039E4], 4 003D0985 61 popad
代码:
003D097C 61 popad 003D097D 8907 mov dword ptr [edi], eax 003D097F 8385 E4394000 0>add dword ptr [ebp+4039E4], 4
代码:
003D09C4 E8 23020000 call 003D0BEC
代码:
00405007 9C pushfd 00405008 6A 63 push 63 0040500A 73 0B jnb short 00405017
代码:
00405030 9D popfd //下断,F9中断在这里 00405031 EB 01 jmp short 00405034 00405033 - E9 33C0648F jmp 8FA5106B 00405038 0083 C40CE801 add byte ptr [ebx+1E80CC4], al 0040503E 0000 add byte ptr [eax], al 00405040 00C7 add bh, al 00405042 58 pop eax 00405043 9D popfd 00405044 61 popad 00405045 E8 15000000 call 0040505F 0040504A E8 E80F0000 call 00406037 0040504F 009A E8090000 add byte ptr [edx+9E8], bl 00405055 00E9 add cl, ch 00405057 68 EF174000 push 004017EF 0040505C EB 01 jmp short 0040505F 0040505E C7 ??? ; 未知命令 0040505F 58 pop eax 00405060 40 inc eax 00405061 50 push eax 00405062 C3 retn //单步跟进到这里,然后下断
代码:
004017F0 /. 55 push ebp ; kernel32.ExitProcess 004017F1 |. 8BEC mov ebp, esp 004017F3 |. 6A FF push -1 004017F5 |. 68 E0244000 push 004024E0
--------------------------------------------------------------------------------
【经验总结】
实际上这个壳还是比较简单的壳,各位高手勿笑罢了。

--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年07月30日 PM 11:19:30