Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Masm32 Simple Patch Problem

Diskussion: Masm32 Simple Patch Problem im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Hb User, bin normal ein aktiver Leser und Sucher, nur für dieses Problem muss ich euch mal direkt ...

Antwort
Alt 07.09.11, 19:12   #1 (permalink)
 
Registriert seit: 07.09.11
Pro Grammer Leistung: Facit NTK
Likes: 0
Standard Masm32 Simple Patch Problem

Anzeige

Hallo Hb User,
bin normal ein aktiver Leser und Sucher, nur für dieses Problem muss ich euch mal direkt fragen. Ich habe einen simplen Patch in Masm32 geschrieben, nur leider funktioniert er nicht so wie er es sollte. Habe auch schon seit zwei tagen nach dem Fehler gesucht.
Aber seht selbst:


Offset im Programm:



Code:
.data
    TargetName        db            "Patchtest.exe", 0
    BackupName        db            "Patchtest.bak", 0
    PatchOffset        dd            103Bh
    Old                db            75h, 39h, 6Ah, 64h
    New                db            0EBh, 39h, 6Ah, 64h
...

.data?
    hInstance            HINSTANCE    ?
    hTarget            HINSTANCE    ?
    
    RBuffer            dd            ?
    BytesRead        db            ?
    BytesWritten        db            ?

.code
...
Patch proc hWnd:HWND
    invoke GetFileAttributes, ADDR TargetName
    .if    eax != FILE_ATTRIBUTE_NORMAL
        invoke SetFileAttributes, ADDR TargetName, FILE_ATTRIBUTE_NORMAL
    .endif
    
    invoke CreateFile, ADDR TargetName, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL
    .if eax != INVALID_HANDLE_VALUE
        mov hTarget, eax
        
        invoke SendDlgItemMessage, hWnd, CBBackup, BM_GETCHECK, NULL, NULL
        .if eax == BST_CHECKED
            invoke CopyFile, ADDR TargetName, ADDR BackupName, TRUE
            invoke List, hWnd, ADDR s_Backup
        .endif
        
        invoke SetFilePointer, hTarget, PatchOffset, NULL, FILE_BEGIN
        invoke ReadFile, hTarget, ADDR RBuffer, 4, ADDR BytesRead, NULL
        .if BytesRead == 4
            mov eax, dword ptr [RBuffer]
            .if eax == dword ptr [Old]
                invoke SetFilePointer, hTarget, PatchOffset, NULL, FILE_BEGIN
                invoke WriteFile, hTarget, ADDR New, 1, ADDR BytesWritten, NULL
                .if BytesWritten == 1
                    invoke List, hWnd, ADDR Success
                .else
                    invoke List, hWnd, ADDR f_Write
                .endif
            .elseif eax == dword ptr [New]
                invoke List, hWnd, ADDR f_Already
            .else
                invoke List, hWnd, ADDR f_Version
                invoke MessageBox, hWnd, ADDR RBuffer, ADDR BytesWritten, MB_OK
            .endif
        .else
            invoke List, hWnd, ADDR f_Read
        .endif
    .else
        invoke List, hWnd, ADDR f_Open
    .endif
    invoke CloseHandle, hTarget
    Ret
Patch endp
Wär toll wenn ihr mir helfen könntet den Fehler zu finden.
Vielen Dank
Pro Grammer ist offline   Mit Zitat antworten
Alt 07.09.11, 19:43   #2 (permalink)
 
Registriert seit: 27.02.07
mucki Leistung: Z3
Likes: 2
Standard

Ich würde den Patch mit Olly debuggen und schauen woran es liegt (ob die richtigen Daten geladen werden). Ohne die Originaldatei ist es jedoch nicht möglich die Adressen zu überprüfen und weitere Hilfen zu geben.
mucki ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 07.09.11, 21:23   #3 (permalink)
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
Standard

Vielleicht gibt es auch mehrere Positionen auf die die Bytereihenfolge zutrifft?
Deswegen wäre eine genauere Defintion des Fehlers von großem Nutzen.
__________________
Be the source always with you.
ChiefWiggum ist offline   Mit Zitat antworten
Alt 08.09.11, 18:02   #4 (permalink)
Themenstarter
 
Registriert seit: 07.09.11
Pro Grammer Leistung: Facit NTK
Likes: 0
Standard

Danke schonmal für eure Bemühungen, leider konnte ich nur in Erfahrung bringen, dass der "RBuffer" nicht die richtigen Bytes nach dem Lesen beinhaltet.
Ich hoffe ihr könnt mir damit weiterhelfen, wenn ich euch die Sourcecodes und Programme gebe. Sie sind ein wenig gekürzt, haben aber immer noch die selben Offsets:

File-Upload.net - SimplePatch.rar

Danke
Pro Grammer ist offline   Mit Zitat antworten
Alt 09.09.11, 21:38   #5 (permalink)
Themenstarter
 
Registriert seit: 07.09.11
Pro Grammer Leistung: Facit NTK
Likes: 0
Standard Lösung

Ich habe die Lösung nun doch noch endlich gefunden und poste sie, damit jemand mit dem selben Problem schneller eine Lösung finden kann.

Mein Code war vollkommen richtig, bis auf dem Offset. Den ermittelt man nämlich durch eine kleine Rechnung:

Code:
virtual address - imagebase - code base + pointer to rawdata for .text section or .code section
0x40103B - 0x400000 - 1000 + 400 = 0x43B
Also anstatt "103Bh" muss "43Bh" stehen.

Vielen Dank nochmal an mucki und ChiefWiggum für die Hilfe.

Euer Pro Grammer
Pro Grammer ist offline   Mit Zitat antworten
Antwort

Stichworte
assembler, masm32, patch
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Masm32 Simple Patch Problem
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[masm32] Betätigen einer Checkbox mit SendMessage dietox Code Kitchen 6 14.08.08 21:55
Masm32 Code patchen ragdog Code Kitchen 12 19.07.08 14:24
Simple BufferOverflow Tutorial Nimda05 (In)security allgemein 6 08.10.07 15:05
[masm32] unsigned 64-Bit Wert in String umwandeln(dezimal) Lesco Code Kitchen 0 22.04.06 16:14
Kompilieren mit MASM32??? Flexball Code Kitchen 1 29.04.04 00:30


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61