飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4625|回复: 8

[原创]UPX-Scrambler RC1.x - ㎡nT畂L简单脱壳有3法

[复制链接]

该用户从未签到

发表于 2005-4-18 06:03:47 | 显示全部楼层 |阅读模式
[目的]:完全技术交流,引起大家多破解的兴趣!高手不要见笑,我是一只菜菜鸟!
[目标]:在这张帖子里面http://www.chinadfcg.com/viewthread.php?tid=143796


今天在DFCG论坛上看到有位朋友请求脱这个壳,就拿来研究了下,方法有3种很多~我就说说用ESP脱的方法吧

首先有PEID查壳为UPX-Scrambler RC1.x - ㎡nT畂L的壳,UPX的壳都很简单!建议新手学习下,我也是新手。
用OD载入程序,提示“是压缩代码吗?是否继续分析?”我们选择“否”!

0051E7DF A>  90            nop            /程序入口
0051E7E0     61            popad          /F8单步到这里
0051E7E1     BE 00905000   mov esi,AboutUS.00509000     /F8单步到这里
0051E7E6     8DBE 0080EFFF lea edi,dword ptr ds:[esi+FFEF8000]   /F8单步到这里
0051E7EC     57            push edi         /F8单步到这里
0051E7ED     83CD FF       or ebp,FFFFFFFF  /F8单步到这里,看看右边寄存器窗口内容,ESP突现!
0051E7F0     EB 10         jmp short AboutUS.0051E802
0051E7F2     EB 00         jmp short AboutUS.0051E7F4
0051E7F4   ^ EB EA         jmp short AboutUS.0051E7E0
0051E7F6   ^ EB E8         jmp short AboutUS.0051E7E0
我们就先停在这里,在OD下边命令框框里面输入“hr 0012ffe0”,回车。F9运行

来到这里
0051E8C7     89F7          mov edi,esi  ; AboutUS.00401000     /停在这里了,在这里我们先取消断点。“调试”-->"硬件断点"删除我们设置的断点
0051E8C9     B9 1F000000   mov ecx,1F       /F8单步下去
0051E8CE     8A07          mov al,byte ptr ds:[edi]
0051E8D0     47            inc edi
0051E8D1     2C E8         sub al,0E8
0051E8D3     3C 01         cmp al,1
0051E8D5   ^ 77 F7         ja short AboutUS.0051E8CE     /要往回跳了
0051E8D7     803F 05       cmp byte ptr ds:[edi],5       /在这里F4
0051E8DA   ^ 75 F2         jnz short AboutUS.0051E8CE    /继续F8下去
0051E8DC     8B07          mov eax,dword ptr ds:[edi]
0051E8DE     8A5F 04       mov bl,byte ptr ds:[edi+4]
0051E8E1     66:C1E8 08    shr ax,8
0051E8E5     C1C0 10       rol eax,10
0051E8E8     86C4          xchg ah,al
0051E8EA     29F8          sub eax,edi
0051E8EC     80EB E8       sub bl,0E8
0051E8EF     01F0          add eax,esi
0051E8F1     8907          mov dword ptr ds:[edi],eax
0051E8F3     83C7 05       add edi,5
0051E8F6     89D8          mov eax,ebx
0051E8F8   ^ E2 D9         loopd short AboutUS.0051E8D3      /要往回跳了
0051E8FA     8DBE 00C01100 lea edi,dword ptr ds:[esi+11C000] /在这里F4
0051E900     8B07          mov eax,dword ptr ds:[edi]        /继续F8下去
0051E902     09C0          or eax,eax
0051E904     74 45         je short AboutUS.0051E94B
0051E906     8B5F 04       mov ebx,dword ptr ds:[edi+4]
0051E909     8D8430 38E611>lea eax,dword ptr ds:[eax+esi+11E638]
0051E910     01F3          add ebx,esi
0051E912     50            push eax
0051E913     83C7 08       add edi,8
0051E916     FF96 74E61100 call dword ptr ds:[esi+11E674]   /在这里进入了一个循环,进入了系统的领空,到这里来了

77E5D966     53            push ebx     ; AboutUS.00401000   /来到这里,我们不管,继续F8单步跟踪
77E5D967     56            push esi
77E5D968     74 19         je short kernel32.77E5D983
77E5D96A     68 443EE677   push kernel32.77E63E44      ; ASCII "twain_32.dll"
77E5D96F     FF7424 10     push dword ptr ss:[esp+10]
77E5D973     FF15 9813E477 call dword ptr ds:[<&ntdll._strcmpi>]   ; ntdll._stricmp
77E5D979     85C0          test eax,eax
77E5D97B     59            pop ecx
77E5D97C     59            pop ecx
77E5D97D     0F84 2F880100 je kernel32.77E761B2
77E5D983     6A 00         push 0
77E5D985     6A 00         push 0
77E5D987     FF7424 14     push dword ptr ss:[esp+14]
77E5D98B     E8 B1FFFFFF   call kernel32.LoadLibraryExA
77E5D990     5E            pop esi
77E5D991     5B            pop ebx
77E5D992     C2 0400       retn 4        /跟踪到这里,回到程序领空,来到下面


0051E91C     95            xchg eax,ebp        /来到这里
0051E91D     8A07          mov al,byte ptr ds:[edi]  /继续F8单步
0051E91F     47            inc edi
0051E920     08C0          or al,al
0051E922   ^ 74 DC         je short AboutUS.0051E900
0051E924     89F9          mov ecx,edi
0051E926     79 07         jns short AboutUS.0051E92F      /跳,跳到了这里

0051E92F     57            push edi    ; AboutUS.0051D009   /停到这里了
0051E930     48            dec eax                          /继续F8单步
0051E931     F2:AE         repne scas byte ptr es:[edi]
0051E933     55            push ebp
0051E934     FF96 78E61100 call dword ptr ds:[esi+11E678]     /又一次进入系统领空了,不管,继续,来到下面了

77E5B33C     BB FFFF0000   mov ebx,0FFFF       /来到这里
77E5B341     3BFB          cmp edi,ebx         /继续F8单步
77E5B343   ^ 0F86 894BFFFF jbe kernel32.77E4FED2
77E5B349     57            push edi
77E5B34A     8D45 F8       lea eax,dword ptr ss:[ebp-8]
77E5B34D     50            push eax
77E5B34E     FF15 8012E477 call dword ptr ds:[<&ntdll.RtlInitString>]   ; ntdll.RtlInitString
77E5B354     8D45 0C       lea eax,dword ptr ss:[ebp+C]
77E5B357     50            push eax
77E5B358     6A 00         push 0
77E5B35A     8D45 F8       lea eax,dword ptr ss:[ebp-8]
77E5B35D     50            push eax
77E5B35E     6A 00         push 0
77E5B360     FF75 08       push dword ptr ss:[ebp+8]
77E5B363     E8 24F9FFFF   call kernel32.77E5AC8C
77E5B368     50            push eax
77E5B369     E8 BEFFFFFF   call <jmp.&ntdll.LdrGetProcedureAddress>  /有个跳转,仍然没跳出系统领空,来到下面这里

77F5F892     A1 5046FC77   mov eax,dword ptr ds:[77FC4650]     /来到这里
77F5F897     85C0          test eax,eax                 /F8继续
77F5F899     74 03         je short ntdll.77F5F89E      /跳
77F5F89B     51            push ecx
77F5F89C     FFD0          call eax
77F5F89E     834D FC FF    or dword ptr ss:[ebp-4],FFFFFFFF
77F5F8A2     E8 0B000000   call ntdll.77F5F8B2
77F5F8A7     8B45 98       mov eax,dword ptr ss:[ebp-68]
77F5F8AA   ^ E9 5BFEFFFF   jmp ntdll.77F5F70A            /要往回跳了
77F5F8AF     8B5D E4       mov ebx,dword ptr ss:[ebp-1C]  /在这里F4下来,发现来到了上一个系统领空
77F5F8B2     85DB          test ebx,ebx
77F5F8B4     74 21         je short ntdll.77F5F8D7


77E5B36E     85C0          test eax,eax  /来到了这里
77E5B370   ^ 0F8C 9316FFFF jl kernel32.77E4CA09          /F8继续
77E5B376     6A 00         push 0
77E5B378     FF75 08       push dword ptr ss:[ebp+8]
77E5B37B     E8 0CF9FFFF   call kernel32.77E5AC8C
77E5B380     3945 0C       cmp dword ptr ss:[ebp+C],eax
77E5B383     0F84 D02A0200 je kernel32.77E7DE59
77E5B389     8B45 0C       mov eax,dword ptr ss:[ebp+C]
77E5B38C     5F            pop edi
77E5B38D     5B            pop ebx
77E5B38E     C9            leave
77E5B38F     C2 0800       retn 8            /继续单步到了这里,跳回到了程序的领空,来到下面

0051E93A     09C0          or eax,eax       /来到了这里
0051E93C     74 07         je short AboutUS.0051E945        /F8继续
0051E93E     8903          mov dword ptr ds:[ebx],eax
0051E940     83C3 04       add ebx,4
0051E943   ^\EB D8         jmp short AboutUS.0051E91D      /要往回跳了
0051E945     FF96 7CE61100 call dword ptr ds:[esi+11E67C]
0051E94B     60            pushad          /PUSHAD关键提示,记着在这里F4下来
0051E94C   - E9 FF28EEFF   jmp AboutUS.00401250           /F8到了这里,看看它是要从0051E94C跳到00401250,大的跳转跨段,应该到的OEP了!跳到了下面
0051E951     0000          add byte ptr ds:[eax],al
0051E953     0000          add byte ptr ds:[eax],al


00401250     68 24895100   push AboutUS.00518924       /我们在这里DUMP
00401255     E8 F0FFFFFF   call AboutUS.0040124A                        ; jmp to MSVBVM60.ThunRTMain
0040125A     0000          add byte ptr ds:[eax],al
0040125C     0000          add byte ptr ds:[eax],al
0040125E     0000          add byte ptr ds:[eax],al
00401260     3000          xor byte ptr ds:[eax],al

OD自带的DUMP插件提供了两种脱法,我们就用呵责两种都分别脱一个,随便保存一个名字,我保存的是1.exe和2.exe。运行一下,发现都不能够运行!这时请出ImportREC 1.6
选择OD调试的进程,在OEP处添上1250点“IAT自动搜索”,点“获取输入信息”哈哈~发现没有发现假指针,真是爽啊!点“修理抓取文件”选择刚才保存的1.exe和2.exe,这时ImportREC 1.6会自动给保存1_.exe和2_.exe,这个就是修复后的文件了,打开他们试试~OK都可以运行了(题外话:我使用ImportREC 1.4修复的话只有2_.exe可以运行,这就要求我们在做脱壳破解的时候要有耐心,多试!)

再用PEID查壳是Microsoft Visual Basic 5.0 / 6.0写的程序,没壳了!~这个壳很简单,大家兴趣的拿来试试吧~
最后还是要优化程序的~请出LordPE重建PE,完了OK了!




还是附上另一种简单方法吧:

载入程序之后~看看入口处是不是有这样一段代码
0051E7E0     61            popad
那么我们就Ctrl+F输入pushad就来到了
0051E943   ^\EB D8         jmp short AboutUS.0051E91D   
0051E945     FF96 7CE61100 call dword ptr ds:[esi+11E67C]
0051E94B     60            pushad          /直接就来到了这里!PUSHAD关键提示,在这里F4下来!
0051E94C   - E9 FF28EEFF   jmp AboutUS.00401250
其他就是一样的了!~


还有一个方法是打开内存镜像下内存断点,很简单!就作为大家的课后作业去试试了!~~先睡一会~~哈哈~



PS:让各位大虾见笑!小弟如有错误之处请指出!

再PS:上传附件要求这么严格啊~?

[ Last edited by wynney on 2005-4-18 at 06:08 AM ]
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2005-4-18 06:04:32 | 显示全部楼层
习惯!自己先顶!
PYG19周年生日快乐!

该用户从未签到

发表于 2005-4-18 10:22:23 | 显示全部楼层
支持原创。顶
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-10-21 20:30
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2005-4-18 16:51:47 | 显示全部楼层
    支持!顶一下吧
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-4-4 09:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2005-4-18 17:18:03 | 显示全部楼层

    关于上传附件问题

    可能有些兄弟传不了,不过多在PYG混混就有了~~~~~~~~~~~~
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2024-3-21 21:06
  • 签到天数: 1489 天

    [LV.10]以坛为家III

    发表于 2005-4-18 19:53:30 | 显示全部楼层
    支持原创。
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2005-4-19 21:10:13 | 显示全部楼层
    谢谢兄弟门!~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-4-20 01:14:07 | 显示全部楼层
    多谢大家分享!~!~!~!~
    PYG19周年生日快乐!
  • TA的每日心情

    2024-2-13 10:41
  • 签到天数: 318 天

    [LV.8]以坛为家I

    发表于 2005-5-9 18:10:28 | 显示全部楼层
    好的,顶你一下。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表