├── code
├── ADE32.cpp
├── ADE32.h
├── CDetour.cpp
├── CDetour.h
├── dllmain.cpp
├── input_proxy.cpp
├── patches.cpp
└── ut3proxy.def
├── ut3proxy.sln
├── ut3proxy.vcxproj
└── ut3proxy.vcxproj.filters
/code/ADE32.cpp:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | PROJECT: m0d_s0beit_sa
4 | LICENSE: See LICENSE in the top level directory
5 | COPYRIGHT: Copyright 2007, 2008, 2009, 2010 we_sux
6 |
7 | m0d_s0beit_sa is available from http://code.google.com/p/m0d-s0beit-sa/
8 |
9 | m0d_s0beit_sa is free software: you can redistribute it and/or modify
10 | it under the terms of the GNU General Public License as published by
11 | the Free Software Foundation, either version 3 of the License, or
12 | (at your option) any later version.
13 |
14 | m0d_s0beit_sa is distributed in the hope that it will be useful,
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 | GNU General Public License for more details.
18 |
19 | You should have received a copy of the GNU General Public License
20 | along with m0d_s0beit_sa. If not, see .
21 |
22 | */
23 |
24 | #include
25 | #include "ADE32.h"
26 | // ADE32 version 2.02c -- C edition
27 |
28 | #define WIN32_LEAN_AND_MEAN
29 | #define WIN32_EXTRA_LEAN
30 |
31 | DWORD ade32_table[512] = {
32 | /* 00 */ C_MODRM,
33 | /* 01 */ C_MODRM,
34 | /* 02 */ C_MODRM,
35 | /* 03 */ C_MODRM,
36 | /* 04 */ C_DATA1,
37 | /* 05 */ C_DATA66,
38 | /* 06 */ C_BAD,
39 | /* 07 */ C_BAD,
40 | /* 08 */ C_MODRM,
41 | /* 09 */ C_MODRM,
42 | /* 0A */ C_MODRM,
43 | /* 0B */ C_MODRM,
44 | /* 0C */ C_DATA1,
45 | /* 0D */ C_DATA66,
46 | /* 0E */ C_BAD,
47 | /* 0F */ C_OPCODE2,
48 | /* 10 */ C_MODRM+C_BAD,
49 | /* 11 */ C_MODRM,
50 | /* 12 */ C_MODRM+C_BAD,
51 | /* 13 */ C_MODRM,
52 | /* 14 */ C_DATA1+C_BAD,
53 | /* 15 */ C_DATA66+C_BAD,
54 | /* 16 */ C_BAD,
55 | /* 17 */ C_BAD,
56 | /* 18 */ C_MODRM+C_BAD,
57 | /* 19 */ C_MODRM,
58 | /* 1A */ C_MODRM,
59 | /* 1B */ C_MODRM,
60 | /* 1C */ C_DATA1+C_BAD,
61 | /* 1D */ C_DATA66+C_BAD,
62 | /* 1E */ C_BAD,
63 | /* 1F */ C_BAD,
64 | /* 20 */ C_MODRM,
65 | /* 21 */ C_MODRM,
66 | /* 22 */ C_MODRM,
67 | /* 23 */ C_MODRM,
68 | /* 24 */ C_DATA1,
69 | /* 25 */ C_DATA66,
70 | /* 26 */ C_SEG+C_BAD,
71 | /* 27 */ C_BAD,
72 | /* 28 */ C_MODRM,
73 | /* 29 */ C_MODRM,
74 | /* 2A */ C_MODRM,
75 | /* 2B */ C_MODRM,
76 | /* 2C */ C_DATA1,
77 | /* 2D */ C_DATA66,
78 | /* 2E */ C_SEG+C_BAD,
79 | /* 2F */ C_BAD,
80 | /* 30 */ C_MODRM,
81 | /* 31 */ C_MODRM,
82 | /* 32 */ C_MODRM,
83 | /* 33 */ C_MODRM,
84 | /* 34 */ C_DATA1,
85 | /* 35 */ C_DATA66,
86 | /* 36 */ C_SEG+C_BAD,
87 | /* 37 */ C_BAD,
88 | /* 38 */ C_MODRM,
89 | /* 39 */ C_MODRM,
90 | /* 3A */ C_MODRM,
91 | /* 3B */ C_MODRM,
92 | /* 3C */ C_DATA1,
93 | /* 3D */ C_DATA66,
94 | /* 3E */ C_SEG+C_BAD,
95 | /* 3F */ C_BAD,
96 | /* 40 */ 0,
97 | /* 41 */ 0,
98 | /* 42 */ 0,
99 | /* 43 */ 0,
100 | /* 44 */ C_BAD,
101 | /* 45 */ 0,
102 | /* 46 */ 0,
103 | /* 47 */ 0,
104 | /* 48 */ 0,
105 | /* 49 */ 0,
106 | /* 4A */ 0,
107 | /* 4B */ 0,
108 | /* 4C */ C_BAD,
109 | /* 4D */ 0,
110 | /* 4E */ 0,
111 | /* 4F */ 0,
112 | /* 50 */ 0,
113 | /* 51 */ 0,
114 | /* 52 */ 0,
115 | /* 53 */ 0,
116 | /* 54 */ 0,
117 | /* 55 */ 0,
118 | /* 56 */ 0,
119 | /* 57 */ 0,
120 | /* 58 */ 0,
121 | /* 59 */ 0,
122 | /* 5A */ 0,
123 | /* 5B */ 0,
124 | /* 5C */ C_BAD,
125 | /* 5D */ 0,
126 | /* 5E */ 0,
127 | /* 5F */ 0,
128 | /* 60 */ C_BAD,
129 | /* 61 */ C_BAD,
130 | /* 62 */ C_MODRM+C_BAD,
131 | /* 63 */ C_MODRM+C_BAD,
132 | /* 64 */ C_SEG,
133 | /* 65 */ C_SEG+C_BAD,
134 | /* 66 */ C_66,
135 | /* 67 */ C_67,
136 | /* 68 */ C_DATA66,
137 | /* 69 */ C_MODRM+C_DATA66,
138 | /* 6A */ C_DATA1,
139 | /* 6B */ C_MODRM+C_DATA1,
140 | /* 6C */ C_BAD,
141 | /* 6D */ C_BAD,
142 | /* 6E */ C_BAD,
143 | /* 6F */ C_BAD,
144 | /* 70 */ C_DATA1+C_REL+C_BAD,
145 | /* 71 */ C_DATA1+C_REL+C_BAD,
146 | /* 72 */ C_DATA1+C_REL,
147 | /* 73 */ C_DATA1+C_REL,
148 | /* 74 */ C_DATA1+C_REL,
149 | /* 75 */ C_DATA1+C_REL,
150 | /* 76 */ C_DATA1+C_REL,
151 | /* 77 */ C_DATA1+C_REL,
152 | /* 78 */ C_DATA1+C_REL,
153 | /* 79 */ C_DATA1+C_REL,
154 | /* 7A */ C_DATA1+C_REL+C_BAD,
155 | /* 7B */ C_DATA1+C_REL+C_BAD,
156 | /* 7C */ C_DATA1+C_REL,
157 | /* 7D */ C_DATA1+C_REL,
158 | /* 7E */ C_DATA1+C_REL,
159 | /* 7F */ C_DATA1+C_REL,
160 | /* 80 */ C_MODRM+C_DATA1,
161 | /* 81 */ C_MODRM+C_DATA66,
162 | /* 82 */ C_MODRM+C_DATA1+C_BAD,
163 | /* 83 */ C_MODRM+C_DATA1,
164 | /* 84 */ C_MODRM,
165 | /* 85 */ C_MODRM,
166 | /* 86 */ C_MODRM,
167 | /* 87 */ C_MODRM,
168 | /* 88 */ C_MODRM,
169 | /* 89 */ C_MODRM,
170 | /* 8A */ C_MODRM,
171 | /* 8B */ C_MODRM,
172 | /* 8C */ C_MODRM+C_BAD,
173 | /* 8D */ C_MODRM,
174 | /* 8E */ C_MODRM+C_BAD,
175 | /* 8F */ C_MODRM,
176 | /* 90 */ 0,
177 | /* 91 */ 0,
178 | /* 92 */ 0,
179 | /* 93 */ C_BAD,
180 | /* 94 */ C_BAD,
181 | /* 95 */ C_BAD,
182 | /* 96 */ C_BAD,
183 | /* 97 */ C_BAD,
184 | /* 98 */ C_BAD,
185 | /* 99 */ 0,
186 | /* 9A */ C_DATA66+C_DATA2+C_BAD,
187 | /* 9B */ 0,
188 | /* 9C */ C_BAD,
189 | /* 9D */ C_BAD,
190 | /* 9E */ C_BAD,
191 | /* 9F */ C_BAD,
192 | /* A0 */ C_ADDR67,
193 | /* A1 */ C_ADDR67,
194 | /* A2 */ C_ADDR67,
195 | /* A3 */ C_ADDR67,
196 | /* A4 */ 0,
197 | /* A5 */ 0,
198 | /* A6 */ 0,
199 | /* A7 */ 0,
200 | /* A8 */ C_DATA1,
201 | /* A9 */ C_DATA66,
202 | /* AA */ 0,
203 | /* AB */ 0,
204 | /* AC */ 0,
205 | /* AD */ C_BAD,
206 | /* AE */ 0,
207 | /* AF */ C_BAD,
208 | /* B0 */ C_DATA1,
209 | /* B1 */ C_DATA1,
210 | /* B2 */ C_DATA1,
211 | /* B3 */ C_DATA1,
212 | /* B4 */ C_DATA1,
213 | /* B5 */ C_DATA1,
214 | /* B6 */ C_DATA1+C_BAD,
215 | /* B7 */ C_DATA1+C_BAD,
216 | /* B8 */ C_DATA66,
217 | /* B9 */ C_DATA66,
218 | /* BA */ C_DATA66,
219 | /* BB */ C_DATA66,
220 | /* BC */ C_DATA66+C_BAD,
221 | /* BD */ C_DATA66,
222 | /* BE */ C_DATA66,
223 | /* BF */ C_DATA66,
224 | /* C0 */ C_MODRM+C_DATA1,
225 | /* C1 */ C_MODRM+C_DATA1,
226 | /* C2 */ C_DATA2+C_STOP,
227 | /* C3 */ C_STOP,
228 | /* C4 */ C_MODRM+C_BAD,
229 | /* C5 */ C_MODRM+C_BAD,
230 | /* C6 */ C_MODRM+C_DATA1,
231 | /* C7 */ C_MODRM+C_DATA66,
232 | /* C8 */ C_DATA2+C_DATA1,
233 | /* C9 */ 0,
234 | /* CA */ C_DATA2+C_STOP+C_BAD,
235 | /* CB */ C_STOP+C_BAD,
236 | /* CC */ C_BAD,
237 | /* CD */ C_BAD,
238 | /* CE */ C_BAD,
239 | /* CF */ C_STOP+C_BAD,
240 | /* D0 */ C_MODRM,
241 | /* D1 */ C_MODRM,
242 | /* D2 */ C_MODRM,
243 | /* D3 */ C_MODRM,
244 | /* D4 */ C_DATA1+C_BAD,
245 | /* D5 */ C_DATA1+C_BAD,
246 | /* D6 */ C_BAD,
247 | /* D7 */ C_BAD,
248 | /* D8 */ C_MODRM,
249 | /* D9 */ C_MODRM,
250 | /* DA */ C_MODRM,
251 | /* DB */ C_MODRM,
252 | /* DC */ C_MODRM,
253 | /* DD */ C_MODRM,
254 | /* DE */ C_MODRM,
255 | /* DF */ C_MODRM,
256 | /* E0 */ C_DATA1+C_REL+C_BAD,
257 | /* E1 */ C_DATA1+C_REL+C_BAD,
258 | /* E2 */ C_DATA1+C_REL,
259 | /* E3 */ C_DATA1+C_REL,
260 | /* E4 */ C_DATA1+C_BAD,
261 | /* E5 */ C_DATA1+C_BAD,
262 | /* E6 */ C_DATA1+C_BAD,
263 | /* E7 */ C_DATA1+C_BAD,
264 | /* E8 */ C_DATA66+C_REL,
265 | /* E9 */ C_DATA66+C_REL+C_STOP,
266 | /* EA */ C_DATA66+C_DATA2+C_BAD,
267 | /* EB */ C_DATA1+C_REL+C_STOP,
268 | /* EC */ C_BAD,
269 | /* ED */ C_BAD,
270 | /* EE */ C_BAD,
271 | /* EF */ C_BAD,
272 | /* F0 */ C_LOCK+C_BAD,
273 | /* F1 */ C_BAD,
274 | /* F2 */ C_REP,
275 | /* F3 */ C_REP,
276 | /* F4 */ C_BAD,
277 | /* F5 */ C_BAD,
278 | /* F6 */ C_MODRM,
279 | /* F7 */ C_MODRM,
280 | /* F8 */ 0,
281 | /* F9 */ 0,
282 | /* FA */ C_BAD,
283 | /* FB */ C_BAD,
284 | /* FC */ 0,
285 | /* FD */ 0,
286 | /* FE */ C_MODRM,
287 | /* FF */ C_MODRM,
288 | /* 00 */ C_MODRM,
289 | /* 01 */ C_MODRM,
290 | /* 02 */ C_MODRM,
291 | /* 03 */ C_MODRM,
292 | /* 04 */ C_ERROR,
293 | /* 05 */ C_ERROR,
294 | /* 06 */ 0,
295 | /* 07 */ C_ERROR,
296 | /* 08 */ 0,
297 | /* 09 */ 0,
298 | /* 0A */ 0,
299 | /* 0B */ 0,
300 | /* 0C */ C_ERROR,
301 | /* 0D */ C_ERROR,
302 | /* 0E */ C_ERROR,
303 | /* 0F */ C_ERROR,
304 | /* 10 */ C_ERROR,
305 | /* 11 */ C_ERROR,
306 | /* 12 */ C_ERROR,
307 | /* 13 */ C_ERROR,
308 | /* 14 */ C_ERROR,
309 | /* 15 */ C_ERROR,
310 | /* 16 */ C_ERROR,
311 | /* 17 */ C_ERROR,
312 | /* 18 */ C_ERROR,
313 | /* 19 */ C_ERROR,
314 | /* 1A */ C_ERROR,
315 | /* 1B */ C_ERROR,
316 | /* 1C */ C_ERROR,
317 | /* 1D */ C_ERROR,
318 | /* 1E */ C_ERROR,
319 | /* 1F */ C_ERROR,
320 | /* 20 */ C_ERROR,
321 | /* 21 */ C_ERROR,
322 | /* 22 */ C_ERROR,
323 | /* 23 */ C_ERROR,
324 | /* 24 */ C_ERROR,
325 | /* 25 */ C_ERROR,
326 | /* 26 */ C_ERROR,
327 | /* 27 */ C_ERROR,
328 | /* 28 */ C_ERROR,
329 | /* 29 */ C_ERROR,
330 | /* 2A */ C_ERROR,
331 | /* 2B */ C_ERROR,
332 | /* 2C */ C_ERROR,
333 | /* 2D */ C_ERROR,
334 | /* 2E */ C_ERROR,
335 | /* 2F */ C_ERROR,
336 | /* 30 */ C_ERROR,
337 | /* 31 */ C_ERROR,
338 | /* 32 */ C_ERROR,
339 | /* 33 */ C_ERROR,
340 | /* 34 */ C_ERROR,
341 | /* 35 */ C_ERROR,
342 | /* 36 */ C_ERROR,
343 | /* 37 */ C_ERROR,
344 | /* 38 */ C_ERROR,
345 | /* 39 */ C_ERROR,
346 | /* 3A */ C_ERROR,
347 | /* 3B */ C_ERROR,
348 | /* 3C */ C_ERROR,
349 | /* 3D */ C_ERROR,
350 | /* 3E */ C_ERROR,
351 | /* 3F */ C_ERROR,
352 | /* 40 */ C_ERROR,
353 | /* 41 */ C_ERROR,
354 | /* 42 */ C_ERROR,
355 | /* 43 */ C_ERROR,
356 | /* 44 */ C_ERROR,
357 | /* 45 */ C_ERROR,
358 | /* 46 */ C_ERROR,
359 | /* 47 */ C_ERROR,
360 | /* 48 */ C_ERROR,
361 | /* 49 */ C_ERROR,
362 | /* 4A */ C_ERROR,
363 | /* 4B */ C_ERROR,
364 | /* 4C */ C_ERROR,
365 | /* 4D */ C_ERROR,
366 | /* 4E */ C_ERROR,
367 | /* 4F */ C_ERROR,
368 | /* 50 */ C_ERROR,
369 | /* 51 */ C_ERROR,
370 | /* 52 */ C_ERROR,
371 | /* 53 */ C_ERROR,
372 | /* 54 */ C_ERROR,
373 | /* 55 */ C_ERROR,
374 | /* 56 */ C_ERROR,
375 | /* 57 */ C_ERROR,
376 | /* 58 */ C_ERROR,
377 | /* 59 */ C_ERROR,
378 | /* 5A */ C_ERROR,
379 | /* 5B */ C_ERROR,
380 | /* 5C */ C_ERROR,
381 | /* 5D */ C_ERROR,
382 | /* 5E */ C_ERROR,
383 | /* 5F */ C_ERROR,
384 | /* 60 */ C_ERROR,
385 | /* 61 */ C_ERROR,
386 | /* 62 */ C_ERROR,
387 | /* 63 */ C_ERROR,
388 | /* 64 */ C_ERROR,
389 | /* 65 */ C_ERROR,
390 | /* 66 */ C_ERROR,
391 | /* 67 */ C_ERROR,
392 | /* 68 */ C_ERROR,
393 | /* 69 */ C_ERROR,
394 | /* 6A */ C_ERROR,
395 | /* 6B */ C_ERROR,
396 | /* 6C */ C_ERROR,
397 | /* 6D */ C_ERROR,
398 | /* 6E */ C_ERROR,
399 | /* 6F */ C_ERROR,
400 | /* 70 */ C_ERROR,
401 | /* 71 */ C_ERROR,
402 | /* 72 */ C_ERROR,
403 | /* 73 */ C_ERROR,
404 | /* 74 */ C_ERROR,
405 | /* 75 */ C_ERROR,
406 | /* 76 */ C_ERROR,
407 | /* 77 */ C_ERROR,
408 | /* 78 */ C_ERROR,
409 | /* 79 */ C_ERROR,
410 | /* 7A */ C_ERROR,
411 | /* 7B */ C_ERROR,
412 | /* 7C */ C_ERROR,
413 | /* 7D */ C_ERROR,
414 | /* 7E */ C_ERROR,
415 | /* 7F */ C_ERROR,
416 | /* 80 */ C_DATA66+C_REL,
417 | /* 81 */ C_DATA66+C_REL,
418 | /* 82 */ C_DATA66+C_REL,
419 | /* 83 */ C_DATA66+C_REL,
420 | /* 84 */ C_DATA66+C_REL,
421 | /* 85 */ C_DATA66+C_REL,
422 | /* 86 */ C_DATA66+C_REL,
423 | /* 87 */ C_DATA66+C_REL,
424 | /* 88 */ C_DATA66+C_REL,
425 | /* 89 */ C_DATA66+C_REL,
426 | /* 8A */ C_DATA66+C_REL,
427 | /* 8B */ C_DATA66+C_REL,
428 | /* 8C */ C_DATA66+C_REL,
429 | /* 8D */ C_DATA66+C_REL,
430 | /* 8E */ C_DATA66+C_REL,
431 | /* 8F */ C_DATA66+C_REL,
432 | /* 90 */ C_MODRM,
433 | /* 91 */ C_MODRM,
434 | /* 92 */ C_MODRM,
435 | /* 93 */ C_MODRM,
436 | /* 94 */ C_MODRM,
437 | /* 95 */ C_MODRM,
438 | /* 96 */ C_MODRM,
439 | /* 97 */ C_MODRM,
440 | /* 98 */ C_MODRM,
441 | /* 99 */ C_MODRM,
442 | /* 9A */ C_MODRM,
443 | /* 9B */ C_MODRM,
444 | /* 9C */ C_MODRM,
445 | /* 9D */ C_MODRM,
446 | /* 9E */ C_MODRM,
447 | /* 9F */ C_MODRM,
448 | /* A0 */ 0,
449 | /* A1 */ 0,
450 | /* A2 */ 0,
451 | /* A3 */ C_MODRM,
452 | /* A4 */ C_MODRM+C_DATA1,
453 | /* A5 */ C_MODRM,
454 | /* A6 */ C_ERROR,
455 | /* A7 */ C_ERROR,
456 | /* A8 */ 0,
457 | /* A9 */ 0,
458 | /* AA */ 0,
459 | /* AB */ C_MODRM,
460 | /* AC */ C_MODRM+C_DATA1,
461 | /* AD */ C_MODRM,
462 | /* AE */ C_ERROR,
463 | /* AF */ C_MODRM,
464 | /* B0 */ C_MODRM,
465 | /* B1 */ C_MODRM,
466 | /* B2 */ C_MODRM,
467 | /* B3 */ C_MODRM,
468 | /* B4 */ C_MODRM,
469 | /* B5 */ C_MODRM,
470 | /* B6 */ C_MODRM,
471 | /* B7 */ C_MODRM,
472 | /* B8 */ C_ERROR,
473 | /* B9 */ C_ERROR,
474 | /* BA */ C_MODRM+C_DATA1,
475 | /* BB */ C_MODRM,
476 | /* BC */ C_MODRM,
477 | /* BD */ C_MODRM,
478 | /* BE */ C_MODRM,
479 | /* BF */ C_MODRM,
480 | /* C0 */ C_MODRM,
481 | /* C1 */ C_MODRM,
482 | /* C2 */ C_ERROR,
483 | /* C3 */ C_ERROR,
484 | /* C4 */ C_ERROR,
485 | /* C5 */ C_ERROR,
486 | /* C6 */ C_ERROR,
487 | /* C7 */ C_ERROR,
488 | /* C8 */ 0,
489 | /* C9 */ 0,
490 | /* CA */ 0,
491 | /* CB */ 0,
492 | /* CC */ 0,
493 | /* CD */ C_DATA1,
494 | /* CE */ 0,
495 | /* CF */ 0,
496 | /* D0 */ C_ERROR,
497 | /* D1 */ C_ERROR,
498 | /* D2 */ C_ERROR,
499 | /* D3 */ C_ERROR,
500 | /* D4 */ C_ERROR,
501 | /* D5 */ C_ERROR,
502 | /* D6 */ C_ERROR,
503 | /* D7 */ C_ERROR,
504 | /* D8 */ C_ERROR,
505 | /* D9 */ C_ERROR,
506 | /* DA */ C_ERROR,
507 | /* DB */ C_ERROR,
508 | /* DC */ C_ERROR,
509 | /* DD */ C_ERROR,
510 | /* DE */ C_ERROR,
511 | /* DF */ C_ERROR,
512 | /* E0 */ C_ERROR,
513 | /* E1 */ C_ERROR,
514 | /* E2 */ C_ERROR,
515 | /* E3 */ C_ERROR,
516 | /* E4 */ C_ERROR,
517 | /* E5 */ C_ERROR,
518 | /* E6 */ C_ERROR,
519 | /* E7 */ C_ERROR,
520 | /* E8 */ C_ERROR,
521 | /* E9 */ C_ERROR,
522 | /* EA */ C_ERROR,
523 | /* EB */ C_ERROR,
524 | /* EC */ C_ERROR,
525 | /* ED */ C_ERROR,
526 | /* EE */ C_ERROR,
527 | /* EF */ C_ERROR,
528 | /* F0 */ C_ERROR,
529 | /* F1 */ C_ERROR,
530 | /* F2 */ C_ERROR,
531 | /* F3 */ C_ERROR,
532 | /* F4 */ C_ERROR,
533 | /* F5 */ C_ERROR,
534 | /* F6 */ C_ERROR,
535 | /* F7 */ C_ERROR,
536 | /* F8 */ C_ERROR,
537 | /* F9 */ C_ERROR,
538 | /* FA */ C_ERROR,
539 | /* FB */ C_ERROR,
540 | /* FC */ C_ERROR,
541 | /* FD */ C_ERROR,
542 | /* FE */ C_ERROR,
543 | /* FF */ C_ERROR
544 | }; // ade32_table[]
545 |
546 |
547 | int disasm(BYTE* opcode0, disasm_struct* diza){
548 | BYTE* opcode = opcode0;
549 |
550 | memset(diza, 0x00, sizeof(disasm_struct));
551 | diza->disasm_defdata = 4;
552 | diza->disasm_defaddr = 4;
553 |
554 | if(*(WORD*)opcode == 0x0000)
555 | return 0;
556 | if(*(WORD*)opcode == 0xFFFF)
557 | return 0;
558 |
559 | DWORD flag = 0;
560 |
561 | repeat_prefix:
562 |
563 | BYTE c = *opcode++;
564 | DWORD t = ade32_table[ c ];
565 |
566 | if(t & C_ANYPREFIX){
567 | if(flag & t)
568 | return 0;
569 |
570 | flag |= t;
571 |
572 | if(t & C_67)
573 | diza->disasm_defaddr ^= 2^4;
574 | else if(t & C_66)
575 | diza->disasm_defdata ^= 2^4;
576 | else if(t & C_SEG)
577 | diza->disasm_seg = c;
578 | else if(t & C_REP)
579 | diza->disasm_rep = c;
580 | // LOCK
581 |
582 | goto repeat_prefix;
583 | } // C_ANYPREFIX
584 |
585 | flag |= t;
586 | diza->disasm_opcode = c;
587 |
588 | if(c == 0x0F){
589 | c = *opcode++;
590 | diza->disasm_opcode2 = c;
591 | flag |= ade32_table[256+c]; // 2nd flagtable half
592 |
593 | if(flag == C_ERROR)
594 | return 0;
595 | }else if(c == 0xF7){
596 | if(((*opcode) & 0x38) == 0)
597 | flag |= C_DATA66;
598 | }else if(c == 0xF6){
599 | if(((*opcode) & 0x38) == 0)
600 | flag |= C_DATA1;
601 | }else if(c == 0xCD){
602 | if(*opcode == 0x20)
603 | flag |= C_DATA4;
604 | }
605 |
606 | if(flag & C_MODRM){
607 | c = *opcode++;
608 | diza->disasm_modrm = c;
609 |
610 | if(((c & 0x38) == 0x20) && (diza->disasm_opcode == 0xFF))
611 | flag |= C_STOP;
612 |
613 | BYTE mod = c & 0xC0;
614 | BYTE rm = c & 0x07;
615 |
616 | if(mod != 0xC0){
617 | if(diza->disasm_defaddr == 4){
618 | if(rm == 4){
619 | flag |= C_SIB;
620 | c = *opcode++;
621 | diza->disasm_sib = c;
622 | rm = c & 0x07;
623 | }
624 |
625 | if(mod == 0x40)
626 | flag |= C_ADDR1;
627 | else if(mod == 0x80)
628 | flag |= C_ADDR4;
629 | else if (rm == 5)
630 | flag |= C_ADDR4;
631 | }else{ // MODRM 16-bit
632 | if(mod == 0x40)
633 | flag |= C_ADDR1;
634 | else if(mod == 0x80)
635 | flag |= C_ADDR2;
636 | else if(rm == 6)
637 | flag |= C_ADDR2;
638 | }
639 | }
640 | } // C_MODRM
641 |
642 | diza->disasm_flag = flag;
643 |
644 | DWORD a = flag & (C_ADDR1 | C_ADDR2 | C_ADDR4);
645 | DWORD d = (flag & (C_DATA1 | C_DATA2 | C_DATA4)) >> 8;
646 |
647 | if(flag & C_ADDR67)
648 | a += diza->disasm_defaddr;
649 | if(flag & C_DATA66)
650 | d += diza->disasm_defdata;
651 |
652 | diza->disasm_addrsize = a;
653 | diza->disasm_datasize = d;
654 |
655 | DWORD i;
656 | for(i = 0; i < a; i++)
657 | diza->disasm_addr_b[i] = *opcode++;
658 |
659 | for(i = 0; i < d; i++)
660 | diza->disasm_data_b[i] = *opcode++;
661 |
662 | diza->disasm_len = opcode - opcode0;
663 |
664 | return diza->disasm_len;
665 | } // disasm()
666 |
667 | int oplen(BYTE *opcode){
668 | disasm_struct diza;
669 | memset(&diza,0,sizeof(diza));
670 |
671 | disasm((BYTE*)opcode,&diza);
672 |
673 | if((diza.disasm_flag == C_ERROR) || ((diza.disasm_flag&C_STOP) == C_STOP) || ((diza.disasm_flag&C_REL)==C_REL) || ((diza.disasm_flag&C_BAD)==C_BAD))
674 | return -1;
675 |
676 | return diza.disasm_len;
677 | }
678 |
--------------------------------------------------------------------------------
/code/ADE32.h:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | PROJECT: m0d_s0beit_sa
4 | LICENSE: See LICENSE in the top level directory
5 | COPYRIGHT: Copyright 2007, 2008, 2009, 2010 we_sux
6 |
7 | m0d_s0beit_sa is available from http://code.google.com/p/m0d-s0beit-sa/
8 |
9 | m0d_s0beit_sa is free software: you can redistribute it and/or modify
10 | it under the terms of the GNU General Public License as published by
11 | the Free Software Foundation, either version 3 of the License, or
12 | (at your option) any later version.
13 |
14 | m0d_s0beit_sa is distributed in the hope that it will be useful,
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 | GNU General Public License for more details.
18 |
19 | You should have received a copy of the GNU General Public License
20 | along with m0d_s0beit_sa. If not, see .
21 |
22 | */
23 |
24 | // ADE32 v2.02c by z0mbie
25 |
26 | #ifndef __ADE32_H__
27 | #define __ADE32_H__
28 |
29 | #define C_ERROR 0xFFFFFFFF
30 | #define C_ADDR1 0x00000001
31 | #define C_ADDR2 0x00000002
32 | #define C_ADDR4 0x00000004
33 | #define C_LOCK 0x00000008
34 | #define C_67 0x00000010
35 | #define C_66 0x00000020
36 | #define C_REP 0x00000040
37 | #define C_SEG 0x00000080
38 | #define C_ANYPREFIX (C_66+C_67+C_LOCK+C_REP+C_SEG)
39 | #define C_DATA1 0x00000100
40 | #define C_DATA2 0x00000200
41 | #define C_DATA4 0x00000400
42 | #define C_SIB 0x00000800
43 | #define C_ADDR67 0x00001000
44 | #define C_DATA66 0x00002000
45 | #define C_MODRM 0x00004000
46 | #define C_BAD 0x00008000
47 | #define C_OPCODE2 0x00010000
48 | #define C_REL 0x00020000
49 | #define C_STOP 0x00040000
50 |
51 | #pragma pack(push)
52 | #pragma pack(1)
53 |
54 | struct disasm_struct {
55 | BYTE disasm_defaddr; // 00
56 | BYTE disasm_defdata; // 01
57 | DWORD disasm_len; // 02 03 04 05
58 | DWORD disasm_flag; // 06 07 08 09
59 | DWORD disasm_addrsize; // 0A 0B 0C 0D
60 | DWORD disasm_datasize; // 0E 0F 10 11
61 | BYTE disasm_rep; // 12
62 | BYTE disasm_seg; // 13
63 | BYTE disasm_opcode; // 14
64 | BYTE disasm_opcode2; // 15
65 | BYTE disasm_modrm; // 16
66 | BYTE disasm_sib; // 17
67 |
68 | union {
69 | BYTE disasm_addr_b[8]; // 18 19 1A 1B 1C 1D 1E 1F
70 | WORD disasm_addr_w[4];
71 | DWORD disasm_addr_d[2];
72 | char disasm_addr_c[8];
73 | short disasm_addr_s[4];
74 | long disasm_addr_l[2];
75 | };
76 |
77 | union {
78 | BYTE disasm_data_b[8]; // 20 21 22 23 24 25 26 27
79 | WORD disasm_data_w[4];
80 | DWORD disasm_data_d[2];
81 | char disasm_data_c[8];
82 | short disasm_data_s[4];
83 | long disasm_data_l[2];
84 | };
85 | }; // disasm_struct
86 |
87 | #pragma pack(pop)
88 |
89 | int disasm(BYTE* opcode0, disasm_struct* diza);
90 | int oplen(BYTE* opcode);
91 |
92 | #endif // __ADE32_H__
93 |
94 |
--------------------------------------------------------------------------------
/code/CDetour.cpp:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | PROJECT: m0d_s0beit_sa
4 | LICENSE: See LICENSE in the top level directory
5 | COPYRIGHT: Copyright 2007, 2008, 2009, 2010 we_sux
6 |
7 | m0d_s0beit_sa is available from http://code.google.com/p/m0d-s0beit-sa/
8 |
9 | m0d_s0beit_sa is free software: you can redistribute it and/or modify
10 | it under the terms of the GNU General Public License as published by
11 | the Free Software Foundation, either version 3 of the License, or
12 | (at your option) any later version.
13 |
14 | m0d_s0beit_sa is distributed in the hope that it will be useful,
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 | GNU General Public License for more details.
18 |
19 | You should have received a copy of the GNU General Public License
20 | along with m0d_s0beit_sa. If not, see .
21 |
22 | $LastChangedDate: 2009-12-14 01:12:56 -0600 (Mon, 14 Dec 2009) $
23 | $LastChangedBy: futnucks $
24 | $Revision: 31 $
25 | $HeadURL: https://m0d-s0beit-sa.googlecode.com/svn/trunk/src/CDetour.cpp $
26 | $Id: CDetour.cpp 31 2009-12-14 07:12:56Z futnucks $
27 |
28 | */
29 |
30 | #include
31 | #include "CDetour.h"
32 |
33 |
34 | void* CDetour::memcpy_s( void* pvAddress, const void* pvBuffer, size_t stLen )
35 | {
36 | MEMORY_BASIC_INFORMATION mbi;
37 | VirtualQuery( pvAddress, &mbi, sizeof( mbi ) );
38 | VirtualProtect( mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect );
39 | void* pvRetn = memcpy( pvAddress, pvBuffer, stLen );
40 | VirtualProtect( mbi.BaseAddress, mbi.RegionSize, mbi.Protect, &mbi.Protect );
41 | FlushInstructionCache( GetCurrentProcess( ), pvAddress, stLen );
42 | return pvRetn;
43 | }
44 |
45 | void *CDetour::Create(BYTE *orig, const BYTE *det, int iPatchType, int len)
46 | {
47 | BYTE *jmp = NULL;
48 | int iMinLen = 0;
49 |
50 | if(!(iMinLen = GetDetourLen(iPatchType)))
51 | return 0;
52 |
53 | if(len != 0 && len < iMinLen)
54 | return 0;
55 |
56 | // Try and find the end of the instruction automatically
57 | if(len == 0)
58 | {
59 | len = GetDetourLenAuto(orig, iMinLen);
60 |
61 | if(len < iMinLen)
62 | return 0;
63 | }
64 |
65 | if(!Detour(jmp, orig, det, iPatchType, len))
66 | return 0;
67 |
68 | return (jmp-len);
69 | }
70 |
71 | void *CDetour::Create(char *dllName, char *apiName, const BYTE *det, int iPatchType, int len)
72 | {
73 | BYTE *jmp = NULL;
74 | BYTE *orig = NULL;
75 | int iMinLen = 0;
76 |
77 | if(!(iMinLen = GetDetourLen(iPatchType)))
78 | return 0;
79 |
80 | if(len != 0 && len < iMinLen)
81 | return 0;
82 |
83 | // Get the API address
84 | m_hModule = GetModuleHandle(dllName);
85 | m_dwAddress = (DWORD)GetProcAddress(m_hModule, apiName);
86 |
87 | if(!m_dwAddress || !det)
88 | return 0;
89 |
90 | orig = (BYTE*)m_dwAddress;
91 |
92 | // Try and find the end of the instruction automatically
93 | if(len == 0)
94 | {
95 | len = GetDetourLenAuto(orig, iMinLen);
96 |
97 | if(len < iMinLen)
98 | return 0;
99 | }
100 |
101 | if(!Detour(jmp, orig, det, iPatchType, len))
102 | return 0;
103 |
104 | return (jmp-len);
105 | }
106 |
107 | bool CDetour::Detour(BYTE *&jmp, BYTE *&orig, const BYTE *&det, int iPatchType, int len)
108 | {
109 | DWORD dwBack = 0;
110 | int i = 0;
111 | BYTE *pPatchBuf = NULL;
112 |
113 | // Allocate space for the jump
114 | jmp = (BYTE*)malloc(len+5);
115 |
116 | // Force page protection flags to read|write
117 | MEMORY_BASIC_INFORMATION mbi;
118 | VirtualQuery( ( void* )orig, &mbi, sizeof( mbi ) );
119 | VirtualProtect( mbi.BaseAddress, mbi.RegionSize, PAGE_READWRITE, &mbi.Protect );
120 |
121 | // Copy the overwritten opcodes at the original to the malloced space
122 | memcpy(jmp, orig, len);
123 |
124 | // Increment to the end of the opcodes at the malloced space
125 | jmp += len;
126 |
127 | // Place a jump back to the original at this point
128 | jmp[0] = 0xE9;
129 | *(DWORD*)(jmp+1) = (DWORD)(orig+len - jmp) - 5;
130 |
131 | // Generate a random opcode
132 | int iTmpRnd = (rand() * 0xFF) + rand();
133 | BYTE bTmpRnd = (BYTE)iTmpRnd;
134 |
135 | // Place a jump at the original to the detour function
136 | pPatchBuf = new BYTE[len];
137 |
138 | // Pad out the bytes with NOPs so we don't have ends of intructions
139 | memset(pPatchBuf, 0x90, len);
140 |
141 | // Write the opcodes to the buffer according to patch type
142 | switch(iPatchType)
143 | {
144 | case DETOUR_TYPE_JMP:
145 | pPatchBuf[0] = '\xE9';
146 | *(DWORD*)&pPatchBuf[1] = (DWORD)(det - orig) - 5;
147 | break;
148 |
149 | case DETOUR_TYPE_PUSH_RET:
150 | pPatchBuf[0] = '\x68';
151 | *(DWORD*)&pPatchBuf[1] = (DWORD)det;
152 | pPatchBuf[5] = '\xC3';
153 | break;
154 |
155 | case DETOUR_TYPE_PUSH_FUNC:
156 | pPatchBuf[0] = '\x68';
157 | *(DWORD*)&pPatchBuf[1] = (DWORD)det;
158 | break;
159 |
160 | case DETOUR_TYPE_CALL_FUNC:
161 | pPatchBuf[0] = '\xE8';
162 | *(DWORD*)&pPatchBuf[1] = (DWORD)(det - orig) - 5;
163 | break;
164 |
165 | default:
166 | return false;
167 | }
168 |
169 | // Write the detour
170 | for(i=0; i.
21 |
22 | $LastChangedDate: 2009-12-14 01:12:56 -0600 (Mon, 14 Dec 2009) $
23 | $LastChangedBy: futnucks $
24 | $Revision: 31 $
25 | $HeadURL: https://m0d-s0beit-sa.googlecode.com/svn/trunk/src/CDetour.h $
26 | $Id: CDetour.h 31 2009-12-14 07:12:56Z futnucks $
27 |
28 | */
29 |
30 | /*
31 | CDetour 2.0 by Sinner, don't forget to credit me!
32 |
33 | Credits:
34 | LanceVorgin (his CDetour class) + z0mbie (ADE32)
35 | */
36 |
37 | /*
38 | Type: Opcodes needed:
39 | DETOUR_TYPE_JMP: 5
40 | DETOUR_TYPE_PUSH_RET 6
41 | DETOUR_TYPE_NOP_JMP 6
42 | DETOUR_TYPE_NOP_NOP_JMP 7
43 | DETOUR_TYPE_STC_JC 7
44 | DETOUR_TYPE_CLC_JNC 7
45 | DETOUR_TYPE_OBS_ADD 12
46 | DETOUR_TYPE_OBS_STACKADD 13
47 | DETOUR_TYPE_OBS_ROR 13
48 | DETOUR_TYPE_OBS_XOR 14
49 | DETOUR_TYPE_OBS_ADDNOT 14
50 | */
51 |
52 | #pragma once
53 |
54 | #pragma warning(disable: 4311)
55 | #pragma warning(disable: 4312)
56 |
57 | #include "ADE32.h"
58 | #include
59 |
60 | typedef enum detour_types_s
61 | {
62 | DETOUR_TYPE_NOT_SET = -1,
63 | DETOUR_TYPE_JMP,
64 | DETOUR_TYPE_PUSH_RET,
65 | DETOUR_TYPE_PUSH_FUNC,
66 | DETOUR_TYPE_CALL_FUNC,
67 |
68 | } detour_types_t;
69 |
70 | #define DetourRandTypeLow DETOUR_TYPE_OBS_ADD
71 | #define DetourRandTypeHigh DETOUR_TYPE_OBS_ADDNOT
72 |
73 | class CDetour
74 | {
75 | public:
76 | void* memcpy_s( void* pvAddress, const void* pvBuffer, size_t stLen );
77 | void *Create(BYTE *orig, const BYTE *det, int iPatchType, int len=0);
78 | void *Create(char *dllName, char *apiName, const BYTE *det, int iPatchType, int len=0);
79 | bool Remove(BYTE *orig, BYTE *jmp, int iPatchType, int len=0);
80 | bool Remove(char *dllName, char *apiName, BYTE *jmp, int iPatchType, int len=0);
81 | bool BackupFunction( BYTE* func, int len );
82 | bool RestoreFunction( BYTE* func, int len );
83 | BYTE bBackup[20];
84 |
85 | private:
86 | bool Detour(BYTE *&jmp, BYTE *&orig, const BYTE *&det, int iPatchType, int len);
87 | int GetDetourLen(int iPatchType);
88 | int GetDetourLenAuto(BYTE *&orig, int iMinLen);
89 |
90 | private:
91 | HMODULE m_hModule;
92 | DWORD m_dwAddress;
93 | };
94 |
95 |
--------------------------------------------------------------------------------
/code/dllmain.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | void perform_ut3_patches();
3 | BOOL WINAPI DllMain(
4 | HINSTANCE hinstDLL, // handle to DLL module
5 | DWORD fdwReason, // reason for calling function
6 | LPVOID lpReserved) // reserved
7 | {
8 | // Perform actions based on the reason for calling.
9 | switch (fdwReason)
10 | {
11 | case DLL_PROCESS_ATTACH:
12 | // Initialize once for each new process.
13 |
14 | perform_ut3_patches();
15 | // Return FALSE to fail DLL load.
16 | break;
17 |
18 | case DLL_THREAD_ATTACH:
19 | // Do thread-specific initialization.
20 | break;
21 |
22 | case DLL_THREAD_DETACH:
23 | // Do thread-specific cleanup.
24 | break;
25 |
26 | case DLL_PROCESS_DETACH:
27 | // Perform any necessary cleanup.
28 | break;
29 | }
30 | return TRUE; // Successful DLL_PROCESS_ATTACH.
31 | }
32 |
33 |
34 |
--------------------------------------------------------------------------------
/code/input_proxy.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | // global variables
4 | typedef HRESULT (__stdcall *DINPUT8_CREATE_FUNC) (HINSTANCE hinst, DWORD dwVersion, const IID* riidltf, LPVOID* ppvOut, LPUNKNOWN punkOuter);
5 |
6 | #pragma data_seg (".dinput8_shared")
7 | HINSTANCE gl_hOriginalDll;
8 | HINSTANCE gl_hThisInstance;
9 | #pragma data_seg ()
10 |
11 | void LoadOriginalDll(void);
12 |
13 |
14 | HRESULT __stdcall DirectInput8Create(
15 | HINSTANCE hinst, DWORD dwVersion, const IID* riidltf, LPVOID* ppvOut, LPUNKNOWN punkOuter
16 | ) {
17 | if (!gl_hOriginalDll) LoadOriginalDll();
18 |
19 |
20 | DINPUT8_CREATE_FUNC funcAddress_DirectInput8Create = (DINPUT8_CREATE_FUNC)GetProcAddress(gl_hOriginalDll, "DirectInput8Create");
21 |
22 |
23 | //char dumb_msg[1024];
24 | //sprintf_s(dumb_msg, sizeof(dumb_msg), "func pointer is: %p, thread: %d\n", funcAddress_DirectInput8Create, GetCurrentThreadId());
25 | //MessageBoxA(NULL, dumb_msg, "Injected", MB_OK);
26 |
27 | if (!funcAddress_DirectInput8Create)
28 | {
29 | OutputDebugString("PROXYDLL: Pointer to original DirectInput8Create function not received ERROR ****\r\n");
30 | ::ExitProcess(0); // exit the hard way
31 | }
32 |
33 | return funcAddress_DirectInput8Create(hinst, dwVersion, riidltf, ppvOut, punkOuter);
34 | }
35 |
36 | void LoadOriginalDll(void)
37 | {
38 | char buffer[MAX_PATH];
39 |
40 | // Getting path to system dir and to d3d8.dll
41 | ::GetSystemDirectory(buffer, MAX_PATH);
42 |
43 | // Append dll name
44 | strcat_s(buffer, sizeof(buffer), "\\dinput8.dll");
45 |
46 | // try to load the system's d3d9.dll, if pointer empty
47 | if (!gl_hOriginalDll) gl_hOriginalDll = ::LoadLibrary(buffer);
48 | // Debug
49 | if (!gl_hOriginalDll)
50 | {
51 | OutputDebugString("PROXYDLL: Original d3d9.dinput8 not loaded ERROR ****\r\n");
52 | ::ExitProcess(0); // exit the hard way
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/code/patches.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #include "CDetour.h"
5 | #define EXE_BASE_ADDRESS 0x400000
6 |
7 | void GSMD5Print(unsigned char digest[16], char output[33])
8 | {
9 | static const char hex_digits[] = "0123456789abcdef";
10 | unsigned int i;
11 |
12 | for (i = 0; i < 16; i++)
13 | {
14 | output[i * 2] = hex_digits[digest[i] / 16];
15 | output[i * 2 + 1] = hex_digits[digest[i] % 16];
16 | }
17 | output[32] = '\0';
18 | }
19 |
20 |
21 | void write_string_offset(void* address, int string_len, const char* string) {
22 |
23 | void* write_address = (void*)((ptrdiff_t) (ptrdiff_t)address);
24 | DWORD oldProtect;
25 |
26 | BOOL success = VirtualProtect(write_address, string_len, PAGE_READWRITE, &oldProtect);
27 |
28 |
29 | assert(success);
30 | SIZE_T numWritten = 0;
31 | success = WriteProcessMemory(GetCurrentProcess(), write_address, string, string_len, &numWritten);
32 | assert(success);
33 |
34 | DWORD protect;
35 | success = VirtualProtect(write_address, string_len, oldProtect, &protect);
36 |
37 | assert(success);
38 |
39 | }
40 | void perform_ut3_patches() {
41 | write_string_offset((void*)0x01D2AE70, 17, "gpsp.openspy.net"); //updated
42 |
43 | write_string_offset((void*)0x01D2A738, 17, "gpcm.openspy.net"); //updated
44 | write_string_offset((void*)0x01D27DB8, 25, "%s.available.openspy.net"); //updated
45 | write_string_offset((void*)0x01D2E18C, 20, "%s.ms%d.openspy.net"); //updated
46 |
47 | write_string_offset((void*)0x01B3D338, 64, "http://%s.sake.openspy.net/SakeStorageServer/StorageServer.asmx"); //updated
48 | write_string_offset((void*)0x01D27CA0, 64, "http://%s.sake.openspy.net/SakeStorageServer/StorageServer.asmx"); //new
49 | write_string_offset((void*)0x01B3D3E8, 77, "http://%s.comp.pubsvs.openspy.net/CompetitionService/CompetitionService.asmx"); //updated
50 | write_string_offset((void*)0x01D27AD0, 77, "http://%s.comp.pubsvs.openspy.net/CompetitionService/CompetitionService.asmx"); //new
51 | write_string_offset((void*)0x01D29634, 22, "%s.master.openspy.net"); //updated
52 | write_string_offset((void*)0x01D27E90, 22, "http://motd.openspy.net/motd/motd.asp"); //updated
53 | write_string_offset((void*)0x01D27E28, 42, "http://motd.openspy.net/motd/vercheck.asp"); //updated
54 | write_string_offset((void*)0x01D27F08, 42, "http://motd.openspy.net/motd/vercheck.asp"); //new
55 |
56 | write_string_offset((void*)0x01D27380, 64, "http://%s.auth.pubsvs.openspy.net/AuthService/AuthService.asmx\x00"); //updated
57 |
58 | write_string_offset((void*)0x01B47550, 257, "afb5818995b3708d0656a5bdd20760aee76537907625f6d23f40bf17029e56808d36966c0804e1d797e310fedd8c06e6c4121d963863d765811fc9baeb2315c9a6eaeb125fad694d9ea4d4a928f223d9f4514533f18a5432dd0435c5c6ac8e276cf29489cb5ac880f16b0d7832ee927d4e27d622d6a450cd1560d7fa882c6c13"); //updated
59 |
60 | CDetour detour;
61 |
62 | if (detour.Create((BYTE*)0x01243B08, (const BYTE*)GSMD5Print, DETOUR_TYPE_CALL_FUNC, 5) == 0) {
63 | OutputDebugString("Failed to detour GSMD5Print (#1)");
64 | ::ExitProcess(0); // exit the hard way
65 | }
66 |
67 | if (detour.Create((BYTE*)0x0123E9B2, (const BYTE*)GSMD5Print, DETOUR_TYPE_CALL_FUNC, 5) == 0) {
68 | OutputDebugString("Failed to detour GSMD5Print (#2)");
69 | ::ExitProcess(0); // exit the hard way
70 | }
71 |
72 | if (detour.Create((BYTE*)0x0123D33A, (const BYTE*)GSMD5Print, DETOUR_TYPE_CALL_FUNC, 5) == 0) {
73 | OutputDebugString("Failed to detour GSMD5Print (#3)");
74 | ::ExitProcess(0); // exit the hard way
75 | }
76 | }
--------------------------------------------------------------------------------
/code/ut3proxy.def:
--------------------------------------------------------------------------------
1 | LIBRARY "dinput8"
2 | EXPORTS
3 | DirectInput8Create @1
4 | ; DllCanUnloadNow @2
5 | ; DllGetClassObject @3
6 | ; DllRegisterServer @4
7 | ; DllUnregisterServer @5
8 | ; GetdfDIJoystick @6
--------------------------------------------------------------------------------
/ut3proxy.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.4.33122.133
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ut3proxy", "ut3proxy.vcxproj", "{664071AC-98F1-482E-98E3-A17B40E5C56C}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Debug|x86 = Debug|x86
12 | Release|x64 = Release|x64
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Debug|x64.ActiveCfg = Debug|x64
17 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Debug|x64.Build.0 = Debug|x64
18 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Debug|x86.ActiveCfg = Debug|Win32
19 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Debug|x86.Build.0 = Debug|Win32
20 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Release|x64.ActiveCfg = Release|x64
21 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Release|x64.Build.0 = Release|x64
22 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Release|x86.ActiveCfg = Release|Win32
23 | {664071AC-98F1-482E-98E3-A17B40E5C56C}.Release|x86.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {4CC3348F-5911-4D87-85C1-D752F6EDFE74}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/ut3proxy.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | x64
19 |
20 |
21 |
22 | 16.0
23 | Win32Proj
24 | {664071ac-98f1-482e-98e3-a17b40e5c56c}
25 | ut3proxy
26 | 10.0
27 |
28 |
29 |
30 | DynamicLibrary
31 | true
32 | v143
33 | MultiByte
34 |
35 |
36 | DynamicLibrary
37 | false
38 | v143
39 | true
40 | MultiByte
41 |
42 |
43 | DynamicLibrary
44 | true
45 | v143
46 | MultiByte
47 |
48 |
49 | Application
50 | false
51 | v143
52 | true
53 | Unicode
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | Level3
76 | true
77 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
78 | true
79 |
80 |
81 | Windows
82 | true
83 | code/ut3proxy.def
84 | $(OutDir)dinput8$(TargetExt)
85 |
86 |
87 |
88 |
89 | Level3
90 | true
91 | true
92 | true
93 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
94 | true
95 | MultiThreaded
96 |
97 |
98 | Console
99 | true
100 | true
101 | false
102 | $(OutDir)dinput8$(TargetExt)
103 | code/ut3proxy.def
104 |
105 |
106 |
107 |
108 | Level3
109 | true
110 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
111 | true
112 |
113 |
114 | Console
115 | true
116 | code/ut3proxy.def
117 |
118 |
119 |
120 |
121 | Level3
122 | true
123 | true
124 | true
125 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
126 | true
127 |
128 |
129 | Console
130 | true
131 | true
132 | true
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
--------------------------------------------------------------------------------
/ut3proxy.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 | Source Files
20 |
21 |
22 | Source Files
23 |
24 |
25 | Source Files
26 |
27 |
28 | Source Files
29 |
30 |
31 | Source Files
32 |
33 |
34 |
35 |
36 | Source Files
37 |
38 |
39 |
--------------------------------------------------------------------------------