脱壳与加壳-加壳-6-代码实现加密导入表
发布日期:2021-05-09 00:17:56 浏览次数:10 分类:博客文章

本文共 1263 字,大约阅读时间需要 4 分钟。

脱壳与加壳-加壳-6-代码实现加密导入表

BOOL CPeUtil::GetImportTable() {     DWORD TableLen = 0; //1得到导入表地址 PIMAGE_IMPORT_DESCRIPTOR pImportTable = (PIMAGE_IMPORT_DESCRIPTOR)(RvaToFoa(pOptionHeader->DataDirectory[1].VirtualAddress) + FileBuff); PIMAGE_IMPORT_DESCRIPTOR pFirstImportTable = pImportTable; //2保存原本的导入表内容 while (pImportTable->Name != NULL) { TableLen++; pImportTable++; } if (TableLen == 0) { return TRUE; //说明没弄到导入表,或者没有导入表 } TableLen++;//这里加一是为了保存导入表后面一个空的结构体 this->ImportTableSize = sizeof(IMAGE_IMPORT_DESCRIPTOR) * TableLen; //3 开辟内存空间 pNewImportTable = new IMAGE_IMPORT_DESCRIPTOR[TableLen]{}; //4 复制内容到新开辟的空间memcpy(pNewImportTable,pFirstImportTable,ImportTableSize); //5 复制到新开辟的区段里面 //6 设置地址为这个导入表导入的区段的首地址 //需要注意的是需要转换为RVA return 0; }

这里的RvaToFoa

DWORD CPeUtil::RvaToFoa(DWORD Rva) {     DWORD Foa = 0; PIMAGE_SECTION_HEADER pSectionHeader = IMAGE_FIRST_SECTION(pNtHeader); //遍历区段,判断该rva是哪一个区段的 while (pSectionHeader->Name != NULL) { if (pSectionHeader->VirtualAddress <= Rva && pSectionHeader->VirtualAddress + pSectionHeader->Misc.VirtualSize > Rva) { //如果该地址比区段起始地址大 //但是比区段结束地址小,说明在这个区段里面 Foa = Rva - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData; break; } pSectionHeader++; } return Foa; }

 这里写的很简陋啊,其实可以再弄一个假的导入表,然后加密字符串等等操作,参考上一文章的总结操作

上一篇:脱壳与加壳-加壳-7-修复重定位表
下一篇:脱壳与加壳-加壳-5-加密导入表

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年03月24日 15时20分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章