Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 05:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



WinAPI-Funktion in ollydbg aufrufen

Discussion on WinAPI-Funktion in ollydbg aufrufen within the General Coding forum part of the Coders Den category.

Reply
 
Old   #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.
ms​ is offline  
Old 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.
RDTSC is offline  
Thanks
1 User
Old 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 View Post
Ach, oder willst du die Datei einfach permanent in OllyDbg ändern?
Genau

Quote:
Originally Posted by RDTSC View Post
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?
ms​ is offline  
Old 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.
RDTSC is offline  
Thanks
1 User
Old 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.
ms​ is offline  
Old 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...
RDTSC is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.