MMOwned - World of Warcraft Exploits, Hacks, Bots and Guides

Homepage Register FAQ Members Mark Forums Read Advertise Marketplace FPSowned


Go Back   MMOwned - World of Warcraft Exploits, Hacks, Bots and Guides > World of Warcraft > Bots and Programs > WoW Memory Editing
Reload this Page The 'better' way of doing 'nudge hacks'
WoW Memory Editing WoW Memory Editing for learning purposes only.

Reply
 
LinkBack Thread Tools
The 'better' way of doing 'nudge hacks'
(#1)
Old
Cypher's Avatar
Cypher is Offline
Kynox's Pimp OMGRECURSION
Legendary User
Rep Power: 8
Reputation: 781
Cypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to behold
 
Posts: 1,806
Join Date: Apr 2006
Location: Hiding in ur warden
The 'better' way of doing 'nudge hacks' - 07-22-2008

I noticed that all of the current 'nudge hacks' (awwes etc) are out of process and use sendkeys to turn the character after nudging them.

Using CInputControl you can turn without sending keystrokes etc. The advantage being that the turning is practically instant and you don't even notice your character move at all.

Heres some sample code:
CInputControl.h
Code:
#pragma once

class CInputControl
{
public:
    void SetMovementFlag( int iFlag, int Enable, unsigned long dwTime = 0 );
    unsigned long GetMovementFlag();
};
CInputControl.cpp
Code:
void CInputControl::SetMovementFlag( int iFlag, int Enable, DWORD dwTime )
{
    DWORD SetFlags = 0x005343A0;
    DWORD GetTickCount = 0x00BE10FC;
    _asm
    {
        mov eax,GetTickCount 
        mov ecx, this
        push dwTime
        push eax
        push Enable
        push iFlag
        call SetFlags
    }
}

unsigned long CInputControl::GetMovementFlag()
{
    return *reinterpret_cast<unsigned long*>( this + 4 );
}
Quick hacked together example.
Code:
CInputControl * gpInputControl = reinterpret_cast<CInputControl*>( *reinterpret_cast<DWORD*>(0x00CF31E4) );

int __cdecl NudgeXPos(void * )
{
    float * Ptr2 = (float*)(*reinterpret_cast<unsigned long*>(0x00E29D28) + 0xBF0);
    *Ptr2 = *Ptr2 + 0.1f;
    gpInputControl->SetMovementFlag(MOVEMENT_FLAG_TURN_LEFT,1,0);
    gpInputControl->SetMovementFlag(MOVEMENT_FLAG_TURN_LEFT,0,0);
    return 0;
}
EDIT:

Whoops, you'll need this too
Code:
enum eMovementFlag
{
    MOVEMENT_FLAG_MOVE_FORWARD = 0x10,
    MOVEMENT_FLAG_MOVE_BACKWARD = 0x20,
    MOVEMENT_FLAG_STRAFE_LEFT = 0x40,
    MOVEMENT_FLAG_STRAFE_RIGHT = 0x80,
    MOVEMENT_FLAG_TURN_LEFT = 0x100,
    MOVEMENT_FLAG_TURN_RIGHT = 0x200,
    MOVEMENT_FLAG_PITCH_UP = 0x400,
    MOVEMENT_FLAG_PITCH_DOWN = 0x800,
    MOVEMENT_FLAG_AUTO_RUN = 0x1000,

    MOVEMENT_FLAG_ALL = 0x1FF0
};




Yes my old nick was Chazwazza, stop asking >.<

Last edited by Cypher; 07-23-2008 at 06:54 AM.
Reply With Quote

Donate to remove ads.
(#2)
Old
hfs's Avatar
hfs is Offline
Corporal
Rep Power: 1
Reputation: 35
hfs is on a distinguished road
 
Posts: 30
Join Date: Jul 2008
Location: UK
07-25-2008

I was under the impression that fiddling with the coords/rotation via any of the memory techniques would kick you... is that what you mean by 'nudge'?
Reply With Quote
(#3)
Old
Cypher's Avatar
Cypher is Offline
Kynox's Pimp OMGRECURSION
Legendary User
Rep Power: 8
Reputation: 781
Cypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to behold
 
Posts: 1,806
Join Date: Apr 2006
Location: Hiding in ur warden
07-25-2008

Yes, its possible to change your coords by a tiny bit then turn, and repeat that. Effectively 'nudging' your character across, through objects/walls/etc.




Yes my old nick was Chazwazza, stop asking >.<
Reply With Quote
(#4)
Old
hfs's Avatar
hfs is Offline
Corporal
Rep Power: 1
Reputation: 35
hfs is on a distinguished road
 
Posts: 30
Join Date: Jul 2008
Location: UK
07-25-2008

Great, cheers!

Care to elaborate on that a bit though?

I read somewhere that you can move something like 0.0012 units without he game kicking up a fuss?

And, err.. one last question (bearing in mind i've not cracked wow open yet)... why have you crammed eax in the middle there?

Now the direct call makes a whole lot more sense anyway, cheers again! =)
Reply With Quote
(#5)
Old
Cypher's Avatar
Cypher is Offline
Kynox's Pimp OMGRECURSION
Legendary User
Rep Power: 8
Reputation: 781
Cypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to behold
 
Posts: 1,806
Join Date: Apr 2006
Location: Hiding in ur warden
07-25-2008

Quote:
Originally Posted by hfs View Post
Great, cheers!

Care to elaborate on that a bit though?

I read somewhere that you can move something like 0.0012 units without he game kicking up a fuss?

And, err.. one last question (bearing in mind i've not cracked wow open yet)... why have you crammed eax in the middle there?

Now the direct call makes a whole lot more sense anyway, cheers again! =)

You can move about 0.1-0.5 units, I forget the exact amount. Just start at 0.1 and get bigger and bigger until you get dced. Also, what do you mean? GetTickCount is moved into EAX and then pushed, so obviously thats whats in the register, I don't get your question. If you're asking why its moved into EAX and then pushed instead of pushed directly it's because that's how all the code inside WoW that calls the function does it so I basically copied the function call method directly from inside a LUA api.




Yes my old nick was Chazwazza, stop asking >.<
Reply With Quote
(#6)
Old
hfs's Avatar
hfs is Offline
Corporal
Rep Power: 1
Reputation: 35
hfs is on a distinguished road
 
Posts: 30
Join Date: Jul 2008
Location: UK
07-25-2008

Cool cheers again =)


One more rep for being super helpful when the board lets me again!
Reply With Quote
(#7)
Old
Sychotix's Avatar
Sychotix is Online
Contributor
Rep Power: 3
Reputation: 99
Sychotix will become famous soon enough
 
Posts: 669
Join Date: Apr 2006
07-25-2008

.136 is the most you can change your coords.


Reply With Quote
(#8)
Old
hfs's Avatar
hfs is Offline
Corporal
Rep Power: 1
Reputation: 35
hfs is on a distinguished road
 
Posts: 30
Join Date: Jul 2008
Location: UK
07-25-2008

thanks! .
Reply With Quote
(#9)
Old
Cypher's Avatar
Cypher is Offline
Kynox's Pimp OMGRECURSION
Legendary User
Rep Power: 8
Reputation: 781
Cypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to behold
 
Posts: 1,806
Join Date: Apr 2006
Location: Hiding in ur warden
07-29-2008

Quote:
Originally Posted by Sychotix View Post
.136 is the most you can change your coords.

Yeah, just checked that and it works well. Thanks.




Yes my old nick was Chazwazza, stop asking >.<
Reply With Quote
(#10)
Old
UnknOwned's Avatar
UnknOwned is Offline
Contributor
Rep Power: 3
Reputation: 225
UnknOwned has a spectacular aura aboutUnknOwned has a spectacular aura aboutUnknOwned has a spectacular aura about
 
Posts: 199
Join Date: Nov 2006
07-29-2008

I took a little look at the wowAPI's command table, and surprisingly found that the functions for movement are not debricated just "deactivated", so i guess there must be a "switch" somewhere to enable them again.
Not that it would help this particular approach but funny anyway... could be used to make a "LUA" based bot or something.
Reply With Quote
(#11)
Old
Cypher's Avatar
Cypher is Offline
Kynox's Pimp OMGRECURSION
Legendary User
Rep Power: 8
Reputation: 781
Cypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to behold
 
Posts: 1,806
Join Date: Apr 2006
Location: Hiding in ur warden
07-30-2008

Quote:
Originally Posted by UnknOwned View Post
I took a little look at the wowAPI's command table, and surprisingly found that the functions for movement are not debricated just "deactivated", so i guess there must be a "switch" somewhere to enable them again.
Not that it would help this particular approach but funny anyway... could be used to make a "LUA" based bot or something.

Already knew that.

Yeah, thats how I found CInputControl to begin with.

Code:
.text:005345F0 sub_5345F0      proc near               ; DATA XREF: .data:00B9E95Co
.text:005345F0                 push    esi
.text:005345F1                 call    sub_5330B0
.text:005345F6                 push    0
.text:005345F8                 mov     esi, eax
.text:005345FA                 call    ProtectedLuaCheck
.text:005345FF                 add     esp, 4
.text:00534602                 test    eax, eax
.text:00534604                 jz      short loc_534619
.text:00534606                 mov     eax, GetTickCountVal
.text:0053460B                 push    0
.text:0053460D                 push    eax
.text:0053460E                 push    1
.text:00534610                 push    10h
.text:00534612                 mov     ecx, esi
.text:00534614                 call    CInputControl__SetFlags
.text:00534619
.text:00534619 loc_534619:                             ; CODE XREF: sub_5345F0+14j
.text:00534619                 xor     eax, eax
.text:0053461B                 pop     esi
.text:0053461C                 retn
.text:0053461C sub_5345F0      endp
.text:0053461C


Just patch ProtectedLuaCheck.

Code:
.text:0049DBA0 ProtectedLuaCheck proc near             ; CODE XREF: Lua_SendChatMessage+1Fp
.text:0049DBA0                                         ; sub_49E900+2p ...
.text:0049DBA0
.text:0049DBA0 arg_0           = dword ptr  8
.text:0049DBA0
.text:0049DBA0                 push    ebp
.text:0049DBA1                 mov     ebp, esp
.text:0049DBA3                 cmp     dword_E1F640, 0
.text:0049DBAA                 mov     ecx, [ebp+arg_0]
.text:0049DBAD                 mov     eax, dword_C6E820
.text:0049DBB2
.text:0049DBB2 Lua_Protection_Patch:                   ; default
.text:0049DBB2                 jz      short loc_49DC19 ; jumptable 0049DBC0 case 10
.text:0049DBB4                 cmp     ecx, 12h        ; switch 19 cases
.text:0049DBB7                 ja      short loc_49DC19 ; default
.text:0049DBB7                                         ; jumptable 0049DBC0 case 10
.text:0049DBB9                 movzx   edx, byte ptr ds:unk_49DC40[ecx]
.text:0049DBC0                 jmp     ds:off_49DC30[edx*4] ; switch jump
.text:0049DBC7
.text:0049DBC7 loc_49DBC7:                             ; DATA XREF: .text:off_49DC30o
.text:0049DBC7                 xor     eax, eax        ; jumptable 0049DBC0 cases 0-5,16,17
.text:0049DBC9                 push    eax
.text:0049DBCA                 push    eax
.text:0049DBCB                 call    sub_498100      ; <"%s%s">
.text:0049DBD0                 add     esp, 8
.text:0049DBD3                 xor     eax, eax
.text:0049DBD5                 pop     ebp
.text:0049DBD6                 retn
.text:0049DBD7 ; ---------------------------------------------------------------------------
.text:0049DBD7
.text:0049DBD7 loc_49DBD7:                             ; CODE XREF: ProtectedLuaCheck+20j
.text:0049DBD7                                         ; DATA XREF: .text:off_49DC30o
.text:0049DBD7                 test    eax, eax        ; jumptable 0049DBC0 cases 11-14
.text:0049DBD9                 jz      short loc_49DC27
.text:0049DBDB                 cmp     dword ptr [eax+114Ch], 0
.text:0049DBE2                 jnz     short loc_49DC19 ; default
.text:0049DBE2                                         ; jumptable 0049DBC0 case 10
.text:0049DBE4                 mov     eax, 2
.text:0049DBE9                 push    eax
.text:0049DBEA                 push    0
.text:0049DBEC                 call    sub_498100      ; <"%s%s">
.text:0049DBF1                 add     esp, 8
.text:0049DBF4                 xor     eax, eax
.text:0049DBF6                 pop     ebp
.text:0049DBF7                 retn
.text:0049DBF8 ; ---------------------------------------------------------------------------
.text:0049DBF8
.text:0049DBF8 loc_49DBF8:                             ; CODE XREF: ProtectedLuaCheck+20j
.text:0049DBF8                                         ; DATA XREF: .text:off_49DC30o
.text:0049DBF8                 test    eax, eax        ; jumptable 0049DBC0 cases 6-9,15,18
.text:0049DBFA                 jz      short loc_49DC27
.text:0049DBFC                 cmp     dword ptr [eax+1150h], 0
.text:0049DC03                 jnz     short loc_49DC19 ; default
.text:0049DC03                                         ; jumptable 0049DBC0 case 10
.text:0049DC05                 mov     eax, 1
.text:0049DC0A                 push    eax
.text:0049DC0B                 push    0
.text:0049DC0D                 call    sub_498100      ; <"%s%s">
.text:0049DC12                 add     esp, 8
.text:0049DC15                 xor     eax, eax
.text:0049DC17                 pop     ebp
.text:0049DC18                 retn
.text:0049DC19 ; ---------------------------------------------------------------------------
.text:0049DC19
.text:0049DC19 loc_49DC19:                             ; CODE XREF: ProtectedLuaCheck:Lua_Protection_Patchj
.text:0049DC19                                         ; ProtectedLuaCheck+17j ...
.text:0049DC19                 test    eax, eax        ; default
.text:0049DC19                                         ; jumptable 0049DBC0 case 10
.text:0049DC1B                 jz      short loc_49DC27
.text:0049DC1D                 test    ecx, ecx
.text:0049DC1F                 jnz     short loc_49DC27
.text:0049DC21                 mov     [eax+1150h], ecx
.text:0049DC27
.text:0049DC27 loc_49DC27:                             ; CODE XREF: ProtectedLuaCheck+39j
.text:0049DC27                                         ; ProtectedLuaCheck+5Aj ...
.text:0049DC27                 mov     eax, 1
.text:0049DC2C                 pop     ebp
.text:0049DC2D                 retn
.text:0049DC2D ProtectedLuaCheck endp
Patch the section I've annotated as Lua_Protection_Patch to enable running of all Blizz-only functions.

IMPORTANT: Warden hashes parts that function so you need to be careful what you change. I personally use a warden patch to stop warden picking up any client mods but if you feel that's too much work you can probably mod the function near the top (away from the jmp/cmp) to get the same effect.




Yes my old nick was Chazwazza, stop asking >.<
Reply With Quote
(#12)
Old
Sychotix's Avatar
Sychotix is Online
Contributor
Rep Power: 3
Reputation: 99
Sychotix will become famous soon enough
 
Posts: 669
Join Date: Apr 2006
07-30-2008

yeah... one thing about Warden that is stupid... it only scans certain offsets. For example... if it scans the "jne" of a function in order to make sure you dont change it to do a hack... how about you simply codecave above it and make sure the "jne" always does what you want?

pwnt much? =P

ex.

1 pop edi
2 cmp eax,1337 /* start scanning
3 je 6
4 call 8675309 //limit your jump
5 jmp 007734101 */end scanning
6 retn

would be changed to

1 call 911
2 cmp eax,1337 /* start scanning
3 je 6
4 call 8675309 //limit your jump
5 jmp 007734101 */end scanning
6 retn

911 pop edi //maybe needed so you might as well include it =P
912 mov eax,1337 //make sure it jumps
914 retn //return back to the original function



Last edited by Sychotix; 07-30-2008 at 02:19 PM.
Reply With Quote
(#13)
Old
Cypher's Avatar
Cypher is Offline
Kynox's Pimp OMGRECURSION
Legendary User
Rep Power: 8
Reputation: 781
Cypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to beholdCypher is a splendid one to behold
 
Posts: 1,806
Join Date: Apr 2006
Location: Hiding in ur warden
07-30-2008

Quote:
Originally Posted by Sychotix View Post
yeah... one thing about Warden that is stupid... it only scans certain offsets. For example... if it scans the "jne" of a function in order to make sure you dont change it to do a hack... how about you simply codecave above it and make sure the "jne" always does what you want?

pwnt much? =P

ex.

1 pop edi
2 cmp eax,1337 /* start scanning
3 je 6
4 call 8675309 //limit your jump
5 jmp 007734101 */end scanning
6 retn

would be changed to

1 call 911
2 cmp eax,1337 /* start scanning
3 je 6
4 call 8675309 //limit your jump
5 jmp 007734101 */end scanning
6 retn

911 pop edi //maybe needed so you might as well include it =P
912 mov eax,1337 //make sure it jumps
914 retn //return back to the original function

Err, thats exactly what I said in my post.

Also, You don't need a code cave, you can bypass the scan with just a couple of bytes of patching.




Yes my old nick was Chazwazza, stop asking >.<
Reply With Quote
(#14)
Old
dffrntdnl's Avatar
dffrntdnl is Offline
Sergeant
Rep Power: 2
Reputation: 5
dffrntdnl is an unknown quantity at this point
 
Posts: 48
Join Date: Feb 2007
Location: Somewhere, out there
4 Weeks Ago

man I wish I knew this kind of stuff... where can I learn things like this?


<cowers, knowing how close the flames could be....>
Reply With Quote
(#15)
Old
kynox's Avatar
kynox is Offline
Cypher's Pimp

Rep Power: 5
Reputation: 523
kynox is a glorious beacon of lightkynox is a glorious beacon of lightkynox is a glorious beacon of lightkynox is a glorious beacon of lightkynox is a glorious beacon of lightkynox is a glorious beacon of light
 
Posts: 263
Join Date: Dec 2006
Location: Raping your Stack
4 Weeks Ago

By reverse engineering WoW.


Do not PM me about the ME fix or other ME questions
Reply With Quote
Reply

Donate to remove ads.

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are On




Powered by vBulletin® Version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
vBulletin Skin developed by: vBStyles.com


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250