HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 09.01.2024, 17:17
_NeliN_
Новичок
Регистрация: 07.01.2024
Сообщений: 10
С нами: 1238284

Репутация: 3
По умолчанию

У меня ошибка, @CleanLegend живой, поможешь?

Вообщем такое же окошко вылезает, без понятия что делать

Цитата:
Сообщение от Vintik  

@CleanLegend опять какая-то ерунда.

Что уж теперь не так то? Я всё пофиксил из того, что ты сказал.
Цитата:
Сообщение от Спойлер  


C++:





Код:
#include 
#include 
#include 
#include 
int
processId
;
DWORD sampdll
;
int
GetProcessIdByWindowName
(
std
::
string windowName
)
{
HWND window
=
FindWindowA
(
NULL
,
reinterpret_cast

(
windowName
.
c_str
(
)
)
)
;
int
pId
=
0
;
GetWindowThreadProcessId
(
window
,
reinterpret_cast

(
&
pId
)
)
;
return
pId
;
}
DWORD
GetModuleBaseAddress
(
DWORD pid
,
const
char
*
name
)
{
HANDLE snapshot
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
pid
)
;
MODULEENTRY32 mEntry
;
mEntry
.
dwSize
=
sizeof
(
MODULEENTRY32
)
;
do
{
if
(
!
strcmp
(
(
const
char
*
)
mEntry
.
szModule
,
name
)
)
{
CloseHandle
(
snapshot
)
;
return
(
DWORD
)
mEntry
.
modBaseAddr
;
}
}
while
(
Module32Next
(
snapshot
,
&
mEntry
)
)
;
}
template

T
readMem
(
int
address
)
{
T buf
;
HANDLE h
=
OpenProcess
(
PROCESS_VM_READ
,
false
,
processId
)
;
ReadProcessMemory
(
h
,
reinterpret_cast

(
address
)
,
&
buf
,
sizeof
(
T
)
,
NULL
)
;
CloseHandle
(
h
)
;
return
buf
;
}
template

void
writeMem
(
int
address
,
T buf
)
{
HANDLE h
=
OpenProcess
(
PROCESS_VM_WRITE
,
false
,
processId
)
;
int
oldProtect
=
0
;
VirtualProtectEx
(
h
,
reinterpret_cast

(
address
)
,
sizeof
(
T
)
,
PAGE_READWRITE
,
reinterpret_cast

(
&
oldProtect
)
)
;
WriteProcessMemory
(
h
,
reinterpret_cast

(
address
)
,
&
buf
,
sizeof
(
T
)
,
NULL
)
;
VirtualProtectEx
(
h
,
reinterpret_cast

(
address
)
,
sizeof
(
T
)
,
oldProtect
,
reinterpret_cast

(
&
oldProtect
)
)
;
CloseHandle
(
h
)
;
}
struct
AddMessageArg
{
DWORD arg1
;
int
arg2
;
const
char
*
arg3
;
int
arg4
;
int
arg5
;
int
arg6
;
DWORD addr
;
}
;
typedef
void
(
__cdecl
*
AddMessage
)
(
DWORD
,
int
,
const
char
*
,
int
,
int
,
int
)
;
DWORD __stdcall
RemoteThread
(
AddMessageArg
*
arg
)
{
AddMessage msg
=
(
AddMessage
)
arg
->
addr
;
msg
(
arg
->
arg1
,
arg
->
arg2
,
arg
->
arg3
,
arg
->
arg4
,
arg
->
arg5
,
arg
->
arg6
)
;
return
0
;
}
void
__stdcall
RemoteThread_end
(
)
{
}
void
AddSampMessage
(
std
::
string message
,
int
color
)
{
AddMessageArg funcArg
;
funcArg
.
arg1
=
readMem

(
sampdll
+
0x21A0E4
)
;
funcArg
.
arg2
=
4
;
funcArg
.
arg3
=
message
.
c_str
(
)
;
funcArg
.
arg4
=
0
;
funcArg
.
arg5
=
color
;
funcArg
.
arg6
=
0
;
funcArg
.
addr
=
sampdll
+
0x64010
;
HANDLE h
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
false
,
processId
)
;
LPVOID pRemoteThread
=
VirtualAllocEx
(
h
,
NULL
,
reinterpret_cast

(
RemoteThread_end
)
-
reinterpret_cast

(
RemoteThread
)
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_EXECUTE_READWRITE
)
;
WriteProcessMemory
(
h
,
pRemoteThread
,
reinterpret_cast

(
RemoteThread
)
,
(
reinterpret_cast

(
RemoteThread_end
)
-
reinterpret_cast

(
RemoteThread
)
)
,
0
)
;
AddMessageArg
*
myArg
=
reinterpret_cast

(
VirtualAllocEx
(
h
,
NULL
,
sizeof
(
AddMessageArg
)
,
MEM_COMMIT
,
PAGE_READWRITE
)
)
;
writeMem

(
reinterpret_cast

(
myArg
)
,
funcArg
)
;
HANDLE h2
=
CreateRemoteThread
(
h
,
0
,
0
,
reinterpret_cast

(
pRemoteThread
)
,
myArg
,
0
,
0
)
;
WaitForSingleObject
(
h2
,
INFINITE
)
;
CloseHandle
(
h2
)
;
VirtualFreeEx
(
h
,
myArg
,
0
,
MEM_RELEASE
)
;
CloseHandle
(
h
)
;
}
int
main
(
)
{
processId
=
GetProcessIdByWindowName
(
"GTA:SA:MP"
)
;
sampdll
=
GetModuleBaseAddress
(
processId
,
"samp.dll"
)
;
AddSampMessage
(
"This is C++, wow!"
,
0
)
;
}


 
Ответить с цитированием

  #32  
Старый 09.01.2024, 20:03
Vintik
Познавший АНТИЧАТ
Регистрация: 18.08.2017
Сообщений: 1,568
С нами: 4598023

Репутация: 183


По умолчанию

Цитата:
Сообщение от _NeliN_  

без понятия что делать
Я жив, попробую помочь.

Код свой скинь
 
Ответить с цитированием

  #33  
Старый 09.01.2024, 22:02
_NeliN_
Новичок
Регистрация: 07.01.2024
Сообщений: 10
С нами: 1238284

Репутация: 3
По умолчанию

C++:





Код:
#include 
#include 
#include 
#include 
#include 
using
namespace
std
;
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
DWORD
GetProcessIdByName
(
const
std
::
wstring
&
proc_name
)
{
PROCESSENTRY32 entry
;
entry
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
DWORD ids
;
DWORD mids
;
HANDLE snapshot
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
snapshot
,
&
entry
)
)
{
while
(
Process32Next
(
snapshot
,
&
entry
)
)
if
(
entry
.
szExeFile
==
proc_name
)
{
mids
=
entry
.
th32ModuleID
;
ids
=
entry
.
th32ProcessID
;
cout

pAdr
;
// передаем адрес
msg
(
sArg
->
text
,
sArg
->
time
,
sArg
->
flag
,
sArg
->
bPreviousBrief
)
;
// вызываем
return
0
;
}
void
__stdcall
RemoteThread_end
(
)
{
}
int
main
(
)
{
setlocale
(
LC_ALL
,
"Russian"
)
;
strcpy_s
(
FuncArgs
.
text
,
"Hello world!"
)
;
FuncArgs
.
time
=
500
;
FuncArgs
.
flag
=
NULL
;
FuncArgs
.
bPreviousBrief
=
false
;
FuncArgs
.
pAdr
=
0x69F1E0
;
// получаем хэндл процесса
HANDLE hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
GetProcessIdByName
(
L
"gta_sa.exe"
)
)
;
// Выделяем память под наш поток в gta_sa
LPVOID pRemoteThread
=
VirtualAllocEx
(
hProcess
,
NULL
,
(
DWORD_PTR
)
RemoteThread_end
-
(
DWORD_PTR
)
RemoteThread
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_EXECUTE_READWRITE
)
;
// Записываем его
WriteProcessMemory
(
hProcess
,
pRemoteThread
,
(
LPVOID
)
RemoteThread
,
(
(
DWORD_PTR
)
RemoteThread_end
-
(
DWORD_PTR
)
RemoteThread
)
,
0
)
;
// Выделяем память для нашего объекта в gta_sa
Struct
*
myArg
=
(
Struct
*
)
VirtualAllocEx
(
hProcess
,
NULL
,
sizeof
(
Struct
)
,
MEM_COMMIT
,
PAGE_READWRITE
)
;
// Записываем его
WriteProcessMemory
(
hProcess
,
myArg
,
&
FuncArgs
,
sizeof
(
Struct
)
,
NULL
)
;
// Запускаем наш поток pRemoteThread с аргументами myArg
HANDLE hThread
=
CreateRemoteThread
(
hProcess
,
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
pRemoteThread
,
myArg
,
0
,
0
)
;
// Закрываем дескриптор потока
CloseHandle
(
hThread
)
;
// Освобождаем выделенную память
VirtualFreeEx
(
hProcess
,
myArg
,
sizeof
(
Struct
)
,
MEM_RELEASE
)
;
// Закрываем дескриптор процесса
CloseHandle
(
hProcess
)
;
}


практически не отличается от кода в заголовке, разве что функция получения pID другая (но 100 процентов рабочая), и strcpy заменил на strcpy_s, т.к. на что то ругался

я так то новичок в c++, пытаюсь постепенно понять значения неизвестных функций

UPD: нашел способ поставить strcpy как у автора темы, но все равно получаю ошибку.

SA-MP 0.3.7

Exception At Address: 0x13500013

Base: 0x041E0000

ОЙ ахахаах переключил на x86 и заработало). Не подскажите, а почему раньше не работало?

_SendMSG msg = (_SendMSG)sArg->pAdr; // передаем адрес . В этой строчке мы передаем адрес функции нашему прототипу функции, верно?

А для чего нужна пустая функция void __stdcall RemoteThread_end() {}?
 
Ответить с цитированием

  #34  
Старый 10.01.2024, 00:23
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Цитата:
Сообщение от _NeliN_  

ОЙ ахахаах переключил на x86 и заработало). Не подскажите, а почему раньше не работало?
если собирал в x64, то отличие в инструкциях, регистрах и механике вызова функций. код x64 в x86 процессе запарно выполнять

Цитата:
Сообщение от _NeliN_  

А для чего нужна пустая функция void __stdcall RemoteThread_end() {}?
для расчет размера функции RemoteThread

C++:





Код:
(
DWORD_PTR
)
RemoteThread_end
-
(
DWORD_PTR
)
RemoteThread

например
:
RemoteThread_end
=
0x19100
adr
RemoteThread
=
0x19000
adr
0x19100
-
0x19000
=
0x100
размер
0x100
 
Ответить с цитированием

  #35  
Старый 10.01.2024, 00:55
etereon
Постоянный
Регистрация: 08.03.2016
Сообщений: 332
С нами: 5358262

Репутация: 213
По умолчанию

Цитата:
Сообщение от CleanLegend  

для расчет размера функции RemoteThread

C++:





Код:
(
DWORD_PTR
)
RemoteThread_end
-
(
DWORD_PTR
)
RemoteThread

например
:
RemoteThread_end
=
0x19100
adr
RemoteThread
=
0x19000
adr
0x19100
-
0x19000
=
0x100
размер
0x100

Лучше по идее бежать по байтам функции RemoteThread и искать \xCC\xCC\xCC в конце, потому что нет гарантии, что RemoteThread_end будет после неё (наверно)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.