ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как сделать Автологин Интерлюдия? (https://forum.antichat.xyz/showthread.php?t=793142)

BIT_hack 01.11.2024 10:48

  1. В интернете я нашёл информацию о том, что нужно использовать функцию для автологина из Engine.dll. Вот как она выглядит в интерлюдии.

    C++:


    Код:

    public
    :
    virtual
    int
    __thiscall UNetworkHandler
    ::
    RequestAuthLogin
    (
    unsigned
    short
    *
    ,
    unsigned
    short
    *
    ,
    int
    )
    ;

  2. Этот код на c++я инжектю в игру

    C++:


    Код:

    void
    Start
    (
    )
    {
    HMODULE hModule
    =
    GetModuleHandleA
    (
    "engine.dll"
    )
    ;
    // Получаем дескриптор загруженной DLL
    if
    (
    hModule
    !=
    NULL
    )
    {
    FARPROC requestAuthLoginAddr
    =
    GetProcAddress
    (
    hModule
    ,
    "?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
    )
    ;
    if
    (
    requestAuthLoginAddr
    !=
    NULL
    )
    {
    MessageBox
    (
    NULL
    ,
    L
    "Попытка входа в игру!"
    ,
    L
    ""
    ,
    MB_OK
    )
    ;
    typedef
    int
    (
    __thiscall
    *
    RequestAuthLoginFunc
    )
    (
    unsigned
    short
    *
    ,
    unsigned
    short
    *
    ,
    int
    )
    ;
    RequestAuthLoginFunc RequestAuthLogin
    =
    (
    RequestAuthLoginFunc
    )
    requestAuthLoginAddr
    ;
    unsigned
    short
    Login
    [
    ]
    =
    {
    'a'
    ,
    'd'
    ,
    'm'
    ,
    'i'
    ,
    'n'
    ,
    0
    }
    ;
    unsigned
    short
    Password
    [
    ]
    =
    {
    'a'
    ,
    'd'
    ,
    'm'
    ,
    'i'
    ,
    'n'
    ,
    0
    }
    ;
    int
    authType
    =
    7
    ;
    RequestAuthLogin
    (
    Login
    ,
    Password
    ,
    authType
    )
    ;
    }
    }
    }
    BOOL APIENTRY
    DllMain
    (
    HMODULE hModule
    ,
    DWORD  ul_reason_for_call
    ,
    LPVOID lpReserved
    )
    {
    switch
    (
    ul_reason_for_call
    )
    {
    case
    DLL_PROCESS_ATTACH
    :
    Start
    (
    )
    ;
    break
    ;
    }
    return
    TRUE
    ;
    }

Возможно, я не совсем верно подхожу к реализации этой идеи?

root@localhost:~# 01.11.2024 10:50

@Rolo

Maksim 01.11.2024 11:21

По идее все правильно, можно еще с тех полей сохранить данные и потом в списке выбирать на какой аккаунт заходить в окошке html например или рядом раскрывающийся список с кнопкой. ?

BIT_hack 01.11.2024 11:25

Цитата:

Сообщение от Maksim

По идее все правильно, можно еще с тех полей сохранить данные и потом в списке выбирать на какой аккаунт заходить в окошке html например или рядом раскрывающийся список с кнопкой. ?

Забыл написать в шапке темы - При инжекте выводится сообщение



C++:


Код:

MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;

Это значит что dll нашлась и функция тоже



C++:


Код:

RequestAuthLogin
(
Login
,
Password
,
authType
)
;

Но при выполнение ее ничего не происходит

Maksim 01.11.2024 11:28

Цитата:

Сообщение от BIT_hack

Забыл написать в шапке темы - При инжекте выводится сообщение



C++:


Код:

MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;

Это значит что dll нашлась и функция тоже



C++:


Код:

RequestAuthLogin
(
Login
,
Password
,
authType
)
;

Но при выполнение ее ничего не происходит

Может authtype нужен другой? По идее клиент бы написал сообщение, пароль не правильный как минимум или зашел на сервер. ?

BIT_hack 01.11.2024 11:29

Цитата:

Сообщение от Maksim

Может authtype нужен другой? По идее он бы написал сообщение, пароль не правильный как минимум или зашел на сервер. ?

Проверял вообще тишина никакой реакции(

Maksim 01.11.2024 11:31

Цитата:

Сообщение от BIT_hack

Проверял вообще тишина никакой реакции(

Хорошо бы в ida посмотреть, что это и какие данные нужны. Может нативная форма подставляет данные с чем то еще, не просто текст.

Вот например с одного форума, может как подсказка из fasm:

Код:


Код:

proc RequestAuthLogin uses esi, pLogin:DWORD,pPassword:DWORD,Param:DWORD

Maksim 01.11.2024 11:48

Наверное так может:

Код:


Код:

wchar_t Login[] = L"admin"; // Логин в формате UTF-16
wchar_t Password[] = L"admin"; // Пароль в формате UTF-16
int authType = 7;

int result = RequestAuthLogin((unsigned short*)Login, (unsigned short*)Password, authType);
if (result != 0) {
  MessageBoxA(NULL, L"Ошибка входа!", L"", MB_OK);
}


Maksim 01.11.2024 12:55

Вот еще дополню для it:

Цитата:

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

Вызываем api функцию клиента.

Код:


Код:

int (__fastcall

*UNetworkHandler_RequestAuthLogin)(UNetworkHandler*, int, wchar_t const

* login, wchar_t const * password,int param) = 0;

Код:


Код:

(FARPROC&) UNetworkHandler_RequestAuthLogin = GetProcAddress(hEngine, "?RequestAuthLogin@UNetworkHandler@@UAEHPB_W0H@Z");
Код:


Код:

(*UNetworkHandler_RequestAuthLogin)(UNH, 0/*что угодно*/, login, password, 0);
Надо изначально получить UNH, это указатель на объект UNetworkHandler в памяти.

Для этого есть конструктор UNH и вызывает на старте клиента.


Код:


Код:

?InternalConstructor@UNetworkHandler@@SAXPAX@Z


BIT_hack 01.11.2024 13:40

Цитата:

Сообщение от Maksim

Вот еще дополню для it:

Эти обрывки кода не помогут(

Charmant 01.11.2024 14:30

Цитата:

Сообщение от BIT_hack

Но при выполнение ее ничего не происходит

Потому что указатель на UNetworkHandler не передается. Я начинал делать свою реализацию автологина на эпилоге, но пока забросил т.к. лень редактировать интерфейс и окна. Вот простенький пример как можно инициализировать и вызвать RequestAuthLogin:

C++:


Код:

class
UNetworkHandler
{
}
;
typedef
int
(
__fastcall
*
RequestAuthLogin_fn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
namespace
{
uintptr_t UNetworkOffset
=
0x71d274
;
// для ИЛ клиента смещение будет другим
UNetworkHandler
*
UNetwork
=
nullptr
;
RequestAuthLogin_fn fRequestAuthLogin
=
nullptr
;
}
void
Init
(
)
{
HMODULE hEngineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
hEngineModule
!=
nullptr
)
{
uintptr_t UNetworkAddress
=
(
reinterpret_cast

(
hEngineModule
)
)
+
UNetworkOffset
;
UNetwork
=
*
reinterpret_cast

(
UNetworkAddress
)
;
fRequestAuthLogin
=
(
RequestAuthLogin_fn
)
GetProcAddress
(
hEngineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
}
}
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
{
if
(
UNetwork
!=
nullptr
&&
fRequestAuthLogin
!=
nullptr
)
{
fRequestAuthLogin
(
UNetwork
,
0
,
login
,
password
,
0
)
;
}
}


BIT_hack 01.11.2024 14:33

Спасибо но откуда вытащить

Цитата:

Сообщение от Charmant

Потому что указатель на UNetworkHandler не передается. Я начинал делать свою реализацию автологина на эпилоге, но пока забросил т.к. лень редактировать интерфейс и окна. Вот простенький пример как можно инициализировать и вызвать RequestAuthLogin:

Спасибо но откуда взять?

uintptr_t UNetworkOffset = 0x71d274; // для ИЛ клиента смещение будет другим

Charmant 01.11.2024 14:36

Цитата:

Сообщение от BIT_hack

Спасибо но откуда вытащить

Спасибо но откуда взять?
uintptr_t UNetworkOffset = 0x71d274; // для ИЛ клиента смещение будет другим

Найти ссылку в функциях-членах класса. Например:

Maksim 01.11.2024 15:20

Надо будет auto dumper сделать по маске для получения оффсета от c1 до hf ?

ANZO 01.11.2024 15:33

Учтите что UNetworkHandler при аттаче библиотеки может не существовать вовсе. Запрашивать RequestAuthLogin нужно после того как клиент загрузился (окно логин-пароль): проще всего перехватывать первый вызов UNetworkHandler::Tick() (?Tick@UNetworkHandler@@UAEXM@Z)

BIT_hack 01.11.2024 15:37

Цитата:

Сообщение от Charmant

Найти ссылку в функциях-членах класса. Например:

Попробовал на IT и HF не сработало хотя все функции отработали. UNetworkOffset = менял под каждый клиент

C++:


Код:

// dllmain.cpp : Определяет точку входа для приложения DLL.
#include "pch.h"
#include "string"
class
UNetworkHandler
{
}
;
typedef
int
(
__fastcall
*
RequestAuthLogin_fn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
// Объявление функции RequestLogin
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
;
namespace
{
uintptr_t UNetworkOffset
=
0x3d5ac0
;
// для ИЛ клиента смещение будет другим
UNetworkHandler
*
UNetwork
=
nullptr
;
RequestAuthLogin_fn fRequestAuthLogin
=
nullptr
;
}
void
Init
(
)
{
HMODULE hEngineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
hEngineModule
!=
nullptr
)
{
uintptr_t UNetworkAddress
=
(
reinterpret_cast

(
hEngineModule
)
)
+
UNetworkOffset
;
UNetwork
=
*
reinterpret_cast

(
UNetworkAddress
)
;
MessageBox
(
NULL
,
L
"Все данные собраны вход!!!!!"
,
L
""
,
MB_OK
)
;
fRequestAuthLogin
=
(
RequestAuthLogin_fn
)
GetProcAddress
(
hEngineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
RequestLogin
(
L
"admin"
,
L
"admin"
)
;
}
}
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
{
MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;
if
(
UNetwork
!=
nullptr
&&
fRequestAuthLogin
!=
nullptr
)
{
fRequestAuthLogin
(
UNetwork
,
0
,
login
,
password
,
0
)
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD  ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
Init
(
)
;
break
;
}
return
TRUE
;
}


ANZO 01.11.2024 15:37

Цитата:

Сообщение от Maksim

Надо будет auto dumper сделать по маске для получения оффсета от c1 до hf ?

Оффсет можно и не искать вовсе, достаточно найти в экспортах того же engine global структуру которая светит в экспорт и где есть ссылка на UNetworkHandler. Сходу не скажу где, но знаю что точно есть такие.

Maksim 01.11.2024 16:03

Цитата:

Сообщение от ANZO

Оффсет можно и не искать вовсе, достаточно найти в экспортах того же engine global структуру которая светит в экспорт и где есть ссылка на UNetworkHandler. Сходу не скажу где, но знаю что точно есть такие.

Есть вроде такое:

Код:


Код:

?InternalConstructor@UNetworkHandler
Через это наверное можно сделать. ?

Charmant 01.11.2024 16:03

Цитата:

Сообщение от BIT_hack

Попробовал на IT и HF не сработало хотя все функции отработали. UNetworkOffset = менял под каждый клиент

C++:


Код:

// dllmain.cpp : Определяет точку входа для приложения DLL.
#include "pch.h"
#include "string"
class
UNetworkHandler
{
}
;
typedef
int
(
__fastcall
*
RequestAuthLogin_fn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
// Объявление функции RequestLogin
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
;
namespace
{
uintptr_t UNetworkOffset
=
0x3d5ac0
;
// для ИЛ клиента смещение будет другим
UNetworkHandler
*
UNetwork
=
nullptr
;
RequestAuthLogin_fn fRequestAuthLogin
=
nullptr
;
}
void
Init
(
)
{
HMODULE hEngineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
hEngineModule
!=
nullptr
)
{
uintptr_t UNetworkAddress
=
(
reinterpret_cast

(
hEngineModule
)
)
+
UNetworkOffset
;
UNetwork
=
*
reinterpret_cast

(
UNetworkAddress
)
;
MessageBox
(
NULL
,
L
"Все данные собраны вход!!!!!"
,
L
""
,
MB_OK
)
;
fRequestAuthLogin
=
(
RequestAuthLogin_fn
)
GetProcAddress
(
hEngineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
RequestLogin
(
L
"admin"
,
L
"admin"
)
;
}
}
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
{
MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;
if
(
UNetwork
!=
nullptr
&&
fRequestAuthLogin
!=
nullptr
)
{
fRequestAuthLogin
(
UNetwork
,
0
,
login
,
password
,
0
)
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD  ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
Init
(
)
;
break
;
}
return
TRUE
;
}


0x3d5ac0 как смещение UNH выглядит сомнительным. В клиенте ил 746, который скачан у меня, смещение = 0x81F538.

И в DllMain я бы не стал сразу вызывать логин, половина клиента еще не загружена.

Цитата:

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


C++:


Код:

#include "pch.h"
#include "string"
class
UNetworkHandler
{
}
;
typedef
int
(
__fastcall
*
RequestAuthLogin_fn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
// Объявление функции RequestLogin
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
;
namespace
{
uintptr_t UNetworkOffset
=
0x81F538
;
// для ИЛ клиента смещение будет другим
UNetworkHandler
*
UNetwork
=
nullptr
;
RequestAuthLogin_fn fRequestAuthLogin
=
nullptr
;
}
void
Init
(
)
{
HMODULE hEngineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
hEngineModule
!=
nullptr
)
{
uintptr_t UNetworkAddress
=
(
reinterpret_cast

(
hEngineModule
)
)
+
UNetworkOffset
;
UNetwork
=
*
reinterpret_cast

(
UNetworkAddress
)
;
MessageBox
(
NULL
,
L
"Все данные собраны вход!!!!!"
,
L
""
,
MB_OK
)
;
fRequestAuthLogin
=
(
RequestAuthLogin_fn
)
GetProcAddress
(
hEngineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
RequestLogin
(
L
"admin"
,
L
"admin"
)
;
}
}
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
{
if
(
UNetwork
!=
nullptr
&&
fRequestAuthLogin
!=
nullptr
)
{
MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;
fRequestAuthLogin
(
UNetwork
,
0
,
login
,
password
,
0
)
;
}
}
DWORD WINAPI
test
(
LPVOID lpParameter
)
{
Sleep
(
7000
)
;
Init
(
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD  ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
DisableThreadLibraryCalls
(
hModule
)
;
{
HANDLE hThread
=
CreateThread
(
NULL
,
0
,
test
,
NULL
,
0
,
NULL
)
;
if
(
hThread
!=
NULL
)
{
CloseHandle
(
hThread
)
;
}
}
break
;
}
return
TRUE
;
}


Цитата:

Сообщение от ANZO

Оффсет можно и не искать вовсе, достаточно найти в экспортах того же engine global структуру которая светит в экспорт и где есть ссылка на UNetworkHandler. Сходу не скажу где, но знаю что точно есть такие.

Тоже верно. На самом деле есть несколько способов получить указатель. В моем случае мне было удобнее получать по конкретному смещению

BIT_hack 01.11.2024 16:16

Цитата:

Сообщение от Charmant

0x3d5ac0 как смещение UNH выглядит сомнительным. В клиенте ил 746, который скачан у меня, смещение = 0x81F538.
И в DllMain я бы не стал сразу вызывать логин, половина клиента еще не загружена.

В первом случае как вы написали ничего не происходит во втором игра начинает тормозить.

Насчет dll я ее инжектю когда игра уже запущена.

BIT_hack 01.11.2024 16:23

Charmant​Ваш кодс работал для IT

Charmant 01.11.2024 16:24

Цитата:

Сообщение от BIT_hack

В первом случае как вы написали ничего не происходит во втором игра начинает тормозить.
Насчет dll я ее инжектю когда игра уже запущена.

Ну вот судя по этому скрину, если базовый адрес енжины 20000000, то смещение UNH для этой енжины равно 0x77ed80

BIT_hack 01.11.2024 16:29

Цитата:

Сообщение от Charmant

Ну вот судя по этому скрину, если базовый адрес енжины 20000000, то смещение UNH для этой енжины равно 0x77ed80

Спасибо чуть позже отпишу нужно ехать срочно!

Maksim 01.11.2024 16:48

Я правильно понял, можно сделать так без привязки к оффсету?

Цитата:

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


C++:


Код:

#include "pch.h"
#include "string"
class
UNetworkHandler
{
}
;
// Объявление типа для функции RequestAuthLogin
typedef
int
(
__fastcall
*
RequestAuthLogin_fn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
// Объявление типа для функции InternalConstructor
typedef
void
(
__stdcall
*
InternalConstructor_fn
)
(
void
*
)
;
// Объявление функции RequestLogin
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
;
namespace
{
uintptr_t UNetworkOffset
=
0
;
// Смещение не используется
UNetworkHandler
*
UNetwork
=
nullptr
;
RequestAuthLogin_fn fRequestAuthLogin
=
nullptr
;
InternalConstructor_fn fInternalConstructor
=
nullptr
;
}
void
Init
(
)
{
HMODULE hEngineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
hEngineModule
!=
nullptr
)
{
// Получаем адрес функции InternalConstructor
fInternalConstructor
=
(
InternalConstructor_fn
)
GetProcAddress
(
hEngineModule
,
"?InternalConstructor@UNetworkHandler@@SAXPAX@Z"
)
;
if
(
fInternalConstructor
!=
nullptr
)
{
// Вызов функции InternalConstructor для инициализации UNetwork, если нужно
fInternalConstructor
(
&
UNetwork
)
;
// Проверка на успешное извлечение UNetwork
if
(
UNetwork
!=
nullptr
)
{
MessageBox
(
NULL
,
L
"Все данные собраны вход!!!!!"
,
L
""
,
MB_OK
)
;
// Получаем адрес функции RequestAuthLogin
fRequestAuthLogin
=
(
RequestAuthLogin_fn
)
GetProcAddress
(
hEngineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
// Попытка авторизации
RequestLogin
(
L
"admin"
,
L
"admin"
)
;
}
}
}
}
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
{
if
(
UNetwork
!=
nullptr
&&
fRequestAuthLogin
!=
nullptr
)
{
MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;
fRequestAuthLogin
(
UNetwork
,
0
,
login
,
password
,
0
)
;
}
}
DWORD WINAPI
test
(
LPVOID lpParameter
)
{
Sleep
(
7000
)
;
Init
(
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD  ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
DisableThreadLibraryCalls
(
hModule
)
;
{
HANDLE hThread
=
CreateThread
(
NULL
,
0
,
test
,
NULL
,
0
,
NULL
)
;
if
(
hThread
!=
NULL
)
{
CloseHandle
(
hThread
)
;
}
}
break
;
}
return
TRUE
;
}



Charmant 01.11.2024 17:16

Цитата:

Сообщение от Maksim

Я правильно понял, можно сделать так без привязки к оффсету?
Цитата:

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


C++:


Код:

#include "pch.h"
#include "string"
class
UNetworkHandler
{
}
;
// Объявление типа для функции RequestAuthLogin
typedef
int
(
__fastcall
*
RequestAuthLogin_fn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
// Объявление типа для функции InternalConstructor
typedef
void
(
__stdcall
*
InternalConstructor_fn
)
(
void
*
)
;
// Объявление функции RequestLogin
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
;
namespace
{
uintptr_t UNetworkOffset
=
0
;
// Смещение не используется
UNetworkHandler
*
UNetwork
=
nullptr
;
RequestAuthLogin_fn fRequestAuthLogin
=
nullptr
;
InternalConstructor_fn fInternalConstructor
=
nullptr
;
}
void
Init
(
)
{
HMODULE hEngineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
hEngineModule
!=
nullptr
)
{
// Получаем адрес функции InternalConstructor
fInternalConstructor
=
(
InternalConstructor_fn
)
GetProcAddress
(
hEngineModule
,
"?InternalConstructor@UNetworkHandler@@SAXPAX@Z"
)
;
if
(
fInternalConstructor
!=
nullptr
)
{
// Вызов функции InternalConstructor для инициализации UNetwork, если нужно
fInternalConstructor
(
&
UNetwork
)
;
// Проверка на успешное извлечение UNetwork
if
(
UNetwork
!=
nullptr
)
{
MessageBox
(
NULL
,
L
"Все данные собраны вход!!!!!"
,
L
""
,
MB_OK
)
;
// Получаем адрес функции RequestAuthLogin
fRequestAuthLogin
=
(
RequestAuthLogin_fn
)
GetProcAddress
(
hEngineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
// Попытка авторизации
RequestLogin
(
L
"admin"
,
L
"admin"
)
;
}
}
}
}
void
RequestLogin
(
const
wchar_t
*
login
,
const
wchar_t
*
password
)
{
if
(
UNetwork
!=
nullptr
&&
fRequestAuthLogin
!=
nullptr
)
{
MessageBox
(
NULL
,
L
"Попытка входа в игру!"
,
L
""
,
MB_OK
)
;
fRequestAuthLogin
(
UNetwork
,
0
,
login
,
password
,
0
)
;
}
}
DWORD WINAPI
test
(
LPVOID lpParameter
)
{
Sleep
(
7000
)
;
Init
(
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD  ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
DisableThreadLibraryCalls
(
hModule
)
;
{
HANDLE hThread
=
CreateThread
(
NULL
,
0
,
test
,
NULL
,
0
,
NULL
)
;
if
(
hThread
!=
NULL
)
{
CloseHandle
(
hThread
)
;
}
}
break
;
}
return
TRUE
;
}



Не думаю что так сработает. Вроде смысл в том чтобы перехватывать вызов InternalConstructor и забирать значение UNH, а не самостоятельный вызов этой фунции.

Maksim 01.11.2024 17:21

Цитата:

Сообщение от Charmant

Не думаю что так сработает. Вроде смысл в том чтобы перехватывать вызов InternalConstructor и забирать значение UNH, а не самостоятельный вызов этой фунции.

Было бы универсальное решение без поиска оффсета, но вроде в верном направлении.

Где-то упускаю ?

PalevoPWNZ 01.11.2024 17:32

Цитата:

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

Если сделаете для ИТ готов приобрести.


Maksim 01.11.2024 17:38

Цитата:

Сообщение от PalevoPWNZ

Цитата:

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

Если сделаете для ИТ готов приобрести.


Так уже, тут вопрос в другом ?

BIT_hack 01.11.2024 19:10

Цитата:

Сообщение от Maksim

Так уже, тут вопрос в другом ?

В интерлюдия не нашел такой функции ?InternalConstructor@UNetworkHandler@@SAXPAX@Z

Maksim 01.11.2024 19:16

Цитата:

Сообщение от BIT_hack

В интерлюдия не нашел такой функции ?InternalConstructor@UNetworkHandler@@SAXPAX@Z

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

Если поискать только так должно найти:

Код:


Код:

InternalConstructor@UNetworkHandler

PalevoPWNZ 01.11.2024 19:18

Цитата:

Сообщение от PalevoPWNZ

Цитата:

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

Если сделаете для ИТ готов приобрести.


Если готовы сделать под ключ, пишите цену в ТГ. Ссылка

Maksim 01.11.2024 19:19

Цитата:

Сообщение от PalevoPWNZ

Если готовы сделать под ключ, пишите цену в ТГ. Ссылка

Вам в раздел поиска исполнителя, не здесь.

Ищу исполнителя

Поиск исполнителя на платной основе.

mmo-dev.info

BIT_hack 01.11.2024 19:21

Цитата:

Сообщение от Maksim

InternalConstructor@UNetworkHandler

Нет в интерлюдии нет такого в HF уже есть я проверил

Maksim 01.11.2024 19:24

Цитата:

Сообщение от BIT_hack

Нет в интерлюдии нет такого в HF уже есть я проверил

Может можно другую функцию из it которая есть и в hf, не хотелось бы каждый раз подбирать под патч свой offset. ?

AmaTo 01.11.2024 19:37

Готов купить данную функцию под ит (пишите в лс цену)

BIT_hack 01.11.2024 19:44

Цитата:

Сообщение от Charmant

Ну вот судя по этому скрину, если базовый адрес енжины 20000000, то смещение UNH для этой енжины равно 0x77ed80

Мне кажется я неправильно высчитываю (опыта мало в этом деле)

Вот я нашел офсет EAX,[DAT_10b1f538] он будет равен 0xb1f538

Самое интересное что твой 0x81F538 работает а мой нет)

crossover 01.11.2024 20:09

Для локалки пойдет, а как только возьмёте стрикс/смарт/аа пойдет ваша реализация в лес на долго и безвозвратно)

BIT_hack 01.11.2024 20:10

Цитата:

Сообщение от crossover

Для локалки пойдет, а как только возьмёте стрикс/смарт/аа пойдет ваша реализация в лес на долго и безвозвратно)

Надо с чего то начинать)

crossover 01.11.2024 20:11

Цитата:

Сообщение от BIT_hack

Надо с чего то начинать)

100% согласен, это больше было адресовано тем кто желает это купить) что бы не тешили себя надеждами)

BIT_hack 01.11.2024 20:37

Charmant

Только что заметил отличие у тебя 8 а у меня b 0x81F538 - 0xb1f538

И самое странное, что твой hex работает а мой нет хотя в клиенте у мен b вместо 8)


Время: 03:01