注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

PE导入表及导出表测试  

2014-10-27 13:23:43|  分类: 一些练习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

为了得到pe文件的一些符号,有符号编译如下

// cl /Zi /Fd petest.cpp
#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
 IMAGE_DOS_HEADER doshdr;
 IMAGE_NT_HEADERS nthdr;
 IMAGE_FILE_HEADER filehdr;
 IMAGE_OPTIONAL_HEADER opthdr;
 IMAGE_DATA_DIRECTORY datadir;
 IMAGE_SECTION_HEADER sechdr;
 IMAGE_EXPORT_DIRECTORY exphdr;
 IMAGE_IMPORT_DESCRIPTOR impdes;

 printf("PE test!\n");

 memset(&doshdr, 0x11, sizeof(doshdr));
 printf("IMAGE_DOS_HEADER size = 0x%x\n", sizeof(doshdr));

 memset(&nthdr, 0x22, sizeof(nthdr));
 printf("IMAGE_NT_HEADERS size = 0x%x\n", sizeof(nthdr));

 memset(&filehdr, 0x33, sizeof(filehdr));
 printf("IMAGE_FILE_HEADER size = 0x%x\n", sizeof(filehdr));

 memset(&opthdr, 0x44, sizeof(opthdr));
 printf("IMAGE_OPTIONAL_HEADER size = 0x%x\n", sizeof(opthdr));

 memset(&datadir, 0x55, sizeof(datadir));
 printf("IMAGE_DATA_DIRECTORY size = 0x%x\n", sizeof(datadir));

 memset(&sechdr, 0x66, sizeof(sechdr));
 printf("IMAGE_SECTION_HEADER size = 0x%x\n", sizeof(sechdr));

 memset(&exphdr, 0x77, sizeof(exphdr));
 printf("IMAGE_EXPORT_DIRECTORY size = 0x%x\n", sizeof(exphdr));

 memset(&impdes, 0x88, sizeof(impdes));
 printf("IMAGE_IMPORT_DESCRIPTOR size = 0x%x\n", sizeof(impdes));

 system("pause");

 return 0;
}

这样便于用windbg查看一些结构的偏移

d:\temp>petest
PE test!
IMAGE_DOS_HEADER size = 0x40
IMAGE_NT_HEADERS size = 0xf8
IMAGE_FILE_HEADER size = 0x14
IMAGE_OPTIONAL_HEADER size = 0xe0
IMAGE_DATA_DIRECTORY size = 0x8
IMAGE_SECTION_HEADER size = 0x28
IMAGE_EXPORT_DIRECTORY size = 0x28
IMAGE_IMPORT_DESCRIPTOR size = 0x14

0:000> dt doshdr
Local var @ 0x12fd84 Type _IMAGE_DOS_HEADER
   +0x000 e_magic          : 0x1111
   +0x002 e_cblp           : 0x1111
   +0x004 e_cp             : 0x1111
   +0x006 e_crlc           : 0x1111
   +0x008 e_cparhdr        : 0x1111
   +0x00a e_minalloc       : 0x1111
   +0x00c e_maxalloc       : 0x1111
   +0x00e e_ss             : 0x1111
   +0x010 e_sp             : 0x1111
   +0x012 e_csum           : 0x1111
   +0x014 e_ip             : 0x1111
   +0x016 e_cs             : 0x1111
   +0x018 e_lfarlc         : 0x1111
   +0x01a e_ovno           : 0x1111
   +0x01c e_res            : [4] 0x1111
   +0x024 e_oemid          : 0x1111
   +0x026 e_oeminfo        : 0x1111
   +0x028 e_res2           : [10] 0x1111
   +0x03c e_lfanew         : 286331153

0:000> dt nthdr
Local var @ 0x12fc64 Type _IMAGE_NT_HEADERS
   +0x000 Signature        : 0x22222222
   +0x004 FileHeader       : _IMAGE_FILE_HEADER
   +0x018 OptionalHeader   : _IMAGE_OPTIONAL_HEADER

0:000> dt filehdr
Local var @ 0x12fdc8 Type _IMAGE_FILE_HEADER
   +0x000 Machine          : 0x3333
   +0x002 NumberOfSections : 0x3333
   +0x004 TimeDateStamp    : 0x33333333
   +0x008 PointerToSymbolTable : 0x33333333
   +0x00c NumberOfSymbols  : 0x33333333
   +0x010 SizeOfOptionalHeader : 0x3333
   +0x012 Characteristics  : 0x3333

0:000> dt opthdr
Local var @ 0x12fe04 Type _IMAGE_OPTIONAL_HEADER
   +0x000 Magic            : 0x4444
   +0x002 MajorLinkerVersion : 0x44 'D'
   +0x003 MinorLinkerVersion : 0x44 'D'
   +0x004 SizeOfCode       : 0x44444444
   +0x008 SizeOfInitializedData : 0x44444444
   +0x00c SizeOfUninitializedData : 0x44444444
   +0x010 AddressOfEntryPoint : 0x44444444
   +0x014 BaseOfCode       : 0x44444444
   +0x018 BaseOfData       : 0x44444444
   +0x01c ImageBase        : 0x44444444
   +0x020 SectionAlignment : 0x44444444
   +0x024 FileAlignment    : 0x44444444
   +0x028 MajorOperatingSystemVersion : 0x4444
   +0x02a MinorOperatingSystemVersion : 0x4444
   +0x02c MajorImageVersion : 0x4444
   +0x02e MinorImageVersion : 0x4444
   +0x030 MajorSubsystemVersion : 0x4444
   +0x032 MinorSubsystemVersion : 0x4444
   +0x034 Win32VersionValue : 0x44444444
   +0x038 SizeOfImage      : 0x44444444
   +0x03c SizeOfHeaders    : 0x44444444
   +0x040 CheckSum         : 0x44444444
   +0x044 Subsystem        : 0x4444
   +0x046 DllCharacteristics : 0x4444
   +0x048 SizeOfStackReserve : 0x44444444
   +0x04c SizeOfStackCommit : 0x44444444
   +0x050 SizeOfHeapReserve : 0x44444444
   +0x054 SizeOfHeapCommit : 0x44444444
   +0x058 LoaderFlags      : 0x44444444
   +0x05c NumberOfRvaAndSizes : 0x44444444
   +0x060 DataDirectory    : [16] _IMAGE_DATA_DIRECTORY

0:000> dt datadir
Local var @ 0x12fc48 Type _IMAGE_DATA_DIRECTORY
   +0x000 VirtualAddress   : 0x55555555
   +0x004 Size             : 0x55555555

0:000> dt sechdr
Local var @ 0x12fddc Type _IMAGE_SECTION_HEADER
   +0x000 Name             : [8]  "ffffffff"
   +0x008 Misc             : _IMAGE_SECTION_HEADER::__unnamed
   +0x00c VirtualAddress   : 0x66666666
   +0x010 SizeOfRawData    : 0x66666666
   +0x014 PointerToRawData : 0x66666666
   +0x018 PointerToRelocations : 0x66666666
   +0x01c PointerToLinenumbers : 0x66666666
   +0x020 NumberOfRelocations : 0x6666
   +0x022 NumberOfLinenumbers : 0x6666
   +0x024 Characteristics  : 0x66666666

0:000> dt exphdr
Local var @ 0x12fd5c Type _IMAGE_EXPORT_DIRECTORY
   +0x000 Characteristics  : 0x77777777
   +0x004 TimeDateStamp    : 0x77777777
   +0x008 MajorVersion     : 0x7777
   +0x00a MinorVersion     : 0x7777
   +0x00c Name             : 0x77777777
   +0x010 Base             : 0x77777777
   +0x014 NumberOfFunctions : 0x77777777
   +0x018 NumberOfNames    : 0x77777777
   +0x01c AddressOfFunctions : 0x77777777
   +0x020 AddressOfNames   : 0x77777777
   +0x024 AddressOfNameOrdinals : 0x77777777

0:000> dt impdes
Local var @ 0x12fc50 Type _IMAGE_IMPORT_DESCRIPTOR
   +0x000 Characteristics  : 0x88888888
   +0x000 OriginalFirstThunk : 0x88888888
   +0x004 TimeDateStamp    : 0x88888888
   +0x008 ForwarderChain   : 0x88888888
   +0x00c Name             : 0x88888888
   +0x010 FirstThunk       : 0x88888888

 

导入表调试脚本iat.x

* show IAT
r @$t0=3e350000
r @$t1=poi(@$t0+3c)
r @$t1=@$t0+poi(@$t0+@$t1+80)
.while (poi(@$t1+0c)!=0) {da @$t0+poi(@$t1+0c);r @$t3=poi(@$t1+10);r @$t4=@$t0+@$t3;.while (poi(@$t4)!=0) {dds @$t4 l1;r @$t4=@$t4+4};r @$t1=@$t1+14}

导出表调试脚本eat.x

* show EAT
r @$t0=user32
r @$t1=poi(@$t0+3c)
r @$t1=@$t0+poi(@$t0+@$t1+78)
.if (poi(@$t1+0c)!=0) {da @$t0+poi(@$t1+0c)}
.if (poi(@$t1+20)!=0) {r @$t2=@$t0+poi(@$t1+20);r @$t3=poi(@$t1+18);r @$t4=0;.while (@$t4<@$t3) {.if (@$t4==5) {da @$t0+poi(@$t2);.break};r @$t2=@$t2+4;r @$t4=@$t4+1}}
r @$t5=@$t0+poi(@$t1+24)
r @$t5=poi(@$t5+@$t4*2) & 0xffff
r @$t6=@$t0+poi(@$t1+1c)
r @$t6=@$t0+poi(@$t6+@$t5*4)
u @$t6 l1

  评论这张
 
阅读(188)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017