一步一步教你加密解密技术——压缩与脱壳(3)(1)

第四节 手动脱壳1、基本知识手动脱壳就是不
借助自动脱壳工具,而是用动态调试工具SOFTICE或TRW2000来脱壳。这课谈谈一些入门方面的知识,如要了解更深的脱壳知识,请参考《脱壳高级篇》这课。工具*调试器:SoftICE 、TRW2000*内存抓取工具:Procdump等;*十六进制工具:Hiew、UltraEdit、Hex Workshop等;*PE编辑工具: Procdump、PEditor等;名词概念★PE文件:Microsoft设计了一种新的文件格式Portable Executable File Format(即PE格式),该格式应用于所有基于Win32的系统:Windows NT、Windows 2000、Win32s及Windows 95/98。★基址(ImageBase ):是指装入到内存中的EXE或DLL程序的开始地址,它是Win32中的一个重要概念。 在Windows NT中,缺省的值是10000h;对于DLLs,缺省值为400000h。在Windows 95中,10000h不能用来装入32位的执行文件,因为该地址处于所有进程共享的线性地址区域,因此Microsoft将Win32可执行文件的缺省基地址改变为400000h。★RVA:相对虚拟地址(Relative Virual Address),是某个项相对于文件映象地址的偏移。
例如:装载程序将一个PE文件装入到虚拟地址空间中,从10000h开始的内存中,如果PE中某个表在映像中的起始地址是10464h,
那么该表的RVA就是464h。虚拟地址(RVA)=偏移地址+基址(ImageBase ) ★Entry Point:入口点,就是程序在完成了对原程序的还原后,开始跳转到刚还原的程序执行,此时的地址就是入口点的值。步骤 ★确定壳的种类一般拿到软件后,可用工具FileInfo、gtw、TYP32等侦测文件类型的工具
来看看是何种壳,然后再采取措施。★入口点(Entry Point)确定对初学者来说定位程序解壳后的入口点确定较难,但熟练后,入口点
查找是很方便的。 决大多数 PE 加壳程序在被加密的程序中加上一个或多个段。 所以看到一个跨段的 JMP 就有可能是了。如:UPX 用了一次跨段的 JMP , ASPACK 用了两次跨段的 JMP 。 这种判断一般是跟踪分析程序而找到入口点,如是用TRW2000也可试试命令:PNEWSEC,它可让TRW2000中断到入口点上。PNEWSEC:运行直到进入一个 PE 程序内存的新的 section时产生断点。(如不懂,以后到脱壳高级篇自会
明白) 另外也可用D.boy的冲击波2000,它能轻易的找到任何加密壳的入口点,★dump取内存己还原文件找到入口点后,在此处可以用 Procdump的FULL DUMP功能来抓取内存中整个文件,如是用TRW2000也可用命令:makepe命令含义:从内存中整理出一个指令名称的PE格式的exe文件, 当前的 EIP 将成为新的程序入口,生成文件的 Import table 已经重新生成过了。生成的PE文件可运行任何平台和微机上。 pedump命令含义:将PE文件的内存映像直接映像到指定的文件里。生成的文件只能在本机运行,不能在其它系统平台或微机运行。 ★修正刚dump取的文件如是用 Procdump的FULL DUMP功能脱壳的文件,要用 Procdump或PEditor等PE编辑工具修正入口点(Entry Point)。2、UPX V1.01的壳目标程序: 用 UPX V1.01压缩过的Notepad.exe方法一、使用TRW2000来脱壳★使用工具TRW2000 FileInfo ★确定壳的种类 拿到这软件后,可用工具FileInfo、gtw、TYP32等侦测文件类型的工具来看看是何种软件压缩的,在这我们以FileInfo 为例,把目标文件复制到FileInfo目录下,在资源管理器下双击FileInfo,再按回车,你将看到报告出来:告诉你这是UPX1.01压缩的软件。★入口点(Entry Point)确定 ◇利用跟踪分析来确定入口点决大多数 PE 加壳程序在被加密的程序中加上一个或多个段。 所以看到一个跨段的 JMP 就有可能是了。 UPX 用了一次跨段的 JMP 。 就是你一步步跟踪时会看到代码有一突跃,一般再跟据领空文件名的变化,就能确定入口点了。运行TRW2000并装载目标程序,然后LOAD,你将中断在主程序入口处:此时合理按F10、F7及F12一直向前走,注意此时领空会是:NOTUPX!UPX1+2xxx.在你跟踪过程中会出现如下代码:该程序的具体情况如下:XXX:XXXXXXXX 60 PUSHAD ;所
有的寄存器进栈XXX:XXXXXXXX BE2EFD4200 MOV ESI, XXXXXXXX ;将下一条指令送入进行解压XXX:XXXXXXXX 8DBED21FFDFF LEA EDI, [ESI+XXXXXXXX].............. <---- 按F10跟踪 ;-P XXX:XXXXXXXX FF96A8C90400 CALL [ESI+XXXXXXXX]XXX:XXXXXXXX 61 POPAD ;所有寄存器出栈XXX:XXXXXXXX E9A44AFBFF JMP 00401000 ;跳到程序真正入口点(OEP),文件完全解压。0137:40ddbe popa0137:40ddf jmp 00401000 <-此行己完全解压结束,将要跳到记事本程序入口点执行程序(注意此处的一个大的突跃)。........................0137:401000 push ebp <-完全解压后的记事本程序第一行因此入口点(Entry Point)找到为:401000◇利用TRW2000特有命令PNEWSECTRW2000也是
一款优秀的脱壳工具,有许多特有的命令对脱壳很有帮助,在此时用PNEWSEC命令也可方便找到入口点。运行TRW2000并装载目标程序,然后LOAD,你将中断在主程序入口处,下令:PNEWSEC等上一段时间,程序将中断在入口点处。 ◇用冲击波2000冲击波2000是D.boy开发的一个专门查找加壳软件入口点的工具,先运行冲击波2000,点击Track按钮:开始进行跟踪,然后运行要跟踪的程序, 找到入口点后,会在Enter point 显示。可是用这个记事本程序却无效。★dump取内存中己脱壳的文件不管你用何种方法找到入口点,
首先要来到入口点一行:0137:401000 push ebp 执行命令makepe 路径/文件名或pedump 路径/文件名就这样脱壳成功。注:TRW2000的makepe重建的PE文件可跨平台运行,pedump抓取的文件却不可。方法二、用SOFTICE来脱壳★使用工具TRW2000 FileInfo ProcDump ★入口点(Entry Point)确定 ◇利用跟踪分析来确定入口点方法同TRW2000。★dump取内存中己脱壳的文件0137:40ddf jmp 00401000 现在这一行,键入以下命令: a eip (然后按回车)jmp eip (然后按回车) 按下F5 这样将改变0137:40ddf行的代码. 你会注意到在键入"jmp eip"并按下回车后,40ddf的指令现在是一个jmp.这将有效地使程序"暂停"(有点类似TRW2000的suspend命令). 按下F5使你回到window。运行ProcDump,在Task的列表中的第一个list上点击鼠标右键,然后选择"Refresh list". 在Task列表中找到notepad.exe,在它的上面点击鼠标右键. 然后,选中"Dump (Full)",给脱壳的程序起名存盘. 再在notepad.exe上点击鼠标右键,然后选中"Kill Task". 注:用此方法抓取的文件不可跨平台运行。★修正刚dump取的文件的入口点脱壳的notepad.exe程序入口是00401000. 再次使用ProcDump的PE Editor功能, 打开已脱壳的notepad.exe. 在"Header Infos"一项, 你会看见程序Entry Point(入口值)是0000DC70,这当然是错误的. 如果你试着不改动这个入口值而运行脱壳后的notepad.exe,程序将无法运行. 在 Procdump可看到ImageBase =00400000,我们上面跟踪找到的入口值的RVA是00401000,因为:虚拟地址(RVA)=偏移地址+基址(ImageBase ),因此Entry Poin=00401000-00400000=1000,改变入口值为1000,点击"OK". 现在, 运行脱壳后的notepad.exe吧,它应该正常运行了。 1 2 下一页>> 内容导航 给力(0票)动心(0票)废话(0票)专业(0票)标题党(0票)路过(0票) 原文:一步一步教你加密解密技术——压缩与脱壳(3)(1) 返回网络安全首页

时间: 2024-07-31 18:25:07

一步一步教你加密解密技术——压缩与脱壳(3)(1)的相关文章

一步一步教你加密解密技术——压缩与脱壳(1)(1)

压缩与脱壳第一节 PE文件格式PE教程1: PE文件格式一览PE 的意思就是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行体文件格式.它的一些特性继承自 Unix的 Coff (common object file format)文件格式."portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格

一步一步教你加密解密技术——压缩与脱壳(4)(1)

第五节 脱壳高级篇1. 认识Import表著者: [yAtEs] [Jamesluton@hotmail.com] 译者:hying[CCG] 标题:PE输入表说明有很多介绍PE文件的文章, 但是我打算写一篇关于输入表的文章,因为它对于破解很有用. 我想解释它的 最好的方法是举一个例子,你可以跟着我逐步 深入,一步一步的思考,最后你将完全 明白,我选择了一个我刚下载下来的小程序,它是用TASM编译的,有一个比较小的输入表,所以我想它应该是个不错的范例. 好了,让我们开始吧. 首先我们得找到输入表

一步一步教你加密解密技术——压缩与脱壳(2)(1)

第二节 认识脱壳作为一个以"壳"为主的站台,如果连访者连什么是"壳"都不清楚的话,那我也太失败了.很早以前就想写编完全关于"壳"的文章,但苦于时间和文字水平的关系,都没提笔. 首先我想大家应该先 明白"壳"的概念.在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序.它们一般都是先于程序运行,拿到控制权,然后完成它

一步一步教你加密解密技术——软件保护技术(1)(1)

第6章 软件保护技术第一节 常见保护技巧1.序列号方式(1)序列号保护机制数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧.但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了. 我们先来看看在网络上大行其道的序列号加密的工作原理.当用户从网络上下载某个shareware--共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用.注册过程一

一步一步教你加密解密技术——动态分析技术(1)

第2章 动态分析技术第一节 SoftICE与TRW2000安装安装与配制SOFTICE有几个平台的版本,DOS,WINDOWS 3.0,Windows 95/98,WINDOWS NT,等. 由于现在最普及的操作系统是 Windows 95/98.Windows NT.Windows Millennium.Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项.一.SOFTICE for win9x安装与配制㈠.SOFTICE安装 1.SOFTICE目前最新版本是4.05

一步一步教你加密解密技术——函数、资源与注册表(1)

第4章 函数.资源与注册表第一节 Win32 API 函数1.限制程序功能函数1.EnableMenuItem允许.禁止或变灰指定的菜单条目2.EnableWindow允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰) 2.对话框函数CreateDialog从资源模板建立一非模态对话窗CreateDialogParam 从资源模板建立一非模态对话窗CreateDialogIndirect 从内存模板建立一非模态对话窗CreateDialogIndirectParam从内存模板建立一非模态对

一步一步教你加密解密技术——注册机和补丁制作(1)

注册机和补丁制作第一节 概念介绍 何为注册机?注册机就是针对某一软件,通过一定算法算出注册码的程序.我们写注册机时,一般都要了解注册码的算法(这当然是通过跟踪调试了解的),之后用汇编语言或其它 高级语言来把算法还原.这样大家可根据自己的要求输入注册码,如根据自己的姓名,公司的名称注册. 目前 共享软件有两种注册方式: 一 种是交费后,作者给寄有全部功能的 Register软件,原来的Shareware根本没有某些功能: 第二种交费后, 作者给你个注册码(RegisterNumber),注册后功能

一步一步教你加密解密技术——软件保护技术(3)(1)

第三节 加密算法1.RSA算法它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman.但RSA的安全性一直未能得到理论上的证明.它经历了各种攻击,至今未被完 全攻破.一.RSA算法 : 首先,找出三个数,p,q,r,其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数......p,q,r这三个数便是privatekey接著,找出m,使得rm==1mod(

一步一步教你加密解密技术——软件保护技术(2)(1)

第二节 反跟踪技术1.Anti-Debug1.MeltICE子类型类型:检测SoftICE.TRW2000平台:Windows9x.Windows NT原理:用CreateFileA( )或_lopen( )函数试图获得SoftICE的驱动程序"\\.\SICE"(Windows9X版本)."\\.\SIWDEBUG"."\\.\NTICE"(Windows NT版本)."\\.\SIWVID"等的句柄,如果成功则说明Soft