 |

05.08.2021, 21:16
|
|
Новичок
Регистрация: 29.06.2020
Сообщений: 19
С нами:
3091930
Репутация:
3
|
|
Короче решил написать свой самп клиент:
C++:
Код:
BOOL
Inject
(
DWORD pId
,
LPSTR dllName
)
{
HANDLE h
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
pId
)
;
if
(
h
)
{
LPVOID LoadLibAddr
=
(
LPVOID
)
GetProcAddress
(
GetModuleHandleA
(
"kernel32.dll"
)
,
"LoadLibraryA"
)
;
LPVOID dereercomp
=
VirtualAllocEx
(
h
,
NULL
,
strlen
(
dllName
)
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_READWRITE
)
;
WriteProcessMemory
(
h
,
dereercomp
,
dllName
,
strlen
(
dllName
)
,
NULL
)
;
HANDLE asdc
=
CreateRemoteThread
(
h
,
NULL
,
NULL
,
(
LPTHREAD_START_ROUTINE
)
LoadLibAddr
,
dereercomp
,
0
,
NULL
)
;
WaitForSingleObject
(
asdc
,
INFINITE
)
;
VirtualFreeEx
(
h
,
dereercomp
,
strlen
(
dllName
)
,
MEM_RELEASE
)
;
CloseHandle
(
asdc
)
;
CloseHandle
(
h
)
;
return
TRUE
;
}
return
FALSE
;
}
int
_tmain
(
int
argc
,
_TCHAR
*
argv
[
]
)
{
STARTUPINFOA cif
;
ZeroMemory
(
&
cif
,
sizeof
(
STARTUPINFO
)
)
;
PROCESS_INFORMATION pi
;
if
(
CreateProcessA
(
"D:\\Games\\GTA SAMP\\gta_sa.exe"
,
"-c -n NickName -h 228.227.226.225 -p 7777"
,
NULL
,
NULL
,
FALSE
,
DETACHED_PROCESS
|
CREATE_SUSPENDED
,
NULL
,
NULL
,
&
cif
,
&
pi
)
)
{
if
(
pi
.
hProcess
!=
NULL
)
{
if
(
!
Inject
(
pi
.
dwProcessId
,
"D:\\Games\\GTA SAMP\\samp.dll"
)
)
{
TerminateProcess
(
pi
.
hProcess
,
0
)
;
ExitProcess
(
0
)
;
}
ResumeThread
(
pi
.
hThread
)
;
}
}
else
MessageBoxA
(
NULL
,
"Failed to Create Process"
,
"Error"
,
MB_ICONERROR
)
;
return
0
;
}
Все должно работать, но я хз почему не работает, помогите пж
|
|
|

06.08.2021, 12:42
|
|
Постоянный
Регистрация: 12.01.2021
Сообщений: 343
С нами:
2808522
Репутация:
48
|
|
Решил?
|
|
|

06.08.2021, 12:46
|
|
Новичок
Регистрация: 29.06.2020
Сообщений: 19
С нами:
3091930
Репутация:
3
|
|
Сообщение от Mayako
Решил?
нет
Что никто не писал самп клиент свой? Что вообще ни так я смотрел оригинал сурсы сампа, там по сути просто создается процесс gta_sa.exe с агрументами и потом инжектится samp.dll
Помогите пожалуйста кто нибудь, уже 2 день решить не могу
|
|
|

07.08.2021, 08:52
|
|
Познающий
Регистрация: 06.09.2018
Сообщений: 32
С нами:
4045092
Репутация:
23
|
|
Ты конечно молодец. Копировать научился, а всё остальное по твоему должно и так работать.
CreateProcessA создает процесс по указанному пути и с указанными аргументами, но большинство процессов, тем более игра (если ты не знал) тянут под себя еще кучу зависимостей. Мультиплеер в том числе. Откуда им нахер знать откуда тянуть ресурсы?
Ты создал манекен процесса и отрубил ему пути до зависимостей.
Если ты поместишь свой инжектор в папку с gta_sa.exe, то заметишь, что все работет. Ибо функция CreateProcessA будет всю работу делать за тебя и по умолчанию поставит дефолтный каталог на диск и каталог в котором находится модуль её исполняемый (в твоем случае инжектор).
Но она также предусматривает возможность изменения этого каталога. Так вот если ты запускаешь свой инжектор не из директории где лежит gta_sa.exe, то тебе нужно изменить тот самый параметр CurrentDirectory (текущая директория), чтобы samp и gta_sa смогли тянуть зависимости.
По итогу получаешь:
C++:
Код:
CreateProcessA
(
"D:\\Games\\GTA SAMP\\gta_sa.exe"
,
"-c -n NickName -h 228.227.226.225 -p 7777"
,
NULL
,
NULL
,
FALSE
,
DETACHED_PROCESS
|
CREATE_SUSPENDED
,
NULL
,
"D:\\Games\\GTA SAMP\\"
,
&
cif
,
&
pi
)
)
;
Ребята из мелкомягких документацию для таких как ты и пишут. Научитесь уже ей пользоваться. msdn называется.
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|