• 标 题:eXe32Pack V1.38加壳的EXE和DLL的简便脱壳方法——影音传送带(Net Transport) V1.90
  • 作 者:fly
  • 时 间:004-06-24,02:03
  • 链 接:http://bbs.pediy.com

下载页面:  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

在1004573E处下个“硬件执行”断点,为将要寻找重定位表提供方便啦。
           
现在去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


在转存中跟随1001F124,上下看到许多函数地址,很明显的可以找到IAT开始和结束的地址:
         
代码:
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堄聎....


开始地址=1001F000
结束地址=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