飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6648|回复: 16

穿山甲5.42全保护利用工具脱壳、减肥(加视频教程)

[复制链接]
  • TA的每日心情
    开心
    2016-7-26 14:34
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-10-20 17:34:38 | 显示全部楼层 |阅读模式
    【文章标题】: 穿山甲5.42全保护利用工具脱壳、减肥
    【文章作者】: lqiulu[LCG]
    【作者邮箱】:
    lqiulu@sohu.com
    【软件名称】: InternetPass.exe
    【软件大小】: 748 KB
    【下载地址】:
    http://www.thegrideon.com/
    【加壳方式】: 穿山甲5.42全保护
    【保护方式】: 穿山甲5.42全保护
    【使用工具】: OD、 Armadillo Find Protected V1.8、Armadillo Process Detach、ARMinline 0.96final、cff explorer Ⅶ、lord PE、importREC
    【操作平台】: winxp sp3
    【软件介绍】: IE 密码恢复工具。
    【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
    --------------------------------------------------------------------------------
    【详细过程】
      Armadillo Find Protected查壳:
      
      !- Protected Armadillo
      Protection system (Professional)
      !- <Protection Options>
      Debug-Blocker
      CopyMem-II
      Enable Import Table Elimination
      Enable Strategic Code Splicing
      Enable Nanomites Processing
      Enable Memory-Patching Protections
      !- <Backup Key Options>
      Main Key Only, No Backup Keys
      !- <Compression Options>
      Best/Slowest Compression
      !- <Other Options>
      !- Version 5.42 20-02-2008
      !- Elapsed Time 00h 00m 01s 953ms
      这就是传说中的全保护,呵呵。
      
      我们就用比较简单的方法进行脱壳,首先谢谢工具的开发者们,
      下面开始:
      
      利用Armadillo Process Detach 1.31版工具的CopyMemⅡ方式载入加壳程序。
      
      (Armadillo Process Detach 1.31版工具有两种模式,1种为CopyMemⅡ模式,用于dump脱壳主程序的。
      另一种模式为Debug-Block模式,用于取得解密的IAT完整数据的。)
      
      工具显示如下:
      Filename: InternetPass.exe
      Parent process iD:  [00000F84]
      Processing...
      [PROTECTiON SYSTEM]
      Professional Edition
      [PROTECTiON OPTiONS]
      Debug-Blocker protection detected
      CopyMem-II protection detected
      Memory-Patching Protections enabled
      Strategic Code Splicing enabled
      Import Table Elimination enabled
      Nanomites Processing enabled
      [CHiLD iNFO]
    Crypto call found:  [00442F4B]
    Child process iD:   [00000400]
    Entry point:        [00408BB6]
    Original bytes:     [6A606898
      Detached successfully :)
      
      记下子进程ID:76C,首代码:6A606898,用OD附加进程76C。来到这里:
      7C92120F    C3                   RETN            //停在此处,ALT+F9返回。
      7C921210    8BFF                 MOV EDI,EDI
      7C921212 >  CC                   INT3
      7C921213    C3                   RETN
      ---------------------------------------------------------------------------
      
      00408BB6  - EB FE                JMP SHORT Internet.00408BB6  //返回到这里,将记下的首代码替换
      00408BB8    90                   NOP
      00408BB9    90                   NOP
      00408BBA    1C 41                SBB AL,41
      00408BBC    00E8                 ADD AL,CH
      00408BBE    E2 1B                LOOPD SHORT Internet.00408BDB
      00408BC0    0000                 ADD BYTE PTR DS:[EAX],AL
      00408BC2    BF 94000000          MOV EDI,94
      00408BC7    8BC7                 MOV EAX,EDI
      替换代码后为:
      00408BB6    6A 60                PUSH 60
      00408BB8    68 981C4100          PUSH Internet.00411C98
      00408BBD    E8 E21B0000          CALL Internet.0040A7A4
      00408BC2    BF 94000000          MOV EDI,94
      00408BC7    8BC7                 MOV EAX,EDI
      00408BC9    E8 72FBFFFF          CALL Internet.00408740
      
      -----------------------------------------------------------------------------------
      找IAT数据位置,
      
      00408BD1    8BF4                 MOV ESI,ESP
      00408BD3    893E                 MOV DWORD PTR DS:[ESI],EDI
      00408BD5    56                   PUSH ESI
      00408BD6    FF15 206ADA00        CALL DWORD PTR DS:[DA6A20]  ; kernel32.GetVersionExA//内存地址跟随。
      00408BDC    8B4E 10              MOV ECX,DWORD PTR DS:[ESI+10]
      00408BDF    890D 04544100        MOV DWORD PTR DS:[415404],ECX
      
      00DA69F8  0040F978  Internet.0040F978
      00DA69FC  0271AC64
      00DA6A00  02B2A607
      00DA6A04  FD8E5371
      00DA6A08  00000000
      00DA6A0C  98F65359
      00DA6A10  092CFE81
      00DA6A14  E39EDB0E
      00DA6A18  0B43008D
      00DA6A1C  010C0163
      00DA6A20  7C812B6E  kernel32.GetVersionExA  //跟随到这里。
      00DA6A24  00CFAF38
      00DA6A28  00CFDF90
      00DA6A2C  7C812837  kernel32.GetOEMCP
      00DA6A30  00CFB005
      00DA6A34  00CFAF90
      00DA6A38  7C921000  ntdll.RtlEnterCriticalSection
      00DA6A3C  00CFB046
      00DA6A40  00CFC350
      00DA6A44  00CFB0CE
      00DA6A48  77E9C461  RPCRT4.UuidFromStringA
      00DA6A4C  77D29849  USER32.EnableWindow
      00DA6A50  00D01BB0
      00DA6A54  00CFAFC7
      00DA6A58  00CFAF2A
      00DA6A5C  00CFAFBB
      00DA6A60  00CFC780
      00DA6A64  00CFB007
      00DA6A68  77D18F9C  USER32.GetSystemMetrics     //记下三个连续的函数代码。以用于在定位解密的iat数据。
      00DA6A6C  77D18C42  USER32.KillTimer
      00DA6A70  7C81D363  kernel32.SetStdHandle
      00DA6A74  7C80A164  kernel32.WideCharToMultiByte
      00DA6A78  77EF5D77  GDI32.SetTextColor
      00DA6A7C  7C80BD5F  kernel32.IsBadCodePtr
      
      9C 8F D1 77 42 8C D1 77 63 D3 81 7C


      
      ===================================================================================================
      
      下面我们获取完整的IAT数据。
      
      利用Armadillo Process Detach 1.1版工具载入加壳程序,1.3版的用过几次Debug-Block模式,OD总是出错,所以
      用1.1版的。因为1.1版的只有Debug-Block模式。
      
    DONE!

    Child process ID: 0000090C
    Entry point: 00468000
    Original bytes: 60E8
      再打开一个OD附加子进程ID878
      
      7C92120F    C3                   RETN                //停在这里,ALT+F9返回
      7C921210    8BFF                 MOV EDI,EDI
      7C921212 >  CC                   INT3
      7C921213    C3                   RETN
      7C921214    8BFF                 MOV EDI,EDI
      ---------------------------------------------------------------------------
      00468000 >- EB FE                JMP SHORT Internet.<ModuleEntryPoint>//返回到这里,替换首代码。
      00468002    0000                 ADD BYTE PTR DS:[EAX],AL
      00468004    0000                 ADD BYTE PTR DS:[EAX],AL
      00468006    5D                   POP EBP
      00468007    50                   PUSH EAX
      
      替换后为:
      
      00468000 >  60                   PUSHAD
      00468001    E8 00000000          CALL Internet.00468006
      00468006    5D                   POP EBP
      00468007    50                   PUSH EAX
      00468008    51                   PUSH ECX
      00468009    0FCA                 BSWAP EDX
      
      下断:bp VirtualProtect ** + f9运行。观查寄存器及堆栈及程序运行大的缓冲,六次大缓冲后停在这里。
      
      7C801AD4 >  8BFF                 MOV EDI,EDI
      7C801AD6    55                   PUSH EBP
      7C801AD7    8BEC                 MOV EBP,ESP
      7C801AD9    FF75 14              PUSH DWORD PTR SS:[EBP+14]
      7C801ADC    FF75 10              PUSH DWORD PTR SS:[EBP+10]
      7C801ADF    FF75 0C              PUSH DWORD PTR SS:[EBP+C]
      7C801AE2    FF75 08              PUSH DWORD PTR SS:[EBP+8]
      
      堆栈:
      00129438   00D2A93E  /CALL to VirtualProtect from 00D2A938
      0012943C   00401000  |Address = Internet.00401000
      00129440   0000F000  |Size = F000 (61440.)
      00129444   00000004  |NewProtect = PAGE_READWRITE
      00129448   0012C12C  \pOldProtect = 0012C12C
      寄存器:
      EAX 00401000 Internet.00401000   //这里是0040100  CODE段的起始位置。
      ECX 0012C12C
      EDX 0000F000
      EBX 000000A7
      ESP 00129438
      EBP 0012EB50
      ESI 000000E9
      EDI 00000009
      EIP 7C801AD4 kernel32.VirtualProtect
      
      现在就是返回时机。取消断点返ALT+F9回。
      
      00D2A93E    8B8D D0D5FFFF        MOV ECX,DWORD PTR SS:[EBP-2A30]//返回到这里。CTRL+F查找“push 100”选中全段
      00D2A944    51                   PUSH ECX
      00D2A945    8B95 CCD5FFFF        MOV EDX,DWORD PTR SS:[EBP-2A34]
      00D2A94B    52                   PUSH EDX
      00D2A94C    8B85 74D8FFFF        MOV EAX,DWORD PTR SS:[EBP-278C]
      00D2A952    0385 C8D5FFFF        ADD EAX,DWORD PTR SS:[EBP-2A38]
      
      00CE30D0    55                   PUSH EBP                            //这里改为retn。下第二个段点到程序OEP.
      00CE30D1    8BEC                 MOV EBP,ESP
      00CE30D3    83EC 2C              SUB ESP,2C
      00CE30D6    833D 00B6D500 00     CMP DWORD PTR DS:[D5B600],0
      00CE30DD    75 59                JNZ SHORT 00CE3138
      00CE30DF    C745 EC 1CE1ECE0     MOV DWORD PTR SS:[EBP-14],E0ECE11C
      00CE30E6    68 00010000          PUSH 100                           //查到这里。
      
      ----------------------------------------------------------------------------------------------------------
      第二个断点,bp CreateThread。SHIFT + F9 运行。
      
      7C8106C7 >  8BFF                 MOV EDI,EDI
      7C8106C9    55                   PUSH EBP
      7C8106CA    8BEC                 MOV EBP,ESP
      7C8106CC    FF75 1C              PUSH DWORD PTR SS:[EBP+1C]
      
      返回
      
      00D141D9    50                   PUSH EAX
      00D141DA    FF15 5CF2D400        CALL DWORD PTR DS:[D4F25C]                             ; kernel32.CloseHandle
      00D141E0    5E                   POP ESI
      00D141E1    5B                   POP EBX
      00D141E2    8BE5                 MOV ESP,EBP
      00D141E4    5D                   POP EBP
      00D141E5    C3                   RETN
      
      00D302B9    8B4D 08              MOV ECX,DWORD PTR SS:[EBP+8]
      00D302BC    8B51 08              MOV EDX,DWORD PTR DS:[ECX+8]
      00D302BF    52                   PUSH EDX
      00D302C0    6A 00                PUSH 0
      00D302C2    8B45 08              MOV EAX,DWORD PTR SS:[EBP+8]
      00D302C5    8B48 0C              MOV ECX,DWORD PTR DS:[EAX+C]
      00D302C8    51                   PUSH ECX
      00D302C9    8B55 F4              MOV EDX,DWORD PTR SS:[EBP-C]
      00D302CC    2B55 DC              SUB EDX,DWORD PTR SS:[EBP-24]
      00D302CF    FFD2                 CALL EDX
      00D302D1    8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
      00D302D4    8B45 FC              MOV EAX,DWORD PTR SS:[EBP-4]
      00D302D7    5E                   POP ESI
      00D302D8    8BE5                 MOV ESP,EBP
      00D302DA    5D                   POP EBP
      00D302DB    C3                   RETN
      
      00408BB6    AF                   SCAS DWORD PTR ES:[EDI]
      00408BB7    9C                   PUSHFD
      00408BB8    34 80                XOR AL,80
      00408BBA    D9BD 5CF027E7        FSTCW WORD PTR SS:[EBP+E727F05C]
      00408BC0    5C                   POP ESP
      00408BC1    187A 68              SBB BYTE PTR DS:[EDX+68],BH
      00408BC4    5C                   POP ESP
      00408BC5    18C5                 SBB CH,AL
      00408BC7  ^ 77 9B                JA SHORT Internet.00408B64
      
      alt+m到内存镜像
      
      在第一行点一下,CTRL+B查找“9C 8F D1 77 42 8C D1 77 63 D3 81 7C”,我们原来记下的三个连续的函数代码。
      查到这里。
      
      00DB6A68  9C 8F D1 77 42 8C D1 77 63 D3 81 7C 64 A1 80 7C  湉褀B屟wc觼|d?|
      00DB6A78  77 5D EF 77 5F BD 80 7C 54 B0 D0 00 E1 0E 81 7C  w]飛_絸|T靶.?亅
      00DB6A88  BB AE D0                                         划??
      
      右键“长型”“地址”显示。
      
      00DB6A20  7C812B6E  kernel32.GetVersionExA  //找到这里,就是IAT的起始位置。
      00DB6A24  00D0AF38
      00DB6A28  7C810C1E  kernel32.SetFilePointer
      00DB6A2C  7C812837  kernel32.GetOEMCP
      ................................
      00DBFC88  00CC8806
      00DBFC8C  00000000                 //结束位置。
      大小:FC8C-6A20=926C
      
      复制二进制数据,这些就是完整的IAT数据,复制到相应的第一个OD载入的子进程的位置进行替换。
      
      00DA6A20  7C812B6E  kernel32.GetVersionExA   //起始位置
      00DA6A24  00D0AF38
      00DA6A28  7C810C1E  kernel32.SetFilePointer
      ..........................................
      
      大小:326C
      
      
      6E 2B 81 7C 38 AF D0 00 1E 0C ...... 73


      
      替换后,我们下一步,打开ARMinline工具。对 Import Table Elimination、Enable Strategic Code Splicing及
      Enable Nanomites Processing进行处理。
      选择程序进程。
      
      首先是“Code Splicing”(远地址跳)的处理。
      起始位置是正确的,3FC0000,但大小不对,工具找到的大小为B000,实际大小为1B000
      可以ALT+M到内存镜看一下。
      点“Remove Spices”进行处理。
      
      接下来处理 “Import Table Elimination”(输入表乱序):
      工具找到的地址“DA6A18”,我们自行计算填入:DA6A20,大小:926C。New Base VA of IAT:我们一般选择data相关
      段,有sfx段则为首选,可自行选取,本程序我选的00468000段。点“Rebase IAT”进行处理。处理结束。
      
      再处理Nanomites,点Locale,对加壳的程序进行分析,程序打开后试试各种功能。
      然后点Save保存分析结果,方便一会儿进行修复。
      
      好了我们经过一系列的处理后可以dump和修复程序了。打开lordPE,dump程序。打开importREC,选中进程,
      填入oep地址:8BB6自动选择。获取输入表,全部有效,进行修复。
      再打开Arminline,load保存的Nanomites分析数据。对修复的程序进行修复cc,最后修复完成。
      运行一下我们的劳动成果吧。可以正常运行。脱壳过程结束。
      ================================================================================================
      下面进行减肥,脱壳后的程序很大1.01M,有很大垃圾段,我们利用cff explorer进行优化减肥。
      打开程序。选择Section Header右边的窗口会出现程序的各个区段。
      只保留以下区段:.text、.rdata、.adata、.rsrc、.mackt、.nano 六个区段其它都删除。
      具体过程选中区段右键“Delete setion(Header and data)”(删除区段,头及数据)进行删除。
      都删除后保存文件。具体保留哪些,一般的.text、.rsrc、.mackt、.nano这几个一定要保留,别的自己试试。
      删一个保存一个。
      
      好了,一个长篇大论,谢谢看完。到此结束。
      
      
      
    --------------------------------------------------------------------------------
    【版权声明】: 本文原创于52pojie论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                           2008年10月20日 10:53:07



    教程.rar

    [ 本帖最后由 lqiulu 于 2008-10-20 17:38 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2021-8-31 19:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2008-10-20 20:03:29 | 显示全部楼层
    非常好的教程。先收藏了,可惜我还没学会这么高深的壳。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-2-11 20:48:34 | 显示全部楼层
    板凳O(∩_∩)O谢谢
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2021-4-1 00:38
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2009-3-4 21:16:47 | 显示全部楼层
    楼主,视频教程在哪??
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-5 05:43
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2009-7-1 15:46:13 | 显示全部楼层
    已下载,楼主制作的很好,不时中断提醒一下。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-7-2 09:26:35 | 显示全部楼层
    谢谢~不过楼主能做个视频就好了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-7-3 11:51:07 | 显示全部楼层
    板凳O(∩_∩)O谢谢
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2016-4-27 17:19
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-7-8 17:15:09 | 显示全部楼层
    哈哈,好东西谢谢分享/:013 /:013
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-9-1 19:10:52 | 显示全部楼层
    这东西 加壳后 PEID 查看的时候 是VC++6.0的 特征吗?
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-9-11 15:07:34 | 显示全部楼层
    来看看,学习下,谢谢分享
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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