您现在的位置: 主页 > QQ黑客资讯 > QQ黑客空间 > 文章内容

QQ黑客手工脱壳实例演示

作者: QQ黑客 来源:未知 时间: 2013-10-30 阅读:

QQ黑客基地 我们通常在汉化软件和解密软件的时候都需要脱壳,因为大部分的软件都有加壳。“壳”是一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。经过加壳的软件在跟踪时已无法看到其真实的十六进制代码,因此可以起到保护软件的目的。
  给软件加壳的主要目的有两点:第一就是达到压缩EXE文件的目的,现在虽然说硬盘的容量已经很大了,但是程序“减肥”还是一个很好的节约空间的办法,还有就是方便网络传输;其二就是加密目的,有一些版权信息需要保护起来,不能让别人随意更改,如作者的姓名、软件的名称等。大部分的程序加壳是为了防止反跟踪,防止程序被人跟踪调试,防止程序算法被别人静态分析。
  给软件加壳的实质,其实就是给可执行文件加上个外衣。用户执行的只是这个外壳程序,也就是当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后的工作就交给真正的程序了。所以,所有的工作都是在内存中进行的,而用户是无法知道程序具体是怎么样在内存中运行的。
  正是出于保护自己的软件的目的,许多软件都给自己披上了一层坚固的“壳”,使我们无法直接找到其中的资源,如果要汉化这样的软件,就必须给它脱壳,如果不给它脱壳,则无法完成汉化工作。可以这样说,如果你想汉化软件,却不会脱壳的话,那将寸步难行!所以我们很有必要了解加壳/脱壳技术。
  常用加壳软件及其特点
  为了加密,会用到一些软件。它们能将可执行文件压缩和对信息加密,实现“壳”的两个功能,这类软件称为加壳软件。在软件上加上的东东也就是我们讨论的“壳”了。但是有一点大家得搞明白就是加壳软件是不同于一般的Winzip、Winrar等压缩软件的,加了壳后的文件能够直接运行,也就是加壳后还是一个可执行文件,它们的解压在内存中完成;Winzip等软件只能是把文件解压到硬盘中,只是将压缩后的文件还原成原文件。下面这些软件就是一些常见的加壳软件:
  1.UPX:UPX自身具备加壳、脱壳功能,大名鼎鼎的流光4.5就是用它加的壳,脱壳方法为:让待脱“壳”的软件(如xx.exe)和upx.exe位于同一目录下,执行Windows开始菜单的“运行”,键入“upx -d xx.exe”即可。
  2.Telock:Telock功能包括防Softice检测、重整覆盖、Reloc区段、ITA重定位等,流光4.7用的就是Telock加的壳。一般我们可以直接用工具脱掉:Teunlock.exe,而且不需要重建资源表。
  3.PECompact压缩:它没有内置脱壳。这种压缩安全性较高,用Unpecompact可以脱去它的壳。Unpecompact是傻瓜式软件,使用方法类似AspackDie,运行后选取待脱壳的软件即可。
  4.ASPack:ASPack可压缩Windows 32Bit EXE文件与DLL文件,用ASPack压缩可执行文件一般可压到原来文件大小的50%左右,ASPack不内置解压缩功能,即无法用ASPack来给用ASPack压缩过的软件脱壳,简单的加壳可以用Aspackdie,CASPR来脱壳。
  5.Petite:具的高效保护性的压缩,不内置解压缩。可以用PTCLIENT这个软件进行简单的脱壳。
  如何查壳
  我们可以借助软件知道究竟加密软件的是什么样的壳。常用的软件有:Blast Wave 2000 v0.2.exe(D.boy冲击2000)FI.exe和Typ.exe、FileInfo,它们被用来侦测软件被加壳类型或程序入口点。通常可以快而准确地找到是哪种加壳方式。比如:FI.exe是利用通过加壳后程序固有的一段特征代码来验证。但是有的加壳方式使用了SMC(Self Modifying Code)技术,能让加壳后程序改变,使得一般的查壳软件查找不出来。但是这并不常用,技术实现起来有些难度。
  小知识:SMC技术简单解释:大致说来就是找一段原来的程式所没有用到的“空地”,同时这些“空地”在程序映射入内存后不能被覆盖。然后再此“空地”加入你自己的代码,这段代码就是所谓的补丁了,当程序在内存中解压完毕,使得程序跳到真正入口点前让其先跳到补丁代码处执行补丁,再回到原入口继续正常工作。高手邹丹所做的QQ补丁就是利用了该技术。
  手工脱壳常用软件
  关于脱壳,我们可以采用自动脱壳和手工脱壳两种方法。自动脱壳就是用相应的脱壳程序对加密的程序进行脱壳。一般某种压缩工具的壳,都会有相应的脱壳工具,因此只要找到较新版本的脱壳工具,一般的壳都可轻易脱去。那么你得先知道软件使用哪种加壳软件加密的,就得用到了侦测文件类型工具;手动脱壳就是不借助自动脱壳工具,而是用动态调试工具SOFTICE或TRW2000来脱壳。手动脱壳难度较大,一般要使用如下软件:
  1.SoftICE:Soft-ICE是目前公认最好的跟踪调试工具。使用Soft-ICE可以很容易的跟踪一个软件、或是监视软件产生的错误进行除错,它有DOS、Windows3.1、Windows 95/98/NT/2000/XP各个平台上的版本。它本是用来对软件进行调试、跟踪、除错的工具,在Cracker手中变成了最恐怖的破解工具。
  2.TRW 2000:Trw2000是中国人自己编写的调试软件,完全兼容Soft-ICE各条指令,由于现在许多软件能检测Soft-ICE存在,而对TRW2000的检测就差了许多,因此目前它成了解密高手们的最爱。TRW2000专门针对软件破解进行了优化,在Windows下跟踪调试程序,跟踪功能更强;可以设置各种断点,并且断点种类更多;它可以象一些脱壳工具一样完成对加密外壳的去除,自动生成EXE文件,因此它的破解能力更强。下载地址:http://www.pediy.com/tools/Debuggers/TRW2000/TRW1.2X/ptrw1.22.zip。如图1所示。
        
  3.ProcDump:Procdump是个对付软件加壳的脱壳工具,它可剥去许多种壳,还文件本来面目,这样再修改文件内容就容易多了。由于它还允许使用者自己编写脚本文件,因此利用它能脱去新版加壳软件的壳。它同时还是一款优秀的PE格式修改工具,是脱壳必备工具(如图2所示)。下载地址:http://www.pediy.com/tools/UNPACK/ProcDump/PDUMP32.ZIP
         
  4.冲击波2000:能轻易的找到任何加密壳的入口点,包括ASProtect以及幻影的加密壳都可以(如图3所示)。冲击波2000下载地址:http://www.pediy.com/tools/unpack/bw/bw2k02.zip
         
  5.Language2000:可以监测到目标软件是用什么软件编制的,用的是什么软件加的壳,只要用Language2000加载运行该程序,就可以一清二楚,明明白白(如图4所示)。
        
  Language2000下载地址:http://www.fpxxp.com/1/HA_language2k451144_YY.zip
  手动脱壳基础概念
  基址:指装入到内存中的EXE或DLL程序的开始地址,它是Win32中的一个重要概念。在Windows NT中,缺省的值是10000h;对于DLL,缺省值为400000h。在Windows 95中,10000h不能用来装入32位的执行文件,因为该地址处于所有进程共享的线性地址区域,因此Microsoft将Win32可执行文件的缺省基地址改变为400000h。
  RVA:相对虚拟地址,是某个项相对于文件映象地址的偏移。例如:装载程序将一个PE文件装入到虚拟地址空间中,从10000h开始的内存中,如果PE中某个表在映像中的起始地址是10464h,那么该表的RVA就是464h。虚拟地址(RVA)=偏移地址+基址(ImageBase)。
  Entry Point:入口点,就是程序在完成了对原程序的还原后,开始跳转到刚还原的程序执行,此时的地址就是入口点的值。
  手动脱壳一般步骤
  1.确定壳的种类
  一般拿到软件后,首先跟自动脱壳一样可用工具FileInfo、gtw、TYP32等侦测文件类型的工具来看看是何种壳,然后再采取措施,做到有的放矢。
  2.入口点(Entry Point)的确定
  对初学者来说定位程序解壳后的入口点确定较难,但熟练后,入口点查找是很方便的。绝大多数PE加壳程序是在被加密的程序中加上一个或多个段。所以看到一个跨段的JMP就有可能是了。如UPX用了一次跨段的JMP,ASPACK用了两次跨段的JMP。这种判断一般是跟踪分析程序而找到入口点,如是用TRW2000也可试试命令:PNEWSEC,它可让TRW2000中断到入口点上(PNEWSEC:运行直到进入一个PE程序内存的新的Section时产生断点)。另外也可用D.boy的冲击波2000,它能轻易的找到任何加密壳的入口点。
  3.复制出内存已还原文件
  找到入口点后,在此处可以用Procdump的FULL DUMP功能来抓取内存中整个文件,如是用TRW2000也可用命令:Makepe命令。含义:从内存中整理出一个指令名称的PE格式的EXE文件,当前的EIP将成为新的程序入口,生成文件的Import table已经重新生成过了,生成的PE文件可运行任何平台和微机上。
  4.修正刚Dump出的文件
  如是用Procdump的FULL DUMP功能脱壳的文件,要用Procdump或PEditor等PE编辑工具修正入口点(Entry Point)。
  完整手工脱壳示例
  我们以传奇黑眼睛为例来说说如何手工脱壳。传奇黑眼睛是最新的传奇游戏账号盗取工具,可以准确截取传奇游戏登录的区域、用户名、密码、IP地址、登录时间,并保存在指定文件和发送到指定邮箱,每次开机后自动运行于后台。该软件采用的是ASPACK 2.001加壳。
  1.找到加壳入口点。运行Bw2000.exe,单击BW2000中的Track,然后运行ASPack2.12压缩记事本。这时候就可以在BW2000中看到加壳入口点004924FE;
  2.执行程序到入口点。运行TRW2000,点“Browser”找到传奇黑眼睛的主程序Mireye.exe将其导入,然后按Ctrl+N键进入TRW2000中。在TRW2000中下命令g 004924FE(执行到偏移地址004924FE)。你会看到如下代码:
 
017F:004924E3  50                  PUSH      EAX  ;真正入口点的偏移,EAX=00055C14H
017F:004924E4  0385E0374400        ADD       EAX,[EBP+004437E0] ;偏移加上基址00400000H
017F:004924EA  59                  POP       ECX
017F:004924EB  0BC9                OR        ECX,ECX
017F:004924ED  89857B2E4400        MOV       [EBP+00442E7B],EAX
017F:004924F3  61                  POPAD
017F:004924F4  7508                JNZ       004924FE ;跳啦!
017F:004924F6  B801000000          MOV       EAX,00000001
017F:004924FB  C20C00              RET       000C
017F:004924FE  6800000000          PUSH      00455C14 ;***真正的程序入口点!
017F:00492503  C3                  RET ;过了这个RET程序领空就变了
......
017F:00455C14  55                  PUSH      EBP ;***解压后的程序真正入口处

 
  记住其中两个关键偏移地址004924FE和00455C14(就是有“***”那两行),在下面我们还要用到它们。
  3.挂起系统。接下来我们会来到偏移地址004924FE这一行,在TRW2000中下命令Suspend;
  小知识:Suspend为挂起命令,执行该命令完毕会回到系统中,它是TRW2000特有的命令。
  4.开始脱壳。打开ProcDump32 V1.62Final,在Task列表中找到程序Mireye.exe,在其上单击右键选择Dump(Full),保存为Dump.exe,然后再次单击右键选择Kill task结束这个程序,脱壳成功完成。
  5.修正程序入口点。用ProcDump32 V1.62Final的PE Editor打开Dump.exe,修正入口点为00455C14减去基址00400000,即00055C14,确定后双Dump.exe,可以正常运行啦!脱壳前程序大小为306KB,脱壳后略大一些为543KB大小。
  用FileInfo查看脱壳后的Dump.exe文件,可以识别出为Delphi程序,这说明我们脱壳成功了。
  好了,到此本文就结束了,希望能对你有所帮助,如果你喜欢汉化软件,或者喜爱解密,那就好好学习脱壳吧,否则你将寸步难行!而怎么才能学得更快更好?除了多看书以外就是勤练习,还有,兴趣是最好的老师!