اطلاعیه

Collapse
No announcement yet.

(Get PE Signature (SRC Publiced

Collapse
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • (Get PE Signature (SRC Publiced

    این رو واسه بدست آوردن امضای فایلهای اجرایی و Dll ها با طول های دلخواه نوشتم با این کد میتونید برنامه های شبیه به PEID طراحی کنید

    کد:
    //Coded By Arash Veyskarami
    //http://www.jeyjey.blogfa.com
    unit Sign;
    
    interface
    uses
      Windows;
    
    var
     Offset:dword;
    function GetSignature(szFilename:string;Lenght:integer;Sept:boolean):string;
    implementation
    
    function IntToHex(dwValue, dwDigits: DWord): String;
    const
      hex: array[0..$F] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
    begin
      if (dwDigits > 8) then
        dwDigits := 8;
      Result := Copy(
           hex[(dwValue and $F0000000) shr 28]+
           hex[(dwValue and $0F000000) shr 24]+
           hex[(dwValue and $00F00000) shr 20]+
           hex[(dwValue and $000F0000) shr 16]+
           hex[(dwValue and $0000F000) shr 12]+
           hex[(dwValue and $00000F00) shr 8]+
           hex[(dwValue and $000000F0) shr 4]+
           hex[(dwValue and $0000000F) shr 0],9-dwDigits,dwDigits);
    end;
    function FileSeek(Handle, Offset, Origin: Integer): Integer;
    begin
    {$IFDEF MSWINDOWS}
      Result := SetFilePointer(THandle(Handle), Offset, nil, Origin);
    {$ENDIF}
    {$IFDEF LINUX}
      Result := __lseek(Handle, Offset, Origin);
    {$ENDIF}
    end;
    function FileRead(Handle: Integer; var Buffer; Count: LongWord): Integer;
    begin
    {$IFDEF MSWINDOWS}
      if not ReadFile(THandle(Handle), Buffer, Count, LongWord(Result), nil) then
        Result := -1;
    {$ENDIF}
    {$IFDEF LINUX}
      Result := __read(Handle, Buffer, Count);
    {$ENDIF}
    end;
    procedure FileClose(Handle: Integer);
    begin
    {$IFDEF MSWINDOWS}
      CloseHandle(THandle(Handle));
    {$ENDIF}
    {$IFDEF LINUX}
      __close(Handle);
    {$ENDIF}
    end;
    function LowerCase(const S: string): string;
    var
      Ch: Char;
      L: Integer;
      Source, Dest: PChar;
    begin
      L := Length(S);
      SetLength(Result, L);
      Source := Pointer(S);
      Dest := Pointer(Result);
      while L <> 0 do
      begin
        Ch := Source^;
        if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
        Dest^ := Ch;
        Inc(Source);
        Inc(Dest);
        Dec(L);
      end;
    end;
    
    function GetSignature(szFilename:string;Lenght:integer;Sept:boolean):string;
    var
      i,F:integer;
       Signature,BytesRead,EP,IVA,RAW,UNL: DWORD;
        Dos_Header: IMAGE_DOS_HEADER;
        Pe_Header: IMAGE_FILE_HEADER;
        Opt_Header: IMAGE_OPTIONAL_HEADER;
        ImgSection:_IMAGE_SECTION_HEADER;
      Buff:char;
     Sep:string;
    
    begin
    
    Result:='';
    
     F := CreateFile(pchar(szFilename), 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
      Exit;
     end;
    
      SetFilePointer(THandle(F), dos_header._lfanew, nil, 0);
      ReadFile(F,signature, SizeOf(signature),BytesRead,nil);
        if signature <> IMAGE_NT_SIGNATURE then
     begin
      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);
        ReadFile(F,imgsection, SizeOf(imgsection),BytesRead,nil);
           EP:=opt_header.AddressOfEntryPoint;
             IVA:=imgsection.VirtualAddress;
    
                RAW:=imgsection.PointerToRawData;
                   UNL:=opt_header.SizeOfUninitializedData;
                      UNL:=IVA+UNL;
     Offset:=EP-UNL+RAW;
           end;
      for i:=Offset to Offset+Lenght do
     begin
       FileSeek(F,i,0);
     FileRead(F,Buff,SizeOf(Byte));
        if Sept=True Then
          if i <= Offset+Lenght-1
        then Sep:=','
            else Sep:='';
     Result:=(Result+IntToHex(Ord(Char(Buff)),2)+Sep);
    end;
       FileClose(f);
    end;
    
    
    
    end.

    روش استفاده




    کد:
    uses Sign;
    Edit1.Text:=GetSignature('C:\MyFile.exe',20,True);

    انجام پروژه های نرم افزاری در کمترین زمان و نازلترین قیمت
    برای تماس به آیدی Arashjeyjey در یاهو مسنجر پیام بدید.

    http://www.jeyjey.blogfa.com

  • #2
    از همین جنس !

    سلام به همگی !


    و در ادامه ... :

    کد :

    کد:
    [LEFT]unit unt_GetSignature;
    
    interface
    
    uses
      Winapi.Windows, System.SysUtils, System.IniFiles, Winapi.ShellAPI,
      System.Classes {, Vcl.Forms, Vcl.Dialogs {, unt_PeFile};
    
    type
      TGetSignature = class
      private
        Offset: dword;
        // FPE: TPeFile;
        Fini: TMemIniFile;
        Flist: TStringList;
        FSignatureCount: Integer;
    
        function compare(sign, text: string): Boolean;
        function GetSignature(szFilename: string; Lenght: Integer;
          Sept: Boolean): string;
        function FileSeek(Handle, Offset, Origin: Integer): Integer;
        function FileRead(Handle: Integer; var Buffer; Count: LongWord): Integer;
        procedure FileClose(Handle: Integer);
    
      public
        Constructor Create(const SignFile: string);
        Destructor Destroy; override;
        Procedure Get_Signature(const FileName: string; var OutList: TStringList);
        function Get_SignatureCount: Integer;
      end;
    
    implementation
    
    { GetSignature }
    
    function TGetSignature.compare(sign, text: string): Boolean;
    var
      i: Integer;
    begin
      for i := 1 to Length(sign) do
      begin
        if sign[i] <> '?' then
          if UpperCase(sign[i]) <> UpperCase(text[i]) then
          begin
            Result := False;
            Exit;
          end;
      end;
      Result := True;
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    constructor TGetSignature.Create(const SignFile: string);
    begin
      // FPE := TPeFile.Create;
      try
        Fini := TMemIniFile.Create(SignFile);
        Flist := TStringList.Create;
        Fini.ReadSections(Flist);
    
        FSignatureCount := (Flist.Count);
      except
        on E: Exception do
          MessageBoxW(0, PChar(E.message), 'GetSignature.Create',
            MB_OK + MB_ICONWARNING);
      end;
    end;
    
    destructor TGetSignature.Destroy;
    begin
      Flist.Free;
      Fini.Free
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    procedure TGetSignature.FileClose(Handle: Integer);
    begin
    {$IFDEF MSWINDOWS}
      CloseHandle(THandle(Handle));
    {$ENDIF}
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    function TGetSignature.FileRead(Handle: Integer; var Buffer;
      Count: LongWord): Integer;
    begin
    {$IFDEF MSWINDOWS}
      if not ReadFile(THandle(Handle), Buffer, Count, LongWord(Result), nil) then
        Result := -1;
    {$ENDIF}
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    function TGetSignature.FileSeek(Handle, Offset, Origin: Integer): Integer;
    begin
    {$IFDEF MSWINDOWS}
      Result := SetFilePointer(THandle(Handle), Offset, nil, Origin);
    {$ENDIF}
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    function TGetSignature.GetSignature(szFilename: string; Lenght: Integer;
      Sept: Boolean): string;
    var
      i, F, sections, Count: Integer;
      Signature, BytesRead, EP, IVA, RAW, UNL: dword;
      Dos_Header: IMAGE_DOS_HEADER;
      Pe_Header: IMAGE_FILE_HEADER;
      Opt_Header: IMAGE_OPTIONAL_HEADER;
      ImgSection: _IMAGE_SECTION_HEADER;
      Buff: char;
      Sep: string;
    
    begin
    
      Result := '';
    
      F := CreateFile(PChar(szFilename), GENERIC_READ, FILE_SHARE_READ, nil,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); // Open file
      ReadFile(F, Dos_Header, SizeOf(Dos_Header), BytesRead, nil);
      if Dos_Header.e_magic <> IMAGE_DOS_SIGNATURE then // Test for validing PE file
      begin
        Exit;
      end;
    
      SetFilePointer(THandle(F), Dos_Header._lfanew, nil, 0); // reading dos header
      ReadFile(F, Signature, SizeOf(Signature), BytesRead, nil);
      if Signature <> IMAGE_NT_SIGNATURE then // Test for validing PE file
      begin
        Exit;
      end;
      //
      ReadFile(F, Pe_Header, SizeOf(Pe_Header), BytesRead, nil);
      // reading pe header
      sections := Pe_Header.NumberOfSections;
      if Pe_Header.SizeOfOptionalHeader > 0 then
      begin
        ReadFile(F, Opt_Header, SizeOf(Opt_Header), BytesRead, nil);
        // reading optional header
        EP := Opt_Header.AddressOfEntryPoint;
        for Count := 1 to sections do
        begin
          ReadFile(F, ImgSection, SizeOf(ImgSection), BytesRead, nil);
          // reading image section
          if EP < ImgSection.VirtualAddress + ImgSection.SizeOfRawData then
            Break;
        end;
        // get entrypoint
        // if FPE.LoadFromFile(szFilename) then
        // begin
        // IVA := FPE.ImageSections[0].VirtualAddress;
        // RAW := FPE.ImageSections[0].PointerToRawData;
        // UNL := FPE.ImageNtHeaders.OptionalHeader.SizeOfUninitializedData;
    
        IVA := ImgSection.VirtualAddress; // get virtual address of image section
        RAW := ImgSection.PointerToRawData;
        UNL := Opt_Header.SizeOfUninitializedData;
        Offset := EP - IVA + RAW;
        // get size of  uninitialized data
        UNL := IVA - UNL;
        Offset := EP - UNL + RAW; // get offset of signatures to read
      end;
      for i := Offset to Offset + Lenght do // finding signatures
      begin
        FileSeek(F, i, 0);
        FileRead(F, Buff, SizeOf(Byte));
        if Sept = True Then
          if i <= Offset + Lenght - 1 then
            Sep := ' '
          else
            Sep := '';
        Result := Result + IntToHex(Ord(Buff), 2) + Sep; // <- result
      end;
      FileClose(F);
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    procedure TGetSignature.Get_Signature(const FileName: string;
      var OutList: TStringList);
    var
      i, j: Integer;
      str, text: string;
    begin
      text := GetSignature(FileName, 339, True);
      OutList.Clear;
      try
    
        for i := 0 to Flist.Count - 1 do
        begin
          str := Fini.ReadString(Flist.Strings[i], 'signature', '');
          if compare(str, text) then
          begin
            if OutList.Count > 0 then
            begin
              for j := 0 to OutList.Count - 1 do
                if (OutList.Strings[j] <> Flist.Strings[i]) and
                  (j = OutList.Count - 1) then
                  OutList.Add(Flist.Strings[i]);
            end
            else
              OutList.Add(Flist.Strings[i]);
          end;
        end;
      except
        on E: Exception do
          MessageBoxW(0, PChar(E.message), 'GetSignature.Get_Signature',
            MB_OK + MB_ICONWARNING);
    
      end;
    end;
    
    function TGetSignature.Get_SignatureCount: Integer;
    begin
      Result := FSignatureCount;
    end;
    
    { +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=+ }
    end.
    [/LEFT]

    و این است قدرت دلفی ... !!!
    شبگرد پیر :
    بیهوده متاز مقصد خاک است

    Comment


    • #3
      این یونیت منه برداشتن به یه کلاس تبدیلش کردن من چند سال پیش این یونیت پابلیک کرده بودم

      انجام پروژه های نرم افزاری در کمترین زمان و نازلترین قیمت
      برای تماس به آیدی Arashjeyjey در یاهو مسنجر پیام بدید.

      http://www.jeyjey.blogfa.com

      Comment


      • #4
        مهم نیست مال کی بوده !

        مهم قدرت فوق العاده دلفی _ ه !!!
        شبگرد پیر :
        بیهوده متاز مقصد خاک است

        Comment


        • #5
          نوشته اصلی توسط d3co0d3r نمایش پست ها
          مهم نیست مال کی بوده !

          مهم قدرت فوق العاده دلفی _ ه !!!
          چرا مهمه اگه نبود کپی سورس خودمو نمیذاشتی...

          اینم جایی که پابلیک کرده بودم و تاریخی که اونجا ثبت شده:
          http://vxheaven.org/forum/viewtopic.php?id=218

          2010-07-05


          اینجا هم به سی تبدیلش کردن:
          http://www.rohitab.com/discuss/topic...ackers-by-code

          موفق باشید.
          Last edited by JeyJey; 08-30-2013, 05:29 AM.

          انجام پروژه های نرم افزاری در کمترین زمان و نازلترین قیمت
          برای تماس به آیدی Arashjeyjey در یاهو مسنجر پیام بدید.

          http://www.jeyjey.blogfa.com

          Comment


          • #6
            چرا مهمه اگه نبود کپی سورس خودمو نمیذاشتی...
            ببین بزرگوار
            نمیدونم از کجای پست من شما اینطور برداشت کردید که " من اینو نوشتم " ویا اینکه میدونستم بابایی که اینو نوشته از کد شما استفاده کرده !!!

            داشتم سورس یه PE_ID که با دلفی نوشته شده بود رو نگاه میکردم که اینو دیدم ، گفتم اینجا بزارم با موضوع تاپیک ست هستش :D
            حالا شما میگی این از کد شما گرفته ؟!! ok خداوند از سر تقصیراتش بگذره و به راه راست کج اش کنه :D
            شبگرد پیر :
            بیهوده متاز مقصد خاک است

            Comment


            • #7
              //////////////////

              خواهشاً این پست رو حذف کنید
              Last edited by sam7sam7; 10-01-2013, 12:59 PM.

              Comment


              • #8
                و این است قدرت دلفی ... !!!
                پسر خوب بیا با پیتون تو 7 خط همینو واست بنویسم :دی
                (مراجعه شود به شماره اول نشریه offsec)

                بای بای

                Comment


                • #9
                  نوشته اصلی توسط Maarek نمایش پست ها
                  پسر خوب بیا با پیتون تو 7 خط همینو واست بنویسم :دی
                  (مراجعه شود به شماره اول نشریه offsec)
                  انشالله موفق باشید

                  انجام پروژه های نرم افزاری در کمترین زمان و نازلترین قیمت
                  برای تماس به آیدی Arashjeyjey در یاهو مسنجر پیام بدید.

                  http://www.jeyjey.blogfa.com

                  Comment

                  Working...
                  X