20170910WindowsPrj05_文件基础操作_PE结构
来源:互联网 发布:搜狗输入法mac怎么设置 编辑:程序博客网 时间:2024/06/08 11:10
文件基础操作:
1:文件有很多种,例如:
EXE,TXT,JPG,BMP,GIF,Lnk(快捷方式),RAR,7Z,ZIP,AVI,MP4,RMVB……
2:在Windows系统中,文件可分为两部分,可执行文件和数据文件,在linux和其他任何系统里面,文件都是这样分的,但是他们都是属于文件,可执行文件会比较特殊,特能够通过操作系统的某个程序进行启动,一般是资源管理器来CreateProcess,其他的文件都是通过可执行文件来打开,体现给使用者的,这是两者之间最大的区别。
3:在系统里面,无论是那种文件,都可以使用CreateFile来打开一个文件,我们可以对不同格式文件的特殊文件头进行识别,判断这是一个什么样的文件,如果仅仅是通过文件的后缀名来判断文件类型,是不标准的,系统可执行文件里面也会有一些标志来进行标明,标明他就是一个可执行文件,这就是PE标明,在EXE和DLL里面,都会有PE的结构,可执行文件里面包含了DOS头和NT头,有这两个头的文件就是一个可执行文件。
4:如果讲一个普通的数据文件前面家长一个DOS头和NT头,操作系统也可以将这个文件执行起来,但是执行的东西谁也不知道是什么,甚至可能导致死机。所谓的后缀名实际上只是给人来看的,机器看的只文件里面的编码。
5:文件本质最重要的是内容,里面内容的不同组合就是不同种类的文件。
6:一个程序有PE结构和数据组成,可以先把PE部分和数据部分分开,下载的时候,先下载数据部分,等下载完之后,在下载PE头,放在前面,就可以一定程度上避免杀软的报毒。当然,现在有行为监控,这样做也是避免不了的。
DOS头和NT头的识别:
1:MFC注意点:
在对控件添加变量的时候,不一定是控件类型,还可以是Value类型,党委Value类型的时候,对这个Value进行设置是无效的,它的使用是使用UpdataData来获取空间里面的内容,而不是用于设置。
SetDlgItemText和SetWindowText的区别:SetDlgItemText需要传递ID,是用于设置窗口里面某个控件的Text,而SetWindowText是用于设置已知窗口的Text,需要传递的是窗口的HWND。
在看MFC里面的函数的时候,可能发现在当前类找不到需要的方法,但是很可能在父类里面,另外,命名都是动词开头,这点需要学习。
在查文档的时候,一定要判断清除是MFC里面的函数还是Win32的API,如果查不到,就先找到这个类,再在这个类里面找方法。
2:代码部分:
选择路径的部分:
CFileDialog dlg(TRUE);if (dlg.DoModal() == IDOK){m_EditValue.SetWindowTextW(dlg.GetPathName());}
判断PE头的部分:
UpdateData();//TRUE会将数据映射过来。if (m_EditValue.IsEmpty()){MessageBox(L"请选择路径!");return;}bool bRet = false;HANDLE hFile = INVALID_HANDLE_VALUE;do {hFile = CreateFile(m_EditValue, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, nullptr);if (hFile == INVALID_HANDLE_VALUE)break;IMAGE_DOS_HEADER dosHead;//DOS头用于兼容以前DOS程序而存在的。结构体里面只有两个参数基本还在用。IMAGE_NT_HEADERS32 ntHead;//NT头DWORD dwReaded;::ReadFile(hFile, &dosHead, sizeof(IMAGE_DOS_HEADER), &dwReaded, nullptr);if (dwReaded != sizeof(IMAGE_DOS_HEADER))if (dosHead.e_magic != IMAGE_DOS_SIGNATURE)break;if (SetFilePointer(hFile, dosHead.e_lfanew, nullptr, FILE_BEGIN) == INVALID_SET_FILE_POINTER)break;::ReadFile(hFile, &ntHead, sizeof(IMAGE_NT_HEADERS32), &dwReaded, nullptr);if (dwReaded != sizeof(IMAGE_NT_HEADERS32))break;if (ntHead.Signature != IMAGE_NT_SIGNATURE)break;bRet = true;} while (false);if (bRet)MessageBox(L"Is PE");elseMessageBox(L"Is Not PE");m_EditPath.SetWindowTextW(L"");CloseHandle(hFile);
3:检查PE的时候,必须确保m_EditValue里面是有值的,现在了解PE,主要是用于做病毒要使用,逆向用这块都比较少了。
DOS头:
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE headerWORD e_magic; // Magic number//判断是否为一个DOS头,WORD e_cblp; // Bytes on last page of fileWORD e_cp; // Pages in fileWORD e_crlc; // RelocationsWORD e_cparhdr; // Size of header in paragraphsWORD e_minalloc; // Minimum extra paragraphs neededWORD e_maxalloc; // Maximum extra paragraphs neededWORD e_ss; // Initial (relative) SS valueWORD e_sp; // Initial SP valueWORD e_csum; // ChecksumWORD e_ip; // Initial IP valueWORD e_cs; // Initial (relative) CS valueWORD e_lfarlc; // File address of relocation tableWORD e_ovno; // Overlay numberWORD e_res[4]; // Reserved wordsWORD e_oemid; // OEM identifier (for e_oeminfo)WORD e_oeminfo; // OEM information; e_oemid specificWORD e_res2[10]; // Reserved wordsLONG e_lfanew; // File address of new exe header//指向} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
NT头:
typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader;} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
4:一般通过DOS头找NT头,从这两个地方决定它是否为一个真的可执行文件。
只要DOS头里面的e_magic为IMAGE_DOS_SIGNATURE,NT头里面的Signature为IMAGE_NT_SIGNATURE,就说,这个文件是一个可执行文件。
阅读全文
1 0
- 20170910WindowsPrj05_文件基础操作_PE结构
- 读PE文件的3大结构体_PE文件加载器
- 文件基础操作-PE结构
- Linux目录结构及文件基础操作
- 解密系列(系统篇_PE结构详解笔记1)
- 解密系列(系统篇_PE结构详解笔记2)
- 解密系列(系统篇_PE结构详解笔记3)
- 1.Linux基础操作:主题1 Linux文件结构
- 【Linux基础】001_Linux 目录结构及文件基本操作
- 文件操作结构体
- 解密系列(系统篇_PE结构详讲笔记4)
- 解密系列(系统篇_PE结构详讲笔记5)
- 解密系列(系统篇_PE结构详讲笔记6)
- 基础之文件操作
- C++ 文件操作基础
- Java文件操作基础
- java 文件基础操作
- 文件操作基础类
- Matlab\Simulink仿真中遇到的代数环问题
- [知了堂学习笔记]_eclipse引入svn插件,并将项目同步到svn
- 校招准备系列:每天一道算法题(6)-连续最大和
- xgboost原理
- 算法 第四章 2.1.32
- 20170910WindowsPrj05_文件基础操作_PE结构
- 01-从零开始学习VTK
- opencv质心以及轮廓的识别,视频的跟踪处理二值化
- 自然语言处理相关数据集和语料
- Linux与Window系统间Redis主从配置(图文)
- PHP排序函数实例集绵usort uksort uasort
- 植物MWAS研究—小米产量与微生物组关联分析
- python实现的简单点对点(p2p)聊天
- 知识点篇:3)供应商的“偷懒”;