当前位置: 首页 > news >正文

长沙市制作网站网站设计需求文档

长沙市制作网站,网站设计需求文档,网站开发在线浏览pdf,wordpress 建站 教程视频在可执行PE文件中#xff0c;节#xff08;section#xff09;是文件的组成部分之一#xff0c;用于存储特定类型的数据。每个节都具有特定的作用和属性#xff0c;通常来说一个正常的程序在被编译器创建后会生成一些固定的节#xff0c;通过将数据组织在不同的节中…在可执行PE文件中节section是文件的组成部分之一用于存储特定类型的数据。每个节都具有特定的作用和属性通常来说一个正常的程序在被编译器创建后会生成一些固定的节通过将数据组织在不同的节中可执行文件可以更好地管理和区分不同类型的数据并为运行时提供必要的信息和功能。节的作用是对可执行文件进行有效的分段和管理以便操作系统和加载器可以正确加载和执行程序。 可执行文件常用的节包括了 节名作用功能说明权限.text代码节包含可执行代码例如程序的指令和函数体执行和读取.data数据节包含程序的全局和静态变量的初始化数据。读取和写入.rdata只读数据节包含只读的静态数据如常量字符串和只读的全局变量。只读.idata导入表节包含程序所依赖的外部函数和符号的引用信息用于动态链接。读取和写入.edata导出表节包含程序导出的函数和符号的信息用于供其他程序或模块使用。读取.rsrc资源节包含程序所使用的资源数据如图标、位图、字符串等。读取.reloc重定位节包含程序的重定位信息用于在加载时修正代码和数据的内存地址。读取和写入 当然了并不是每一个标准的PE文件都具备这些节某些程序可能会使用特殊的PE编辑工具新增一些特殊的节或者当程序被加密压缩后该程序的节区也会发生不同的变化对于新增节来说需要具备如下几个关键步骤 计算新节的偏移量和大小确定要添加的新节的偏移量和大小。偏移量是新节在文件中的位置大小是新节的长度。更新PE文件头修改PE文件头中的相关字段更新文件头中的NumberOfSections字段和SizeOfImage字段。创建新节在PE文件末尾添加新的节表项并填充新节的各个字段例如名称、虚拟大小、文件大小、内存对齐等。 对于操作PE文件来说在头文件中需要引入ImageHlp.h并且包含#pragma comment(lib,Imagehlp.lib)库该库提供了用于处理PE文件的函数和结构体是Image Help Library库的一部分读者可自行在项目内引入这个库。 当引入后我们来实现第一个功能为可执行文件分配空间如下AllocateSpace函数该函数通过使用CreateFileA打开一个文件并调用SetFilePointer将文件指针移动到FILE_END文件末尾处接着通过循环的方式WriteFile填充开辟空间。 // 计算取整 DWORD AlignSize(int nSecSize, DWORD Alignment) {int nSize nSecSize;if (nSize %Alignment ! 0){nSecSize (nSize / Alignment 1) * Alignment;}return nSecSize; }// 为可执行文件分配空间 DWORD AllocateSpace(char *FileName, int FileSize) {HANDLE hFile CreateFileA(FileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE |FILE_SHARE_READ, NULL, OPEN_ALWAYS, NULL, NULL);DWORD ret SetFilePointer(hFile, 0, 0, FILE_END);if (ret ! NULL){for (int x 0; x FileSize; x){WriteFile(hFile, , 1, 0, 0);}CloseHandle(hFile);}return ret; }上述程序的使用方法很简单通过AllocateSpace(d://lyshark.exe,4096)传入两个参数分别是需要开辟空间的进程以及开辟空间的长度该长度可以与节区内的大小保持一致当程序执行后则返回开辟位置读者可使用WinHex工具跳转到程序末尾自行查看如下图所示 接着我们来实现添加节区功能如下代码ImplantSection则可实现增加新节功能该函数传入三个参数分别是可执行文件地址节区名称以及节区长度程序中通过映射方式打开文件分别寻找到当前节表首地址以及节的数量通过复制一个节并对该节内存参数进行更新节内存大小节文件大小节内存属性等当这些数据被更正后则加下来就是保存文件并返回pTmpSec-PointerToRawData节所在文件地址。 // 计算取整 DWORD AlignSize(int nSecSize, DWORD Alignment) {int nSize nSecSize;if (nSize %Alignment ! 0){nSecSize (nSize / Alignment 1) * Alignment;}return nSecSize; }// 添加新的节区 szFileName 打开exe文件 szSecName 节名称 nSecSize 节大小 DWORD ImplantSection(LPSTR szFileName, char szSecName[8], int nSecSize) {HANDLE m_hFile CreateFileA(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);HANDLE m_hMap CreateFileMapping(m_hFile, NULL, PAGE_READWRITE, 0, 0, 0);HANDLE m_lpBase MapViewOfFile(m_hMap, FILE_MAP_READ | FILE_SHARE_WRITE, 0, 0, 0);// ------------------------------------------------------------------------// 定位到DOS/NT头部// ------------------------------------------------------------------------// 定位DOS头PIMAGE_DOS_HEADER m_pDosHdr (PIMAGE_DOS_HEADER)m_lpBase;printf([-] 当前DOS头: 0x%08X \n, m_pDosHdr);// 定位NT头PIMAGE_NT_HEADERS m_pNtHdr (PIMAGE_NT_HEADERS)((DWORD)m_lpBase m_pDosHdr-e_lfanew);printf([-] 当前NT头: 0x%08X \n, m_pNtHdr);// 定位节表首地址PIMAGE_SECTION_HEADER m_pSecHdr (PIMAGE_SECTION_HEADER)((DWORD)(m_pNtHdr-OptionalHeader) m_pNtHdr-FileHeader.SizeOfOptionalHeader);printf([-] 定位当前节表首地址: 0x%08X \n, m_pSecHdr);// 定位节区数量int nSecNum m_pNtHdr-FileHeader.NumberOfSections;DWORD dwFileAlignment m_pNtHdr-OptionalHeader.FileAlignment;DWORD dwSecAlignment m_pNtHdr-OptionalHeader.SectionAlignment;PIMAGE_SECTION_HEADER pTmpSec m_pSecHdr nSecNum;// 复制节名strncpy((char *)pTmpSec-Name, szSecName, 7);printf([] 拷贝节名称: %s \n, szSecName);// ------------------------------------------------------------------------// 节的内存大小// ------------------------------------------------------------------------pTmpSec-Misc.VirtualSize AlignSize(nSecSize, dwSecAlignment);printf([] 节表内存大小: %d \n, nSecSize);// 节的内存起始位置pTmpSec-VirtualAddress m_pSecHdr[nSecNum - 1].VirtualAddress AlignSize(m_pSecHdr[nSecNum - 1].Misc.VirtualSize, dwSecAlignment);printf([] 节内存起始位置: 0x%08X \n, pTmpSec-VirtualAddress);// ------------------------------------------------------------------------// 节的文件大小// ------------------------------------------------------------------------pTmpSec-SizeOfRawData AlignSize(nSecSize, dwFileAlignment);printf([-] 节的文件大小: %d \n, pTmpSec-SizeOfRawData);// 节的文件起始位置,这里直接在文件末尾分配空间pTmpSec-PointerToRawData SetFilePointer(m_hFile, 0, 0, FILE_END);printf([-] 节的文件起始位置: 0x%08X \n, pTmpSec-PointerToRawData);// 这里开始循环在文件末尾分配nSecSize存储空间for (int x 0; x nSecSize; x)WriteFile(m_hFile, , 1, 0, 0);// ------------------------------------------------------------------------// 节访问属性,设置内存属性为可读可执行代码段// ------------------------------------------------------------------------pTmpSec-Characteristics 0xE0000020;// 修正节区数量m_pNtHdr-FileHeader.NumberOfSections;// 修正映像大小m_pNtHdr-OptionalHeader.SizeOfImage pTmpSec-Misc.VirtualSize;FlushViewOfFile(m_lpBase, 0);return pTmpSec-PointerToRawData; }读者可自行调用上述函数通过ImplantSection(d://Win32Project.exe, .hack, 4096)传值此时分别传入参数为需要修改的文件名需要增加的节名称以及创建节长度在运行后读者可自行观察是否创建成功如下图所示 本文作者 王瑞 本文链接 https://www.lyshark.com/post/19540578.html 版权声明 本博客所有文章除特别声明外均采用 BY-NC-SA 许可协议。转载请注明出处
http://www.yutouwan.com/news/45303/

相关文章:

  • 企业网站推广的方式有哪些WordPress苏醒模板免费
  • 网站seo注意事项创意网站建设设计公司
  • 商务网站建设的六个步骤网站建设既有书籍又有光盘
  • 邮轮哪个网站是可以做特价胃肠的wordpress 安全漏洞
  • 网站内容优化网站大图片优化
  • 买app的网站建设枣庄建设工程管理局网站
  • 在网站做推广属于广告费吗wordpress迁移空间后无法显示图片
  • 苏州企业网站建设公司价格网站备案需要去哪里
  • 温州建设银行支行网站上海专业网站建站品
  • 网站建设教程免费夕滋湖南岚鸿官网linux下可以用wordpress
  • 网站建设过程规划和准备阶段网络营销方法有哪几种
  • 大学生个人网站怎么做那些网站做的非常好看
  • 域名 不做网站泉州免费建站模板
  • 网站建设管理规定门户网站建设调查问卷
  • 比较容易做的网站暖暖 视频 在线 观看 高清
  • 适合在线做笔试的网站网站备案密码收不到
  • 温州哪里可以做企业网站网站如果直接点击拨打电话
  • 竞价网站单页怎么样做电影网站
  • 企业网站建设方案 wordphp美食网站开发背景
  • phpstudy 网站空白北滘大良网站制作
  • 做第一个php网站深圳电器公司是国企吗
  • ppt模板免费下载网站哪个好徐州公司网站制作
  • 深圳网站seo 乐云践新贵州新闻
  • 用js做的网站代码吗做网站流程 优帮云
  • 红包打赏的网站怎么做网站建设SEO优化哪家好
  • 锦州网站建设更好网站怎么接入百度地图
  • 网站建设捌金手指下拉十四网站建设的规划和流程
  • 039 织梦云idc网站源码百度怎么做自己的网站
  • 珠海企业集团网站建设代理商加盟项目网站
  • 自助建站申请书大网站