delphi 附加数据读取


本文整理自网络,侵删。

  

program OEPFinder;
{$APPTYPE CONSOLE}
{$HINTS OFF}
{$WARNINGS OFF}
uses
  Windows;
 
function Format( const fmt: string; params: array of const ): String;
var Buffer: array[ 0..2047 ] of Char;
    ElsArray, El: PDWORD;
    I : Integer;
    P : PDWORD;
begin
  ElsArray := nil;
  if High( params ) >= 0 then
    GetMem( ElsArray, (High( params ) + 1) * sizeof( Pointer ) );
  El := ElsArray;
  for I := 0 to High( params ) do
  begin
    P := @params[ I ];
    P := Pointer( P^ );
    El^ := DWORD( P );
    Inc( El );
  end;
  wvsprintf( @Buffer[0], PChar( fmt ), PChar( ElsArray ) );
  Result := Buffer;
  if ElsArray <> nil then
     FreeMem( ElsArray );
end;
 
Function FindOEP(Filename:string):string;
var
  F:Integer;
  signature: DWORD;
   dos_header: IMAGE_DOS_HEADER;
  pe_header: IMAGE_FILE_HEADER;
   opt_header: IMAGE_OPTIONAL_HEADER;
  OEP:Dword;
   BytesRead:dword;
begin
  F := CreateFile(pchar(Filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
      ReadFile(F,Dos_header,SizeOf(Dos_header),BytesRead,nil);
    if dos_header.e_magic <> IMAGE_DOS_SIGNATURE then begin
    Result:='Invalid DOS file header';
    Exit;
    end;
      SetFilePointer(THandle(F), dos_header._lfanew, nil, 0);
                ReadFile(F,signature, SizeOf(signature),BytesRead,nil);
                if signature <> IMAGE_NT_SIGNATURE then begin
                 Result:='Invalid PE header';
                 Exit;
                 end;
      ReadFile(F,pe_header, SizeOf(pe_header),BytesRead,nil);
         if pe_header.SizeOfOptionalHeader > 0 then
   begin
        ReadFile(F,opt_header, SizeOf(opt_header),BytesRead,nil);
              OEP:=opt_header.ImageBase+opt_header.AddressOfEntryPoint;
 
      Result:=(Format('OEP is: %00000008X', [OEP]));
   end;
end;
 
begin
 
 if (ParamStr(1) = '/?')or(ParamStr(1)='')or(FindOEP(ParamStr(1))='') then begin
 WriteLn;
 WriteLn('+++ OEP Finder Writen by Arash Veyskarami +++');
 WriteLn;
 WriteLn('[FindOEP.exe]  [Filename]');
 WriteLn;
 WriteLn('Ex: FindOEP C:WindowsExplorer.exe');
 WriteLn;
 WriteLn('++++++++++++ +++++++++++');
 end
 else
   WriteLN('',FindOEP(ParamStr(1)));
 Readln;
end.

相关阅读 >>

Delphi xe10 android 界面设计-个人心得

Delphi中读取指定内存地址的值

Delphi drawing text 绘制文本

Delphi 移动windows开始按钮到任务栏中的任何位置

Delphi读取webbrowse中的图片显示在image中

Delphi中一段可以判断网络连接的代码

Delphi 中文urlencode的简单办法

Delphi使用进行post数据时超时设置

Delphi 代码查询一个 ip 地址的归属地

Delphi adoconnection1 连接excel表格读取数据

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...