AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Offset bei AllocMem?

Ein Thema von Plastewolf · begonnen am 20. Sep 2013 · letzter Beitrag vom 24. Sep 2013
Antwort Antwort
Seite 2 von 2     12   
Plastewolf
(Gast)

n/a Beiträge
 
#11

AW: Offset bei AllocMem?

  Alt 24. Sep 2013, 18:08
Kann man eigentlich über den neu generierten Speicher irgentwie ASM Code ausführen?
In der EXE sind exakt 20 DB Werte deklariert. Ich würde gerne einen Jump befehl auf einen neu angelegten Speicher setzen und dann über

Delphi-Quellcode:
  
  ASM
    db ''
    db ''
    db ''
    [....]
  END;
ein paar extra DB Werte deklarieren.

Dann müsste ich ja eigentlich nur über den DWORD befehl das Call auf den neuen Speicher umlenken und dort den Code inkl. der erweiterten Werte 1:1 übernehmen+ erweitern.

Edit: Habe ich das richtig gesehen, man kann auch ohne die ASM Befehle einfach DWORD(Speicher) := 'Teststring'; schreiben?

Geändert von Plastewolf (24. Sep 2013 um 19:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: Offset bei AllocMem?

  Alt 24. Sep 2013, 21:28
Hallo Plastewolf,

Ich will dir nicht zu Nah treten aber du wirst hier bei der Sache nicht weit kommen weil du scheinbar keinen Schimmer von ASM hast und was viel schlimmer ist keine Vorstellung vom Arbeitsspeicher hast und wie dort Werte oder auch Code gespeichert ist.

Code:
Code := StrToHex('MOV EDX,OFFSET '+NewOffset);

VirtualProtect('$42053B', 4, PAGE_EXECUTE_READWRITE, OldProtect);
PByte($0042053B)^ := Code;
Auch wenn du müde warst: Die Zeilen zeigen das ganz eindeutig. ASM sind keine Texte die im Arbeitsspeicher irgendwo stehen und dann ausgeführt werden. Du hast da eine vollkommen falsche oder gar keine Vorstellung von.
Such dir vllt. mal ein paar Tutorials zu dem Thema (hab grad mal kurz geguckt ob ich dir was raussuchen kann, hab aber auf die schnelle nichts gefunden).
Und dann schau dir vllt. mal eine .exe in einem Hex-Editor an. Du wirst du nicht viel erkennen/verstehen (können) außer vllt die Tatsache dass dort in der kompletten Datei keine
"mov eax, edx"-Strings o.ä. auftauchen.

Kurze Erklärung: Assembler Befehle sind auch nur Bytes (Zahlen) die im Speicher stehen. Wenn dort z.B. (ist nur Pseudeo-"Code" - habe jetzt nicht nachgeguckt wies wirklich wäre) folgendes steht

3E 00 0F

dann könnte das z.B. heißen

3E 00 0F
mov al, 15

wobei "3E" für den Prozessor dann z.B. bedeutet: jetzt kommt ein "mov"-Befehl. Die "00" bedeutet dann "Zielregister ist das Register mit dem Index 0 (-> AL)". und "0F" ist dann der Wert der in dieses Register geschrieben werden soll (also dezimal 15).

Generell musst du lernen/verstehen dass im Speicher überall nur Bytes stehen und der Prozessor notfalls auch deinen in er .exe gespeicherten Readme-Text als Befehle zu interpretieren versucht wenn er dort (fälschlicherweise) landen sollte. Genauso kann auch versucht werden Assembler-Code im Speicher als String interpretiert zu werden. Dabei kommt dann meistens im besten Fall irgendein Kauderwelsch raus.

Du kannst dir ggf. ja auch mal das Programm "OllyDbg" anschauen. Du wirst zwar überwältigt sein aber da siehst du dann auch beim genaueren hinschauen was ich mit dem oben geschriebenen gemeint habe.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz