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

  #91  
Старый 30.12.2024, 20:16
LightFusion
Постоянный
Регистрация: 21.03.2018
Сообщений: 618
С нами: 4288626

Репутация: 512


По умолчанию

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

Yea I think that's the next level of debugging. Do you have any tutorials or guides anywhere that explain this topic? I was trying to find that offset manually using IDA Pro, but without any luck.
Find constructor first , manuals are on stackoverflow echange , ida pro forums and on google
 
Ответить с цитированием

  #92  
Старый 30.12.2024, 21:23
artuspl
Новичок
Регистрация: 03.10.2016
Сообщений: 28
С нами: 5057493

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

I have found it, in IDA, but the addresses does not tell me anything, the offset specified in topic is `0x81F538`. The starting address of engine.dll seems to be `10301005`
 
Ответить с цитированием

  #93  
Старый 30.12.2024, 21:34
LightFusion
Постоянный
Регистрация: 21.03.2018
Сообщений: 618
С нами: 4288626

Репутация: 512


По умолчанию

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

I have found it, in IDA, but the addresses does not tell me anything, the offset specified in topic is `0x81F538`. The starting address of engine.dll seems to be `10301005`
well thats because its only first part , then u have to find where it is used, in debugger mode.
 
Ответить с цитированием

  #94  
Старый 31.12.2024, 10:56
Charmant
Познающий
Регистрация: 08.03.2024
Сообщений: 89
С нами: 1150633

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

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

but the addresses does not tell me anything, the offset specified in topic is `0x81F538`.
0x81F538 - это RVA (Relative Virtual Address)

0x10300000 - base image address

0x10b1f538 - это VA (Virtual Address)

Для использования в коде нужен именно RVA offset:

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


DAT_10b1f538 - это VA для UNetworkHandler

Для получения RVA нужно вычесть из VA базовый адрес (RVA = VA - image base)

UNetworkOffset: 0x10b1f538 - 0x10300000 = 0x81F538.

Точно так же можно получить RVA для любой другой константы или функции.
 
Ответить с цитированием

  #95  
Старый 05.02.2025, 10:55
Blaburger
Познающий
Регистрация: 04.02.2025
Сообщений: 35
С нами: 671491

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

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

Код на с++ Visual Studio 2022

C++:


Код:
// Тип функции RequestAuthLogin
typedef
int
(
__fastcall
*
RequestAuthLoginFn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
.
.
.
.
.
.
.
.
.
// Вызов функции авторизации из игры
requestAuthLoginFn
(
*
unetwork
,
0
,
login
.
c_str
(
)
,
password
.
c_str
(
)
,
0
)
;
Since the function RequestAuthLogin exported from dll with __thiscall the more correct code will be

C++:


Код:
typedef
int
(
__thiscall
*
RequestAuthLoginFn
)
(
UNetworkHandler
*
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
requestAuthLoginFn
(
*
unetwork
,
login
.
c_str
(
)
,
password
.
c_str
(
)
,
0
)
;
The __fastcall calling convention also works (with an additional parameter) as Microsoft's implementation in MSVC is very similar to __thiscall.
 
Ответить с цитированием

  #96  
Старый 09.02.2025, 12:00
dina
Новичок
Регистрация: 02.04.2009
Сообщений: 0
С нами: 9005360

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

хотелось бы полноценный гайд для новичков ибо из обрывков кода без навыка кодинга ничего не сделать
 
Ответить с цитированием

  #97  
Старый 09.02.2025, 15:14
LifeGame32
Постоянный
Регистрация: 06.05.2016
Сообщений: 328
С нами: 5273133

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

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

хотелось бы полноценный гайд для новичков ибо из обрывков кода без навыка кодинга ничего не сделать
C моими познаниями с++ Ctrl+C и Ctrl+V тут предостаточно инфы.

готовое решение https://mmo-dev.info/threads/Как-сделать-Автологин-Интерлюдия.30142/post-227591
 
Ответить с цитированием

  #98  
Старый 15.08.2025, 18:18
Neo`
Постоянный
Регистрация: 14.08.2025
Сообщений: 612
С нами: 396007

Репутация: 0


По умолчанию

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

Вот код автологина для interlude, который требует доработки, но уже работает, особенно благодаря Charmant

Логин и пароль берется из файла AutoLogin.ini который должен лежать рядом с dll в вашей папке system игры.

AutoLogin.ini с таким содержимым:

Код:


Код:
[AutoLogin]
Login=admin
Password=admin
Код на с++ Visual Studio 2022

C++:


Код:
#include "pch.h"
#include 
#include 
extern
"C"
void
__declspec
(
dllexport
)
__stdcall
function1
(
)
{
//Заглушка для экспорта L2.exe (От крита клиента!)
}
namespace
{
enum
L2ConsoleState
{
Loading
=
0
,
Unknown
=
1
,
Login
=
2
,
CharCreate
=
3
,
CharSelect
=
4
,
InGame
=
5
}
;
class
UL2ConsoleWnd
{
}
;
UL2ConsoleWnd
*
UL2ConsoleWndPtr
=
nullptr
;
uintptr_t consoleOffset
=
0x3663bc
;
// для IL клиента
}
// Определение класса UNetworkHandler
class
UNetworkHandler
{
}
;
// Тип функции RequestAuthLogin
typedef
int
(
__fastcall
*
RequestAuthLoginFn
)
(
UNetworkHandler
*
,
int
,
const
wchar_t
*
,
const
wchar_t
*
,
int
)
;
// Смещение для UNetworkHandler в engine.dll
const
uintptr_t unetworkOffset
=
0x81F538
;
// Глобальные переменные для хранения указателей
UNetworkHandler
*
*
unetwork
=
nullptr
;
RequestAuthLoginFn requestAuthLoginFn
=
nullptr
;
// Функция для авторизации
static
void
RequestLogin
(
const
std
::
wstring
&
login
,
const
std
::
wstring
&
password
)
{
// Проверка инициализации указателей
if
(
!
unetwork
||
!
requestAuthLoginFn
)
{
return
;
}
// Вызов функции авторизации из игры
requestAuthLoginFn
(
*
unetwork
,
0
,
login
.
c_str
(
)
,
password
.
c_str
(
)
,
0
)
;
}
// Функция для чтения строки из INI-файла
static
void
ReadIniString
(
)
{
std
::
wstring login
;
std
::
wstring password
;
wchar_t
buffer
[
256
]
=
{
0
}
;
// Чтение логина и пароля из ini-файла
GetPrivateProfileStringW
(
L
"AutoLogin"
,
L
"Login"
,
L
""
,
buffer
,
_countof
(
buffer
)
,
L
".\\AutoLogin.ini"
)
;
login
=
buffer
;
// Чтение логина и пароля из ini-файла
GetPrivateProfileStringW
(
L
"AutoLogin"
,
L
"Login"
,
L
""
,
buffer
,
_countof
(
buffer
)
,
L
".\\AutoLogin.ini"
)
;
password
=
buffer
;
// Вызов функции авторизации
RequestLogin
(
login
,
password
)
;
}
static
void
L2StatusLoad
(
)
{
HMODULE hNwindowModule
=
nullptr
;
while
(
hNwindowModule
==
nullptr
)
{
hNwindowModule
=
GetModuleHandleW
(
L
"nwindow.dll"
)
;
Sleep
(
1000
)
;
}
// получение валидного указателя на UL2ConsoleWnd
uintptr_t pUL2ConsoleWnd
=
(
reinterpret_cast

(
hNwindowModule
)
)
+
consoleOffset
;
while
(
UL2ConsoleWndPtr
==
nullptr
)
{
UL2ConsoleWndPtr
=
*
reinterpret_cast

(
pUL2ConsoleWnd
)
;
Sleep
(
300
)
;
}
// получение адреса по которому записывается текущее состояние
L2ConsoleState
*
statePtr
=
reinterpret_cast

(
UL2ConsoleWndPtr
+
0x38
)
;
while
(
true
)
{
L2ConsoleState currentState
=
*
statePtr
;
switch
(
currentState
)
{
case
L2ConsoleState
::
Loading
:
//    MessageBoxW(NULL, L"загрузка", L"L2ConsoleState", MB_OK);
ReadIniString
(
)
;
exit
;
break
;
case
L2ConsoleState
::
Login
:
//MessageBoxW(NULL, L"лобби", L"L2ConsoleState", MB_OK);
break
;
case
L2ConsoleState
::
CharCreate
:
//MessageBoxW(NULL, L"cоздание чара", L"L2ConsoleState", MB_OK);
break
;
case
L2ConsoleState
::
CharSelect
:
//MessageBoxW(NULL, L"выбор чара", L"L2ConsoleState", MB_OK);
break
;
case
L2ConsoleState
::
InGame
:
//    MessageBoxW(NULL, L"в игре", L"L2ConsoleState", MB_OK);
break
;
}
Sleep
(
5000
)
;
}
}
// Поток для авторизации
static
DWORD WINAPI
TestThread
(
LPVOID lpParameter
)
{
L2StatusLoad
(
)
;
return
0
;
}
// Точка входа DLL
extern
"C"
__declspec
(
dllexport
)
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD  ul_reason_for_call
,
LPVOID lpReserved
)
{
if
(
ul_reason_for_call
==
DLL_PROCESS_ATTACH
)
{
// Отключение отслеживания вызовов функций библиотеки
DisableThreadLibraryCalls
(
hModule
)
;
// Получение модуля engine.dll
HMODULE engineModule
=
GetModuleHandleW
(
L
"engine.dll"
)
;
if
(
engineModule
)
{
// Получение адреса UNetworkHandler
unetwork
=
reinterpret_cast

(
reinterpret_cast

(
engineModule
)
+
unetworkOffset
)
;
// Получение адреса функции RequestAuthLogin
requestAuthLoginFn
=
(
RequestAuthLoginFn
)
GetProcAddress
(
engineModule
,
"?RequestAuthLogin@UNetworkHandler@@UAEHPAG0H@Z"
)
;
}
// Создание потока для авторизации
CreateThread
(
nullptr
,
0
,
TestThread
,
nullptr
,
0
,
nullptr
)
;
}
return
TRUE
;
}
И вот готовые файлы для тех, кто хочет настроить автологин (*Только вход в окно логина*): просто распакуйте архив в системную папку игры interlude и не забудьте изменить логин и пароль в файле AutoLogin.ini.
Копирую entry.dll и AutoLogin.ini в папку system - ничего не происходит при запуске, клиент IL, запускаю клиент от имени админа (ну на случай, если прав на что-то не хватит), что я делаю не так?
 
Ответить с цитированием

  #99  
Старый 15.08.2025, 22:28
LifeGame32
Постоянный
Регистрация: 06.05.2016
Сообщений: 328
С нами: 5273133

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

Цитата:
Сообщение от Neo`  

Копирую entry.dll и AutoLogin.ini в папку system - ничего не происходит при запуске, клиент IL, запускаю клиент от имени админа (ну на случай, если прав на что-то не хватит), что я делаю не так?
вот готовый вариант.

Auth login interlude

21 Апр 2025

Auth login interlude
  • LifeGame32
  • auth login interlude
  • Клиенты и патчи

тут как пример сорц .dll

Иконка ресурса

Передача данных .uc > .dll.

15 Янв 2025

rGuard,Interface.uc,dsetup
 
Ответить с цитированием

  #100  
Старый 15.08.2025, 22:31
Neo`
Постоянный
Регистрация: 14.08.2025
Сообщений: 612
С нами: 396007

Репутация: 0


По умолчанию

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

вот готовый вариант.

Auth login interlude

21 Апр 2025

Auth login interlude
  • LifeGame32
  • auth login interlude
  • Клиенты и патчи

тут как пример сорц .dll

Иконка ресурса

Передача данных .uc > .dll.

15 Янв 2025

rGuard,Interface.uc,dsetup
Попробовал - не работает.

В общем удалось пофиксить проблему исходников автора, у которого всё получилось, но при изменении ini файла не логинилось (фактически его исходники не читали пароль из ini файла), вот рабочий вариант:

Вы должны нажать кнопку "Мне нравится", чтобы увидеть скрытое содержимое.


Как сделаю финальный исходник (хочу добавить возможность брать не из ini а из флагов при запуске l2.exe, чтобы можно было просто ярлыки сделать на каждого персонажа) - выложу исходник и готовую скомпиленную dll.
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.