摘要: delphi: 55 PUSH EBP 8BEC MOV EBP,ESP 83C4 F0 ADD ESP,-10 B8 A86F4B00 MOV EAX,PE.004B6FA8vc++ 55 PUSH EBP 8BEC MOV EBP,ESP 83EC 44 SUB ESP,44 56 PUSH ESIvc6.0 55 push ebp 8BEC mov ebp,esp 6A FF push -1vc7.0 6A 70 push 70 68 50110001 push hh.01001150 E8 1D020000 call hh.010017B0 33DB xor ebx,ebxvb:004 阅读全文
posted @ 2013-07-05 00:26 _** 阅读(5211) 评论(0) 推荐(0) 编辑
摘要: 文章中用到的demo下载地址:http://download.csdn.net/detail/ccnyou/4540254附件中包含demo以及文章word原稿用到工具:OllydbgLordPEImportREC这些工具请自行下载准备Dump原理这里也不多做描述,想要了解google it!常见的dump软件有LordPE,ProcDump,PETools等本文以LordPE为例首先,打开 LordPE,由于此时机器上只有一个汉化版,也懒得花时间去找原版了。我们打开选项,设置成如图样子:设置好后,在LordPE的进程窗口选择相关进程(这里以加了Aspack壳 的dumpDemo.exe为例) 阅读全文
posted @ 2013-07-05 00:24 _** 阅读(1368) 评论(0) 推荐(0) 编辑
摘要: 【文章标题】:纯手工编写的PE可执行程序【文章作者】:Kinney【下载地址】:自己搜索下载【使用工具】:C32【操作平台】:win7【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!最近,学习PE结构的知识。之后深有感触,随即便萌发了不依赖任何开发环境和编译器,纯手工写一个小程序的念头。所以我打算就写一个弹出MessageBox的小程序吧(弹出“HelloKinney!ThisisthefirstPEprogram!”)。在这里,我们首先复习一下Win32可执行程序的大体结构,就是通常所说的PE结构。PE的意思就是PortableExecutable(可移植的执行体)。PE结 阅读全文
posted @ 2013-07-05 00:22 _** 阅读(4621) 评论(0) 推荐(0) 编辑
摘要: 前面讲了如何寻找OEP和脱壳,有的时候,Dump出来的时候不能正常运行,是因为还有一个输入表没有进行处理,一些加密壳会在IAT加密上面大做文章,用HOOK - API的外壳地址来代替真是的IAT的地址,让脱壳者无法正确的还原程序的原始IAT,使得程序不能被破解,所以我们处理这些被加密IAT的地址的办 阅读全文
posted @ 2013-07-05 00:21 _** 阅读(6884) 评论(0) 推荐(2) 编辑
摘要: 经过第一节的基础知识,我们都知道了,加壳程序首先解把原来压缩的代码解压,然后放到所对应的区块中,当外壳程序执行完毕后,跳回到OEP执行,我们都知道,OEP是放在代码段中,也就是当外壳程序处理完毕后,跳回到代码段来执行,那我们是不是可以利用壳的这个特点来进行脱壳呢?答案是肯定的,是可以的!有的时候紧紧在代码段下断是不够的,那怎么办呢?其实很简单,用两次内存断点就可以了,一般的壳会一堆对.text、.rdata、.data、rsrc区块进行解压,根据这个原理,我们可以在适当的时候,对其他的几个区段下断点,然后再在.text段下断点,来找到程序的OEP,进而进行脱壳!我是用Delphi7.0的加了A 阅读全文
posted @ 2013-07-05 00:20 _** 阅读(2034) 评论(0) 推荐(0) 编辑
摘要: .上节说的是单步跟踪法,这节讲的是利用堆栈平衡(ESP定律)来进行脱壳!想必大家都听说过ESP定律这个大名吧!ESP定律运用的就是堆栈平衡原理!一般的加壳软件在执行时,首先要初始化,保存环境(保存各个寄存器的值),一般利用PUSHAD(相当于把eax,ecx,edx,ebx,esp,ebp,esi,edi都压栈),当加壳程序的外壳执行完毕以后,再来恢复各个寄存器的内容,通常会用POPAD(相当与把eax,ecx,edx,ebx,esp,ebp,esi,edi都出栈),通过跨区段的转移来跳到程序的OEP来执行原程序!在脱壳的时候,我们可以根据堆栈平衡来对ESP进行下断,进而快速到达OEP!我们用 阅读全文
posted @ 2013-07-05 00:19 _** 阅读(7961) 评论(0) 推荐(1) 编辑
摘要: 这节我们来讲讲如何寻找一个程序的OEP,即OriginalEntryPoint。一些PE加壳程序在被加密的程序上面加了一个区段(有的壳也会合并区段),当外壳代码执行完毕以后,会跳到程序的本身的代码来执行,所以我们可以依靠跨区段的转移指令来寻找程序的入口点。我们来看看加壳之前的Delphi7.0的程序,用LordPE来打开Delphi7.0程序,我们看到程序的入口点是004C498:看区段,没有任何的新加的区块:我们来看看加了壳的程序的入口点,加过壳的入口点为000629D0:区段变为三个了,很明显,壳将原程序的区段给合并了:加了壳后,首先,各个区段都要被系统映射到内存中,因为现在的入口点是00 阅读全文
posted @ 2013-07-05 00:18 _** 阅读(2864) 评论(0) 推荐(1) 编辑
摘要: 菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即EntryPoint,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向OEP,类似一个壳与程序入口点的“分界线!当我们到达了程序的OEP,我们就需要进行DUMP程序了,那么什么时候去DUMP一个程序呢?这里我引用了fly的一句话!“手动脱壳理想的最佳dump时机是指壳已经把程序代码包括资源等数据全部解密、输入表等数据还原但还未填充系统函数地址、DLL则还未重定位,此时dump出来的文件只需修正OEP、ImportTableRVA等信息即可正常运行完成脱壳。”并不是所有的 阅读全文
posted @ 2013-07-05 00:17 _** 阅读(4050) 评论(0) 推荐(1) 编辑
摘要: 脱壳技术一、基础知识壳的定义:在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了,无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP( 阅读全文
posted @ 2013-07-05 00:16 _** 阅读(2482) 评论(0) 推荐(1) 编辑
摘要: 【文章标题】: UPX脱壳全程分析 【保护方式】: 本地验证 【使用工具】: OllyDBG 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 阅读全文
posted @ 2013-07-05 00:13 _** 阅读(1331) 评论(0) 推荐(0) 编辑