![]() |
|
| |
![]() VIP会员
|
标 题: eXe32Pack V1.38加壳的EXE和DLL的简便脱壳方法――影音传送带(Net Transport) V1.90 作 者: fly 时 间: 2004-06-24,02:03:47 链 接: http://bbs.pediy.com/showthread.php?t=2138 下载页面: http://www.skycn.com/soft/9541.html 软件大小: 1949 KB 软件语言: 简体中文 软件类别: 国产软件 / 免费版 / 下载工具 应用平台: Win9x/NT/2000/XP 加入时间: 2004-06-22 17:58:43 下载次数: 3819145 推荐等级: **** 软件介绍: 影音传送带是一个高效稳定功能强大的下载工具,下载速度一流,CPU占用率低,尤其在宽带上特别明显;内建易于使用的文件管理器,轻松实现按类别存放下载的文件。而且只要站点支持,这些协议均支持多线程断点续传。MMS协议流每秒的字节数差不多是固定的,这就决定了MMS流本身不能充分利用用户的带宽资源,所以多线程技术能有效地缩短MMS流下载的时间。RTSP同样支持多线程,另外选中“流/最大速度”能明显提速,效果立竿见影。影音传送带支持HTTPS(加密套接字协议层),并且支持经过HTTP、SOCKS4&5等代理下载;FTP同样支持SSL,可以有效地保护传输的数据安全。 【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! 【调试环境】:WinXP、Ollydbg1.10、PEiD、LordPE、ImportREC ――――――――――――――――――――――――――――――――― 【脱壳过程】: DosKey兄弟提出这个程序的eXe32Pack壳,无法用PE-Scan自动脱壳,手脱后还有校验无法运行。所以抽点时间看看,恰好DLL脱壳系列中还没有eXe32Pack,呵呵。目标程序可以去天空下载,主程序NetTransport.exe和libcrypto.dll等几个DLL都是采用eXe32Pack加壳的。 ――――――――――――――――――――――――――――――――― 一、主程序NetTransport.exe 脱壳 代码:
004E400C 3BC0 cmp eax,eax//进入OD后停在这 004E400E 74 02 je short NetTrans.004E4012 004E4010 8185 553BC074 02818>add dword ptr ss:[ebp+74C03B55],53808102 004E401A 3BD2 cmp edx,edx 004E401C 74 01 je short NetTrans.004E401F 直接下断: BP IsDebuggerPresent F9运行,中断后Alt+F9返回00536ECE处 代码:
00536ECC FFD0 call eax ;IsDebuggerPresent 00536ECE 8BBD D13C4000 mov edi,dword ptr ss:[ebp+403CD1]//返回这里! 00536ED4 03BD F73C4000 add edi,dword ptr ss:[ebp+403CF7] //EDI=00088EAA + 00400000=00488EAA 这个就是OEP值啦 ★ 直接下命令:G 00488EAA 直达OEP! 代码:
00488EAA 55 push ebp//在这儿用LordPE完全DUMP这个进程 00488EAB 8BEC mov ebp,esp 00488EAD 6A FF push -1 00488EAF 68 B8864900 push NetTrans.004986B8 00488EB4 68 36904800 push NetTrans.00489036 ; jmp to msvcrt._except_handler3 00488EB9 64:A1 00000000 mov eax,dword ptr fs:[0] 00488EBF 50 push eax 00488EC0 64:8925 00000000 mov dword ptr fs:[0],esp 00488EC7 83EC 68 sub esp,68 00488ECA 53 push ebx 00488ECB 56 push esi 00488ECC 57 push edi 00488ECD 8965 E8 mov dword ptr ss:[ebp-18],esp 00488ED0 33DB xor ebx,ebx 00488ED2 895D FC mov dword ptr ss:[ebp-4],ebx 00488ED5 6A 02 push 2 00488ED7 FF15 B4EA4800 call dword ptr ds:[48EAB4]; msvcrt.__set_app_type 运行ImportREC,选择这个进程。把OEP改为00088EAA,点IT AutoSearch,点“Get Import”,FixDump! 删除eXe32Pack壳“”的区段,然后用LordPE重建PE,简单优化一下脱壳后的文件。EXE脱壳完成啦。 ――――――――――――――――――――――――――――――――― 二、eXe32Pack V1.38加壳的DLL 脱壳 这个才是写这点东西的只要目的啦。 以libcrypto.dll为例子吧,因为这个dll对主程序有个校验啦。 ―――――――――――――――――――――――― 1、OEP 代码:
1003300C 3BC9 cmp ecx,ecx//进入OD后停在这 1003300E 74 02 je short libcrypt.10033012 10033010 8181 553BC974 02818>add dword ptr ds:[ecx+74C93B55],53848102 1003301A 3BC9 cmp ecx,ecx 1003301C 74 01 je short libcrypt.1003301F 直接下断: BP IsDebuggerPresent F9运行,中断后Alt+F9返回10045A67处 代码:
10045A65 FFD0 call eax 10045A67 8BBD D13C4000 mov edi,dword ptr ss:[ebp+403CD1]//返回这里! 10045A6D 03BD F73C4000 add edi,dword ptr ss:[ebp+403CF7] //EDI=0001C7AA + 10000000=1001C7AA 这个就是OEP值啦 ★ 现在Ctrl+B在“整个段块”搜索16进制值:0F84F7000000 代码:
1004573B 74 01 je short libcrypt.1004573E 1004573D BE 2BBDD53C mov esi,3CD5BD2B 10045742 40 inc eax 10045743 000F add byte ptr ds:[edi],cl//找到这里 10045745 84F7 test bh,dh 因为有花指令,其实这段代码是: 代码:
1004573E 2BBD D53C4000 sub edi,dword ptr ss:[ebp+403CD5] 10045744 0F84 F7000000 je libcrypt.10045841 现在去OEP吧。G 1001C7AA 代码:
1001C7AA 55 push ebp //OEP ★ 1001C7AB 8BEC mov ebp,esp 1001C7AD 53 push ebx 1001C7AE 8B5D 08 mov ebx,dword ptr ss:[ebp+8] 1001C7B1 56 push esi 1001C7B2 8B75 0C mov esi,dword ptr ss:[ebp+C] 1001C7B5 57 push edi 1001C7B6 8B7D 10 mov edi,dword ptr ss:[ebp+10] 1001C7B9 85F6 test esi,esi 1001C7BB 75 09 jnz short libcrypt.1001C7C6 用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择libcrypto.dll,然后完整脱壳,得到dumped.dll。 ―――――――――――――――――――――――― 2、输入表 还是借用ImportREC吧。 随便从程序找一个API调用,如: 代码:
1001C72D FF15 24F10110 call dword ptr ds:[1001F124];77BFAC46 代码:
1001F000 58 B2 0E 78 09 2D 0C 78 EC 1A 0C 78 B7 1A 0C 78 X?x.-.x?.x?.x …… …… 1001F120 DB 79 C0 77 46 AC BF 77 88 D3 C2 77 00 00 00 00 垸厉F?w?瞒.... 结束地址=1001F12C 运行ImportREC,选中Ollydbg的loaddll.exe的进程,然后点“选取DLL”,选择libcrypto.dll,填入RVA=0001F000、大小=12C,点“Get Import”,改OEP=0001C7AA,FixDump! ――――――――――――――――――――――――――――――――― 3、重定位表 修复 eXe32Pack壳没有加密重定位表,我们所要做的只是找到DLL原来的重定位表的RVA和大小就行了! 还记得在1004573E处下个“硬件执行”断点吧?OK,重新载入这个DLL,F9运行,中断在1004573E处 代码:
1004573E 2BBD D53C4000 sub edi,dword ptr ss:[ebp+403CD5]; libcrypt.10000000 //中断在这里! 10045744 0F84 F7000000 je libcrypt.10045841 //如与映像基址不符则重定位处理!★ //因为这个DLL不进行重定位,无论得到重定位表信息,所以我们在这里可以改标志位Z=0,使其不跳转! 1004574A 3BE4 cmp esp,esp 1004574C 74 01 je short libcrypt.1004574F 1004574F 8B53 04 mov edx,dword ptr ds:[ebx+4] 10045752 83EA 08 sub edx,8 10045755 3BDB cmp ebx,ebx; libcrypt.1002C000 //EBX=1002C000 ★ 重定位表的开始地址! 10045757 74 02 je short libcrypt.1004575B 1004575B 0BD2 or edx,edx 1004575D 0F8E DE000000 jle libcrypt.10045841 //重定位处理结束则这里跳转! ★ 所以我们直接F4至10045841 代码:
10045841 80BD F53C4000 00 cmp byte ptr ss:[ebp+403CF5],0 //此时EBX=1002E470 ★ 这是重定位表的结束地址 10045848 0F84 CB010000 je libcrypt.10045A19 得到重定位表信息: RVA=0002C000,大小=1002E470-1002C000=2470 用LordPE修正dumped_.dll的重定位表RVA=0002C000、大小=00002470,保存之。DLL脱壳完成啦! ――――――――――――――――――――――――――――――――― 三、解除校验 重命名原文件。把dumped_.exe改名为NetTransport.exe,把dumped_.dll改名为libcrypto.dll 为何重命名NetTransport.exe?呵呵,发现脱壳前的原程序改名后都会异常出错,NetTransport.exe.manifest的缘故吧。为了省点事,就用原来的“名字”了。根据出错时的堆栈情况,判断、寻找程序中出错的地方。直接说修改的地方了。 代码:
0045CAC2 FF15 CC905300 call dword ptr ds:[<&kernel32.GetFileAttributesA>] 0045CAC8 83F8 FF cmp eax,-1 0045CACB 74 24 je short NetTrans.0045CAF1 0045CACD 8D8C24 A0000000 lea ecx,dword ptr ss:[esp+A0] 0045CAD4 8D5424 70 lea edx,dword ptr ss:[esp+70] 0045CAD8 51 push ecx 0045CAD9 6A 30 push 30 0045CADB 52 push edx 0045CADC 68 24010000 push 124 0045CAE1 68 00104000 push NetTrans.00401000 0045CAE6 FF5424 24 call dword ptr ss:[esp+24]; libcrypt.wx_CheckFile //CheckFile 很明显的提示呀 0045CAEA 83C4 14 add esp,14 0045CAED 3C 01 cmp al,1 0045CAEF 74 16 je short NetTrans.0045CB07//不跳就出错了 因为主程序中还有几处调用这个libcrypt.wx_CheckFile检测,所以进入DLL中修改。 代码:
00E542B3 8B8C24 58020000 mov ecx,dword ptr ss:[esp+258] 00E542BA 8AC3 mov al,bl//改为:mov al,1 ★ 00E542BC 5E pop esi 00E542BD 5B pop ebx 00E542BE 64:890D 00000000 mov dword ptr fs:[0],ecx 00E542C5 81C4 5C020000 add esp,25C 00E542CB C3 retn OK,现在脱壳后的NetTransport.exe和libcrypto.dll都可以正常运行了。 ――――――――――――――――――――――――――――――――― 代码:
, _/ /| _.-~/ \_ , 青春都一晌 ( /~ / \~-._ |\ `\\ _/ \ ~\ ) 忍把浮名 _-~~~-.) )__/;;,. \_ //' /'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了破解轻狂 `~ _( ,_..--\ ( ,;'' / ~-- /._`\ /~~//' /' `~\ ) /--.._, )_ `~ " `~" " `" /~'`\ `\\~~\ " " "~' "" Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM] 2004-06-24 02:00
|
||
|
此帖于 2004-06-24 02:06:28 被 fly 最后编辑
|
![]() VIP会员
|
UnPaked - NetTransport V1.91 问ABC老大好 脱壳方面是相似的。检验部分如下: 可以BP GetFileAttributesA 代码:
0045EF86 FF15 DC204900 call dword ptr ds:[<&kernel32.GetFileAttributesA>] 0045EF8C 83F8 FF cmp eax,-1 0045EF8F 74 24 je short NetTrans.0045EFB5 0045EF91 8D8C24 A4010000 lea ecx,dword ptr ss:[esp+1A4] 0045EF98 8D5424 70 lea edx,dword ptr ss:[esp+70] 0045EF9C 51 push ecx 0045EF9D 6A 30 push 30 0045EF9F 52 push edx 0045EFA0 68 24010000 push 124 0045EFA5 68 00104000 push NetTrans.00401000 0045EFAA FF5424 24 call dword ptr ss:[esp+24]; libcrypt.wx_CheckFile //DLL中检验 0045EFAE 83C4 14 add esp,14 0045EFB1 3C 01 cmp al,1 0045EFB3 74 16 je short NetTrans.0045EFCB//不跳就出错了 代码:
00E642AE E8 7D10FFFF call libcrypt.00E55330 00E642B3 8B8C24 58020000 mov ecx,dword ptr ss:[esp+258] 00E642BA 8AC3 mov al,bl//改为:mov al,1 ★ 00E642BC 5E pop esi 00E642BD 5B pop ebx 00E642BE 64:890D 00000000 mov dword ptr fs:[0],ecx 00E642C5 81C4 5C020000 add esp,25C 00E642CB C3 retn 请测试 点击下载:附件!UnPaked――NetTransport V1.91.rar
|
||
|