Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 45.76 KB | None | 0 0
  1. // Simpsons.cpp: define el punto de entrada de la aplicación de consola.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <io.h>
  6.  
  7. #include "detours.h"
  8. #pragma comment(lib, "detours.lib")
  9. // delete all that shit for the love of god
  10. //0x4714C0 -> interesting
  11. //sub_44EB40 -scripting related
  12.  
  13. HMODULE g_hModule;
  14. HINSTANCE h_original;
  15.  
  16. #pragma region PUNTEROS
  17. FARPROC p_timeGetTime;
  18. FARPROC p_timeEndPeriod;
  19. FARPROC p_timeBeginPeriod;
  20. FARPROC p_PlaySoundW;
  21. FARPROC p_timeGetDevCaps;
  22. FARPROC p_waveOutMessage;
  23. FARPROC p_waveInGetNumDevs;
  24. FARPROC p_waveInMessage;
  25. FARPROC p_waveOutGetNumDevs;
  26. FARPROC p_waveOutOpen;
  27. FARPROC p_midiOutMessage;
  28. FARPROC p_waveOutGetDevCapsW;
  29. FARPROC p_DefDriverProc;
  30. FARPROC p_CloseDriver;
  31. FARPROC p_GetDriverModuleHandle;
  32. FARPROC p_OpenDriver;
  33. FARPROC p_midiOutGetDevCapsW;
  34. FARPROC p_midiOutGetNumDevs;
  35. FARPROC p_timeKillEvent;
  36. FARPROC p_timeSetEvent;
  37. FARPROC p_waveOutUnprepareHeader;
  38. FARPROC p_waveOutClose;
  39. FARPROC p_DriverCallback;
  40. FARPROC p_waveOutWrite;
  41. FARPROC p_waveOutPrepareHeader;
  42. FARPROC p_waveOutReset;
  43. FARPROC p_waveInOpen;
  44. FARPROC p_mciLoadCommandResource;
  45. FARPROC p_mciSendStringW;
  46. FARPROC p_mciSendStringA;
  47. FARPROC p_NotifyCallbackData;
  48. FARPROC p_WOW32DriverCallback;
  49. FARPROC p_WOW32ResolveMultiMediaHandle;
  50. FARPROC p_aux32Message;
  51. FARPROC p_joy32Message;
  52. FARPROC p_mid32Message;
  53. FARPROC p_mod32Message;
  54. FARPROC p_mxd32Message;
  55. FARPROC p_tid32Message;
  56. FARPROC p_wid32Message;
  57. FARPROC p_wod32Message;
  58. FARPROC p_mci32Message;
  59. FARPROC p_DrvGetModuleHandle;
  60. FARPROC p_PlaySound;
  61. FARPROC p_Ordinal2;
  62. FARPROC p_SendDriverMessage;
  63. FARPROC p_auxGetDevCapsA;
  64. FARPROC p_auxGetDevCapsW;
  65. FARPROC p_auxGetNumDevs;
  66. FARPROC p_auxGetVolume;
  67. FARPROC p_auxOutMessage;
  68. FARPROC p_auxSetVolume;
  69. FARPROC p_joyConfigChanged;
  70. FARPROC p_joyGetDevCapsA;
  71. FARPROC p_joyGetDevCapsW;
  72. FARPROC p_joyGetNumDevs;
  73. FARPROC p_joyGetPosEx;
  74. FARPROC p_joyGetPos;
  75. FARPROC p_joyGetThreshold;
  76. FARPROC p_joyReleaseCapture;
  77. FARPROC p_joySetCapture;
  78. FARPROC p_joySetThreshold;
  79. FARPROC p_midiConnect;
  80. FARPROC p_midiDisconnect;
  81. FARPROC p_midiInAddBuffer;
  82. FARPROC p_midiInClose;
  83. FARPROC p_midiInGetDevCapsA;
  84. FARPROC p_midiInGetDevCapsW;
  85. FARPROC p_midiInGetErrorTextA;
  86. FARPROC p_midiInGetErrorTextW;
  87. FARPROC p_midiInGetID;
  88. FARPROC p_midiInGetNumDevs;
  89. FARPROC p_midiInMessage;
  90. FARPROC p_midiInOpen;
  91. FARPROC p_midiInPrepareHeader;
  92. FARPROC p_midiInReset;
  93. FARPROC p_midiInStart;
  94. FARPROC p_midiInStop;
  95. FARPROC p_midiInUnprepareHeader;
  96. FARPROC p_midiOutCacheDrumPatches;
  97. FARPROC p_midiOutCachePatches;
  98. FARPROC p_midiOutClose;
  99. FARPROC p_midiOutGetDevCapsA;
  100. FARPROC p_midiOutGetErrorTextA;
  101. FARPROC p_midiOutGetErrorTextW;
  102. FARPROC p_midiOutGetID;
  103. FARPROC p_midiOutGetVolume;
  104. FARPROC p_midiOutLongMsg;
  105. FARPROC p_midiOutOpen;
  106. FARPROC p_midiOutPrepareHeader;
  107. FARPROC p_midiOutReset;
  108. FARPROC p_midiOutSetVolume;
  109. FARPROC p_midiOutShortMsg;
  110. FARPROC p_midiOutUnprepareHeader;
  111. FARPROC p_midiStreamClose;
  112. FARPROC p_midiStreamOpen;
  113. FARPROC p_midiStreamOut;
  114. FARPROC p_midiStreamPause;
  115. FARPROC p_midiStreamPosition;
  116. FARPROC p_midiStreamProperty;
  117. FARPROC p_midiStreamRestart;
  118. FARPROC p_midiStreamStop;
  119. FARPROC p_mixerClose;
  120. FARPROC p_mixerGetControlDetailsA;
  121. FARPROC p_mixerGetControlDetailsW;
  122. FARPROC p_mixerGetDevCapsA;
  123. FARPROC p_mixerGetDevCapsW;
  124. FARPROC p_mixerGetID;
  125. FARPROC p_mixerGetLineControlsA;
  126. FARPROC p_mixerGetLineControlsW;
  127. FARPROC p_mixerGetLineInfoA;
  128. FARPROC p_mixerGetLineInfoW;
  129. FARPROC p_mixerGetNumDevs;
  130. FARPROC p_mixerMessage;
  131. FARPROC p_mixerOpen;
  132. FARPROC p_mixerSetControlDetails;
  133. FARPROC p_mmDrvInstall;
  134. FARPROC p_mmGetCurrentTask;
  135. FARPROC p_mmTaskBlock;
  136. FARPROC p_mmTaskCreate;
  137. FARPROC p_mmTaskSignal;
  138. FARPROC p_mmTaskYield;
  139. FARPROC p_mmioAdvance;
  140. FARPROC p_mmioAscend;
  141. FARPROC p_mmioClose;
  142. FARPROC p_mmioCreateChunk;
  143. FARPROC p_mmioDescend;
  144. FARPROC p_mmioFlush;
  145. FARPROC p_mmioGetInfo;
  146. FARPROC p_mmioInstallIOProcA;
  147. FARPROC p_mmioInstallIOProcW;
  148. FARPROC p_mmioOpenA;
  149. FARPROC p_mmioOpenW;
  150. FARPROC p_mmioRead;
  151. FARPROC p_mmioRenameA;
  152. FARPROC p_mmioRenameW;
  153. FARPROC p_mmioSeek;
  154. FARPROC p_mmioSendMessage;
  155. FARPROC p_mmioSetBuffer;
  156. FARPROC p_mmioSetInfo;
  157. FARPROC p_mmioStringToFOURCCA;
  158. FARPROC p_mmioStringToFOURCCW;
  159. FARPROC p_mmioWrite;
  160. FARPROC p_timeGetSystemTime;
  161. FARPROC p_waveInAddBuffer;
  162. FARPROC p_waveInClose;
  163. FARPROC p_waveInGetDevCapsA;
  164. FARPROC p_waveInGetDevCapsW;
  165. FARPROC p_waveInGetErrorTextA;
  166. FARPROC p_waveInGetErrorTextW;
  167. FARPROC p_waveInGetID;
  168. FARPROC p_waveInGetPosition;
  169. FARPROC p_waveInPrepareHeader;
  170. FARPROC p_waveInReset;
  171. FARPROC p_waveInStart;
  172. FARPROC p_waveInStop;
  173. FARPROC p_waveInUnprepareHeader;
  174. FARPROC p_waveOutBreakLoop;
  175. FARPROC p_waveOutGetDevCapsA;
  176. FARPROC p_waveOutGetErrorTextA;
  177. FARPROC p_waveOutGetErrorTextW;
  178. FARPROC p_waveOutGetID;
  179. FARPROC p_waveOutGetPitch;
  180. FARPROC p_waveOutGetPlaybackRate;
  181. FARPROC p_waveOutGetPosition;
  182. FARPROC p_waveOutGetVolume;
  183. FARPROC p_waveOutPause;
  184. FARPROC p_waveOutRestart;
  185. FARPROC p_waveOutSetPitch;
  186. FARPROC p_waveOutSetPlaybackRate;
  187. FARPROC p_waveOutSetVolume;
  188. FARPROC p_mciExecute;
  189. FARPROC p_mciGetErrorStringA;
  190. FARPROC p_mciGetErrorStringW;
  191. FARPROC p_mciSendCommandA;
  192. FARPROC p_mciSendCommandW;
  193. FARPROC p_mciFreeCommandResource;
  194. FARPROC p_mciDriverNotify;
  195. FARPROC p_mciDriverYield;
  196. FARPROC p_mciGetCreatorTask;
  197. FARPROC p_mciGetDeviceIDA;
  198. FARPROC p_mciGetDeviceIDFromElementIDA;
  199. FARPROC p_mciGetDeviceIDFromElementIDW;
  200. FARPROC p_mciGetDeviceIDW;
  201. FARPROC p_mciGetDriverData;
  202. FARPROC p_mciGetYieldProc;
  203. FARPROC p_mciSetDriverData;
  204. FARPROC p_mciSetYieldProc;
  205. FARPROC p_PlaySoundA;
  206. FARPROC p_sndPlaySoundA;
  207. FARPROC p_sndPlaySoundW;
  208. FARPROC p_WOWAppExit;
  209. FARPROC p_mmsystemGetVersion;
  210.  
  211. #pragma endregion
  212.  
  213.  
  214.  
  215. #pragma region VIRTUALES
  216. extern "C" {
  217. __declspec(naked) void WINAPI d_timeGetTime() { _asm { jmp p_timeGetTime } }
  218. __declspec(naked) void WINAPI d_timeEndPeriod() { _asm { jmp p_timeEndPeriod } }
  219. __declspec(naked) void WINAPI d_timeBeginPeriod() { _asm { jmp p_timeBeginPeriod } }
  220. __declspec(naked) void WINAPI d_PlaySoundW() { _asm { jmp p_PlaySoundW } }
  221. __declspec(naked) void WINAPI d_timeGetDevCaps() { _asm { jmp p_timeGetDevCaps } }
  222. __declspec(naked) void WINAPI d_waveOutMessage() { _asm { jmp p_waveOutMessage } }
  223. __declspec(naked) void WINAPI d_waveInGetNumDevs() { _asm { jmp p_waveInGetNumDevs } }
  224. __declspec(naked) void WINAPI d_waveInMessage() { _asm { jmp p_waveInMessage } }
  225. __declspec(naked) void WINAPI d_waveOutGetNumDevs() { _asm { jmp p_waveOutGetNumDevs } }
  226. __declspec(naked) void WINAPI d_waveOutOpen() { _asm { jmp p_waveOutOpen } }
  227. __declspec(naked) void WINAPI d_midiOutMessage() { _asm { jmp p_midiOutMessage } }
  228. __declspec(naked) void WINAPI d_waveOutGetDevCapsW() { _asm { jmp p_waveOutGetDevCapsW } }
  229. __declspec(naked) void WINAPI d_DefDriverProc() { _asm { jmp p_DefDriverProc } }
  230. __declspec(naked) void WINAPI d_CloseDriver() { _asm { jmp p_CloseDriver } }
  231. __declspec(naked) void WINAPI d_GetDriverModuleHandle() { _asm { jmp p_GetDriverModuleHandle } }
  232. __declspec(naked) void WINAPI d_OpenDriver() { _asm { jmp p_OpenDriver } }
  233. __declspec(naked) void WINAPI d_midiOutGetDevCapsW() { _asm { jmp p_midiOutGetDevCapsW } }
  234. __declspec(naked) void WINAPI d_midiOutGetNumDevs() { _asm { jmp p_midiOutGetNumDevs } }
  235. __declspec(naked) void WINAPI d_timeKillEvent() { _asm { jmp p_timeKillEvent } }
  236. __declspec(naked) void WINAPI d_timeSetEvent() { _asm { jmp p_timeSetEvent } }
  237. __declspec(naked) void WINAPI d_waveOutUnprepareHeader() { _asm { jmp p_waveOutUnprepareHeader } }
  238. __declspec(naked) void WINAPI d_waveOutClose() { _asm { jmp p_waveOutClose } }
  239. __declspec(naked) void WINAPI d_DriverCallback() { _asm { jmp p_DriverCallback } }
  240. __declspec(naked) void WINAPI d_waveOutWrite() { _asm { jmp p_waveOutWrite } }
  241. __declspec(naked) void WINAPI d_waveOutPrepareHeader() { _asm { jmp p_waveOutPrepareHeader } }
  242. __declspec(naked) void WINAPI d_waveOutReset() { _asm { jmp p_waveOutReset } }
  243. __declspec(naked) void WINAPI d_waveInOpen() { _asm { jmp p_waveInOpen } }
  244. __declspec(naked) void WINAPI d_mciLoadCommandResource() { _asm { jmp p_mciLoadCommandResource } }
  245. __declspec(naked) void WINAPI d_mciSendStringW() { _asm { jmp p_mciSendStringW } }
  246. __declspec(naked) void WINAPI d_mciSendStringA() { _asm { jmp p_mciSendStringA } }
  247. __declspec(naked) void WINAPI d_NotifyCallbackData() { _asm { jmp p_NotifyCallbackData } }
  248. __declspec(naked) void WINAPI d_WOW32DriverCallback() { _asm { jmp p_WOW32DriverCallback } }
  249. __declspec(naked) void WINAPI d_WOW32ResolveMultiMediaHandle() { _asm { jmp p_WOW32ResolveMultiMediaHandle } }
  250. __declspec(naked) void WINAPI d_aux32Message() { _asm { jmp p_aux32Message } }
  251. __declspec(naked) void WINAPI d_joy32Message() { _asm { jmp p_joy32Message } }
  252. __declspec(naked) void WINAPI d_mid32Message() { _asm { jmp p_mid32Message } }
  253. __declspec(naked) void WINAPI d_mod32Message() { _asm { jmp p_mod32Message } }
  254. __declspec(naked) void WINAPI d_mxd32Message() { _asm { jmp p_mxd32Message } }
  255. __declspec(naked) void WINAPI d_tid32Message() { _asm { jmp p_tid32Message } }
  256. __declspec(naked) void WINAPI d_wid32Message() { _asm { jmp p_wid32Message } }
  257. __declspec(naked) void WINAPI d_wod32Message() { _asm { jmp p_wod32Message } }
  258. __declspec(naked) void WINAPI d_mci32Message() { _asm { jmp p_mci32Message } }
  259. __declspec(naked) void WINAPI d_DrvGetModuleHandle() { _asm { jmp p_DrvGetModuleHandle } }
  260. __declspec(naked) void WINAPI d_PlaySound() { _asm { jmp p_PlaySound } }
  261. __declspec(naked) void WINAPI d_Ordinal2() { _asm { jmp p_Ordinal2 } }
  262. __declspec(naked) void WINAPI d_SendDriverMessage() { _asm { jmp p_SendDriverMessage } }
  263. __declspec(naked) void WINAPI d_auxGetDevCapsA() { _asm { jmp p_auxGetDevCapsA } }
  264. __declspec(naked) void WINAPI d_auxGetDevCapsW() { _asm { jmp p_auxGetDevCapsW } }
  265. __declspec(naked) void WINAPI d_auxGetNumDevs() { _asm { jmp p_auxGetNumDevs } }
  266. __declspec(naked) void WINAPI d_auxGetVolume() { _asm { jmp p_auxGetVolume } }
  267. __declspec(naked) void WINAPI d_auxOutMessage() { _asm { jmp p_auxOutMessage } }
  268. __declspec(naked) void WINAPI d_auxSetVolume() { _asm { jmp p_auxSetVolume } }
  269. __declspec(naked) void WINAPI d_joyConfigChanged() { _asm { jmp p_joyConfigChanged } }
  270. __declspec(naked) void WINAPI d_joyGetDevCapsA() { _asm { jmp p_joyGetDevCapsA } }
  271. __declspec(naked) void WINAPI d_joyGetDevCapsW() { _asm { jmp p_joyGetDevCapsW } }
  272. __declspec(naked) void WINAPI d_joyGetNumDevs() { _asm { jmp p_joyGetNumDevs } }
  273. __declspec(naked) void WINAPI d_joyGetPosEx() { _asm { jmp p_joyGetPosEx } }
  274. __declspec(naked) void WINAPI d_joyGetPos() { _asm { jmp p_joyGetPos } }
  275. __declspec(naked) void WINAPI d_joyGetThreshold() { _asm { jmp p_joyGetThreshold } }
  276. __declspec(naked) void WINAPI d_joyReleaseCapture() { _asm { jmp p_joyReleaseCapture } }
  277. __declspec(naked) void WINAPI d_joySetCapture() { _asm { jmp p_joySetCapture } }
  278. __declspec(naked) void WINAPI d_joySetThreshold() { _asm { jmp p_joySetThreshold } }
  279. __declspec(naked) void WINAPI d_midiConnect() { _asm { jmp p_midiConnect } }
  280. __declspec(naked) void WINAPI d_midiDisconnect() { _asm { jmp p_midiDisconnect } }
  281. __declspec(naked) void WINAPI d_midiInAddBuffer() { _asm { jmp p_midiInAddBuffer } }
  282. __declspec(naked) void WINAPI d_midiInClose() { _asm { jmp p_midiInClose } }
  283. __declspec(naked) void WINAPI d_midiInGetDevCapsA() { _asm { jmp p_midiInGetDevCapsA } }
  284. __declspec(naked) void WINAPI d_midiInGetDevCapsW() { _asm { jmp p_midiInGetDevCapsW } }
  285. __declspec(naked) void WINAPI d_midiInGetErrorTextA() { _asm { jmp p_midiInGetErrorTextA } }
  286. __declspec(naked) void WINAPI d_midiInGetErrorTextW() { _asm { jmp p_midiInGetErrorTextW } }
  287. __declspec(naked) void WINAPI d_midiInGetID() { _asm { jmp p_midiInGetID } }
  288. __declspec(naked) void WINAPI d_midiInGetNumDevs() { _asm { jmp p_midiInGetNumDevs } }
  289. __declspec(naked) void WINAPI d_midiInMessage() { _asm { jmp p_midiInMessage } }
  290. __declspec(naked) void WINAPI d_midiInOpen() { _asm { jmp p_midiInOpen } }
  291. __declspec(naked) void WINAPI d_midiInPrepareHeader() { _asm { jmp p_midiInPrepareHeader } }
  292. __declspec(naked) void WINAPI d_midiInReset() { _asm { jmp p_midiInReset } }
  293. __declspec(naked) void WINAPI d_midiInStart() { _asm { jmp p_midiInStart } }
  294. __declspec(naked) void WINAPI d_midiInStop() { _asm { jmp p_midiInStop } }
  295. __declspec(naked) void WINAPI d_midiInUnprepareHeader() { _asm { jmp p_midiInUnprepareHeader } }
  296. __declspec(naked) void WINAPI d_midiOutCacheDrumPatches() { _asm { jmp p_midiOutCacheDrumPatches } }
  297. __declspec(naked) void WINAPI d_midiOutCachePatches() { _asm { jmp p_midiOutCachePatches } }
  298. __declspec(naked) void WINAPI d_midiOutClose() { _asm { jmp p_midiOutClose } }
  299. __declspec(naked) void WINAPI d_midiOutGetDevCapsA() { _asm { jmp p_midiOutGetDevCapsA } }
  300. __declspec(naked) void WINAPI d_midiOutGetErrorTextA() { _asm { jmp p_midiOutGetErrorTextA } }
  301. __declspec(naked) void WINAPI d_midiOutGetErrorTextW() { _asm { jmp p_midiOutGetErrorTextW } }
  302. __declspec(naked) void WINAPI d_midiOutGetID() { _asm { jmp p_midiOutGetID } }
  303. __declspec(naked) void WINAPI d_midiOutGetVolume() { _asm { jmp p_midiOutGetVolume } }
  304. __declspec(naked) void WINAPI d_midiOutLongMsg() { _asm { jmp p_midiOutLongMsg } }
  305. __declspec(naked) void WINAPI d_midiOutOpen() { _asm { jmp p_midiOutOpen } }
  306. __declspec(naked) void WINAPI d_midiOutPrepareHeader() { _asm { jmp p_midiOutPrepareHeader } }
  307. __declspec(naked) void WINAPI d_midiOutReset() { _asm { jmp p_midiOutReset } }
  308. __declspec(naked) void WINAPI d_midiOutSetVolume() { _asm { jmp p_midiOutSetVolume } }
  309. __declspec(naked) void WINAPI d_midiOutShortMsg() { _asm { jmp p_midiOutShortMsg } }
  310. __declspec(naked) void WINAPI d_midiOutUnprepareHeader() { _asm { jmp p_midiOutUnprepareHeader } }
  311. __declspec(naked) void WINAPI d_midiStreamClose() { _asm { jmp p_midiStreamClose } }
  312. __declspec(naked) void WINAPI d_midiStreamOpen() { _asm { jmp p_midiStreamOpen } }
  313. __declspec(naked) void WINAPI d_midiStreamOut() { _asm { jmp p_midiStreamOut } }
  314. __declspec(naked) void WINAPI d_midiStreamPause() { _asm { jmp p_midiStreamPause } }
  315. __declspec(naked) void WINAPI d_midiStreamPosition() { _asm { jmp p_midiStreamPosition } }
  316. __declspec(naked) void WINAPI d_midiStreamProperty() { _asm { jmp p_midiStreamProperty } }
  317. __declspec(naked) void WINAPI d_midiStreamRestart() { _asm { jmp p_midiStreamRestart } }
  318. __declspec(naked) void WINAPI d_midiStreamStop() { _asm { jmp p_midiStreamStop } }
  319. __declspec(naked) void WINAPI d_mixerClose() { _asm { jmp p_mixerClose } }
  320. __declspec(naked) void WINAPI d_mixerGetControlDetailsA() { _asm { jmp p_mixerGetControlDetailsA } }
  321. __declspec(naked) void WINAPI d_mixerGetControlDetailsW() { _asm { jmp p_mixerGetControlDetailsW } }
  322. __declspec(naked) void WINAPI d_mixerGetDevCapsA() { _asm { jmp p_mixerGetDevCapsA } }
  323. __declspec(naked) void WINAPI d_mixerGetDevCapsW() { _asm { jmp p_mixerGetDevCapsW } }
  324. __declspec(naked) void WINAPI d_mixerGetID() { _asm { jmp p_mixerGetID } }
  325. __declspec(naked) void WINAPI d_mixerGetLineControlsA() { _asm { jmp p_mixerGetLineControlsA } }
  326. __declspec(naked) void WINAPI d_mixerGetLineControlsW() { _asm { jmp p_mixerGetLineControlsW } }
  327. __declspec(naked) void WINAPI d_mixerGetLineInfoA() { _asm { jmp p_mixerGetLineInfoA } }
  328. __declspec(naked) void WINAPI d_mixerGetLineInfoW() { _asm { jmp p_mixerGetLineInfoW } }
  329. __declspec(naked) void WINAPI d_mixerGetNumDevs() { _asm { jmp p_mixerGetNumDevs } }
  330. __declspec(naked) void WINAPI d_mixerMessage() { _asm { jmp p_mixerMessage } }
  331. __declspec(naked) void WINAPI d_mixerOpen() { _asm { jmp p_mixerOpen } }
  332. __declspec(naked) void WINAPI d_mixerSetControlDetails() { _asm { jmp p_mixerSetControlDetails } }
  333. __declspec(naked) void WINAPI d_mmDrvInstall() { _asm { jmp p_mmDrvInstall } }
  334. __declspec(naked) void WINAPI d_mmGetCurrentTask() { _asm { jmp p_mmGetCurrentTask } }
  335. __declspec(naked) void WINAPI d_mmTaskBlock() { _asm { jmp p_mmTaskBlock } }
  336. __declspec(naked) void WINAPI d_mmTaskCreate() { _asm { jmp p_mmTaskCreate } }
  337. __declspec(naked) void WINAPI d_mmTaskSignal() { _asm { jmp p_mmTaskSignal } }
  338. __declspec(naked) void WINAPI d_mmTaskYield() { _asm { jmp p_mmTaskYield } }
  339. __declspec(naked) void WINAPI d_mmioAdvance() { _asm { jmp p_mmioAdvance } }
  340. __declspec(naked) void WINAPI d_mmioAscend() { _asm { jmp p_mmioAscend } }
  341. __declspec(naked) void WINAPI d_mmioClose() { _asm { jmp p_mmioClose } }
  342. __declspec(naked) void WINAPI d_mmioCreateChunk() { _asm { jmp p_mmioCreateChunk } }
  343. __declspec(naked) void WINAPI d_mmioDescend() { _asm { jmp p_mmioDescend } }
  344. __declspec(naked) void WINAPI d_mmioFlush() { _asm { jmp p_mmioFlush } }
  345. __declspec(naked) void WINAPI d_mmioGetInfo() { _asm { jmp p_mmioGetInfo } }
  346. __declspec(naked) void WINAPI d_mmioInstallIOProcA() { _asm { jmp p_mmioInstallIOProcA } }
  347. __declspec(naked) void WINAPI d_mmioInstallIOProcW() { _asm { jmp p_mmioInstallIOProcW } }
  348. __declspec(naked) void WINAPI d_mmioOpenA() { _asm { jmp p_mmioOpenA } }
  349. __declspec(naked) void WINAPI d_mmioOpenW() { _asm { jmp p_mmioOpenW } }
  350. __declspec(naked) void WINAPI d_mmioRead() { _asm { jmp p_mmioRead } }
  351. __declspec(naked) void WINAPI d_mmioRenameA() { _asm { jmp p_mmioRenameA } }
  352. __declspec(naked) void WINAPI d_mmioRenameW() { _asm { jmp p_mmioRenameW } }
  353. __declspec(naked) void WINAPI d_mmioSeek() { _asm { jmp p_mmioSeek } }
  354. __declspec(naked) void WINAPI d_mmioSendMessage() { _asm { jmp p_mmioSendMessage } }
  355. __declspec(naked) void WINAPI d_mmioSetBuffer() { _asm { jmp p_mmioSetBuffer } }
  356. __declspec(naked) void WINAPI d_mmioSetInfo() { _asm { jmp p_mmioSetInfo } }
  357. __declspec(naked) void WINAPI d_mmioStringToFOURCCA() { _asm { jmp p_mmioStringToFOURCCA } }
  358. __declspec(naked) void WINAPI d_mmioStringToFOURCCW() { _asm { jmp p_mmioStringToFOURCCW } }
  359. __declspec(naked) void WINAPI d_mmioWrite() { _asm { jmp p_mmioWrite } }
  360. __declspec(naked) void WINAPI d_timeGetSystemTime() { _asm { jmp p_timeGetSystemTime } }
  361. __declspec(naked) void WINAPI d_waveInAddBuffer() { _asm { jmp p_waveInAddBuffer } }
  362. __declspec(naked) void WINAPI d_waveInClose() { _asm { jmp p_waveInClose } }
  363. __declspec(naked) void WINAPI d_waveInGetDevCapsA() { _asm { jmp p_waveInGetDevCapsA } }
  364. __declspec(naked) void WINAPI d_waveInGetDevCapsW() { _asm { jmp p_waveInGetDevCapsW } }
  365. __declspec(naked) void WINAPI d_waveInGetErrorTextA() { _asm { jmp p_waveInGetErrorTextA } }
  366. __declspec(naked) void WINAPI d_waveInGetErrorTextW() { _asm { jmp p_waveInGetErrorTextW } }
  367. __declspec(naked) void WINAPI d_waveInGetID() { _asm { jmp p_waveInGetID } }
  368. __declspec(naked) void WINAPI d_waveInGetPosition() { _asm { jmp p_waveInGetPosition } }
  369. __declspec(naked) void WINAPI d_waveInPrepareHeader() { _asm { jmp p_waveInPrepareHeader } }
  370. __declspec(naked) void WINAPI d_waveInReset() { _asm { jmp p_waveInReset } }
  371. __declspec(naked) void WINAPI d_waveInStart() { _asm { jmp p_waveInStart } }
  372. __declspec(naked) void WINAPI d_waveInStop() { _asm { jmp p_waveInStop } }
  373. __declspec(naked) void WINAPI d_waveInUnprepareHeader() { _asm { jmp p_waveInUnprepareHeader } }
  374. __declspec(naked) void WINAPI d_waveOutBreakLoop() { _asm { jmp p_waveOutBreakLoop } }
  375. __declspec(naked) void WINAPI d_waveOutGetDevCapsA() { _asm { jmp p_waveOutGetDevCapsA } }
  376. __declspec(naked) void WINAPI d_waveOutGetErrorTextA() { _asm { jmp p_waveOutGetErrorTextA } }
  377. __declspec(naked) void WINAPI d_waveOutGetErrorTextW() { _asm { jmp p_waveOutGetErrorTextW } }
  378. __declspec(naked) void WINAPI d_waveOutGetID() { _asm { jmp p_waveOutGetID } }
  379. __declspec(naked) void WINAPI d_waveOutGetPitch() { _asm { jmp p_waveOutGetPitch } }
  380. __declspec(naked) void WINAPI d_waveOutGetPlaybackRate() { _asm { jmp p_waveOutGetPlaybackRate } }
  381. __declspec(naked) void WINAPI d_waveOutGetPosition() { _asm { jmp p_waveOutGetPosition } }
  382. __declspec(naked) void WINAPI d_waveOutGetVolume() { _asm { jmp p_waveOutGetVolume } }
  383. __declspec(naked) void WINAPI d_waveOutPause() { _asm { jmp p_waveOutPause } }
  384. __declspec(naked) void WINAPI d_waveOutRestart() { _asm { jmp p_waveOutRestart } }
  385. __declspec(naked) void WINAPI d_waveOutSetPitch() { _asm { jmp p_waveOutSetPitch } }
  386. __declspec(naked) void WINAPI d_waveOutSetPlaybackRate() { _asm { jmp p_waveOutSetPlaybackRate } }
  387. __declspec(naked) void WINAPI d_waveOutSetVolume() { _asm { jmp p_waveOutSetVolume } }
  388. __declspec(naked) void WINAPI d_mciExecute() { _asm { jmp p_mciExecute } }
  389. __declspec(naked) void WINAPI d_mciGetErrorStringA() { _asm { jmp p_mciGetErrorStringA } }
  390. __declspec(naked) void WINAPI d_mciGetErrorStringW() { _asm { jmp p_mciGetErrorStringW } }
  391. __declspec(naked) void WINAPI d_mciSendCommandA() { _asm { jmp p_mciSendCommandA } }
  392. __declspec(naked) void WINAPI d_mciSendCommandW() { _asm { jmp p_mciSendCommandW } }
  393. __declspec(naked) void WINAPI d_mciFreeCommandResource() { _asm { jmp p_mciFreeCommandResource } }
  394. __declspec(naked) void WINAPI d_mciDriverNotify() { _asm { jmp p_mciDriverNotify } }
  395. __declspec(naked) void WINAPI d_mciDriverYield() { _asm { jmp p_mciDriverYield } }
  396. __declspec(naked) void WINAPI d_mciGetCreatorTask() { _asm { jmp p_mciGetCreatorTask } }
  397. __declspec(naked) void WINAPI d_mciGetDeviceIDA() { _asm { jmp p_mciGetDeviceIDA } }
  398. __declspec(naked) void WINAPI d_mciGetDeviceIDFromElementIDA() { _asm { jmp p_mciGetDeviceIDFromElementIDA } }
  399. __declspec(naked) void WINAPI d_mciGetDeviceIDFromElementIDW() { _asm { jmp p_mciGetDeviceIDFromElementIDW } }
  400. __declspec(naked) void WINAPI d_mciGetDeviceIDW() { _asm { jmp p_mciGetDeviceIDW } }
  401. __declspec(naked) void WINAPI d_mciGetDriverData() { _asm { jmp p_mciGetDriverData } }
  402. __declspec(naked) void WINAPI d_mciGetYieldProc() { _asm { jmp p_mciGetYieldProc } }
  403. __declspec(naked) void WINAPI d_mciSetDriverData() { _asm { jmp p_mciSetDriverData } }
  404. __declspec(naked) void WINAPI d_mciSetYieldProc() { _asm { jmp p_mciSetYieldProc } }
  405. __declspec(naked) void WINAPI d_PlaySoundA() { _asm { jmp p_PlaySoundA } }
  406. __declspec(naked) void WINAPI d_sndPlaySoundA() { _asm { jmp p_sndPlaySoundA } }
  407. __declspec(naked) void WINAPI d_sndPlaySoundW() { _asm { jmp p_sndPlaySoundW } }
  408. __declspec(naked) void WINAPI d_WOWAppExit() { _asm { jmp p_WOWAppExit } }
  409. __declspec(naked) void WINAPI d_mmsystemGetVersion() { _asm { jmp p_mmsystemGetVersion } }
  410. }
  411.  
  412. #pragma endregion
  413.  
  414. void LinkHook()
  415. {
  416. #pragma region REDIRECCIONES
  417. char buffer[MAX_PATH];
  418. ::GetSystemDirectoryA(buffer, MAX_PATH);
  419. strcat(buffer, "\\winmm.dll");
  420.  
  421. h_original = LoadLibraryA(buffer);
  422. p_timeGetTime = GetProcAddress(h_original, "timeGetTime");
  423. p_timeEndPeriod = GetProcAddress(h_original, "timeEndPeriod");
  424. p_timeBeginPeriod = GetProcAddress(h_original, "timeBeginPeriod");
  425. p_PlaySoundW = GetProcAddress(h_original, "PlaySoundW");
  426. p_timeGetDevCaps = GetProcAddress(h_original, "timeGetDevCaps");
  427. p_waveOutMessage = GetProcAddress(h_original, "waveOutMessage");
  428. p_waveInGetNumDevs = GetProcAddress(h_original, "waveInGetNumDevs");
  429. p_waveInMessage = GetProcAddress(h_original, "waveInMessage");
  430. p_waveOutGetNumDevs = GetProcAddress(h_original, "waveOutGetNumDevs");
  431. p_waveOutOpen = GetProcAddress(h_original, "waveOutOpen");
  432. p_midiOutMessage = GetProcAddress(h_original, "midiOutMessage");
  433. p_waveOutGetDevCapsW = GetProcAddress(h_original, "waveOutGetDevCapsW");
  434. p_DefDriverProc = GetProcAddress(h_original, "DefDriverProc");
  435. p_CloseDriver = GetProcAddress(h_original, "CloseDriver");
  436. p_GetDriverModuleHandle = GetProcAddress(h_original, "GetDriverModuleHandle");
  437. p_OpenDriver = GetProcAddress(h_original, "OpenDriver");
  438. p_midiOutGetDevCapsW = GetProcAddress(h_original, "midiOutGetDevCapsW");
  439. p_midiOutGetNumDevs = GetProcAddress(h_original, "midiOutGetNumDevs");
  440. p_timeKillEvent = GetProcAddress(h_original, "timeKillEvent");
  441. p_timeSetEvent = GetProcAddress(h_original, "timeSetEvent");
  442. p_waveOutUnprepareHeader = GetProcAddress(h_original, "waveOutUnprepareHeader");
  443. p_waveOutClose = GetProcAddress(h_original, "waveOutClose");
  444. p_DriverCallback = GetProcAddress(h_original, "DriverCallback");
  445. p_waveOutWrite = GetProcAddress(h_original, "waveOutWrite");
  446. p_waveOutPrepareHeader = GetProcAddress(h_original, "waveOutPrepareHeader");
  447. p_waveOutReset = GetProcAddress(h_original, "waveOutReset");
  448. p_waveInOpen = GetProcAddress(h_original, "waveInOpen");
  449. p_mciLoadCommandResource = GetProcAddress(h_original, "mciLoadCommandResource");
  450. p_mciSendStringW = GetProcAddress(h_original, "mciSendStringW");
  451. p_mciSendStringA = GetProcAddress(h_original, "mciSendStringA");
  452. p_NotifyCallbackData = GetProcAddress(h_original, "NotifyCallbackData");
  453. p_WOW32DriverCallback = GetProcAddress(h_original, "WOW32DriverCallback");
  454. p_WOW32ResolveMultiMediaHandle = GetProcAddress(h_original, "WOW32ResolveMultiMediaHandle");
  455. p_aux32Message = GetProcAddress(h_original, "aux32Message");
  456. p_joy32Message = GetProcAddress(h_original, "joy32Message");
  457. p_mid32Message = GetProcAddress(h_original, "mid32Message");
  458. p_mod32Message = GetProcAddress(h_original, "mod32Message");
  459. p_mxd32Message = GetProcAddress(h_original, "mxd32Message");
  460. p_tid32Message = GetProcAddress(h_original, "tid32Message");
  461. p_wid32Message = GetProcAddress(h_original, "wid32Message");
  462. p_wod32Message = GetProcAddress(h_original, "wod32Message");
  463. p_mci32Message = GetProcAddress(h_original, "mci32Message");
  464. p_DrvGetModuleHandle = GetProcAddress(h_original, "DrvGetModuleHandle");
  465. p_PlaySound = GetProcAddress(h_original, "PlaySound");
  466. p_Ordinal2 = GetProcAddress(h_original, "Ordinal2");
  467. p_SendDriverMessage = GetProcAddress(h_original, "SendDriverMessage");
  468. p_auxGetDevCapsA = GetProcAddress(h_original, "auxGetDevCapsA");
  469. p_auxGetDevCapsW = GetProcAddress(h_original, "auxGetDevCapsW");
  470. p_auxGetNumDevs = GetProcAddress(h_original, "auxGetNumDevs");
  471. p_auxGetVolume = GetProcAddress(h_original, "auxGetVolume");
  472. p_auxOutMessage = GetProcAddress(h_original, "auxOutMessage");
  473. p_auxSetVolume = GetProcAddress(h_original, "auxSetVolume");
  474. p_joyConfigChanged = GetProcAddress(h_original, "joyConfigChanged");
  475. p_joyGetDevCapsA = GetProcAddress(h_original, "joyGetDevCapsA");
  476. p_joyGetDevCapsW = GetProcAddress(h_original, "joyGetDevCapsW");
  477. p_joyGetNumDevs = GetProcAddress(h_original, "joyGetNumDevs");
  478. p_joyGetPosEx = GetProcAddress(h_original, "joyGetPosEx");
  479. p_joyGetPos = GetProcAddress(h_original, "joyGetPos");
  480. p_joyGetThreshold = GetProcAddress(h_original, "joyGetThreshold");
  481. p_joyReleaseCapture = GetProcAddress(h_original, "joyReleaseCapture");
  482. p_joySetCapture = GetProcAddress(h_original, "joySetCapture");
  483. p_joySetThreshold = GetProcAddress(h_original, "joySetThreshold");
  484. p_midiConnect = GetProcAddress(h_original, "midiConnect");
  485. p_midiDisconnect = GetProcAddress(h_original, "midiDisconnect");
  486. p_midiInAddBuffer = GetProcAddress(h_original, "midiInAddBuffer");
  487. p_midiInClose = GetProcAddress(h_original, "midiInClose");
  488. p_midiInGetDevCapsA = GetProcAddress(h_original, "midiInGetDevCapsA");
  489. p_midiInGetDevCapsW = GetProcAddress(h_original, "midiInGetDevCapsW");
  490. p_midiInGetErrorTextA = GetProcAddress(h_original, "midiInGetErrorTextA");
  491. p_midiInGetErrorTextW = GetProcAddress(h_original, "midiInGetErrorTextW");
  492. p_midiInGetID = GetProcAddress(h_original, "midiInGetID");
  493. p_midiInGetNumDevs = GetProcAddress(h_original, "midiInGetNumDevs");
  494. p_midiInMessage = GetProcAddress(h_original, "midiInMessage");
  495. p_midiInOpen = GetProcAddress(h_original, "midiInOpen");
  496. p_midiInPrepareHeader = GetProcAddress(h_original, "midiInPrepareHeader");
  497. p_midiInReset = GetProcAddress(h_original, "midiInReset");
  498. p_midiInStart = GetProcAddress(h_original, "midiInStart");
  499. p_midiInStop = GetProcAddress(h_original, "midiInStop");
  500. p_midiInUnprepareHeader = GetProcAddress(h_original, "midiInUnprepareHeader");
  501. p_midiOutCacheDrumPatches = GetProcAddress(h_original, "midiOutCacheDrumPatches");
  502. p_midiOutCachePatches = GetProcAddress(h_original, "midiOutCachePatches");
  503. p_midiOutClose = GetProcAddress(h_original, "midiOutClose");
  504. p_midiOutGetDevCapsA = GetProcAddress(h_original, "midiOutGetDevCapsA");
  505. p_midiOutGetErrorTextA = GetProcAddress(h_original, "midiOutGetErrorTextA");
  506. p_midiOutGetErrorTextW = GetProcAddress(h_original, "midiOutGetErrorTextW");
  507. p_midiOutGetID = GetProcAddress(h_original, "midiOutGetID");
  508. p_midiOutGetVolume = GetProcAddress(h_original, "midiOutGetVolume");
  509. p_midiOutLongMsg = GetProcAddress(h_original, "midiOutLongMsg");
  510. p_midiOutOpen = GetProcAddress(h_original, "midiOutOpen");
  511. p_midiOutPrepareHeader = GetProcAddress(h_original, "midiOutPrepareHeader");
  512. p_midiOutReset = GetProcAddress(h_original, "midiOutReset");
  513. p_midiOutSetVolume = GetProcAddress(h_original, "midiOutSetVolume");
  514. p_midiOutShortMsg = GetProcAddress(h_original, "midiOutShortMsg");
  515. p_midiOutUnprepareHeader = GetProcAddress(h_original, "midiOutUnprepareHeader");
  516. p_midiStreamClose = GetProcAddress(h_original, "midiStreamClose");
  517. p_midiStreamOpen = GetProcAddress(h_original, "midiStreamOpen");
  518. p_midiStreamOut = GetProcAddress(h_original, "midiStreamOut");
  519. p_midiStreamPause = GetProcAddress(h_original, "midiStreamPause");
  520. p_midiStreamPosition = GetProcAddress(h_original, "midiStreamPosition");
  521. p_midiStreamProperty = GetProcAddress(h_original, "midiStreamProperty");
  522. p_midiStreamRestart = GetProcAddress(h_original, "midiStreamRestart");
  523. p_midiStreamStop = GetProcAddress(h_original, "midiStreamStop");
  524. p_mixerClose = GetProcAddress(h_original, "mixerClose");
  525. p_mixerGetControlDetailsA = GetProcAddress(h_original, "mixerGetControlDetailsA");
  526. p_mixerGetControlDetailsW = GetProcAddress(h_original, "mixerGetControlDetailsW");
  527. p_mixerGetDevCapsA = GetProcAddress(h_original, "mixerGetDevCapsA");
  528. p_mixerGetDevCapsW = GetProcAddress(h_original, "mixerGetDevCapsW");
  529. p_mixerGetID = GetProcAddress(h_original, "mixerGetID");
  530. p_mixerGetLineControlsA = GetProcAddress(h_original, "mixerGetLineControlsA");
  531. p_mixerGetLineControlsW = GetProcAddress(h_original, "mixerGetLineControlsW");
  532. p_mixerGetLineInfoA = GetProcAddress(h_original, "mixerGetLineInfoA");
  533. p_mixerGetLineInfoW = GetProcAddress(h_original, "mixerGetLineInfoW");
  534. p_mixerGetNumDevs = GetProcAddress(h_original, "mixerGetNumDevs");
  535. p_mixerMessage = GetProcAddress(h_original, "mixerMessage");
  536. p_mixerOpen = GetProcAddress(h_original, "mixerOpen");
  537. p_mixerSetControlDetails = GetProcAddress(h_original, "mixerSetControlDetails");
  538. p_mmDrvInstall = GetProcAddress(h_original, "mmDrvInstall");
  539. p_mmGetCurrentTask = GetProcAddress(h_original, "mmGetCurrentTask");
  540. p_mmTaskBlock = GetProcAddress(h_original, "mmTaskBlock");
  541. p_mmTaskCreate = GetProcAddress(h_original, "mmTaskCreate");
  542. p_mmTaskSignal = GetProcAddress(h_original, "mmTaskSignal");
  543. p_mmTaskYield = GetProcAddress(h_original, "mmTaskYield");
  544. p_mmioAdvance = GetProcAddress(h_original, "mmioAdvance");
  545. p_mmioAscend = GetProcAddress(h_original, "mmioAscend");
  546. p_mmioClose = GetProcAddress(h_original, "mmioClose");
  547. p_mmioCreateChunk = GetProcAddress(h_original, "mmioCreateChunk");
  548. p_mmioDescend = GetProcAddress(h_original, "mmioDescend");
  549. p_mmioFlush = GetProcAddress(h_original, "mmioFlush");
  550. p_mmioGetInfo = GetProcAddress(h_original, "mmioGetInfo");
  551. p_mmioInstallIOProcA = GetProcAddress(h_original, "mmioInstallIOProcA");
  552. p_mmioInstallIOProcW = GetProcAddress(h_original, "mmioInstallIOProcW");
  553. p_mmioOpenA = GetProcAddress(h_original, "mmioOpenA");
  554. p_mmioOpenW = GetProcAddress(h_original, "mmioOpenW");
  555. p_mmioRead = GetProcAddress(h_original, "mmioRead");
  556. p_mmioRenameA = GetProcAddress(h_original, "mmioRenameA");
  557. p_mmioRenameW = GetProcAddress(h_original, "mmioRenameW");
  558. p_mmioSeek = GetProcAddress(h_original, "mmioSeek");
  559. p_mmioSendMessage = GetProcAddress(h_original, "mmioSendMessage");
  560. p_mmioSetBuffer = GetProcAddress(h_original, "mmioSetBuffer");
  561. p_mmioSetInfo = GetProcAddress(h_original, "mmioSetInfo");
  562. p_mmioStringToFOURCCA = GetProcAddress(h_original, "mmioStringToFOURCCA");
  563. p_mmioStringToFOURCCW = GetProcAddress(h_original, "mmioStringToFOURCCW");
  564. p_mmioWrite = GetProcAddress(h_original, "mmioWrite");
  565. p_timeGetSystemTime = GetProcAddress(h_original, "timeGetSystemTime");
  566. p_waveInAddBuffer = GetProcAddress(h_original, "waveInAddBuffer");
  567. p_waveInClose = GetProcAddress(h_original, "waveInClose");
  568. p_waveInGetDevCapsA = GetProcAddress(h_original, "waveInGetDevCapsA");
  569. p_waveInGetDevCapsW = GetProcAddress(h_original, "waveInGetDevCapsW");
  570. p_waveInGetErrorTextA = GetProcAddress(h_original, "waveInGetErrorTextA");
  571. p_waveInGetErrorTextW = GetProcAddress(h_original, "waveInGetErrorTextW");
  572. p_waveInGetID = GetProcAddress(h_original, "waveInGetID");
  573. p_waveInGetPosition = GetProcAddress(h_original, "waveInGetPosition");
  574. p_waveInPrepareHeader = GetProcAddress(h_original, "waveInPrepareHeader");
  575. p_waveInReset = GetProcAddress(h_original, "waveInReset");
  576. p_waveInStart = GetProcAddress(h_original, "waveInStart");
  577. p_waveInStop = GetProcAddress(h_original, "waveInStop");
  578. p_waveInUnprepareHeader = GetProcAddress(h_original, "waveInUnprepareHeader");
  579. p_waveOutBreakLoop = GetProcAddress(h_original, "waveOutBreakLoop");
  580. p_waveOutGetDevCapsA = GetProcAddress(h_original, "waveOutGetDevCapsA");
  581. p_waveOutGetErrorTextA = GetProcAddress(h_original, "waveOutGetErrorTextA");
  582. p_waveOutGetErrorTextW = GetProcAddress(h_original, "waveOutGetErrorTextW");
  583. p_waveOutGetID = GetProcAddress(h_original, "waveOutGetID");
  584. p_waveOutGetPitch = GetProcAddress(h_original, "waveOutGetPitch");
  585. p_waveOutGetPlaybackRate = GetProcAddress(h_original, "waveOutGetPlaybackRate");
  586. p_waveOutGetPosition = GetProcAddress(h_original, "waveOutGetPosition");
  587. p_waveOutGetVolume = GetProcAddress(h_original, "waveOutGetVolume");
  588. p_waveOutPause = GetProcAddress(h_original, "waveOutPause");
  589. p_waveOutRestart = GetProcAddress(h_original, "waveOutRestart");
  590. p_waveOutSetPitch = GetProcAddress(h_original, "waveOutSetPitch");
  591. p_waveOutSetPlaybackRate = GetProcAddress(h_original, "waveOutSetPlaybackRate");
  592. p_waveOutSetVolume = GetProcAddress(h_original, "waveOutSetVolume");
  593. p_mciExecute = GetProcAddress(h_original, "mciExecute");
  594. p_mciGetErrorStringA = GetProcAddress(h_original, "mciGetErrorStringA");
  595. p_mciGetErrorStringW = GetProcAddress(h_original, "mciGetErrorStringW");
  596. p_mciSendCommandA = GetProcAddress(h_original, "mciSendCommandA");
  597. p_mciSendCommandW = GetProcAddress(h_original, "mciSendCommandW");
  598. p_mciFreeCommandResource = GetProcAddress(h_original, "mciFreeCommandResource");
  599. p_mciDriverNotify = GetProcAddress(h_original, "mciDriverNotify");
  600. p_mciDriverYield = GetProcAddress(h_original, "mciDriverYield");
  601. p_mciGetCreatorTask = GetProcAddress(h_original, "mciGetCreatorTask");
  602. p_mciGetDeviceIDA = GetProcAddress(h_original, "mciGetDeviceIDA");
  603. p_mciGetDeviceIDFromElementIDA = GetProcAddress(h_original, "mciGetDeviceIDFromElementIDA");
  604. p_mciGetDeviceIDFromElementIDW = GetProcAddress(h_original, "mciGetDeviceIDFromElementIDW");
  605. p_mciGetDeviceIDW = GetProcAddress(h_original, "mciGetDeviceIDW");
  606. p_mciGetDriverData = GetProcAddress(h_original, "mciGetDriverData");
  607. p_mciGetYieldProc = GetProcAddress(h_original, "mciGetYieldProc");
  608. p_mciSetDriverData = GetProcAddress(h_original, "mciSetDriverData");
  609. p_mciSetYieldProc = GetProcAddress(h_original, "mciSetYieldProc");
  610. p_PlaySoundA = GetProcAddress(h_original, "PlaySoundA");
  611. p_sndPlaySoundA = GetProcAddress(h_original, "sndPlaySoundA");
  612. p_sndPlaySoundW = GetProcAddress(h_original, "sndPlaySoundW");
  613. p_WOWAppExit = GetProcAddress(h_original, "WOWAppExit");
  614. p_mmsystemGetVersion = GetProcAddress(h_original, "mmsystemGetVersion");
  615. #pragma endregion
  616. }
  617.  
  618. #define Assert(x)
  619.  
  620.  
  621. class CConsole
  622. {
  623. public:
  624. CConsole(void);
  625. ~CConsole(void);
  626.  
  627. void Write(const char* fmt, ...);
  628.  
  629. inline HANDLE GetHandle(void) { return m_hOutput; }
  630. void SetConsoleTextAttribute(WORD wAttributes) { ::SetConsoleTextAttribute(m_hOutput, wAttributes); }
  631. private:
  632. HANDLE m_hOutput;
  633. FILE m_fOldStdin,
  634. m_fOldStdout;
  635. bool m_bSuccessful;
  636. };
  637.  
  638.  
  639. static BOOL WINAPI MyConsoleCtrlHandler(DWORD dwCtrlEvent) { return dwCtrlEvent == CTRL_C_EVENT; }
  640.  
  641.  
  642. CConsole::CConsole()
  643. {
  644. if (AllocConsole())
  645. m_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  646. else
  647. m_hOutput = INVALID_HANDLE_VALUE;
  648.  
  649. if (m_hOutput == INVALID_HANDLE_VALUE)
  650. return;
  651.  
  652. SetConsoleCtrlHandler(MyConsoleCtrlHandler, TRUE);
  653. RemoveMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
  654. const int in = _open_osfhandle(INT_PTR(GetStdHandle(STD_INPUT_HANDLE)), 0x4000);
  655. const int out = _open_osfhandle(INT_PTR(GetStdHandle(STD_OUTPUT_HANDLE)), 0x4000);
  656. m_fOldStdin = *stdin;
  657. m_fOldStdout = *stdout;
  658.  
  659. *stdin = *_fdopen(in, "r");
  660. *stdout = *_fdopen(out, "w");
  661.  
  662. SetConsoleTextAttribute(10);
  663.  
  664. m_bSuccessful = true;
  665. }
  666.  
  667.  
  668. CConsole::~CConsole()
  669. {
  670. if (m_bSuccessful)
  671. {
  672. fclose(stdout);
  673. fclose(stdin);
  674. *stdout = m_fOldStdout;
  675. *stdin = m_fOldStdin;
  676. SetConsoleCtrlHandler(MyConsoleCtrlHandler, FALSE);
  677. FreeConsole();
  678. }
  679. }
  680.  
  681. #define VSNPRINTF( buffer, count, format, argptr ) \
  682. { \
  683. int iResult = vsnprintf ( buffer, count, format, argptr ); \
  684. if( iResult == -1 || iResult == (count) ) \
  685. (buffer)[(count)-1] = 0; \
  686. }
  687.  
  688. void CConsole::Write(const char* fmt, ...)
  689. {
  690. if (m_hOutput == INVALID_HANDLE_VALUE)
  691. return;
  692.  
  693. char szBuffer[1024];
  694. va_list ap;
  695. va_start(ap, fmt);
  696. VSNPRINTF(szBuffer, 1024, fmt, ap);
  697. va_end(ap);
  698.  
  699.  
  700. DWORD dwNumWritten;
  701. WriteConsole(m_hOutput, szBuffer, strlen(szBuffer), &dwNumWritten, NULL);
  702. }
  703.  
  704. #pragma pack(push, 1)
  705. struct Vector
  706. {
  707. float x, y, z;
  708. };
  709.  
  710. struct matrix3x4_t
  711. {
  712. matrix3x4_t() {}
  713. matrix3x4_t(
  714. float m00, float m01, float m02, float m03,
  715. float m10, float m11, float m12, float m13,
  716. float m20, float m21, float m22, float m23)
  717. {
  718. m_flMatVal[0][0] = m00; m_flMatVal[0][1] = m01; m_flMatVal[0][2] = m02; m_flMatVal[0][3] = m03;
  719. m_flMatVal[1][0] = m10; m_flMatVal[1][1] = m11; m_flMatVal[1][2] = m12; m_flMatVal[1][3] = m13;
  720. m_flMatVal[2][0] = m20; m_flMatVal[2][1] = m21; m_flMatVal[2][2] = m22; m_flMatVal[2][3] = m23;
  721. }
  722.  
  723. //-----------------------------------------------------------------------------
  724. // Creates a matrix where the X axis = forward
  725. // the Y axis = left, and the Z axis = up
  726. //-----------------------------------------------------------------------------
  727. void Init(const Vector& xAxis, const Vector& yAxis, const Vector& zAxis, const Vector &vecOrigin)
  728. {
  729. m_flMatVal[0][0] = xAxis.x; m_flMatVal[0][1] = yAxis.x; m_flMatVal[0][2] = zAxis.x; m_flMatVal[0][3] = vecOrigin.x;
  730. m_flMatVal[1][0] = xAxis.y; m_flMatVal[1][1] = yAxis.y; m_flMatVal[1][2] = zAxis.y; m_flMatVal[1][3] = vecOrigin.y;
  731. m_flMatVal[2][0] = xAxis.z; m_flMatVal[2][1] = yAxis.z; m_flMatVal[2][2] = zAxis.z; m_flMatVal[2][3] = vecOrigin.z;
  732. }
  733.  
  734. //-----------------------------------------------------------------------------
  735. // Creates a matrix where the X axis = forward
  736. // the Y axis = left, and the Z axis = up
  737. //-----------------------------------------------------------------------------
  738. matrix3x4_t(const Vector& xAxis, const Vector& yAxis, const Vector& zAxis, const Vector &vecOrigin)
  739. {
  740. Init(xAxis, yAxis, zAxis, vecOrigin);
  741. }
  742.  
  743.  
  744. float *operator[](int i) { Assert((i >= 0) && (i < 3)); return m_flMatVal[i]; }
  745. const float *operator[](int i) const { Assert((i >= 0) && (i < 3)); return m_flMatVal[i]; }
  746. float *Base() { return &m_flMatVal[0][0]; }
  747. const float *Base() const { return &m_flMatVal[0][0]; }
  748.  
  749. float m_flMatVal[3][4];
  750. };
  751. //char pad_0x007C[0x388]; //0x007C
  752. class Character // 0x0404
  753. {
  754. public:
  755. char pad_0x0000[0x3C]; //0x0000
  756. matrix3x4_t m_playerMatrix; //0x003C //to check
  757. char pad_0x007C[0x228]; //0x007C
  758. DWORD pWalkerLocoAction; // 2A4
  759. DWORD pJumpAction; // 2A8
  760. char pad_0x02AC[0x158]; // 2AC
  761. };
  762.  
  763. class Avatar
  764. {
  765. public:
  766. DWORD vftable; // 0
  767. BYTE __pad__[44]; // 4
  768. Character *pCharacter; // 48
  769. };
  770.  
  771. class CharacterManager
  772. {
  773. public:
  774. char _pad_0000_[0xC0]; //0x0000
  775. Character* m_pPlayer; //0x00C0
  776. char _pad_00C4_[0xFC]; //0x00C4
  777.  
  778. public:
  779. static CharacterManager * Singleton() { return *(CharacterManager**)0x6C8430; }
  780. static Character* GetPlayer() { return (Singleton() != NULL ? Singleton()->m_pPlayer : NULL); }
  781. };
  782.  
  783. class AvatarManager
  784. {
  785. public:
  786. static AvatarManager * Singleton() { return *(AvatarManager**)0x6C84A4; }
  787. static Avatar* GetAvatar(DWORD id) { return ((id < Singleton()->nAvatarCount) ? Singleton()->pAvatars[id] : NULL); }
  788.  
  789. private:
  790. DWORD vftable; // 0
  791. Avatar *pAvatars[4]; // 4
  792. DWORD nAvatarCount; // 20
  793. };
  794. #pragma pack(pop)
  795.  
  796. void MakeJMP(BYTE *pAddress, DWORD dwJumpTo, DWORD dwLen)
  797. {
  798. DWORD dwOldProtect, dwBkup, dwRelAddr;
  799.  
  800. VirtualProtect(pAddress, dwLen, PAGE_EXECUTE_READWRITE, &dwOldProtect);
  801.  
  802. dwRelAddr = (DWORD)(dwJumpTo - (DWORD)pAddress) - 5;
  803.  
  804. *pAddress = 0xE9;
  805.  
  806. *((DWORD *)(pAddress + 0x1)) = dwRelAddr;
  807.  
  808.  
  809. for (DWORD x = 0x5; x < dwLen; x++) *(pAddress + x) = 0x90;
  810.  
  811. VirtualProtect(pAddress, dwLen, dwOldProtect, &dwBkup);
  812.  
  813. return;
  814.  
  815. }
  816. CConsole console;
  817. void xdd(Character* pChar)
  818. {
  819. if (pChar == CharacterManager::GetPlayer())
  820. {
  821. ///console.Write("pChar = local player.\n");
  822. }
  823.  
  824. }
  825. /*.text:004F5880 55 push ebp
  826. .text:004F5881 56 push esi
  827. .text:004F5882 57 push edi
  828. .text:004F5883 8D 6B 3C lea ebp, [ebx+3Ch]
  829.  
  830. .text:004F5886 8B F8 mov edi, eax
  831. .text:004F5888 B9 06 00 00 00 mov ecx, 6
  832. .text:004F588D 8B F5 mov esi, ebp
  833. .text:004F588F F3 A5 rep movsd
  834.  
  835. */
  836.  
  837. DWORD dwFunc = 0x004F5880;
  838. DWORD dwJumpBack = dwFunc + 17;
  839. __declspec(naked) void __stdcall work_please()
  840. {
  841. static Character *s_pCharacter = NULL;
  842. __asm
  843. {
  844. push ebp
  845. push esi
  846. push edi
  847. lea ebp, [ebx + 3Ch]
  848. mov edi, eax
  849. mov ecx, 6
  850. mov esi, ebp
  851. rep movsd
  852. }
  853. _asm
  854. {
  855. mov s_pCharacter, ebx
  856. pushad
  857. }
  858.  
  859. xdd(s_pCharacter);
  860.  
  861. _asm
  862. {
  863. popad
  864. jmp dwJumpBack
  865. }
  866.  
  867. }
  868.  
  869. /*DWORD dwFunction = ;
  870. memset((void*)dwFunction, 0xC3, 1);
  871. //int __usercall HandleCharacterPosition@<eax>(void *a1@<eax>, int pPlayer@<ebx>)
  872. */
  873.  
  874. bool bAirbreak = false;
  875.  
  876. DWORD Thread_Hook()
  877. {
  878.  
  879. //int __cdecl sub_4412A0(const char *a1)
  880.  
  881. /*typedef int(__cdecl* RunCommand)(const char*);
  882. //Skips the initial movies of the game (QUICK LOAD)
  883. reinterpret_cast<RunCommand>(0x4412A0)("SKIPMOVIE");
  884. //Removes Trafic
  885. reinterpret_cast<RunCommand>(0x4412A0)("NOTRAFFIC");
  886. //Removes Pedestians
  887. reinterpret_cast<RunCommand>(0x4412A0)("NOPEDS");
  888. //Remove Tutorials
  889. reinterpret_cast<RunCommand>(0x4412A0)("NOTUTORIAL");*/
  890.  
  891. /*reinterpret_cast<RunCommand>(0x4412A0)("NODIALOG");
  892.  
  893. reinterpret_cast<RunCommand>(0x4412A0)("NOEFFECTS");
  894.  
  895. //Removes Hud (Radar and icons shit)
  896. reinterpret_cast<RunCommand>(0x4412A0)("NOHUD");*/
  897.  
  898.  
  899. //Shows Speed of the car over the Radar
  900. //reinterpret_cast<RunCommand>(0x4412A0)("SPEEDOMETER");
  901.  
  902. //reinterpret_cast<RunCommand>(0x4412A0)("DEBUGBV");
  903. //reinterpret_cast<RunCommand>(0x4412A0)("NOFRUITLESS");
  904.  
  905.  
  906.  
  907. //int __usercall sub_44EAE0@<eax>(int result@<eax>) //&MissionScriptLoader::`vftable';
  908.  
  909. /*static RunCommand pfnRunCommand = reinterpret_cast<RunCommand>(0x4412A0);
  910. pfnRunCommand("cmd");*/
  911.  
  912. //int sub_453C70() //AddPed?
  913.  
  914. CharacterManager* pMgr = CharacterManager::Singleton();
  915. console.Write("pMGr: 0x%x", pMgr);
  916.  
  917.  
  918. MakeJMP((BYTE*)dwFunc, (DWORD)work_please, 17);
  919.  
  920. DWORD dwSuperCam = 0x6C902C;
  921. /* int result; // eax@3
  922.  
  923. if ( index >= 4 || index < 0 )
  924. result = 0;
  925. else
  926. result = a2 + 500 * index;
  927. return result;
  928. }*/
  929. while (true)
  930. {
  931. DWORD* pSuperCam = (DWORD*)(*(DWORD**)dwSuperCam + 500 * 0);
  932.  
  933. CharacterManager* pMgr = CharacterManager::Singleton();
  934. if (pMgr)
  935. {
  936. auto plyr = pMgr->GetPlayer();
  937. if (plyr && ((GetAsyncKeyState(VK_LSHIFT) & 1)))
  938. {
  939. if (pSuperCam != 0)
  940. {
  941. DWORD *pLocal = *(DWORD**)((DWORD)pSuperCam + 0x8C);
  942. if (pLocal)
  943. {
  944. console.Write("pLocal: 0x%X\n", pLocal);
  945. *(float*)((DWORD)pLocal + 0x6C) = 15.f;
  946. }
  947.  
  948. }
  949.  
  950. }
  951. }
  952.  
  953.  
  954. if ((GetAsyncKeyState(VK_RSHIFT) & 1)) {
  955. if (bAirbreak) {
  956. bAirbreak = false;
  957. console.Write("AirBreak [OFF]");
  958. }
  959. else {
  960. bAirbreak = true;
  961. console.Write("AirBreak [ON]");
  962. }
  963.  
  964. }
  965.  
  966. Character *pPlayer = CharacterManager::GetPlayer();
  967.  
  968. if (bAirbreak && pPlayer) {
  969.  
  970. //DWORD *BaseAddress = (DWORD*)GetModuleHandle(NULL);
  971.  
  972.  
  973.  
  974. /*DWORD dwBaseAddr = *(DWORD *)0x6CF68C;
  975. dwBaseAddr = *(DWORD *)(dwBaseAddr + 0xC0);
  976. dwBaseAddr += 0x40;
  977.  
  978. float *Pos = (float *)dwBaseAddr;*/
  979.  
  980. //console.Write("Pos: 0x%08X\nX: %0.2f, \nY: %0.2f, \nZ: %0.2f\n", Pos, Pos[0], Pos[1], Pos[2]);
  981.  
  982. //typedef __int32 (__cdecl* scrSetMaxTraffic)(int a1, int a2);
  983.  
  984.  
  985.  
  986. if ((GetAsyncKeyState(VK_UP))) { }
  987. else if ((GetAsyncKeyState(VK_DOWN))) { }
  988. else if ((GetAsyncKeyState(VK_RIGHT))) { }
  989. else if ((GetAsyncKeyState(VK_LEFT))) { }
  990.  
  991.  
  992. float *Pos = (float *)&pPlayer->m_playerMatrix.m_flMatVal[0][0];
  993. float NewPos[3] = { Pos[0], Pos[1], Pos[2] };
  994.  
  995. if ((GetAsyncKeyState(VK_UP))) { NewPos[1] += 1.f; }
  996. else if ((GetAsyncKeyState(VK_DOWN))) { NewPos[1] -= 1.f; }
  997. else if ((GetAsyncKeyState(VK_RIGHT))) { NewPos[0] -= 1.f; }
  998. else if ((GetAsyncKeyState(VK_LEFT))) { NewPos[0] -= 1.f; }
  999.  
  1000. float *pNewPos = (float *)&NewPos[0];
  1001.  
  1002. static DWORD dwSetCharPosFunc = 0x40A880;
  1003.  
  1004. _asm
  1005. {
  1006. pushad
  1007. mov eax, pNewPos
  1008. mov esi, pPlayer
  1009. call dwSetCharPosFunc
  1010. popad
  1011. }
  1012. }
  1013.  
  1014. }
  1015.  
  1016. //MessageBoxA(NULL, "", "", MB_OK);
  1017. return 0;
  1018. }
  1019.  
  1020. //int __userpurge sub_462EF0@<eax>(int result@<eax>, int a2@<ecx>, float a3)
  1021.  
  1022.  
  1023.  
  1024. BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  1025. {
  1026.  
  1027. switch (ul_reason_for_call)
  1028. {
  1029. case DLL_PROCESS_ATTACH:
  1030. {
  1031. g_hModule = hModule;
  1032.  
  1033. LinkHook();
  1034. CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Thread_Hook, NULL, NULL, NULL);
  1035. }
  1036. break;
  1037. case DLL_THREAD_ATTACH:
  1038. break;
  1039. case DLL_THREAD_DETACH:
  1040. break;
  1041. case DLL_PROCESS_DETACH:
  1042. break;
  1043. }
  1044. return TRUE;
  1045. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement