脱壳经验谈之二.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
脱壳经验谈之二 转载请注明出自暗组信息安全论坛 /,本贴地址:/viewthread.php?tid=46812 写在前面:终于把第二篇写好了,想来大家是不是都忘掉第一篇了吧? 原帖地址在这里: /viewthread.php?tid=29039 本系列的目的在于教会大家一些脱壳的基础知识,分享个人的心得体会。 本篇不同于第一篇,内容相对少但是详细,力争把每个知识点讲清楚。我希望你能都看完,认真看! 如果有什么建议和意见,如你想知道其他的内容,请跟帖回复,我会在后面的篇章中适当添加。 最后谢谢大家! 好了 正文开始! 【关于UPX】 开篇还是说点儿轻松的吧~ UPX是个非常简单但是又非常强大的压缩壳,很多脱壳的基础教程上都是先拿这个壳开刀。的确,这个壳脱起来确实不难,我这里想说的也不是脱壳的问题。先来看个实例:exeinfope B版,查一下壳,是UPX的。正常的手续是直接OD载入,然后代码向下翻,找到跳到OEP的跳转就可以了。大家可以尝试用这种方法脱下壳。从内存抓的文件居然有65M之大。我第一次弄的时候也被吓了一跳。为什么会这样呢?难道我脱错了么? 先别慌,我们来看看程序的区段信息。 引用: Name VOffset VSize ROffset RSize 标志 upx2000040C200000000000 E0000080 upx2000 040C300000000400E0000040 .rsrc0000700000006C00 C0000040 既然程序是从内存中抓出来的,那么我们这里关心的就是虚拟地址和虚拟大小了。看下程序的VSize着实会让人吓一跳,有0412E000这么大。如果没有什么概念的话,我们进行一下简单的计算: 0412E000H,单位是字节1024/1024=65.1796875MB 这个就是我们从内存中抓的文件的大小。那么文件为什么那么大的原因也找到了:是因为加壳程序把程序的虚拟大小设成非常大,从而导致前面的现象。 OK,下面总结一下从这个实例中学到了什么呢? 首先,我对虚拟地址和虚拟大小这两个概念的理解加深了。所谓虚拟地址就是程序映射到虚拟内存中相对基址的偏移。而虚拟大小就是该区段所占的虚拟内存大小,与文件实际尺寸无关。 其次,我有了一个经验:对于UPX这样的壳,最好的办法还是使用UPX自带的-d命令来脱壳的好。因为UPX是目前极少数支持自身脱壳并能完全还原加壳前程序状态的壳。对于破解来说,程序是否能还原成原状态没有什么关系,只要代码能还原即可。但是这对软件的汉化来说,使用-d命令是很重要的,因为汉化更多的是考虑资源,而资源段同其他段的相对位置关系往往会影响汉化的成败。 【关于API】 好了,上面说了些轻松的话题,现在开始进入比较技术的领域。 API,英文全称是Application Programming Interface,直译过来称为应用程序编程接口,是Windows提供的调用系统功能的接口。所有运行在Windows平台上的程序,都要或多或少的调用这些API,壳也不例外。 一个加壳程序,会对程序的代码,数据,资源,输入表等进行处理,然后再把程序入口点指向壳的代码,并重新为壳自身建立一个输入表---这一点是很重要的。随便打开加过壳的程序,我们可以看到程序输入表中调用的函数少的可怜,但是,对比过几个程序后,我们会发现一些规律,即这些壳一般都会引用某些特定的API,这些就是这里要讲的-----几个同壳密切相关的API函数。 1,GetModuleHandle.先了解一下这个函数的意思: Get 获取 Module 模块,当PE文件被映射到内存中后,我们就把它叫做一个模块。 Handle 句柄,是一个数值,对于PE可执行文件而言,句柄的意义就是文件被载入(映射)到内存时的基地址的。EXE文件一般而DLL文件的句柄是变化的。 这样这个函数的意义就明了了,即获取一个可执行模块的句柄,即可执行模块的载入基地址。 2,LoadLibraryA 这个函数的意思是显而易见的,就是载入一个库文件,可以是DLL文件或者其他类型的PE文件。入栈参数即使该文件的完整名称。 3,GetProcAddress 这个函数的全称是 Get Procedure Address, 意思是获取(子)程序地址,也就是用来获取DLL文件输出函数的真实物理地址,由于DLL文件映射到内存中的基地址是变化的,所以这个函数显得格外重要。 4,VirtualAlloc 全名 Virtual Allocate,意思是分配虚拟内存,即向系统申请一块虚拟内存。 函数原型如

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档