最初一段曾经提到过我们在第一部门的,有导入表因为没,ress动态获得API地址后挪用我们需要通过GetProcAdd。位于kernel32.dll中而GetProcAddress,换为了获取kernel32的地址所以我们的问题就从挪用API转。
个重定位的TablePE文件PE头具有一,张表修复重定位我们能够按照这,序基址与DLL的基址来决定具体修复位置按照我们的程。
(jmp短跳转用的是相对地址涉及到的地址会呈现很大问题,all用的是绝对地址可是长跳转和大部门c,呈现对应不上的问题移植到原法式后会)
码的问题指导代,的环节字不生成指导代码我们能够加上naked,Main不需要施行由于我们的DLL,上不会影响所以现实。
料可得查询资,指向TEBfs寄放器,在Windbg中查看而TEB布局我们能够。

序布局如下一般原始程。加载该法式后在操作系统,EP(入口点)起头执法式从PE头指定的O行
然显,焦点之一就是解密我们的Stub的,一个解密函数我们需要编写,起始地址与竣事地址从导入变量中获取,解密之后。
得消息的问题对于无法获,局变量来获打消息我们导出一个全,)可以或许从外部读取并写入这个全局变量使得用于加壳的法式(不是被加壳法式。
lignment与SectionAlignment的分歧上因为法式在内存中和在硬盘中的形态分歧(次要体此刻FileA,般大于FileAlignment)SectionAlignment一,alAddress转换时容易惹起混合进行FileOffset与Virtu。的结构或者内存中的结构都是能够的现实上读入内存时无论是利用硬盘中,意两者的不单需要注同
于《黑客免杀攻防》本文参考的代码来自,往华章图 书的官网下载若有需要源码能够自行前。
望获得的DllBase此时我们就看到了我们希,遍历搜刮我们能够,ll”重应时获取DllBase当名字与”kernel32.d,的Dll加载挨次恒定而因为每个操作系统中,l一般都是第二个加载的kernel32.dl。通过如下体例获因而我们能够取
看似简单壳的编写,不少难点现实有。的加密以及一系列反调试本文中没有涉及IAT表,手段混合,领会壳编写的流程以及此中的难点只是作为一个壳的原型便利读者,进修打下根本为下一步深切。
要遍历重定位表那么我们只需,行修复逐一进。意注,与现实内存地址分歧此处重定位表的地址,址计较为偏移该当先减去基,前基址计较之后加上当。
了VirtualAddress、SizeOfBlock每个IMAGE_BASE_RELOCATION元素包含,不定的重定位项后边跟着数目,zeof IMAGE_BASE_RELOCATION)÷2所以重定位项的数量n就等于(SizeOfBlock-si。
述布局按照上,得GetProcAddress地我们能够按照函数名字遍历链表获址
壳能够分为两种一般大部门的,与压缩壳加密壳。法削减法式体积为目标压缩壳以通过压缩算,逆向阐发为次要目标而加密壳则以干扰。态阐发发生较大的影可是两者城市对静响
无法获得方针法式的消息加密text段时我们,始与竣事加密位也就无法指定起置
壳之后而加,了(有些壳还会加密IAT表法式的.text段就被加密,等等)资本段,码的入口(Stub的入口)法式的入口点指向壳添加的代,复(例如解密.textStub将法式的更改恢,等等)IAT,转到原始的OEP最初施行完后跳。
先的OEP后在施行到原,了(除了添加的Stub的区块)现实上法式就与加壳前没有不同,区块也并非必需而Stub的。绍一个概念此处先介,对齐区块。与在硬盘中在内存中,一个对齐值法式都具有,onAlignment例如内存中是Secti,Alignment文件中是File。是对齐值的整数倍时当一个区块的大小不,齐值的整数部门会被填充成对。可能具有一部门的空余空间也就是说在这种环境下区块。填写到该空余空间中我们能够将Stub,小就不会改变如许文件大,毒的传染做法这也是不少病。
将原法式加载到内存编写Stub代码,t段(或更多加密.tex,资本例如,添加一个SectionIAT等等)在原法式中,tub)添加到原法式中将恢回复复兴法式的代码(S。ion结尾添加一个跳转在Stub的Sect,始的OEP跳转到原。到Stub的起始地址将法式的OEP点窜。没有什么难度这个过程看似,比力难以实现的点现实上具有一些。指导代码会导致代码不成控DLL编译过程中生成的,率呈现大要不
常见的特征婚配的法子规如恶意代码阐发中,用的yara为例以此中最广为使,婚配一串特殊的数据其工作的道理就是,是特征也就。软件的焦点功能代码这段数据是一个恶意,常代码并且正,码几乎没有这段代码以至包罗其他恶意代。致这段特征发生严峻的变形进而干扰阐发而哪怕是一个简单的压缩壳都有可能导。
义一个入口函数之后我们手动定,提到的缘由所说如我们前面所,l的加载代码去掉我们需要将dl,aked环节字修所以我们利用n饰
代码若是纯粹用汇编写编写的Stub格局,植性不强之后可移,为dll格局因而建议编译。
|