通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络攻防 >> 文章正文
《加密解密 技术内幕》2.1 关于PE可执行文件的修改
责任编辑:酷酷の鱼   更新日期:2008-3-14
 

 

用如下代码得到一个PE格式可执行文件的头信息: 

//writePE.cpp 

#include <windows.h> 
#include <stdio.h> 
#include <io.h> 
#include <fcntl.h> 
#include <time.h> 
#include <SYS\STAT.H> 

unsigned char writeline[18]={ 
0x6a,0x40,0x6a,0x0,0x6a,0x0,0x6a,0x0,0xe8,0x01,0x0,0x0,0x0,0xe9,0x0,0x0,0x0,0x0 
}; 

DWORD space; 
DWORD entryaddress; 
DWORD entrywrite; 
DWORD progRAV; 
DWORD oldentryaddress; 
DWORD newentryaddress; 
DWORD codeoffset; 
DWORD peaddress; 
DWORD flagaddress; 
DWORD flags; 

DWORD virtsize; 
DWORD physaddress; 
DWORD physsize; 
DWORD MessageBoxAadaddress; 

int main(int argc,char * * argv) 

HANDLE hFile, hMapping; 
void *basepointer; 
FILETIME * Createtime; 
FILETIME * Accesstime; 
FILETIME * Writetime; 
Createtime = new FILETIME; 
Accesstime = new FILETIME; 
Writetime = new FILETIME; 

if ((hFile = CreateFile(argv[1], GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0)) == INVALID_HANDLE_VALUE)//打开要修改的文件 

puts("(could not open)"); 
return EXIT_FAILURE; 

if(!GetFileTime(hFile,Createtime,Accesstime,Writetime)) 

printf("\nerror getfiletime: %d\n",GetLastError()); 

//得到要修改文件的创建、修改等时间 
if (!(hMapping = CreateFileMapping(hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0))) 

puts("(mapping failed)"); 
CloseHandle(hFile); 
return EXIT_FAILURE; 

if (!(basepointer = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0))) 

puts("(view failed)"); 
CloseHandle(hMapping); 
CloseHandle(hFile); 
return EXIT_FAILURE; 

//把文件头映象存入baseointer 
CloseHandle(hMapping); 
CloseHandle(hFile); 
map_exe(basepointer);//得到相关地址 
UnmapViewOfFile(basepointer); 
printaddress(); 
printf("\n\n"); 
if(space<50) 

printf("\n空隙太小,数据不能写入.\n"); 

else 

writefile();//写文件 


if ((hFile = CreateFile(argv[1], GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0)) == INVALID_HANDLE_VALUE) 

puts("(could not open)"); 
return EXIT_FAILURE; 


if(!SetFileTime(hFile,Createtime,Accesstime,Writetime)) 

printf("error settime : %d\n",GetLastError()); 

//恢复修改后文件的建立时间等 
delete Createtime; 
delete Accesstime; 
delete Writetime; 
CloseHandle(hFile); 
return 0; 


void map_exe(const void *base) 

IMAGE_DOS_HEADER * dos_head; 
dos_head =(IMAGE_DOS_HEADER *)base; 
#include <pshpack1.h> 
typedef struct PE_HEADER_MAP 

DWORD signature; 
IMAGE_FILE_HEADER _head; 
IMAGE_OPTIONAL_HEADER opt_head; 
IMAGE_SECTION_HEADER section_header[]; 
} peHeader; 
#include <poppack.h> 

if (dos_head->e_magic != IMAGE_DOS_SIGNATURE) 

puts("unknown type of file"); 
return; 


peHeader * header; 
header = (peHeader *)((char *)dos_head + dos_head->e_lfanew);//得到PE文件头 
if (IsBadReadPtr(header, sizeof(*header)) 

puts("(no PE header, probably DOS executable)"); 
return; 


DWORD mods; 
char tmpstr[4]={0}; 
DWORD tmpaddress; 
DWORD tmpaddress1; 

if(strstr((const char *)header->section_header[0].Name,".text")!=NULL) 

virtsize=header->section_header[0].Misc.VirtualSize; 
//此段的真实长度 
physaddress=header->section_header[0].PointerToRawData; 
//此段的物理偏移 
physsize=header->section_header[0].SizeOfRawData; 
//此段的物理长度 
peaddress=dos_head->e_lfanew; 
//得到PE文件头的开始偏移 

peHeader peH; 
tmpaddress=(unsigned long )&peH; 
//得到结构的偏移 
tmpaddress1=(unsigned long )&(peH.section_header[0].Characteristics); 
//得到变量的偏移 
flagaddress=tmpaddress1-tmpaddress+2; 
//得到属性的相对偏移 
flags=0x8000; 

上一页  [1] [2] [3] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 Delphi编程培训班开课了
    普通文章 万元赏金 寻找动易SiteWeaver CMS/eShop 产品安全漏洞
    普通文章 瑞星公司03月15日发布 每日计算机病毒及木马播报
    推荐文章 [推荐]Windows用户摆脱黑客攻击的方法
    普通文章 加密与你零距离 个人隐私不泄露!
    普通文章 解开高强度文件夹加密大师里面的"秘密"
    普通文章 运用Windows命令 识别木马蛛丝马迹
    普通文章 拔营起寨 插入式木马的清除方法!
    普通文章 电脑菜鸟必懂 常见木马连接的原理
    普通文章 计算机在中毒后的五大紧急处理措施
    热门文章
    普通文章安全你我他:IPS与IDS技术路向何方?
    普通文章企业用户防御网络威胁十要素
    普通文章使用360安全卫士 教你五分钟搞定装机
    普通文章针对性防御手段 十招教你应对邮件欺诈
    普通文章设置Web邮箱黑客警报器 防止财务损失
    普通文章Discuz! 6 后台拿Shell的方法
    普通文章如何使电脑无法更改系统用户名
    推荐文章推荐:XSS攻击Cookie欺骗中隐藏JavaScript执行
    普通文章瑞星公司03月05日发布 每日计算机病毒及木马播报
    普通文章微软证实Hotmail登录故障未解决 遭用户抗议
    精彩专题