PHP Forum - Coding Board
Juli 19, 2018, 10:14:10 *
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
News:
 
   Übersicht   Hilfe Suche Einloggen Registrieren  
Seiten: [1]
  Drucken  
Autor Thema: [SRC] mCheckPECheckSum  (Gelesen 253 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
Slayer616
Entwickler Team
Spender
Moderator
Hat das Battle gewonnen
Sr. Member
****
Beiträge: 426


Profil anzeigen E-Mail
« am: März 19, 2009, 04:44:13 »

QUOTE]
If IsCheckSumValid("C:\File.exe", True) = True Then
MsgBox "Checked and Fixed!"
Else
Msgbox "Sorry, something gone wrong Traurig"
End If


Download:
Zitat
Gespeichert




Du sagst, du spürst die Ohnmacht, denn der Feind ist ach so stark
Und er will dich niederhalten mit Geschrei durch Bein und Mark
Mit Verboten und Zensur kann er zwar den Kampf erschweren
Doch niemals wird ein Richterspruch den freien Geist bekehren.

Fürchte lieber Deutschlands Untergang als die Reden der Vasallen
Derer, die der Lüge dienen, denn schon bald werden sie fallen.
DizzY_D
Official SC Leaker
Full Member
***
Beiträge: 104

296119081
Profil anzeigen E-Mail
« Antworten #1 am: März 19, 2009, 06:20:52 »

Als bei mir funtzt ser Source auf Anhieb net...
erstmal kommen 2 Type Mistatches, die entstehen, weil du mit dem Dateipfad arbeitest anstatt dem Pointer.
Wenn man das behebt scheitert als nächtes die CheckSumMappedFile Funktion. Auch da hast du bei den letzten 2 Parametern keine Pointer benutzt. Das wird allerdings nicht der Hauptfelhler sein, denn auch dwOldSum ist bei mir 0, was laut MSDN für "ERROR" steht.

Also noch einiges an Bugs drin. Der Ansatz ist jedoch ne gute Idee:)
Wär also cool wenne das komplett fixen könntest.
Gespeichert

Aktuelles Projekt:

Status: 5%
Real Coder doesn't code Visual Basic. Real Coder codes Opcodes.
Slayer616
Entwickler Team
Spender
Moderator
Hat das Battle gewonnen
Sr. Member
****
Beiträge: 426


Profil anzeigen E-Mail
« Antworten #2 am: März 19, 2009, 06:44:10 »

*verdammtschämmichzutode*
Ich muss die VB-Version nochmal anpassen. Ich habe einfach das ganze Ding ohne sich viel Gedanken machen zu müssen übersetzt...
Ich schaue mir die API nochmal an und fixe die Version wenn ich mal Lust dazuhabe Lächelnd
Gespeichert




Du sagst, du spürst die Ohnmacht, denn der Feind ist ach so stark
Und er will dich niederhalten mit Geschrei durch Bein und Mark
Mit Verboten und Zensur kann er zwar den Kampf erschweren
Doch niemals wird ein Richterspruch den freien Geist bekehren.

Fürchte lieber Deutschlands Untergang als die Reden der Vasallen
Derer, die der Lüge dienen, denn schon bald werden sie fallen.
Slayer616
Entwickler Team
Spender
Moderator
Hat das Battle gewonnen
Sr. Member
****
Beiträge: 426


Profil anzeigen E-Mail
« Antworten #3 am: März 19, 2009, 06:44:58 »

original-Link:
http://hackhound.org/forum/index.php?topic=11266.msg64931#new
Gespeichert




Du sagst, du spürst die Ohnmacht, denn der Feind ist ach so stark
Und er will dich niederhalten mit Geschrei durch Bein und Mark
Mit Verboten und Zensur kann er zwar den Kampf erschweren
Doch niemals wird ein Richterspruch den freien Geist bekehren.

Fürchte lieber Deutschlands Untergang als die Reden der Vasallen
Derer, die der Lüge dienen, denn schon bald werden sie fallen.
Slayer616
Entwickler Team
Spender
Moderator
Hat das Battle gewonnen
Sr. Member
****
Beiträge: 426


Profil anzeigen E-Mail
« Antworten #4 am: März 19, 2009, 07:22:13 »

Habs nun verbessert...
Zitat
Option Explicit

Private Const CHECKSUM_SUCCESS As Long = 0
Private Const CHECKSUM_OPEN_FAILURE As Long = 1
Private Const CHECKSUM_MAP_FAILURE As Long = 2
Private Const CHECKSUM_MAPVIEW_FAILURE As Long = 3
Private Const CHECKSUM_UNICODE_FAILURE As Long = 4

Private Declare Function MapFileAndCheckSum Lib "imagehlp.dll" _
   Alias "MapFileAndCheckSumA" _
  (ByVal Filename As String, _
   HeaderSum As Long, _
   CheckSum As Long) As Long
 Private Const IMAGE_DOS_SIGNATURE           As Long = &H5A4D&
Private Const IMAGE_NT_SIGNATURE            As Long = &H4550&
Private Const IMAGE_NT_OPTIONAL_HDR32_MAGIC As Long = &H10B&

Private Const SIZE_DOS_HEADER               As Long = &H40
Private Const SIZE_NT_HEADERS               As Long = &HF8
Private Const SIZE_SECTION_HEADER           As Long = &H28

Private Type IMAGE_DOS_HEADER
    e_magic                     As Integer
    e_cblp                      As Integer
    e_cp                        As Integer
    e_crlc                      As Integer
    e_cparhdr                   As Integer
    e_minalloc                  As Integer
    e_maxalloc                  As Integer
    e_ss                        As Integer
    e_sp                        As Integer
    e_csum                      As Integer
    e_ip                        As Integer
    e_cs                        As Integer
    e_lfarlc                    As Integer
    e_ovno                      As Integer
    e_res(0 To 3)               As Integer
    e_oemid                     As Integer
    e_oeminfo                   As Integer
    e_res2(0 To 9)              As Integer
    e_lfanew                    As Long
End Type

Private Type IMAGE_FILE_HEADER
    Machine                     As Integer
    NumberOfSections            As Integer
    TimeDateStamp               As Long
    PointerToSymbolTable        As Long
    NumberOfSymbols             As Long
    SizeOfOptionalHeader        As Integer
    characteristics             As Integer
End Type

Private Type IMAGE_DATA_DIRECTORY
    VirtualAddress              As Long
    Size                        As Long
End Type

Private Type IMAGE_OPTIONAL_HEADER
    Magic                       As Integer
    MajorLinkerVersion          As Byte
    MinorLinkerVersion          As Byte
    SizeOfCode                  As Long
    SizeOfInitializedData       As Long
    SizeOfUnitializedData       As Long
    AddressOfEntryPoint         As Long
    BaseOfCode                  As Long
    BaseOfData                  As Long
    ImageBase                   As Long
    SectionAlignment            As Long
    FileAlignment               As Long
    MajorOperatingSystemVersion As Integer
    MinorOperatingSystemVersion As Integer
    MajorImageVersion           As Integer
    MinorImageVersion           As Integer
    MajorSubsystemVersion       As Integer
    MinorSubsystemVersion       As Integer
    W32VersionValue             As Long
    SizeOfImage                 As Long
    SizeOfHeaders               As Long
    CheckSum                    As Long
    SubSystem                   As Integer
    DllCharacteristics          As Integer
    SizeOfStackReserve          As Long
    SizeOfStackCommit           As Long
    SizeOfHeapReserve           As Long
    SizeOfHeapCommit            As Long
    LoaderFlags                 As Long
    NumberOfRvaAndSizes         As Long
    DataDirectory(0 To 15)      As IMAGE_DATA_DIRECTORY
End Type

Private Type IMAGE_NT_HEADERS
    Signature                   As Long
    FileHeader                  As IMAGE_FILE_HEADER
    OptionalHeader              As IMAGE_OPTIONAL_HEADER
End Type

Private Type IMAGE_SECTION_HEADER
    SecName                     As String * 8
    VirtualSize                 As Long
    VirtualAddress              As Long
    SizeOfRawData               As Long
    PointerToRawData            As Long
    PointerToRelocations        As Long
    PointerToLinenumbers        As Long
    NumberOfRelocations         As Integer
    NumberOfLinenumbers         As Integer
    characteristics             As Long
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal L As Long)
Public Function CheckandFix(filepath As String, s() As Byte)
    Dim sHeader As Long
    Dim sCalcd As Long
    Dim tIMAGE_DOS_HEADER       As IMAGE_DOS_HEADER
    Dim tIMAGE_NT_HEADERS       As IMAGE_NT_HEADERS
    Dim tIMAGE_SECTION_HEADER   As IMAGE_SECTION_HEADER

    If MapFileAndCheckSum(filepath, sHeader, sCalcd) = CHECKSUM_SUCCESS Then
        If sHeader = sCalcd Then Exit Function
    End If

    CopyMemory tIMAGE_DOS_HEADER, s(0), SIZE_DOS_HEADER
    If tIMAGE_DOS_HEADER.e_magic = IMAGE_DOS_SIGNATURE Then
    Else
        MsgBox "Invalid PE"
        Exit Function
    End If

    CopyMemory tIMAGE_NT_HEADERS, s(tIMAGE_DOS_HEADER.e_lfanew), SIZE_NT_HEADERS
    If tIMAGE_NT_HEADERS.Signature = IMAGE_NT_SIGNATURE Then
        tIMAGE_NT_HEADERS.OptionalHeader.CheckSum = sCalcd
    Else
        MsgBox "Invalid PE"
        Exit Function
    End If
    Kill filepath
    Open filepath For Binary Access Write As #1
    Put #1, , s()
    Close

End Function
Gespeichert




Du sagst, du spürst die Ohnmacht, denn der Feind ist ach so stark
Und er will dich niederhalten mit Geschrei durch Bein und Mark
Mit Verboten und Zensur kann er zwar den Kampf erschweren
Doch niemals wird ein Richterspruch den freien Geist bekehren.

Fürchte lieber Deutschlands Untergang als die Reden der Vasallen
Derer, die der Lüge dienen, denn schon bald werden sie fallen.
Zacherl
Entwickler Team
Moderator
Sr. Member
****
Beiträge: 454



Profil anzeigen E-Mail
« Antworten #5 am: März 19, 2009, 09:12:34 »

Nett, aber durch die ImageHelp APIs dann doch bisschen unflexibel. Wenn Interesse besteht kann ich ein Delphi Beispiel posten, welches die Berechnung eigenständig implementiert. Der Algo ist eigentlich sehr trivial ..
Gespeichert

Slayer616
Entwickler Team
Spender
Moderator
Hat das Battle gewonnen
Sr. Member
****
Beiträge: 426


Profil anzeigen E-Mail
« Antworten #6 am: März 19, 2009, 09:19:09 »

[IRONIE] Nein! Mein Example reicht du brauchst nicht eins zu posten welches meines toppt! [\IRONIE]


Lächelnd
*natürlich sollst du es posten* *freu mich auf die andere Version*
Gespeichert




Du sagst, du spürst die Ohnmacht, denn der Feind ist ach so stark
Und er will dich niederhalten mit Geschrei durch Bein und Mark
Mit Verboten und Zensur kann er zwar den Kampf erschweren
Doch niemals wird ein Richterspruch den freien Geist bekehren.

Fürchte lieber Deutschlands Untergang als die Reden der Vasallen
Derer, die der Lüge dienen, denn schon bald werden sie fallen.
Zacherl
Entwickler Team
Moderator
Sr. Member
****
Beiträge: 454



Profil anzeigen E-Mail
« Antworten #7 am: März 19, 2009, 09:22:42 »

Lächelnd Okay. Hier direkt aus meiner PE Unit:

Code:
function TdxPEFile.RecalcChecksum: DWord;

function CalcCheckSum(StartValue: DWord; BaseAddress: Pointer;
  WordCount: DWord): Word;
var
  Sum, I: DWord;
  Ptr: PWord;
begin
  Sum := StartValue;
  Ptr := BaseAddress;

  for I := 0 to WordCount - 1 do
  begin
    Sum := Sum + Ptr^;
    if (HiWord(Sum) <> 0) then
    begin
      Sum := LoWord(Sum) + HiWord(Sum);
    end;
    Inc(Ptr);
  end;

  Result := Word(LoWord(Sum) + HiWord(Sum));
end;

var
  CalcSum,
  HeaderSum: DWord;
begin
  CalcSum := CalcCheckSum(0, FlpBuffer, (FdwFileSize + 1) div SizeOf(Word));
  HeaderSum := ImageNtHeaders^.OptionalHeader.CheckSum;

  if (LoWord(CalcSum) >= LoWord(HeaderSum)) then
  begin
    CalcSum := CalcSum - LoWord(HeaderSum);
  end
    else
  begin
    CalcSum := ((LoWord(CalcSum) - LoWord(HeaderSum)) and $FFFF) -1;
  end;
  if (LoWord(CalcSum) >= HiWord(HeaderSum)) then
  begin
    CalcSum := CalcSum - HiWord(HeaderSum);
  end
    else
  begin
    CalcSum := ((LoWord(CalcSum) - HiWord(HeaderSum)) and $FFFF) -1;
  end;

  CalcSum := CalcSum + FdwFileSize;
  ImageNtHeaders^.OptionalHeader.CheckSum := CalcSum;
  Result := CalcSum;
end;
Gespeichert

alexj.
Full Member
***
Beiträge: 148


Profil anzeigen E-Mail
« Antworten #8 am: März 20, 2009, 04:29:18 »

Gespeichert

Bog cuva srbe

Seiten: [1]
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | New Look by Nolt Prüfe XHTML 1.0 Prüfe CSS