OldSchoolHack

Register / Login English

Farm Bot Problem

icon Thread: Farm Bot Problem

Join Date: Mar 2011

Posts: 978

User-Rating:

89 positive
6 negative
CPP Code:
  1. HRESULT __stdcall hkGetDeviceState(LPDIRECTINPUTDEVICE lpDevice, DWORD cbData, LPVOID lpvData) // Parameter: die device - die größe der daten - der buffer in den geschrieben wird
  2. {
  3. HRESULT temp = NULL;
  4. char* ptr = (char*) lpvData;
  5. temp = pGetDeviceState(lpDevice, cbData, lpvData); // originalfunktion aufrufen
  6. if (cbData == 256) // wenn eine keyboard abfrage stattfindet... siehe: http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.idirectinputdevice8.idirectinputdevice8.getdevicestate%28v=VS.85%29.aspx
  7. {
  8. // memset(lpvData, 0, cbData); // buffer leeren -> keine taste gedrückt
  9. ptr[DIK_E] = 0; // um z.b. die taste E komplett zu blocken...
  10. }
  11. return temp;
  12. }

das ist die funktion von uns die wir gehookt haben, die bekommt wie schon beschrieben 3 parameter.
der erste ist ein pointer auf die device - uninteressant für uns.
der 2. ist ein DWORD, also ein unsigned int, der die größe des im 3. parameter übergebenen buffers kennzeichnet.
der 3. ist der erwähnte buffer in den die keystates geschrieben werden.

wenn die größe (parameter 2) 256 ist, ist es ein keyboardstate buffer, siehe msdn.

CPP Code:
  1.  
  2. char* ptr = (char*) lpvData;
  3.  

hier kopieren wir den übergebenen ptr und konvertieren ihn in einen char pointer, das lässt uns nun auf den buffer mit dem [] operator zugreifen.

der buffer besteht aus 256 keystates, 0 für nicht gedrückt und 128 (msb set) für gedrückt.

CPP Code:
  1.  
  2. ptr[DIK_E] = 0;
  3.  

mit der zeile setze ich jetzt den 18. bufferinhalt auf 0.
in der dinput.h ist nämlich die konstante DIK_E als
CPP Code:
  1.  
  2. #define DIK_E 0x12
  3.  
definiert.
so gibt es für jede taste auf der tastatur eine konstante:
CPP Code:
  1.  
  2. /****************************************************************************
  3.  *
  4.  * DirectInput keyboard scan codes
  5.  *
  6.  ****************************************************************************/
  7. #define DIK_ESCAPE 0x01
  8. #define DIK_1 0x02
  9. #define DIK_2 0x03
  10. #define DIK_3 0x04
  11. #define DIK_4 0x05
  12. #define DIK_5 0x06
  13. #define DIK_6 0x07
  14. #define DIK_7 0x08
  15. #define DIK_8 0x09
  16. #define DIK_9 0x0A
  17. #define DIK_0 0x0B
  18. #define DIK_MINUS 0x0C /* - on main keyboard */
  19. #define DIK_EQUALS 0x0D
  20. #define DIK_BACK 0x0E /* backspace */
  21. #define DIK_TAB 0x0F
  22. #define DIK_Q 0x10
  23. #define DIK_W 0x11
  24. #define DIK_E 0x12
  25. #define DIK_R 0x13
  26. #define DIK_T 0x14
  27. #define DIK_Y 0x15
  28. #define DIK_U 0x16
  29. #define DIK_I 0x17
  30. #define DIK_O 0x18
  31. #define DIK_P 0x19
  32. #define DIK_LBRACKET 0x1A
  33. #define DIK_RBRACKET 0x1B
  34. #define DIK_RETURN 0x1C /* Enter on main keyboard */
  35. #define DIK_LCONTROL 0x1D
  36. #define DIK_A 0x1E
  37. #define DIK_S 0x1F
  38. #define DIK_D 0x20
  39. #define DIK_F 0x21
  40. #define DIK_G 0x22
  41. #define DIK_H 0x23
  42. #define DIK_J 0x24
  43. #define DIK_K 0x25
  44. #define DIK_L 0x26
  45. #define DIK_SEMICOLON 0x27
  46. #define DIK_APOSTROPHE 0x28
  47. #define DIK_GRAVE 0x29 /* accent grave */
  48. #define DIK_LSHIFT 0x2A
  49. #define DIK_BACKSLASH 0x2B
  50. #define DIK_Z 0x2C
  51. #define DIK_X 0x2D
  52. #define DIK_C 0x2E
  53. #define DIK_V 0x2F
  54. #define DIK_B 0x30
  55. #define DIK_N 0x31
  56. #define DIK_M 0x32
  57. #define DIK_COMMA 0x33
  58. #define DIK_PERIOD 0x34 /* . on main keyboard */
  59. #define DIK_SLASH 0x35 /* / on main keyboard */
  60. #define DIK_RSHIFT 0x36
  61. #define DIK_MULTIPLY 0x37 /* * on numeric keypad */
  62. #define DIK_LMENU 0x38 /* left Alt */
  63. #define DIK_SPACE 0x39
  64. #define DIK_CAPITAL 0x3A
  65. #define DIK_F1 0x3B
  66. #define DIK_F2 0x3C
  67. #define DIK_F3 0x3D
  68. #define DIK_F4 0x3E
  69. #define DIK_F5 0x3F
  70. #define DIK_F6 0x40
  71. #define DIK_F7 0x41
  72. #define DIK_F8 0x42
  73. #define DIK_F9 0x43
  74. #define DIK_F10 0x44
  75. #define DIK_NUMLOCK 0x45
  76. #define DIK_SCROLL 0x46 /* Scroll Lock */
  77. #define DIK_NUMPAD7 0x47
  78. #define DIK_NUMPAD8 0x48
  79. #define DIK_NUMPAD9 0x49
  80. #define DIK_SUBTRACT 0x4A /* - on numeric keypad */
  81. #define DIK_NUMPAD4 0x4B
  82. #define DIK_NUMPAD5 0x4C
  83. #define DIK_NUMPAD6 0x4D
  84. #define DIK_ADD 0x4E /* + on numeric keypad */
  85. #define DIK_NUMPAD1 0x4F
  86. #define DIK_NUMPAD2 0x50
  87. #define DIK_NUMPAD3 0x51
  88. #define DIK_NUMPAD0 0x52
  89. #define DIK_DECIMAL 0x53 /* . on numeric keypad */
  90. #define DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */
  91. #define DIK_F11 0x57
  92. #define DIK_F12 0x58
  93. #define DIK_F13 0x64 /* (NEC PC98) */
  94. #define DIK_F14 0x65 /* (NEC PC98) */
  95. #define DIK_F15 0x66 /* (NEC PC98) */
  96. #define DIK_KANA 0x70 /* (Japanese keyboard) */
  97. #define DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */
  98. #define DIK_CONVERT 0x79 /* (Japanese keyboard) */
  99. #define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */
  100. #define DIK_YEN 0x7D /* (Japanese keyboard) */
  101. #define DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */
  102. #define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */
  103. #define DIK_PREVTRACK 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
  104. #define DIK_AT 0x91 /* (NEC PC98) */
  105. #define DIK_COLON 0x92 /* (NEC PC98) */
  106. #define DIK_UNDERLINE 0x93 /* (NEC PC98) */
  107. #define DIK_KANJI 0x94 /* (Japanese keyboard) */
  108. #define DIK_STOP 0x95 /* (NEC PC98) */
  109. #define DIK_AX 0x96 /* (Japan AX) */
  110. #define DIK_UNLABELED 0x97 /* (J3100) */
  111. #define DIK_NEXTTRACK 0x99 /* Next Track */
  112. #define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */
  113. #define DIK_RCONTROL 0x9D
  114. #define DIK_MUTE 0xA0 /* Mute */
  115. #define DIK_CALCULATOR 0xA1 /* Calculator */
  116. #define DIK_PLAYPAUSE 0xA2 /* Play / Pause */
  117. #define DIK_MEDIASTOP 0xA4 /* Media Stop */
  118. #define DIK_VOLUMEDOWN 0xAE /* Volume - */
  119. #define DIK_VOLUMEUP 0xB0 /* Volume + */
  120. #define DIK_WEBHOME 0xB2 /* Web home */
  121. #define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */
  122. #define DIK_DIVIDE 0xB5 /* / on numeric keypad */
  123. #define DIK_SYSRQ 0xB7
  124. #define DIK_RMENU 0xB8 /* right Alt */
  125. #define DIK_PAUSE 0xC5 /* Pause */
  126. #define DIK_HOME 0xC7 /* Home on arrow keypad */
  127. #define DIK_UP 0xC8 /* UpArrow on arrow keypad */
  128. #define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */
  129. #define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */
  130. #define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */
  131. #define DIK_END 0xCF /* End on arrow keypad */
  132. #define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */
  133. #define DIK_NEXT 0xD1 /* PgDn on arrow keypad */
  134. #define DIK_INSERT 0xD2 /* Insert on arrow keypad */
  135. #define DIK_DELETE 0xD3 /* Delete on arrow keypad */
  136. #define DIK_LWIN 0xDB /* Left Windows key */
  137. #define DIK_RWIN 0xDC /* Right Windows key */
  138. #define DIK_APPS 0xDD /* AppMenu key */
  139. #define DIK_POWER 0xDE /* System Power */
  140. #define DIK_SLEEP 0xDF /* System Sleep */
  141. #define DIK_WAKE 0xE3 /* System Wake */
  142. #define DIK_WEBSEARCH 0xE5 /* Web Search */
  143. #define DIK_WEBFAVORITES 0xE6 /* Web Favorites */
  144. #define DIK_WEBREFRESH 0xE7 /* Web Refresh */
  145. #define DIK_WEBSTOP 0xE8 /* Web Stop */
  146. #define DIK_WEBFORWARD 0xE9 /* Web Forward */
  147. #define DIK_WEBBACK 0xEA /* Web Back */
  148. #define DIK_MYCOMPUTER 0xEB /* My Computer */
  149. #define DIK_MAIL 0xEC /* Mail */
  150. #define DIK_MEDIASELECT 0xED /* Media Select */
  151.  

wenn du jetzt z.b. einmal die E taste gedrückt haben willst, musst du z.b. in deinem mainloop einmal ne variable setzen, dass getdevicestate nun einen E-tastendruck vorgaukeln soll.

also:
CPP Code:
  1.  
  2. //global:
  3. bool Press_E = false;
  4.  
  5. // im hauptthread:
  6. while (true)
  7. {
  8. // ...
  9. Press_E = true;
  10. Sleep(10000);
  11. }
  12.  
  13. //in getdevicestate:
  14.  
  15. HRESULT __stdcall hkGetDeviceState(LPDIRECTINPUTDEVICE lpDevice, DWORD cbData, LPVOID lpvData) // Parameter: die device - die größe der daten - der buffer in den geschrieben wird
  16. {
  17. HRESULT temp = NULL;
  18. char* ptr = (char*) lpvData;
  19. temp = pGetDeviceState(lpDevice, cbData, lpvData); // originalfunktion aufrufen
  20. if (cbData == 256)
  21. {
  22. if (Press_E)
  23. {
  24. ptr[DIK_E] |= 1<<7;
  25. Press_E = false; // ansonsten würde die taste immer gedrückt werden...
  26. }
  27. }
  28. return temp;
  29. }
  30.  

das drückt jetzt alle 10 sekunden die E-taste...

warum "ptr[DIK_E] |= 1<<7;"?
damit setzt du ein bit des chars.
dieses bit (das most significant bit -> google) signalisiert den aktuellen keystate.

funktioniert die dll bei dir mit dem offset 0x62B1?
welches windows/wieviel bit hast du?

__________________

http://www.abload.de/img/signfj5o.png
Spoiler
Vids:
Zitate:
Spoiler

Quote from xst
Vater KN4CK3R, der du hängst im irc, geheiligt werde dein Botnet, dein P7 v1.337 komme, die Bannwelle geschehe, wie in CS:S als auch in CS:GO, führe uns nicht in Versuchung, sondern erlöse uns von all dem c+p-Shit.
Quote from f4gsh0t_h4x
VAC ist an,immer,überall
Quote from gibson.w
Ich mag braune Würstchen
Quote from irc
<SilverDeath> KN4CK3R bistn nub
<~KN4CK3R> kk
Quote from irc
<OrkSchamane> das prob is das viele dieser eig. recht guten bücher englisch sind ...
<OrkSchamane> da habe ich's ja doppelt schwer
<~KN4CK3R> falsch
<~KN4CK3R> das prob is dass du programmieren willst ohne englisch zu können
Quote from irc
<SilverDeath> Ich schwöre dir Dr_Pepper Ich bumms deine Mutter tot Mann!
<Dr_Pepper> danke.
<SilverDeath> bitte
Quote from irc
<~KN4CK3R> dann liegts wenigstens an mir
<~KN4CK3R> nur noch rausfinden warum -.-
<SilverDeath> ja sicher
<SilverDeath> an wem sonst?
* You were kicked by KN4CK3R (kick)
Quote from Dr_Pepper
ihr seit beide dumm
Tutorials:
Releases:
Gifs:
Spoiler
http://www.abload.de/img/uberesp2sgul2.gif
https://i.imgur.com/Z5VQMrV.gif
http://www.abload.de/img/minesweeperzgaef.gif