北斗程序压缩(nSpack)V2.0的快速脱壳法+OllyMachine脱壳脚本
下载页面: http://www.nsdsn.com/intr.htm
软件大小: 320 KB
软件简介: 首款国产(Windows95/98/2000/NT/XP/2003)EXE、DLL、OCX等PE文件压缩工具,通过压缩代码、数据、相关资源使压缩能达到60-70%。能够处理32位和64位的可执行文件(exe,dll,ocx)。可以很好的处理程序的代码、数据、资源节。可以压缩C#.net的可执行文件。界面更加美观漂亮,内核更加高效,兼容性更好。压缩后的程序在网络上可减少程序的加载和下载时间。完全支持常用压缩软件如:upx,aspack,pecompact等压缩过的程序上再次进行压缩。独有的最大压缩方式,使得程序体积变得更小。支持目录和多文件的压缩操作。
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教
【调试环境】:WinXP、OllyDbg、PEiD、LordPE、ImportREC
—————————————————————————————————
【脱壳过程】:
nSpack是国产的压缩壳,兼容性不错。期待其保护壳NSProtect的发布。
下面的脱壳方法可以说是目前北斗程序压缩所有版本的通用快速脱壳法。
—————————————————————————————————
一、北斗程序压缩(nSpack)V2.0主程序脱壳
设置OllyDbg忽略所有异常选项。用IsDebug插件去掉OllyDbg的调试器标志。
0040101B E9 77511200 jmp 00526197
//进入OllyDbg后暂停在这
下断:BP VirtualProtect
Shift+F9,中断后取消断点,Alt+F9返回
004DB8FC FF95 58FCFFFF call dword ptr ss:[ebp-3A8]; kernel32.VirtualProtect
004DB902 5A pop edx
//返回这里
004DB903 5B pop ebx
004DB904 59 pop ecx
004DB905 5E pop esi
004DB906 83C3 0C add ebx,0C
004DB909 E2 E1 loopd short 004DB8EC
004DB90B 61 popad
//直接F4下来
004DB90C 9D popfd
004DB90D E9 96F7F6FF jmp 0044B0A8
//飞向光明之巅
0044B0A8 55 push ebp
//OEP ★ 运行LordPE完全Dump这个进程
0044B0A9 8BEC mov ebp,esp
0044B0AB 6A FF push -1
0044B0AD 68 E8EC4600 push 46ECE8
0044B0B2 68 A89D4400 push 449DA8
0044B0B7 64:A1 00000000 mov eax,dword ptr fs:[0]
0044B0BD 50 push eax
0044B0BE 64:8925 00000000 mov dword ptr fs:[0],esp
0044B0C5 83EC 58 sub esp,58
0044B0C8 53 push ebx
0044B0C9 56 push esi
0044B0CA 57 push edi
0044B0CB 8965 E8 mov dword ptr ss:[ebp-18],esp
0044B0CE FF15 70924600 call dword ptr ds:[469270]; kernel32.GetVersion
运行ImportREC,选择这个进程。把OEP改为0004B0A8,点IAT AutoSearch、Get Import,FixDump
————————————————————————
脱壳后的自检验是对加壳主程序的PE信息进行检测,很简单。
0040EC10 51 push ecx
0040EC11 A1 C82A4800 mov eax,dword ptr ds:[482AC8]
0040EC16 53 push ebx
0040EC17 56 push esi
0040EC18 57 push edi
0040EC19 8B48 3C mov ecx,dword ptr ds:[eax+3C]
0040EC1C 8B3D D72A4800 mov edi,dword ptr ds:[482AD7]
0040EC22 8D5401 04 lea edx,dword ptr ds:[ecx+eax+4]
0040EC26 33C0 xor eax,eax
0040EC28 66:8B42 10 mov ax,word ptr ds:[edx+10]
0040EC2C 8B72 24 mov esi,dword ptr ds:[edx+24]
0040EC2F 8D4A 14 lea ecx,dword ptr ds:[edx+14]
0040EC32 03C1 add eax,ecx
0040EC34 3BFE cmp edi,esi
0040EC36 0F85 BE000000 jnz 0040ECFA
0040EC3C 66:8B1D D02A4800 mov bx,word ptr ds:[482AD0]
0040EC43 66:3B5A 02 cmp bx,word ptr ds:[edx+2]
0040EC47 0F85 AD000000 jnz 0040ECFA
0040EC4D 8B15 DB2A4800 mov edx,dword ptr ds:[482ADB]
0040EC53 8B79 68 mov edi,dword ptr ds:[ecx+68]
0040EC56 3BD7 cmp edx,edi
0040EC58 0F85 9C000000 jnz 0040ECFA
0040EC5E 8B15 DF2A4800 mov edx,dword ptr ds:[482ADF]
0040EC64 8B79 70 mov edi,dword ptr ds:[ecx+70]
0040EC67 3BD7 cmp edx,edi
0040EC69 0F85 8B000000 jnz 0040ECFA
0040EC6F 8B51 24 mov edx,dword ptr ds:[ecx+24]
0040EC72 8B48 14 mov ecx,dword ptr ds:[eax+14]
0040EC75 3BCA cmp ecx,edx
0040EC77 895424 0C mov dword ptr ss:[esp+C],edx
0040EC7B 77 7D ja short 0040ECFA
0040EC7D 8B78 3C mov edi,dword ptr ds:[eax+3C]
0040EC80 8D48 28 lea ecx,dword ptr ds:[eax+28]
0040EC83 3BFA cmp edi,edx
0040EC85 75 73 jnz short 0040ECFA
0040EC87 33FF xor edi,edi
0040EC89 55 push ebp
0040EC8A 66:85DB test bx,bx
0040EC8D 76 1D jbe short 0040ECAC
0040EC8F 8B50 0C mov edx,dword ptr ds:[eax+C]
0040EC92 3BF2 cmp esi,edx
0040EC94 72 09 jb short 0040EC9F
0040EC96 8B68 08 mov ebp,dword ptr ds:[eax+8]
0040EC99 03EA add ebp,edx
0040EC9B 3BF5 cmp esi,ebp
0040EC9D 72 0B jb short 0040ECAA
0040EC9F 83C0 28 add eax,28
0040ECA2 47 inc edi
0040ECA3 66:3BFB cmp di,bx
0040ECA6 72 E7 jb short 0040EC8F
0040ECA8 EB 02 jmp short 0040ECAC
0040ECAA 8BC8 mov ecx,eax
0040ECAC 8B4424 10 mov eax,dword ptr ss:[esp+10]
0040ECB0 8B51 14 mov edx,dword ptr ds:[ecx+14]
0040ECB3 3BD0 cmp edx,eax
0040ECB5 5D pop ebp
0040ECB6 73 1F jnb short 0040ECD7
0040ECB8 8B51 0C mov edx,dword ptr ds:[ecx+C]
0040ECBB 8BC6 mov eax,esi
0040ECBD 2BC2 sub eax,edx
0040ECBF 74 16 je short 0040ECD7
0040ECC1 8B0D C82A4800 mov ecx,dword ptr ds:[482AC8]
0040ECC7 803C08 E9 cmp byte ptr ds:[eax+ecx],0E9
0040ECCB 75 0C jnz short 0040ECD9
0040ECCD 8B4C08 01 mov ecx,dword ptr ds:[eax+ecx+1]
0040ECD1 8D4431 05 lea eax,dword ptr ds:[ecx+esi+5]
0040ECD5 EB 02 jmp short 0040ECD9
0040ECD7 8BC6 mov eax,esi
0040ECD9 8B15 C82A4800 mov edx,dword ptr ds:[482AC8]
0040ECDF B9 05000000 mov ecx,5
0040ECE4 BF D22A4800 mov edi,482AD2
0040ECE9 8D3410 lea esi,dword ptr ds:[eax+edx]
0040ECEC 33D2 xor edx,edx
0040ECEE F3:A6 repe cmps byte ptr es:[edi],byte ptr ds:[esi]
0040ECF0 8BC2 mov eax,edx
0040ECF2 5F pop edi
0040ECF3 5E pop esi
0040ECF4 5B pop ebx
0040ECF5 0F94C0 sete al
0040ECF8 59 pop ecx
0040ECF9 C3 retn
0040ECFA 5F pop edi
0040ECFB 5E pop esi
0040ECFC 33C0 xor eax,eax
0040ECFE 5B pop ebx
0040ECFF 59 pop ecx
0040ED00 C3 retn
直接修改为下面的代码主程序就可以运行可以加壳啦:
0040EC10 33C0 xor eax,eax
0040EC12 40 inc eax
0040EC13 C3 retn
至于破解部分就自己找吧,改标志位就行了。
—————————————————————————————————
二、OllyMachine脱壳脚本
用罗聪的OllyMachine写个脱壳脚本,支持nSpack V1.X和最新的V2.0,包括nSpack.exe主程序。
//////////////////////////////////////////////
//
// FileName : nSpack.V1.X-V2.0.oms
// Author : fly
// Date : 2005-05-26 24:00
// Comment : UnPacK For nSpack V1.X-V2.0
//
//////////////////////////////////////////////
EOB Break1
invoke msg, "UnPacK.For.nSpack.V1.X-V2.0.By: fly \n 2005.05.26 Debug Environment:\nWinXP OllyDbg.V1.10 OllyMachine.V2.0 "
invoke GetProcAddress, "VirtualProtect", "KERNEL32.dll"
MOV reg01, reg00
invoke BP, reg01
ESTO
Break1:
RunToUserCode
invoke BC, reg01
EOB Break2
invoke Find, eip, "619DE9"
cmp reg00,-1
je NoFind
MOV reg01, reg00
invoke BP, reg01
run
halt
NoFind:
invoke BC, reg01
invoke msg," Error!\nMaybe it isn't nSpack"
halt
Break2:
invoke BC, reg01
invoke StepOverS, 3
invoke msg, " Just : OEP !\n Dump and Fix IAT \n ☆ Good Lucky ☆ ""
—————————————————————————————————
, _/
/| _.-~/ \_ , 青春都一晌
( /~ / \~-._ |\
`\\ _/ \ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了脱壳轻狂
`~ _( ,_..--\ ( ,;'' / ~-- /._`\
/~~//' /' `~\ ) /--.._, )_ `~
" `~" " `" /~'`\ `\\~~\
" " "~' ""
UnPacKed By : fly
2005-05-26 24:00