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

  #3521  
Старый 15.05.2019, 17:08
Vadim.dll
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами: 5715860

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

[QUOTE="SAMP.ASI"]

Хочу получить ники всех игроков на сервере.

C++:





[CODE]
int
main
(
)
{
DWORD pID
;
char
moduleName
[
]
=
"samp.dll"
;
HWND hGameWindow
=
FindWindow
(
NULL
,
L
"GTA:SA:MP"
)
;
GetWindowThreadProcessId
(
hGameWindow
,
&
pID
)
;
HANDLE pGta
=
OpenProcess
(
PROCESS_VM_READ
,
FALSE
,
pID
)
;
DWORD pSamp
=
GetModuleBaseAddress
(
pID
,
L
"samp.dll"
)
;
cout

strPlayerName

C++:





[CODE]
#include
#include
#include
#include
#include
using
namespace
std
;
DWORD
GetProcId
(
const
wchar_t
*
procname
)
{
PROCESSENTRY32 pe
;
HANDLE hSnap
;
pe
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
hSnap
,
&
pe
)
)
{
do
{
if
(
wcscmp
(
pe
.
szExeFile
,
procname
)
==
0
)
break
;
}
while
(
Process32Next
(
hSnap
,
&
pe
)
)
;
}
return
pe
.
th32ProcessID
;
}
DWORD
get_module
(
DWORD processID
,
const
wchar_t
*
name
)
{
HMODULE hMods
[
1024
]
;
HANDLE hProcess
;
DWORD cbNeeded
;
unsigned
int
i
;
// Print the process identifier.
printf
(
"\nProcess ID: %u\n"
,
processID
)
;
// Get a handle to the process.
hProcess
=
OpenProcess
(
PROCESS_QUERY_INFORMATION
|
PROCESS_VM_READ
,
FALSE
,
processID
)
;
if
(
NULL
==
hProcess
)
return
1
;
// Get a list of all the modules in this process.
if
(
EnumProcessModules
(
hProcess
,
hMods
,
sizeof
(
hMods
)
,
&
cbNeeded
)
)
{
for
(
i
=
0
;
i
strPlayerName



Попробуй это.
 
Ответить с цитированием

  #3522  
Старый 15.05.2019, 18:12
Vadim.dll
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами: 5715860

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

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

Почему бы не вывести список ников через цикл? :wall:
Я здесь так то чисто свой ник вывел, а вывод всех остальных - закомментировал, т.к у меня нет структуры stRemotePlayer
 
Ответить с цитированием

  #3523  
Старый 16.05.2019, 00:26
SAMP.ASI
Участник форума
Регистрация: 27.05.2016
Сообщений: 223
С нами: 5242744

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

[QUOTE="Vadim.dll"]

C++:





[CODE]
#include
#include
#include
#include
#include
using
namespace
std
;
DWORD
GetProcId
(
const
wchar_t
*
procname
)
{
PROCESSENTRY32 pe
;
HANDLE hSnap
;
pe
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
hSnap
,
&
pe
)
)
{
do
{
if
(
wcscmp
(
pe
.
szExeFile
,
procname
)
==
0
)
break
;
}
while
(
Process32Next
(
hSnap
,
&
pe
)
)
;
}
return
pe
.
th32ProcessID
;
}
DWORD
get_module
(
DWORD processID
,
const
wchar_t
*
name
)
{
HMODULE hMods
[
1024
]
;
HANDLE hProcess
;
DWORD cbNeeded
;
unsigned
int
i
;
// Print the process identifier.
printf
(
"\nProcess ID: %u\n"
,
processID
)
;
// Get a handle to the process.
hProcess
=
OpenProcess
(
PROCESS_QUERY_INFORMATION
|
PROCESS_VM_READ
,
FALSE
,
processID
)
;
if
(
NULL
==
hProcess
)
return
1
;
// Get a list of all the modules in this process.
if
(
EnumProcessModules
(
hProcess
,
hMods
,
sizeof
(
hMods
)
,
&
cbNeeded
)
)
{
for
(
i
=
0
;
i
strPlayerName
 
Ответить с цитированием

  #3524  
Старый 16.05.2019, 00:40
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

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

Как узнать текст диалога? При таком коде выводится только текст "Авторизация/Принять", то есть титла/кнопки, а дальше какие-то иероглифы, а мне надо прочитать текст, который находится в самом диалоге

Код:





Код:
bool CALLBACK incomingRPC(stRakNetHookParams* params)
{
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
    {
        short int DialogID;
        char pText[64];

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(DialogID);
        params->bitStream->Read(pText);
        params->bitStream->ResetReadPointer();

        SF->getSAMP()->getChat()->AddChatMessage(-1, "DIALOG ID [%d]]",    DialogID);
        SF->getSAMP()->getChat()->AddChatMessage(-1, "Text: [%s]", pText);
    };

    return true;
};

странно что у тебя вообще что-то выводится с таким кодом.

компоненты RPC/пакета нужно получать строго по порядку.

Код:





Код:
struct stSAMPDialog
{
    int iIsActive;
    BYTE bDialogStyle;
    WORD wDialogID;
    BYTE bTitleLength;
    char szTitle[257];
    BYTE bButton1Len;
    char szButton1[257];
    BYTE bButton2Len;
    char szButton2[257];
    char szInfo[1000];
};

bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
    if (hook->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
    {
        stSAMPDialog sampDialog;

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(sampDialog.wDialogID);
        params->bitStream->Read(sampDialog.bDialogStyle);
        params->bitStream->Read(sampDialog.bTitleLength);
        params->bitStream->Read(sampDialog.szTitle, sampDialog.bTitleLength);
        sampDialog.szTitle[sampDialog.bTitleLength] = 0;
        params->bitStream->Read(sampDialog.bButton1Len);
        params->bitStream->Read(sampDialog.szButton1, sampDialog.bButton1Len);
        sampDialog.szButton1[sampDialog.bButton1Len] = 0;
        params->bitStream->Read(sampDialog.bButton2Len);
        params->bitStream->Read(sampDialog.szButton2, sampDialog.bButton2Len);
        sampDialog.szButton2[sampDialog.bButton2Len] = 0;
        SF->getRakNet()->DecodeString(sampDialog.szInfo, 900, params->bitStream);
 
        SF->getSAMP()->getChat()->AddChatMessage(-1, sampDialog.szInfo);
    };
    return true;
};
 
Ответить с цитированием

  #3525  
Старый 16.05.2019, 19:11
Vadim.dll
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами: 5715860

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

Цитата:
Сообщение от SAMP.ASI  

Мне нужно получить структуру pRemotePlayer[1004], чтоб получить из нее значения ника, счета. pRemotePlayer находится в stPlayerPool
А где у тебя эта структура определена?

Вопрос, как в Cheat Engine или где-нибудь еще получить адрес на структуру, в которой лежит текст диалога? Пробовал искать, нашел один указатель, так на него ничего не ссылается и в дизассембле пишется прямо в него, нету сдвига, может подскажет кто.
 
Ответить с цитированием

  #3526  
Старый 16.05.2019, 19:18
SAMP.ASI
Участник форума
Регистрация: 27.05.2016
Сообщений: 223
С нами: 5242744

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

Цитата:
Сообщение от Vadim.dll  

А где у тебя эта структура определена?

Вопрос, как в Cheat Engine или где-нибудь еще получить адрес на структуру, в которой лежит текст диалога? Пробовал искать, нашел один указатель, так на него ничего не ссылается и в дизассембле пишется прямо в него, нету сдвига, может подскажет кто.
В начале кода подключена structures.h, вот она https://pastebin.com/7iBpCA9L
 
Ответить с цитированием

  #3527  
Старый 16.05.2019, 21:11
Vadim.dll
Участник форума
Регистрация: 04.07.2015
Сообщений: 168
С нами: 5715860

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

Цитата:
Сообщение от SAMP.ASI  

В начале кода подключена structures.h, вот она https://pastebin.com/7iBpCA9L
C++:





[CODE]
#include
#include
#include
#include
#include
using
namespace
std
;
DWORD
GetProcId
(
const
wchar_t
*
procname
)
{
PROCESSENTRY32 pe
;
HANDLE hSnap
;
pe
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
hSnap
,
&
pe
)
)
{
do
{
if
(
wcscmp
(
pe
.
szExeFile
,
procname
)
==
0
)
break
;
}
while
(
Process32Next
(
hSnap
,
&
pe
)
)
;
}
return
pe
.
th32ProcessID
;
}
DWORD
get_module
(
DWORD processID
,
const
wchar_t
*
name
)
{
HMODULE hMods
[
1024
]
;
HANDLE hProcess
;
DWORD cbNeeded
;
unsigned
int
i
;
// Print the process identifier.
printf
(
"\nProcess ID: %u\n"
,
processID
)
;
// Get a handle to the process.
hProcess
=
OpenProcess
(
PROCESS_QUERY_INFORMATION
|
PROCESS_VM_READ
,
FALSE
,
processID
)
;
if
(
NULL
==
hProcess
)
return
1
;
// Get a list of all the modules in this process.
if
(
EnumProcessModules
(
hProcess
,
hMods
,
sizeof
(
hMods
)
,
&
cbNeeded
)
)
{
for
(
i
=
0
;
i



У тебя адрес был неправильный, нужно не 0x2A, а 0x2E. Завести это дело со структурой не получилось у меня. Чтобы данные вывелись, тебе нужно в игре нажать на tab, чтобы таблица загрузилась и проге было откуда брать данные.
 
Ответить с цитированием

  #3528  
Старый 16.05.2019, 21:13
#kweeZ
Постоянный
Регистрация: 17.06.2015
Сообщений: 578
С нами: 5739536

Репутация: 98


По умолчанию

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

странно что у тебя вообще что-то выводится с таким кодом.
компоненты RPC/пакета нужно получать строго по порядку.

Код:





Код:
struct stSAMPDialog
{
    int iIsActive;
    BYTE bDialogStyle;
    WORD wDialogID;
    BYTE bTitleLength;
    char szTitle[257];
    BYTE bButton1Len;
    char szButton1[257];
    BYTE bButton2Len;
    char szButton2[257];
    char szInfo[1000];
};

bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
    if (hook->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
    {
        stSAMPDialog sampDialog;

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(sampDialog.wDialogID);
        params->bitStream->Read(sampDialog.bDialogStyle);
        params->bitStream->Read(sampDialog.bTitleLength);
        params->bitStream->Read(sampDialog.szTitle, sampDialog.bTitleLength);
        sampDialog.szTitle[sampDialog.bTitleLength] = 0;
        params->bitStream->Read(sampDialog.bButton1Len);
        params->bitStream->Read(sampDialog.szButton1, sampDialog.bButton1Len);
        sampDialog.szButton1[sampDialog.bButton1Len] = 0;
        params->bitStream->Read(sampDialog.bButton2Len);
        params->bitStream->Read(sampDialog.szButton2, sampDialog.bButton2Len);
        sampDialog.szButton2[sampDialog.bButton2Len] = 0;
        SF->getRakNet()->DecodeString(sampDialog.szInfo, 900, params->bitStream);
 
        SF->getSAMP()->getChat()->AddChatMessage(-1, sampDialog.szInfo);
    };
    return true;
};

Откуда тут "hook"?

Код:





Код:
hook->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog
 
Ответить с цитированием

  #3529  
Старый 16.05.2019, 21:39
#kweeZ
Постоянный
Регистрация: 17.06.2015
Сообщений: 578
С нами: 5739536

Репутация: 98


По умолчанию

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

Он ошибся. Вот так правильно:

C++:





Код:
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrShowDialog
)
{





И тут нужно еще от мусорачистить каждый элемент с текстом.

Это я понял, сразу же исправил на params, но всё равно ничего не выводится
 
Ответить с цитированием

  #3530  
Старый 16.05.2019, 22:09
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

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

Это я понял, сразу же исправил на params, но всё равно ничего не выводится
с параметром промазал, в остальном всё работает.

Цитата:
Сообщение от Спойлер  




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



Предыдущая тема Следующая тема

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


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




ANTICHAT ™ © 2001- Antichat Kft.