sql查询分析器:自己写的文件分析器-PE  DeCODER  v1.0来源: 发布时间:星期六, 2009年9月12日 浏览:82次 评论:0
来源:安全中国
在 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 通过研究发现 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 在这里暂且不说这样 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 为了避免引起混淆 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() //------------------------------------------------------------------------------------------------------------------- BOOL Is_EXE_file( ![]() ![]() ![]() ![]() BOOL OutReady( CHAR filename ![]() ![]() ![]() ![]() VOID WriterInfo( ofstream& fout ) //输出 ![]() BOOL Load_EXE_Info( ![]() ![]() VOID Decode_EXE_Info(CHAR filename ![]() ![]() VOID ToNumeric( LPDWORD ptr, CHAR buf ![]() ![]() ![]() ![]() ![]() ![]() VOID ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() //------------------------------------------------------------------------------------------------------------------- ![]() { private : IMAGE_FILE_HEADER FILE_HEADER; // IMAGE_FILE_HEADER IMAGE_OPTIONAL_HEADER32 OPTIONAL_HEADER32; // IMAGE_OPTIONAL_HEADER32 PIMAGE_SECTION_HEADER SECTION_HEADER; // PIMAGE_SECTION_HEADER IMAGE_IMPORT_DESCRIPTOR IMPORT_DESCRIPTOR; // IMAGE_IMPORT_DESCRIPTOR PIMAGE_EXPORT_DIRECTORY EXPORT_DIRECTORY; // PIMAGE_EXPORT_DIRECTORY DWORD ExVRk, ImVRk; // 输出表和输入表在磁盘文件 ![]() ![]() public : // You can get the functions of these member functions below by their names. DataDump ![]() ~DataDump ![]() BOOL Set_FILE_HEADER( CHAR ![]() BOOL Set_OPTIONAL_HEADER32( CHAR ![]() BOOL Set_SECTION_HEADER32( CHAR ![]() BOOL Set_EXPORT_TABLE( CHAR ![]() VOID GetReady( CHAR ![]() DWORD Get_OPTIONAL_HEADER_SIZE( VOID ) const; DWORD Get_SECTION_NUMBER( VOID ) const; DWORD Get_EXPORT_TABLE_RAW( VOID ) const; DWORD Get_IMPORT_TABLE_RAW( VOID ) const; VOID Set_Export_VRk( VOID ); VOID Set_Import_VRk( VOID ); BOOL Export_Table_Existed( VOID ) const; BOOL Import_Table_Existed( VOID ) const; BOOL Show_FILE_HEADER( ofstream& ) const; BOOL Show_OPTIONAL_HEADER32( ofstream& ) const; BOOL Show_SECTION_HEADER32( ofstream& ) const; BOOL Show_EXPORT_TABLE( ![]() BOOL Show_IMPORT_TABLE( ![]() }; DataDump pool; //------------------------------------------------------------------------------------------------------------------- DataDump类 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 我们知道 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 以下是 ![]() ![]() +---------+---------+---------+---------+---------+---------+ | 段名称 虚拟地址 虚拟大小 物理地址 物理大小 标志 | +---------+---------+---------+---------+---------+---------+ | Name VOff ![]() ![]() +---------+---------+---------+---------+---------+---------+ | .text 00001000 00000092 00000400 00000200 60000020| | .rdata 00002000 000000F6 00000600 00000200 40000040| | .data 00003000 0000018E 00000800 00000200 C0000040| | .rsrc 00004000 000003A0 00000A00 00000400 C0000040| +---------+---------+---------+---------+---------+---------+ 文件虚拟偏移地址和文件物理偏移地址 ![]() FileOff ![]() ![]() = RVA - VRk >>>>>>>VaToFileOff ![]() 如VA = 00401000 (虚拟地址) ImageBase = 00400000 (基地址) VRk = VOff ![]() ![]() ![]() FileOff ![]() ![]() 这样看来 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ExVRk = SECTION_HEADER[i].VirtualAddress - SECTION_HEADER[i].Po ![]() 而此时 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ImVRk = SECTION_HEADER[i].VirtualAddress - SECTION_HEADER[i].Po ![]() 我们首先要找到输入输出表所处 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() for ( INT i=1; i<FILE_HEADER.NumberOfSections; i ![]() { ![]() { ExVRk = SECTION_HEADER[i-1].VirtualAddress - SECTION_HEADER[i-1].Po ![]() ![]() } } 接下来对于和输入表相关 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 其他就只剩下如何处理读取 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 最后有 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 读到这里 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() E-mail : [email protected] 写完的后 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 0
相关文章读者评论发表评论 |