Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 04:57

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

Advertisement



WriteProcessMemory schreibt Bytes in falscher Reihenfolge

Discussion on WriteProcessMemory schreibt Bytes in falscher Reihenfolge within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2009
Posts: 27
Received Thanks: 3
WriteProcessMemory schreibt Bytes in falscher Reihenfolge

Guten Abend.
Ich versuche gerade anhand Wikieintrages eine Detourfunktion zu schreiben. Leider scheitert das ganze an der Funktion WriteProcessMemory, welche die Bytes meines Integers (ein Sprungoffset) in der falschen Reihenfolge in den Speicher schreibt.
Das stumpfsinnige ist ...
a) ..., dass ich diese Funktion schon mal mit dem Tutorial geschrieben habe.
b) ..., dass es mit dem dem MinGW-Compiler funktioniert. Nur leider schafft der es nicht injectbare Dll's zu kompillieren.
Das Programm, was ich zum Testen benutze findet ihr im Anhang.
hier der Dll-Code:
PHP Code:
#include <windows.h>
#include <iostream>
//==========================>

unsigned int sprungoffset(unsigned int victim_addressunsigned int new_address)
{
    
victim_address += 5;
    return 
new_address victim_address;
}

void hook_function(unsigned int old_addressunsigned int new_address)
{
    
HANDLE hProc;
    
unsigned int sprungweg;
    
unsigned char sprung_byte 0xE9byte;
    
DWORD rw 0;
    
//=========================>
    
sprungweg sprungoffset(old_addressnew_address);
    
printf("sprungweg = 0x%x\n"sprungweg);
    
hProc OpenProcess(PROCESS_ALL_ACCESSfalseGetCurrentProcessId());
    
WriteProcessMemory(hProc, (LPVOID)old_address, &sprung_bytesizeof(sprung_byte), &rw);
    
old_address++; //um 1 Byte erhöhen
    
WriteProcessMemory(hProc, (LPVOID)old_address, &sprungwegsizeof(sprungweg), &rw); //Hier 
    //ist der Fehler
    
CloseHandle(hProc);
}

void good()
{
    
printf("good\n");
}

BOOL APIENTRY DllMainHMODULE hModuleDWORD  ul_reason_for_callLPVOID lpReserved)
{
    switch (
ul_reason_for_call)
    {
    case 
DLL_PROCESS_ATTACH:
        
hook_function((unsigned int)0x401318, (unsigned int)0x6c3a1530);
    case 
DLL_THREAD_ATTACH:
    case 
DLL_THREAD_DETACH:
    case 
DLL_PROCESS_DETACH:
        break;
    }
    return 
TRUE;

lg
PS: Hoffentlich ist das nicht son billiger Anfängerfehler. Ich habe mehr als 2 Stunden an dem Problem gesessen -.-
Attached Files
File Type: rar test1.rar (188.7 KB, 0 views)
@night@ is offline  
Thanks
1 User
Old 09/22/2010, 19:51   #2
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Endianness - Wikipedia, the free encyclopedia

Der x86-Prozessor arbeitet im Little-Endian. Die Werte werden zwar in "falscher Reihenfolge" abgespeichert, aber das sollte eigentlich kein Problem darstellen.
ms​ is offline  
Thanks
2 Users
Old 09/22/2010, 20:52   #3
 
elite*gold: 0
Join Date: Dec 2009
Posts: 27
Received Thanks: 3
Danke für die schnelle Antwort. Allerdings wusste ich schon das der x86-prozessor die LittleEndian-Reihenfolge benutzt.
Hier ist mal ein Screen vom OllyDebugger:

Eigentlich sollte der Sprungoffset 0x6bfa0213 betragen.
mfg @night@
@night@ is offline  
Old 09/22/2010, 22:04   #4
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Da steht auch 0x6bfa0213, nur eben in Little-Endian. Außerdem jumpt er doch zu der richtigen Stelle oder nicht? In deinem Source-Code steht 0x6c3a1530 und in ollydbg auch.
ms​ is offline  
Thanks
1 User
Old 09/23/2010, 15:37   #5
 
elite*gold: 0
Join Date: Dec 2009
Posts: 27
Received Thanks: 3
Oh. Ich habe erst jetzt bemerkt, dass die Addresse der Funktion good() anscheinend (ab und zu mal) dynamisch ist-.-. Es lag daran, dass der Sprungoffset einfach nie gestimmt hat.
Danke für deine Bemühungen
@night@ is offline  
Reply


Similar Threads Similar Threads
2 Bytes oder 4 Bytes ?
02/13/2010 - Kal Online - 3 Replies
Erm wenn ich nach cooldowns schaue für Mockery mit der UCE such ich dann mit 2 Bytes oder 4 Bytes ??
help on Writeprocessmemory
10/07/2009 - General Coding - 8 Replies
#include <Windows.h> #include <iostream> using namespace std; #define EngineUpgrade_Addr 0x2F7EDDC8 #define EngineUpgrade_Value 1000 const SIZE_T EngineUpgrade_Size = sizeof(EngineUpgrade_Value); SIZE_T EngineUpgrade_Sent = 0;
Wie erlange ich die PID eines Prozesses für z.B. WriteProcessMemory
11/06/2008 - Coding Tutorials - 4 Replies
An die, die noch nicht wissen, wie sie ein Handle eines Prozesses erlangen, folgt hier ein kleiner Beispielquelltext . Beispielprogramm: .386 .model flat, stdcall option casemap :none include windows.inc include kernel32.inc include user32.inc
Locking WriteProcessMemory with a TickBox
06/11/2007 - General Coding - 5 Replies
This is the code for one of the buttons in my app: Private Sub Command8_Click&#40;&#41; If Hooked = True Then WriteProcessMemory ProcessHandle, &580316, 386, 2, 0& End If End Sub The problem is the memory address that I write to resets itself after a while and I have to click the button again, is there anyway to lock the memory address that I write to? Or just have the code refresh itself at a set interval? I would like to achieve this with a tick box if possible



All times are GMT +1. The time now is 04:57.


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.