 |
|

30.12.2024, 20:16
|
|
Постоянный
Регистрация: 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
|
|
|

30.12.2024, 21:23
|
|
Новичок
Регистрация: 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`
|
|
|

30.12.2024, 21:34
|
|
Постоянный
Регистрация: 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.
|
|
|

31.12.2024, 10:56
|
|
Познающий
Регистрация: 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 для любой другой константы или функции.
|
|
|

05.02.2025, 10:55
|
|
Познающий
Регистрация: 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.
|
|
|

09.02.2025, 12:00
|
|
Новичок
Регистрация: 02.04.2009
Сообщений: 0
С нами:
9005360
Репутация:
0
|
|
хотелось бы полноценный гайд для новичков ибо из обрывков кода без навыка кодинга ничего не сделать
|
|
|

09.02.2025, 15:14
|
|
Постоянный
Регистрация: 06.05.2016
Сообщений: 328
С нами:
5273133
Репутация:
398
|
|
|
|
|

15.08.2025, 18:18
|
|
Постоянный
Регистрация: 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, запускаю клиент от имени админа (ну на случай, если прав на что-то не хватит), что я делаю не так?
|
|
|

15.08.2025, 22:28
|
|
Постоянный
Регистрация: 06.05.2016
Сообщений: 328
С нами:
5273133
Репутация:
398
|
|
Сообщение от Neo`
Копирую entry.dll и AutoLogin.ini в папку system - ничего не происходит при запуске, клиент IL, запускаю клиент от имени админа (ну на случай, если прав на что-то не хватит), что я делаю не так?
вот готовый вариант.
Auth login interlude
21 Апр 2025
Auth login interlude
тут как пример сорц .dll
Иконка ресурса
Передача данных .uc > .dll.
15 Янв 2025
rGuard,Interface.uc,dsetup
|
|
|

15.08.2025, 22:31
|
|
Постоянный
Регистрация: 14.08.2025
Сообщений: 612
С нами:
396007
Репутация:
0
|
|
Сообщение от LifeGame32
вот готовый вариант.
Auth login interlude
21 Апр 2025
Auth login interlude
тут как пример сорц .dll
Иконка ресурса
Передача данных .uc > .dll.
15 Янв 2025
rGuard,Interface.uc,dsetup
Попробовал - не работает.
В общем удалось пофиксить проблему исходников автора, у которого всё получилось, но при изменении ini файла не логинилось (фактически его исходники не читали пароль из ini файла), вот рабочий вариант:
Вы должны нажать кнопку "Мне нравится", чтобы увидеть скрытое содержимое.
Как сделаю финальный исходник (хочу добавить возможность брать не из ini а из флагов при запуске l2.exe, чтобы можно было просто ярлыки сделать на каждого персонажа) - выложу исходник и готовую скомпиленную dll.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|