首页
社区
课程
招聘
[求助]请教DLL加壳思路
发表于: 2019-10-24 23:52 6011

[求助]请教DLL加壳思路

2019-10-24 23:52
6011
最近想写一个DLL加壳器,我请教一下思路,因为DLL和EXE 不太一样,一般EXE都能占到预设的内存地址,而DLL一般不行。目前的思路是这样,分为两个部分,一个是加壳器程序,一个是stub(stub.dll)。【被加壳dll--->shelled.dll】
一、加壳器程序部分
1. 加壳器读入shelled.dll,然后将该DLL的相关PE内容保存在stub导出的一个结构体中,以便在stub程序执行时用来修复该dll重定位和导入表信息。
2. 加载stub进入内存,这里可以使用loadlirary(不执行的方式)或者直接文件读入内存的方式,从而获取stub程序的指针。
3. 在shelled.dll中添加一个节,然后将stub复制进该节中(这里需要修复shelled.dll的节表 sizeofimage等信息)
3.1 将shelled.dll的重定位表指向stub.dll的重定位表,让该DLL在加载的时候,由系统帮助修复stub.dll的重定位表。(这里stub的重定位表要先进行修改,因为原来的重定位表示根据stub的初始基址算的,现在添加到了shelled.dll的尾部。计算方式是:need_repaire->address - stub->imagebase + add_section->rva +shelled->imagebase)
4. 修改OEP至stub中(新增节的rva+stub的原始OEP)
5. 将整个文件保存

二、 stub程序部分
1. 通过teb的方式获取getprocaddress和loadlibrary的函数地址
2.自己编写一个 strcmp 函数
3. 通过GetModuleHandle函数获取当前被加壳dll的基地址(new_dll_imagebase)
4.根据这个dll的基地址和之前保存在stub导出的结构体中的该被加壳dll的PE的相关信息,对被加壳的dll的重定位和导入表进行修复
5.跳转到shelled.dll原始的oep(new_dll_imagebase + oep)

目前的思路是这样的,请各位大佬指点,哪里存在错误,或者是否有更好的解决方案,希望不吝赐教。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//