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

  #1  
Старый 02.03.2016, 02:57
san0
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами: 6530249

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

Цитата:
Сообщение от Сэнд  

Как сделать проверку на ЗАЖАТИЕ клавиши? Пока клавишу держат опущенной, то программа работает, когда отпускают - перестаёт работать.
SF->getGame()->isKeyDown()

or

GetAsyncKeyState() != NULL
 
Ответить с цитированием

  #2  
Старый 12.03.2016, 09:33
Ice
Новичок
Регистрация: 13.07.2005
Сообщений: 5
С нами: 10961573

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

как проверить, если пикап уже подобрали?

когда кто то поднимает пикап, он по прежнему существует, но мы его не можем видеть или поднять...
 
Ответить с цитированием

  #3  
Старый 12.03.2016, 22:52
Vasiliy77
Новичок
Регистрация: 21.06.2015
Сообщений: 22
С нами: 5733802

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

Пробую написать значит прогу для начала у виде ехе файла, чтобы можно было удобней проверять написанное. Прога должна находить с памяти gta-sa.exe динамический адрес айпи. С помощью видеоуроков на ютубе и Cheat Engine я сделал приблизительно что нужно мне:

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

[HIDE=1]

// В файле класса:

DWORD Anticheat::ReadPointer(DWORD base, DWORD* offsets, int count)

{

for (int i = 0; i Open();

printf("PID: %x\n\n", mem->getPID());

DWORD offsets[] = { 0x021A0F8, 0x20 };

DWORD addressdllsamp = 0x05180000;// адрес samp.dll

DWORD ammoadr = mem->ReadPointer(addressdllsamp, offsets, 2);

printf("Adress: 0x%x / value = %s\n\n", ammoadr, mem->Read(ammoadr, 15).toStringA());// 15 - величина nick`a + 1

system("PAUSE");

}[/I]

[/HIDE]
Здесь система получает динамический адресс значения "айпи сервера", через оффсеты и поинты.

Если в уже открытом процессе менять айпи, то в консоль выводит ее правильно. Но если перезапустить процесс, то в CE вижу что в samp.dll уже другой адрес, и в итоге в консоли ничего нет. Помогите вот, нужно такое же сделать, только уже для samp.dll, тоесть узнать поинт и оффсеты смещения в памяти адреса dll-лки.


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

[HIDE=1]





[/HIDE]
 
Ответить с цитированием

  #4  
Старый 13.03.2016, 12:14
FYP
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,771
С нами: 6935121

Репутация: 233


По умолчанию

@Vasiliy77, тебе нужно получить базовый адрес модуля в процессе.

это можно сделать с помощью такой функции:

C++:





Код:
#include 
#include 
HMODULE
getModuleHandleRemote
(
DWORD processId
,
const
char
*
moduleName
)
{
HANDLE snap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
processId
)
;
if
(
snap
==
INVALID_HANDLE_VALUE
)
return
NULL
;
MODULEENTRY32 moduleEntry
;
moduleEntry
.
dwSize
=
sizeof
(
moduleEntry
)
;
bool
found
=
Module32First
(
snap
,
&
moduleEntry
)
==
TRUE
;
while
(
found
)
{
if
(
stricmp
(
moduleEntry
.
szModule
,
moduleName
)
==
0
)
return
CloseHandle
(
snap
)
,
moduleEntry
.
hModule
;
found
=
Module32Next
(
snap
,
&
moduleEntry
)
==
TRUE
;
}
CloseHandle
(
snap
)
;
return
NULL
;
}
 
Ответить с цитированием

  #5  
Старый 15.03.2016, 16:01
Vasiliy77
Новичок
Регистрация: 21.06.2015
Сообщений: 22
С нами: 5733802

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

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

@Vasiliy77, тебе нужно получить базовый адрес модуля в процессе.
это можно сделать с помощью такой функции:

C++:





Код:
#include 
#include 
HMODULE
getModuleHandleRemote
(
DWORD processId
,
const
char
*
moduleName
)
{
HANDLE snap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
processId
)
;
if
(
snap
==
INVALID_HANDLE_VALUE
)
return
NULL
;
MODULEENTRY32 moduleEntry
;
moduleEntry
.
dwSize
=
sizeof
(
moduleEntry
)
;
bool
found
=
Module32First
(
snap
,
&
moduleEntry
)
==
TRUE
;
while
(
found
)
{
if
(
stricmp
(
moduleEntry
.
szModule
,
moduleName
)
==
0
)
return
CloseHandle
(
snap
)
,
moduleEntry
.
hModule
;
found
=
Module32Next
(
snap
,
&
moduleEntry
)
==
TRUE
;
}
CloseHandle
(
snap
)
;
return
NULL
;
}

Спасибо, все получилось. А как можно узнать какие клео скрипты уже загружены в память? В каком участке памяти это есть? Нужны особенно те скрипты, которые делают WriteMemory в процесс.
 
Ответить с цитированием

  #6  
Старый 15.03.2016, 14:26
Gabriel__
Постоянный
Регистрация: 23.06.2015
Сообщений: 411
С нами: 5731627

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

Почему не работает!!!

Это все изза дибильной функции stricmp которая не сравнивает две строки если они одинаковые. (код отлаживал)

Код:





Код:
#include 
#include 
....
DWORD GetPID(const char * m_pName)
{
        DWORD m_pID = 0;
        HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        PROCESSENTRY32 pInfo;
        pInfo.dwSize = sizeof(PROCESSENTRY32);

        if (Process32First(snapshot, &pInfo))
        {
                while (Process32Next(snapshot, &pInfo))
                {
                        if ( !stricmp( (const char *) m_pName,  (const char *) pInfo.szExeFile) )
                        {
                                m_pID = pInfo.th32ProcessID;
                                CloseHandle(snapshot);
                                return m_pID;
                        }
                }
        }
        CloseHandle(snapshot);
        return m_pID;
}
....
GetPID("smss.exe");
 
Ответить с цитированием

  #7  
Старый 15.03.2016, 15:58
Vasiliy77
Новичок
Регистрация: 21.06.2015
Сообщений: 22
С нами: 5733802

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

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

Почему не работает!!!
Это все изза дибильной функции stricmp которая не сравнивает две строки если они одинаковые. (код отлаживал)

Код:





Код:
#include 
#include 
....
DWORD GetPID(const char * m_pName)
{
        DWORD m_pID = 0;
        HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        PROCESSENTRY32 pInfo;
        pInfo.dwSize = sizeof(PROCESSENTRY32);
.................

Код:





Код:
void GetPID()
{
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pInfo;// тут хранится запись о текущем процессе
    pInfo.dwSize = sizeof(PROCESSENTRY32);// размер структуры записи текущего процесса

    if (Process32First(snapshot, &pInfo))
    {
        while (Process32Next(snapshot, &pInfo))
        {
            if (_stricmp(m_pName, pInfo.szExeFile) == 0)
            {
                m_pID = pInfo.th32ProcessID;
                CloseHandle(snapshot);
                return;
            }
        }
    }
    CloseHandle(snapshot);
    m_pID = 0;
}
void Open(DWORD accessRights)
{
    GetPID();
    m_hProc = OpenProcess(accessRights, false, m_pID);
}
DWORD getPID(){ return m_pID; }
 
Ответить с цитированием

  #8  
Старый 15.03.2016, 15:57
itsLegend
Флудер
Регистрация: 23.03.2013
Сообщений: 2,696
С нами: 6915558

Репутация: 183


По умолчанию

И что именно не работает? Я скомпилил, норм всё.
 
Ответить с цитированием

  #9  
Старый 16.03.2016, 18:12
Gabriel__
Постоянный
Регистрация: 23.06.2015
Сообщений: 411
С нами: 5731627

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

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

И что именно не работает? Я скомпилил, норм всё.
Сказал же _stricmp нихрена не работает! Строки одинаковые но выдает что они разные!



Наверное это все изза вот такого преобразования

_stricmp(m_pName, (char *) pInfo.szExeFile) == 0

Без вот этого ---

Ошибка компиляции.

error C2664: _stricmp: невозможно преобразовать параметр 2 из "WCHAR [260]" в "const char *"

Код:





Код:
DWORD GetPID()
{
    DWORD m_pID = 0;
    char * m_pName = "smss.exe";

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pInfo;// тут хранится запись о текущем процессе
    pInfo.dwSize = sizeof(PROCESSENTRY32);// размер структуры записи текущего процесса

    if (Process32First(snapshot, &pInfo))
    {
        while (Process32Next(snapshot, &pInfo))
        {
            if (_stricmp(m_pName, (char *) pInfo.szExeFile) == 0)
            {
                m_pID = pInfo.th32ProcessID;
                CloseHandle(snapshot);
                return m_pID;
            }
        }
    }
    CloseHandle(snapshot);
    return m_pID;
}
 
Ответить с цитированием

  #10  
Старый 16.03.2016, 16:07
Goldfish
Участник форума
Регистрация: 15.02.2015
Сообщений: 106
С нами: 5916400

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

подскажите плиз где найти задачки с примерами среднего уровня по ООП C++
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

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

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

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

×

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

Сумма USDT:

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

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