用户头像
 找回密码
 立即注册

QQ登录

只需一步,快速开始

鎵嬫満鐧诲綍

手机号码,快捷登录

查看: 458|回复: 0

pe系统查找数据库文件在哪里-(pe系统查找数据库文件在哪里找)

[复制链接]
用户头像

升级   100%

尚未签到

576

主题

576

帖子

1728

积分

网站编辑

Rank: 8Rank: 8

积分
1728
发表于 2022-11-11 01:51:37 | 显示全部楼层 |阅读模式
pe系统在哪里搜索数据库文件?(pe系统在哪里搜索数据库文件?找)概述pe文件:exe dll ocx sys com
pe结构:MS-dos头 标准pe头 扩展pe头 数据目录 节表
MSDOS头结构解析4D5A 文件标志
<p>#include#includeint main(){    FILE * pFile = NULL;    char * buffer;    int NFileLength = 0;    pFile = fopen(自行设置);    fseek(pFile,0,SEEK_END);    nFileLength = ftell(pFile);    rewind(pFIle);    int imageLength = nFileLength * sizeof(char)   1;    buffer = (char *)malloc(imageLength);    memset(buffer,0,nFileLength * sizeof(char) 1);    fread(buffer,1,imageLength,pFile);       // _IMAGER_DOS_HEADER //msdos头结构体,可读取    PIMAGE_DOS_HEADER ReadDosHeader;    ReadDosHeader = ( PIMAGE_DOS_HEADER)buffer;            printf(&#34;%x&#34;,ReadDosHeader->e_magic);    free(buffer);        return 0;}e_lfanew 指向新的pe头  偏移量 0x3c[/code]PE文件结构分析标准PE头和扩展PE头
<p>printf(&#34;PEheader&#34;);_IMAGE_NT_HEADERS =ReadNTHeaders; //分32 和 64 两个结构体IMAGE_NT_SIGNATURE = 0x00004550 //PE00ReadNTHeaders.[/code]常用区段:
.text (code 代码段data 数据段 可读写 全局和静态变量rodata 只读数据段idata 导入表信息edata 导出表rsrc 资源段bss 未初始化数据crt 运行时代码库tls 局部存储线程reloc 重定位区段
IMAGE_SIZEOF_FILE_HEADER等 //pe一组宏定义常见属性
VA Virtual Address //虚拟内存地址 00000000h-0fffffffh
流程基地址   相对于虚拟内存地址
RVA //Reversc Virtual Address 相对虚拟地址(模块基地址的偏移
FOA File Offset Address 文件偏移地址 文件头偏移量的位置
注意文件的位数是32位还是64位
段表结构分析及遍历<p>PIMAGE_DOS_HEADER ReadDosHeader;ReadDosHeader = (PIMAGE_DOS_HEADER)buffer;ReadNTHeader = (PIMAGE_NT_HEADERS)(buffer   ReadDosHeader->e_lfanew);//分析遍历PIMAGE_SECTION_HEADER ReadSectionHeader = IMAGE_FIRST_SECTION(ReadNTHeaders);PIMAGE_FILE_HEADER pFileHeader = &ReadNTHders->FileHeader;for(int i = 0 ; ie_lfanew   buffer);    //区段表    PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pNt);    ///判断它是否落在头    if(dwRva < pSection[0].VirtualAddress){        return dwRva;    }for(int i = 0;iFileHeader.NumberOfSections ; i  ){    ///判断是否落在某个区段内        if(dwRva>= pSection.VirtualAddress && dwRvae_lfanew   buffer);    //定位导入表        PIMAGE_DATA_DIRECTORY pImportDir = (PIMAGE_DATA_DIRECTORY)(pNt->OptionalHeader.DataDirectory   IMAGE_DIRECTORY_ENTRY_IMPORT)        //填充结构    PIMAGE_IMPORT_DESCRIPTOR pImport = (PIMAGE_IMPORT_DESCRIPTOR)(RvaToOffset(pImportDir->VirtualAddress,buffer)   buffer);    ///判断导入名不是空的    while(pImport->Name != NULL){        char * szDLLName = (char *)(RvaToOffset(pImport->Name,buffer)   buffer);//通过rva计算名称地址        printf(&#34;DLLname %s&#34;,szDLLName);        printf(&#34;time bx&#34;,pImport->TimeDataStamp);        printf(&#34;ForwarderChain:bx&#34;, pImport->ForwarderChain);        printf(&#34;name offset:bx&#34;,pImport->Name);        printf(&#34;table RVA/FirstThunk:bx&#34;,pImport->FirstThunk);        printf(&#34;OriginalFirstThunk:bx&#34;,pImport->OriginalFirstThunk);                ////指向导入地址表RVA        PIMAGE_THUNK_DATA pIat = (PIMAGE_THUNK_DATA)(RvaToOffset(pImport->OriginalFirstThunk,buffer)   buffer);                DWORD index = 0;        DWORD ImportOffset = 0;        ///导入函数的序号        while(pIat->u1.Ordinal != 0){            printf(&#34;ThunkRva:bx&#34;,pImport->OriginalFirstThunk   index);            ImportOffset = RvaToOffset(pImport->OriginalFirstThunk,buffer);                        printf(&#34;ThunkOffset:bx&#34;,ImportOffset index);                        index  = 4;            if(pIat->u1.Ordinal & 0x80000000 != 1){                                PIMAGE_IMPORT_BY_NAME pName = (PIMAGE_IMPORT_BY_NAME)(RvaToOffset(pIat->u1.AddressOfData,buffer) buffer);                printf(&#34;APIname:%s&#34;,pName->Name);                printf(&#34;Hint:x&#34;,[/code]
<p>[/code]<p>[/code]
<p>[/code]
<p>[/code]
<p>[/code]
<p>[/code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|联系我们|个人博客|发展历程|手机浏览|返回首页
方格电子商务版权所有
本站资源均收集自互联网,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站并出示版权证明以便删除!
侵权投诉邮箱:1013674450@qq.com
快速回复 返回顶部 返回列表