博客
关于我
脱壳与加壳-加壳-6-代码实现加密导入表
阅读量:398 次
发布时间:2019-03-06

本文共 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; }

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

转载地址:http://tlfkz.baihongyu.com/

你可能感兴趣的文章
Pandas数据分析从放弃到入门
查看>>
Matplotlib绘制漫威英雄战力图,带你飞起来!
查看>>
机器学习是什么
查看>>
《小王子》里一些后知后觉的道理
查看>>
《自私的基因》总结
查看>>
《山海经》总结
查看>>
《非暴力沟通》总结
查看>>
《你当像鸟飞往你的山》总结
查看>>
《我是猫》总结
查看>>
《抗糖化书》总结
查看>>
apache虚拟主机配置
查看>>
光盘作为yum源
查看>>
PHP 正则表达式资料
查看>>
PHP官方网站及PHP手册
查看>>
mcrypt加密以及解密过程
查看>>
mysql连续聚合
查看>>
go等待N个线程完成操作总结
查看>>
消息队列 RocketMQ 并发量十万级
查看>>
ReactJs入门教程-精华版
查看>>
乐观锁悲观锁应用
查看>>