|
You last visited: Today at 05:14
Advertisement
WinAPI-Funktion in ollydbg aufrufen
Discussion on WinAPI-Funktion in ollydbg aufrufen within the General Coding forum part of the Coders Den category.
05/07/2009, 23:33
|
#1
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
WinAPI-Funktion in ollydbg aufrufen
Hi,
ich versuche schon seit einiger Zeit eine Dll mit ollydbg so umzuändern, dass sie in einer bestimmten Stelle die WinAPI-Funktion Sleep aufruft.
Bei einer Exe wäre das ja nicht so schwer. Da hätte ich einfach die Adresse aus den Imports ausgelesen, weil die ja für gewöhnlich immer in die virtuelle Adresse 0x00400000 geladen werden. Bei der Dll ist nun das Problem, dass die mal hierhin und mal dorthin geladen wird, sodass die Imports dementsprechend auch keine feste Adresse besitzen.
Ich habe das bis jetzt so gelöst, dass ich ein kleines Codecave geschrieben habe. Das Programm habe ich dann das Codecave callen lassen. Im Codecave wird die Return-Value mit einer bestimmten Zahl subtrahiert, sodass ich dann das Offset von dem gewünschten Import habe. Dann wird nur noch der Parameter gepusht und die WinAPI-Funktion gecallt.
Am Ende hat das ganze sogar geklappt. Aber da das ziemlich aufwendig ist, wollte ich fragen, wie noch ich das gewünschte Ergebnis erzielen kann. Ich habe mir überlegt, dass man ja dieses "Relocation Table" um einen Eintrag erweitern kann damit der WinAPI-Call immer auf den Imports-Eintrag zeigt. Jedoch habe ich kein Tool gefunden, dass das kann und mit dem Hex-Editor will das auch nicht so recht klappen.
|
|
|
05/08/2009, 00:30
|
#2
|
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
|
Ich verstehe nicht so ganz, was du mit den Imports und auch überhaupt machen möchtest.
Hast du ein Programm geschrieben, das eine Dll lädt und diese dann patchen soll?
Die RVA des Codes, den überschreiben möchtest, hast du,
also wäre dein Problem die ImageBase der Dll, habe ich das so richtig verstanden?
Wenn dem so ist, könntest du entweder die ImageBase einfach zu einer wahrscheinlich unbenutzten Adresse ändern :P
Oder, falls du die Dll manuell lädst, hast du schon das, was du willst, und addierst das Offset hinzu.
Falls nicht, mach's halt... oder geh alle Module durch und du erhältst deine VA ;-)
[ Edit ]
Ach, oder willst du die Datei einfach permanent in OllyDbg ändern?
Wegen der Abhängigkeiten werden die Windows API-Dlls immer am Anfang geladen und haben außerdem alle unterschiedliche ImageBases.
Also kannst du einfach die absolute Adresse zur Funktion Sleep benutzen.
|
|
|
05/08/2009, 11:48
|
#3
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Quote:
Originally Posted by RDTSC
Ach, oder willst du die Datei einfach permanent in OllyDbg ändern?
|
Genau
Quote:
Originally Posted by RDTSC
Wegen der Abhängigkeiten werden die Windows API-Dlls immer am Anfang geladen und haben außerdem alle unterschiedliche ImageBases.
Also kannst du einfach die absolute Adresse zur Funktion Sleep benutzen
|
Wenn die ImageBase der WinAPI-Dll immer unterschiedlich ist, wie komme ich dann an die absolute Adresse heran?
Und zum Verständnis:
ImageBase + RVA = absolute Adresse, oder?
|
|
|
05/08/2009, 14:43
|
#4
|
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
|
Ja, so sieht's aus ;-)
Das wird sie bei der gleichen Windows-Version nicht sein.
Aber wenn es halt portierbarer sein soll, kannst du wie geschrieben die Prozesse und deren Module alle durchgehen,
oder du benutzt im selben Addressraum  und addierst das Offset zu EAX.
|
|
|
05/08/2009, 16:52
|
#5
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Ich habe mir eben angeschaut, wo in jedem Programm die kernel32.dll liegt. Die hatte zwar in der Tat überall die gleiche ImageBase, doch nach einem Neustart hatte sich diese Adresse wieder geändert.
Das heißt, dass die Dll nach jedem Neustart automatisch gepatcht werden müsste, aber ich würde sie gerne nur einmal manuell patchen.
|
|
|
05/08/2009, 18:16
|
#6
|
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
|
Benutzt du Vista?
Manuell am einfachsten zu erledigen wäre, wenn du eine gepatchte Adresse aus der IAT nimmst und da dann das statische Offset der Funktion abziehst, um die ImageBase zu erhalten, und dazu addierst du das der Sleep-Funktion (Oder halt direkt die Differenz beider Funktionen zur Adresse der ersten Funktion).
Hast du das denn nicht schon so?
Du könntest mir auch mal die Datei zukommen lassen inkl. genaueren Erklärungen, was du machen möchtest...
|
|
|
 |
Similar Threads
|
[VideoTUT] Metin2 UseItem Funktion finden & aufrufen
07/21/2010 - Coding Tutorials - 42 Replies
Heyho!
Ich bins mal wieder :)
Jetzt mit einem kleinen Video Tutorial, wie man an die UseItem Funktion im Spiel kommt und sie per Dll Injection aufruft. Ich habs so einfach wie möglich gemacht. Okay manchmal ist es ein bisschen zu schnell, aber ihr könnt ja auch pausieren. Wers nicht hinbekommt ist solls lassen!
YouTube - Metin2 Use Item Tutorial
Downloadlinks sind in der Videobeschreibung!
PS: Sucht mal statt nach "item" nach "send" und ihr findet noch viel mehr schöne Funktionen :D
|
durch Item NPC funktion aufrufen
01/23/2010 - Metin2 Private Server - 6 Replies
Huhu,
ist es möglich durch ein Item eine Funktion vom NPC aufzurufen sprich:
alswürde man ein npc anklicken das nur mit einem Item.
MfG.
|
Maussimulation ohne Winapi?
04/27/2009 - Kal Online - 1 Replies
Hi,
Hat jemand von euch ne idee wie man ne Maussimulation ohne Winapi schreiben kann?.
(Möcht n bot zum pimpen von waffen machen da mir der normale weg echt zu stressig sit ;).
Nur as Problem ist dass Kal komplett mir alle bekannten Möglichkeiten sperrt.
Jemand ne idee was man noch benutzen könnte?
|
WinAPI use in C#
06/09/2008 - .NET Languages - 15 Replies
Hi,
in Anlehnung an die Topics hier habe ich mich dazu aufgerafft, nen Annotrainer zu schreiben (siehe Attachment).
In der Listview werden halt aktive Annoprozesse angezeigt, die man dann anwählen kann um dann mit dem Cheat button Geld zu cheaten. Jedes item in der Listview hat im item.Tag das jeweilige Prozessobject, somit auch die ID.
Allerdings komme ich mit den eigentlichen Funktionen OpenProcess, ReadProcessMemory und WirteProcessMemory in C# noch nicht klar. Zwar bekomme ich das...
|
WinAPI use in C#
05/19/2008 - .NET Languages - 0 Replies
Hi,
in Anlehnung an die Topics hier habe ich mich dazu aufgerafft, nen Annotrainer zu schreiben (siehe Attachment).
In der Listview werden halt aktive Annoprozesse angezeigt, die man dann anwählen kann um dann mit dem Cheat button Geld zu cheaten. Jedes item in der Listview hat im item.Tag das jeweilige Prozessobject, somit auch die ID.
Allerdings komme ich mit den eigentlichen Funktionen OpenProcess, ReadProcessMemory und WirteProcessMemory in C# noch nicht klar. Zwar bekomme ich das...
|
All times are GMT +1. The time now is 05:14.
|
|