软件大小: 440 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 加密工具
应用平台: Win9x/NT/2000/XP
推荐等级: ***
开 发 商: http://www.ultraprotect.com/
软件介绍: 软件保护系统,保护软件使用RSA1024位的注册码系统防止软件被写出注册机,可以设置内嵌的加密器(针对delphi &vc&BCB)使得脱壳之后无法运行,双向的API系统使得外壳顺利和被保护程序通讯。使用变形技术让每次加密生成的代码都不同。变形技术结合反跟踪防止程序跟踪和反汇编。
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、flyODBG、PEiD、LordPE、ImportREC
—————————————————————————————————
【脱壳过程】:
Ultra Protect[终极保镖]是risco先生的大作ACProtect壳以前的名字。现在PEiD侦测ACProtector加壳的程序显示“UltraProtect 1.x -> RISCO Software Inc.”而不是ACProtect就是这个原因啦,看来snaker先生应该修正一下这个壳名了。
—————————————————————————————————
一、脱壳
设置flyODBG忽略所有异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
代码:
004B6000 60 pushad//进入OD后停在这 004B6001 EB 01 jmp short UProtect.004B6004
下断:BP Process32First+1 中断后取消断点,返回程序
代码:
77E9A595 55 push ebp 77E9A596 8BEC mov ebp,esp//断在这里 77E9A598 81EC 2C020000 sub esp,22C 77E9A59E 56 push esi 77E9A59F 8B75 0C mov esi,dword ptr ss:[ebp+C] 77E9A5A2 85F6 test esi,esi 77E9A5A4 0F84 94000000 je kernel32.77E9A63E 77E9A5AA 813E 28010000 cmp dword ptr ds:[esi],128 77E9A5B0 0F82 88000000 jb kernel32.77E9A63E 77E9A5B6 53 push ebx 77E9A5B7 8D85 D4FDFFFF lea eax,dword ptr ss:[ebp-22C] 77E9A5BD 50 push eax 77E9A5BE FF75 08 push dword ptr ss:[ebp+8] 77E9A5C1 C785 D4FDFFFF 2C0200 mov dword ptr ss:[ebp-22C],22C 77E9A5CB E8 13FFFFFF call kernel32.Process32FirstW 77E9A64C C2 0800 retn 8//返回 004B7FD0
代码:
004B7FD0 0BC0 or eax,eax 004B7FD2 0F84 86000000 je UProtect.004B805E 004B7FD8 8DB5 B91D4000 lea esi,dword ptr ss:[ebp+401DB9] 004B7FDE 8BFE mov edi,esi 004B7FE0 8A07 mov al,byte ptr ds:[edi] 004B7FE2 0AC0 or al,al 004B7FE4 74 12 je short UProtect.004B7FF8
使用ESP定律,在12FFAC处的4个字节上下“硬件访问->Word”断点,F9运行
代码:
004BBAA9 8BC5 mov eax,ebp//中断在这里 004BBAAB E8 25BBFFFF call UProtect.004B75D5 004BBAB0 FFB5 F96D4000 push dword ptr ss:[ebp+406DF9]; UProtect.00487370//OEP值 004BBAB6 8BE8 mov ebp,eax 004BBAB8 C3 retn//飞向光明之巅
Ultra Protect 还是比较“善良”的,没有Stolen Code,而今ACProtect做了一大堆的Stolen Code。
代码:
00487370 55 push ebp//在这儿用LordPE纠正ImageSize后完全DUMP这个进程 00487371 8BEC mov ebp,esp 00487373 83C4 F4 add esp,-0C 00487376 B8 18714800 mov eax,UProtect.00487118 0048737B E8 80F1F7FF call UProtect.00406500 00487380 A1 F0744900 mov eax,dword ptr ds:[4974F0] 00487385 8B00 mov eax,dword ptr ds:[eax] 00487387 E8 18FDFBFF call UProtect.004470A4
ACProtect的IAT加密一直没什么变化,弱了点。重新单独运行UProtect.exe,运行ImportREC,选择这个进程。把OEP改为00087370,点IT AutoSearch,点“Get Import”,有2个无效的函数:
代码:
00406D4C FF25 74B54900 jmp dword ptr ds:[49B574]; UProtect.004B7123 00401280 FF25 00B24900 jmp dword ptr ds:[49B200]; UProtect.004B7123
大家以前已经分析过了,这里使用了ACProtect的 EMbedded protector 技术,暂时把这2个函数修改为MessageBoxA,最后还要还原其004B7123值的,留待第三步一起处理吧。FixDump,现在可以在本系统上正常运行和加壳了!
—————————————————————————————————
二、去除加壳后的NAG
代码:
0047E320 8B45 B8 mov eax,dword ptr ss:[ebp-48] 0047E323 BA E0E64700 mov edx,UnPacked.0047E6E0 0047E328 E8 4F5BF8FF call UnPacked.00403E7C 0047E32D 0F85 A8000000 jnz UnPacked.0047E3DB//NOP掉 ★ 0047E333 6A 01 push 1 0047E335 A1 04754900 mov eax,dword ptr ds:[497504] 0047E33A 8B00 mov eax,dword ptr ds:[eax] 0047E33C B9 FCE64700 mov ecx,UnPacked.0047E6FC; ASCII "By Unregistered UltraProtect" 0047E341 BA FF5F0000 mov edx,5FFF 0047E346 E8 5D0EFDFF call UnPacked.0044F1A8
—————————————————————————————————
三、解决脱壳后的程序无法跨系统平台运行的问题
Ultra Protect和ACProtect的主程序脱壳后有很多无法跨系统平台运行,用了一下午的时间来分析这个问题,在heXer老大以前给予的帮助下解决了这个问题。
在“壳中之壳”内有一段代码保存的是其所使用的28个API函数,主程序脱壳后这段函数的地址已经初始化完毕,也就是说现在的地址是脱壳时的系统平台的函数地址,当然无法跨平台了。
代码:
004B6EBD 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 47 6C 6F KERNEL32.DLL.Glo 004B6ECD 62 61 6C 41 6C 6C 6F 63 00 47 6C 6F 62 61 6C 46 balAlloc.GlobalF 004B6EDD 72 65 65 00 47 65 74 43 75 72 72 65 6E 74 50 72 ree.GetCurrentPr 004B6EED 6F 63 65 73 73 49 64 00 43 72 65 61 74 65 54 6F ocessId.CreateTo 004B6EFD 6F 6C 68 65 6C 70 33 32 53 6E 61 70 73 68 6F 74 olhelp32Snapshot 004B6F0D 00 50 72 6F 63 65 73 73 33 32 46 69 72 73 74 00 .Process32First. 004B6F1D 50 72 6F 63 65 73 73 33 32 4E 65 78 74 00 43 6C Process32Next.Cl 004B6F2D 6F 73 65 48 61 6E 64 6C 65 00 43 72 65 61 74 65 oseHandle.Create 004B6F3D 46 69 6C 65 41 00 54 65 72 6D 69 6E 61 74 65 50 FileA.TerminateP 004B6F4D 72 6F 63 65 73 73 00 49 73 44 65 62 75 67 67 65 rocess.IsDebugge 004B6F5D 72 50 72 65 73 65 6E 74 00 4F 70 65 6E 50 72 6F rPresent.OpenPro 004B6F6D 63 65 73 73 00 52 65 61 64 46 69 6C 65 00 57 72 cess.ReadFile.Wr 004B6F7D 69 74 65 46 69 6C 65 00 46 72 65 65 4C 69 62 72 iteFile.FreeLibr 004B6F8D 61 72 79 00 47 65 74 54 65 6D 70 50 61 74 68 41 ary.GetTempPathA 004B6F9D 00 55 6E 68 61 6E 64 6C 65 64 45 78 63 65 70 74 .UnhandledExcept 004B6FAD 69 6F 6E 46 69 6C 74 65 72 00 47 65 74 54 68 72 ionFilter.GetThr 004B6FBD 65 61 64 43 6F 6E 74 65 78 74 00 53 65 74 54 68 eadContext.SetTh 004B6FCD 72 65 61 64 43 6F 6E 74 65 78 74 00 47 65 74 43 readContext.GetC 004B6FDD 75 72 72 65 6E 74 54 68 72 65 61 64 00 55 53 45 urrentThread.USE 004B6FED 52 33 32 2E 44 4C 4C 00 45 6E 75 6D 57 69 6E 64 R32.DLL.EnumWind 004B6FFD 6F 77 73 00 47 65 74 57 69 6E 64 6F 77 54 65 78 ows.GetWindowTex 004B700D 74 41 00 47 65 74 43 6C 61 73 73 4E 61 6D 65 41 tA.GetClassNameA 004B701D 00 50 6F 73 74 4D 65 73 73 61 67 65 41 00 52 45 .PostMessageA.RE 004B702D 54 52 49 56 41 50 49 5A 43 46 00 00 A3 36 E5 77 TRIVAPIZCF...6.w 004B703D 03 38 E5 77 27 76 D1 77 3A C1 D2 77 CC C2 D2 77 .8.w'v.w:..w...w 004B704D CF 42 D1 77 56 06 E6 77 E7 B1 E9 77 95 A5 E9 77 .B.wV..w...w...w 004B705D E9 A6 E9 77 63 79 E5 77 37 A8 E5 77 B4 16 E4 77 ...wcy.w7..w...w 004B706D FD A5 E5 77 93 9F E5 77 D8 05 E6 77 B5 5C E5 77 ...w...w...w.\.w 004B707D D7 AD D3 77 92 2E E5 77 B7 06 E5 77 82 8B E5 77 ...w...w...w...w 004B708D 8C 9D E5 77 18 06 E6 77 34 AD E4 77 84 9A E9 77 ...w...w4..w...w 004B709D 00 00 00 00 16 7F E7 77 53 99 E9 77 63 31 E5 77 .......wS..wc1.w 004B70AD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004B70BD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004B70CD 00 00 00 00 00 00 00 00 81 8C E5 77 53 65 74 46 ...........wSetF 004B70DD 69 6C 65 50 6F 69 6E 74 65 72 00 8B 44 24 04 8B ilePointer..D$..
学习heXer老大的方法,根据上面的地址,在程序运行前重新初始化。
修改地址:
代码:
004B702D 54 52 49 56 41 50 49 5A 43 46 00 00 CA 6E 4B 00 TRIVAPIZCF...nK. 004B703D D6 6E 4B 00 F5 6F 4B 80 01 70 4B 80 10 70 4B 80 .nK..oK..pK..pK. 004B704D 1E 70 4B 80 E1 6E 4B 00 F5 6E 4B 00 0E 6F 4B 00 .pK..nK..nK..oK. 004B705D 1D 6F 4B 00 2B 6F 4B 00 37 6F 4B 00 43 6F 4B 00 .oK.+oK.7oK.CoK. 004B706D A2 BE 4B 00 B3 BE 4B 00 C6 BE 4B 00 D5 BE 4B 00 ..K...K...K...K. 004B707D E3 BE 4B 80 54 6F 4B 00 66 6F 4B 00 72 6F 4B 00 ..K.ToK.foK.roK. 004B708D 7B 6F 4B 00 85 6F 4B 00 91 6F 4B 00 9E 6F 4B 00 {oK..oK..oK..oK. 004B709D B9 6F 4B 00 B7 6F 4B 00 C8 6F 4B 00 D9 6F 4B 00 .oK..oK..oK..oK.
Ultra Protect不检测原入口,找一段空地写入以下代码:
代码:
004B6000 60 pushad 004B6001 68 BD6E4B00 push OK.004B6EBD ; ASCII "KERNEL32.DLL" 004B6006 FF15 98B14900 call dword ptr ds:[<&kernel32.GetModuleHandleA>] 004B600C A3 41644B00 mov dword ptr ds:[4B6441],eax 004B6012 68 EA6F4B00 push OK.004B6FEA ; ASCII "USER32.DLL" 004B6017 FF15 98B14900 call dword ptr ds:[<&kernel32.GetModuleHandleA>] 004B601D A3 45644B00 mov dword ptr ds:[4B6445],eax 004B6023 BE 39704B00 mov esi,004B7039 004B6028 AD lods dword ptr ds:[esi] 004B6029 3D FFFFFFFF cmp eax,-1 004B602E 74 F8 je short 004B6028 004B6031 85C0 test eax,eax 004B6033 74 27 je short 004B605C 004B6035 50 push eax 004B6036 25 00000080 and eax,80000000 004B603B 58 pop eax 004B603C 8B15 41644B00 mov edx,dword ptr ds:[4B6441] 004B6042 74 06 je short 004B604A 004B6044 8B15 45644B00 mov edx,dword ptr ds:[4B6445] 004B604A 25 FFFFFF7F and eax,7FFFFFFF 004B604F 50 push eax 004B6050 52 push edx 004B6051 FF15 94B14900 call dword ptr ds:[<&kernel32.GetProcAddress>]//重新取得现系统的地址 004B6057 8946 FC mov dword ptr ds:[esi-4],eax//保存 004B605A EB CC jmp short 004B6028 004B605C B8 23714B00 mov eax,004B7123//下面是还原[49B574]和[49B200]处的值 004B6061 A3 74B54900 mov dword ptr ds:[49B574],eax 004B6066 A3 00B24900 mov dword ptr ds:[49B200],eax 004B606B 61 popad 004B606C E9 FF12FDFF jmp 00487370//处理完毕跳回原OEP
保存之后,修改OEP=004B6000,OK,现在已经可以跨系统平台正常使用啦。
很累,沉醉于脱壳之中才能感到一丝乐趣。
感谢作者risco先生,不断升级改进的ACProtect壳已经跻身世界级强壳之林了!
—————————————————————————————————
代码:
, _/ /| _.-~/ \_ , 青春都一晌 ( /~ / \~-._ |\ `\\ _/ \ ~\  忍把浮名 _-~~~-.)  __/;;,. \_ //' /'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了破解轻狂 `~ _( ,_..--\ ( ,;'' / ~-- /._`\ /~~//' /' `~\   /--.._, _ `~ " `~" " `" /~'`\ `\\~~\ " " "~' ""
Cracked By 巢水工作坊——fly [OCN][FCG][NUKE][DCM]
2004-05-13 00:00