
15.12.2019, 20:42
|
|
Познающий
Регистрация: 08.12.2019
Сообщений: 45
С нами:
3385695
Репутация:
58
|
|
Код аирбрейка:
Код:
#include "pch.h"
float
*
coordinates
=
(
*
(
DWORD
*
)
0xB6F5F0
)
?
(
float
*
)
(
*
(
DWORD
*
)
(
*
(
DWORD
*
)
0xB6F5F0
+
0x14
)
+
0x30
)
:
NULL
;
DWORD Gravity
=
*
(
DWORD
*
)
0x863984
;
void
airbrake
(
)
{
bool
CheatOn
=
false
;
while
(
1
)
{
if
(
GetAsyncKeyState
(
VK_RSHIFT
)
&&
CheatOn
==
false
)
{
CheatOn
=
true
;
*
(
DWORD
*
)
0x863984
=
0.013
;
}
if
(
CheatOn
==
true
)
{
if
(
GetAsyncKeyState
(
VK_DELETE
)
)
{
CheatOn
=
false
;
}
GetAsyncKeyState
(
VK_UP
)
?
coordinates
[
2
]
+=
0.0002f
:
NULL
;
GetAsyncKeyState
(
VK_DOWN
)
?
coordinates
[
2
]
-=
0.0002f
:
NULL
;
GetAsyncKeyState
(
VK_RIGHT
)
?
coordinates
[
0
]
+=
0.0002f
:
NULL
;
GetAsyncKeyState
(
VK_LEFT
)
?
coordinates
[
0
]
-=
0.0002f
:
NULL
;
GetAsyncKeyState
(
0x57
)
?
coordinates
[
1
]
+=
0.0002f
:
NULL
;
GetAsyncKeyState
(
0x53
)
?
coordinates
[
1
]
-=
0.0002f
:
NULL
;
}
if
(
CheatOn
==
false
)
{
*
(
DWORD
*
)
0x863984
=
Gravity
;
}
}
}
void
init
(
)
{
while
(
*
(
DWORD
*
)
0xC8D4C0
!=
9
)
Sleep
(
100
)
;
airbrake
(
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
{
CreateThread
(
NULL
,
NULL
,
(
LPTHREAD_START_ROUTINE
)
init
,
NULL
,
NULL
,
NULL
)
;
}
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
Написал хреновый аирбрейк, выложил дабы послушать мнение спецов в написании подобного, если не сложно, укажите на мои ошибки и дайте каких-нибудь рекомендаций)).
|
|
|

16.12.2019, 17:00
|
|
Флудер
Регистрация: 17.06.2013
Сообщений: 3,635
С нами:
6791977
Репутация:
183
|
|
Ужасный код. Такой код надо писать только когда тестируешь что то. Создавать поток в DllMain - это плохо. Так же использование Sleep и GetAsyncKeyState, получение данных в глобальной области видимости. Тебе тут надо хукать WndProc и он тебе будет давать все текущие "эвенты" окна и не придётся использовать создание потока, sleep и получение стейта клавиши.
|
|
|

16.12.2019, 17:56
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
Сообщение от DarkP1xel
Ужасный код. Такой код надо писать только когда тестируешь что то. Создавать поток в DllMain - это плохо. Так же использование Sleep и GetAsyncKeyState, получение данных в глобальной области видимости. Тебе тут надо хукать WndProc и он тебе будет давать все текущие "эвенты" окна и не придётся использовать создание потока, sleep и получение стейта клавиши.
Вот вот именно
|
|
|

16.12.2019, 18:13
|
|
Познающий
Регистрация: 08.12.2019
Сообщений: 45
С нами:
3385695
Репутация:
58
|
|
Сообщение от DarkP1xel
Ужасный код. Такой код надо писать только когда тестируешь что то. Создавать поток в DllMain - это плохо. Так же использование Sleep и GetAsyncKeyState, получение данных в глобальной области видимости. Тебе тут надо хукать WndProc и он тебе будет давать все текущие "эвенты" окна и не придётся использовать создание потока, sleep и получение стейта клавиши.
можешь скинуть пример хорошо написанного плагина? Просто где-то мне говорили создавать поток, ты говоришь не создавать)))
|
|
|

16.12.2019, 18:56
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от otherwise
можешь скинуть пример хорошо написанного плагина? Просто где-то мне говорили создавать поток, ты говоришь не создавать)))
За место потока ты хукаешь WndProc и обрабатываешь там все действия.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|