Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


[ASM] Odbg - Patching client [+rep ofcourse. least i can do]
Goto page Previous  1, 2
 
Post new topic   Reply to topic    Cheat Engine Forum Index -> General programming
View previous topic :: View next topic  
Author Message
stealthy17
Expert Cheater
Reputation: 0

Joined: 10 Apr 2007
Posts: 144
Location: The Netherlands

PostPosted: Mon Jan 28, 2008 1:47 am    Post subject: Reply with quote

Jeesh i program C/C++ and .Net perfectly fine.
As i said that's one of my old apps which i'm TRYING to port to asm x86 with a little help.

But seems like you people can't do it either or just don't want to.

Learn to read. Don't go like.. 'Woot Woot VB6 lets flame him' before you know the situation.

So this fuckin thread is not about VB it's about ASM Intel x86 to be exact.
I explained what it's supposed to do and just trying to get some help on how to implement it properly since the registers are used by the function i'm jumping from etc etc etc as i've explained in my fckin other posts.

I'm not going to repeat myself over and over and over explaining because you stubborn kids can't read and understand what you're reading.

I'm done here. For good this time.
Back to top
View user's profile Send private message
Cx
Master Cheater
Reputation: 0

Joined: 27 Jul 2007
Posts: 367

PostPosted: Mon Jan 28, 2008 8:50 am    Post subject: Reply with quote

Forgive me for not understanding your original post 100%, as I won't read the code.

Quote:
- is asm from inside the game client able to write to it's memory (outside data seg.)

Yeah.

Quote:
- if so, can it do this WITHOUT calling API? (mov [offset], data?)

Yes (wait- you're injected into the process?).

Quote:
- since i jumped from the middle of a function will i still be able to use eax, ebx (whatever proper register i need) since it will already contain some data from the function?

Yes- but you don't want to mess up these registers (unless you know what you're doing), so you should push/pop registers (including flags in some cases) with pusha(d)/pushf(d).

Quote:
- i can vaguely imagine a loop to do this but cant get it done somehow i managed to read the data from the offset by using push dword ptr[F66C4C] which will in game get the ascii at the ptr outputted so that works

Ok, here's what I don't understand. What are you trying to accomplish with this "loop"?

_________________

armed with this small butterfly net
i will face the world alone
& never be lonely.
Back to top
View user's profile Send private message
FerrisBuellerYourMyHero
Master Cheater
Reputation: 0

Joined: 14 Feb 2007
Posts: 401
Location: Inside your <kernel>

PostPosted: Tue Jan 29, 2008 7:49 pm    Post subject: Reply with quote

Ok I can help but not with visual $hit... C++ is my weapon of choice...

but as Codex said your not really being clear at what your trying to do...

Quote:
- is asm from inside the game client able to write to it's memory (outside data seg.)


YES As long as your are INSIDE the process, with a dll or injected codecave, you can edit memory directly without WriteProcessMemory...

example... using inline asm in c++ for modifying a pointer or reading its value
Code:


unsigned long Value = 0;

_asm
{
     push eax
     mov eax, 0x00001337 // say this is a pointer
     mov eax, dword ptr [eax] // get the address inside the pointer
     add eax, 0x539 // add the offset
     push ebx
     mov ebx, dword ptr [eax] // ebx contains the pointers value
     mov dword ptr [Value], ebx // Value contains the value
     pop ebx
     mov dword ptr [eax], 0x00000539 // moves 0x539 into the dynamic //address
     pop eax
}


for a static address which is easier
Code:

_asm
{
     push eax
     mov eax, 0x08085CA1
     mov dword ptr [eax], 0x00000063
     pop eax
}


something what your talking about pushing and popping// is F66C4C a pointer or what? you have to be more specific so we can help its text output your trying to get?

Code:


char output[100];

_asm
{
     push eax
     push ecx
     mov ecx, 0x64
     mov eax, dword ptr [0x00F66C4C]
     push edx
     mov edx, offset output
     
     Loopy:
     push dword ptr [eax]
     pop dword ptr [edx]

     inc eax
     inc edx
     loop Loopy

     pop edx
     pop ecx
     pop eax
}



Quote:
- if so, can it do this WITHOUT calling API? (mov [offset], data?)

Yes if your in the process, ex. an injected DLL, not an EXE

Quote:
- since i jumped from the middle of a function will i still be able to use eax, ebx (whatever proper register i need) since it will already contain some data from the function?


Yes- but you don't want to mess up these registers (unless you know what you're doing), so you should push/pop registers (including flags in some cases) with pusha(d)/pushf(d).

Quote:
- i can vaguely imagine a loop to do this but cant get it done somehow i managed to read the data from the offset by using push dword ptr[F66C4C] which will in game get the ascii at the ptr outputted so that works


Ok, here's what I don't understand. What are you trying to accomplish with this "loop"?

Ya what Cx said! what are your trying to accomplish! tell us the bigger picture...

not im trying to make a loop... that doesn't tell us anything lol

_________________
You know, life moves pretty fast. If you don't stop and look around once in a while, You could miss it!

Back to top
View user's profile Send private message MSN Messenger
stealthy17
Expert Cheater
Reputation: 0

Joined: 10 Apr 2007
Posts: 144
Location: The Netherlands

PostPosted: Wed Jan 30, 2008 12:37 am    Post subject: Reply with quote

I'm not injecting a DLL nor making a remotethread or anything.
I'm patching the actual client (Client.exe) himself in Odbg.

The loop patches each block of data at 3 offsets.

get static offset from ptr to tell where the data blocks start

loop 794 times (410.000 loops, step 516)

patch these offsets to 0x1
static offset + f (loop counter) + 487
static offset + f (loop counter) + 488

read at
static offset + f (loop counter) + 455
if value is 0x3 patch it to 0x2
Back to top
View user's profile Send private message
DoomsDay
Grandmaster Cheater
Reputation: 0

Joined: 06 Jan 2007
Posts: 768
Location: %HomePath%

PostPosted: Wed Jan 30, 2008 4:39 am    Post subject: Reply with quote

The following is your loop in hex, but I think you might want to modify it, use binary edit and paste:
Code:
60 BB 4C 6C F6 00 B9 01 00 00 00 8B 1B C6 84 19 E7 01 00 00 01 C6 84 19 E8 01 00 00 01 80 BC 19
C7 01 00 00 03 75 08 C6 84 19 C7 01 00 00 02 81 C1 04 02 00 00 81 F9 90 41 06 00 7D D0 61
I also recommend you to change the language, VB is un-readable.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> General programming All times are GMT - 6 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites