C++ Вопрос Client - Server Manual Map

Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2017
Сообщения
386
Реакции[?]
32
Поинты[?]
8K
Я решил сделать клиент-серверный мануал маппер. Чтоб дллка лежала с сервером, по запросу - сервер мапит дллку, данные на клиент отправляет в json. клиент принимает и записывает в игру. У меня есть исходник этой прелести, но он привязан к кске, и там есть манипуляции с импортами. В кс импорты свои, в кс2 другие, в расте вообще иначе. Мне нужно сделать универсальный маппер без дополнительных осложнений под игру, просто считать - передать - записать. Кто шарит и может помочь - отпишите пожалуйста в в дс mef1sto#4737
Сама связь с сервером, логины запросы уже есть и работают, нужен сам мап и инжект
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,608
Реакции[?]
872
Поинты[?]
113K
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2017
Сообщения
386
Реакции[?]
32
Поинты[?]
8K
а по оплате че? не указал
Бесплатно в доступе мапперов куча, мне просто нужно, чтобы объяснили на каком моменте кончается считывание и как это запихнуть в жсон
 
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2017
Сообщения
386
Реакции[?]
32
Поинты[?]
8K
Меня смущает вот это, это на сервере
C++:
DWORD dwImageBase = m_Session->m_dwAllocationBase;
    if ( dwImageBase )
    {
        // setup client
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x4 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "client.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup engine
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x8 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "engine.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup vgui
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0xC )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vgui.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup vgui2
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x10 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vgui2.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    
        // setup datacache
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x14 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "datacache.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    
        // setup material system
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x18 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "materialsystem.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    
        // setup vstdlib
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x1C )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vstdlib.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    
        // setup vphysics
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x20 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vphysics.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    
        // setup inputsystem
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x24 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "inputsystem.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    
        // setup filesystem_stdio
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x28 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "filesystem_stdio.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup localize
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x2C )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "localize.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup shaderapidx9
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x30 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "shaderapidx9.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    }

    // remove extra section
    SecureZeroMemory( ( void* )( ( DWORD )( m_Session->m_Image.data( ) ) + m_dwRelocs ), m_dwRelocSize );
А это в клиенте
C++:
// alloc memory
    m_ImageBase = AllocateMemory( m_hProcess, m_dwImageSize );

    // setup message
    nlohmann::json jAllocBase;
    jAllocBase[ _S( "Data" ) ][ _S( "ID" ) ]    = MessageType::SetAllocationBase;
    jAllocBase[ _S( "Data" ) ][ _S( "Base" ) ]    = ( DWORD )( m_ImageBase );
    
    printf(_S("Adding modules by name...\n"));
    // add modules
    AddModuleByName( dwClientDll, _S( "client.dll" ) );
    AddModuleByName( dwEngineDll, _S( "engine.dll" ) );
    AddModuleByName( dwD3D9, _S( "d3d9.dll" ) );
    AddModuleByName( dwMaterialSystem, _S( "materialsystem.dll" ) );
    AddModuleByName( dwFileSystem, _S( "filesystem_stdio.dll" ) );
    AddModuleByName( dwVSTDLib, _S( "vstdlib.dll" ) );
    AddModuleByName( dwDataCache, _S( "datacache.dll" ) );
    AddModuleByName( dwVPhyiscs, _S( "vphysics.dll" ) );
    AddModuleByName( dwInputSystem, _S( "inputsystem.dll" ) );
    AddModuleByName( dwLocalize, _S( "localize.dll" ) );
    AddModuleByName( dwShaderApiDX9, _S( "shaderapidx9.dll" ) );
    AddModuleByName( dwVGui, _S( "vguimatsurface.dll" ) );
    AddModuleByName( dwVGui2, _S( "vgui2.dll" ) );
    printf("Pushing modules...");
    // push modules
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "client.dll" ) ] = dwClientDll;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "engine.dll" ) ] = dwEngineDll;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "d3d9.dll" ) ] = dwD3D9;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "materialsystem.dll" ) ] = dwMaterialSystem;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "filesystem_stdio.dll" ) ] = dwFileSystem;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vstdlib.dll" ) ] = dwVSTDLib;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "datacache.dll" ) ] = dwDataCache;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vphysics.dll" ) ] = dwVPhyiscs;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "inputsystem.dll" ) ] = dwInputSystem;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "localize.dll" ) ] = dwLocalize;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "shaderapidx9.dll" ) ] = dwShaderApiDX9;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vgui.dll" ) ] = dwVGui;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vgui2.dll" ) ] = dwVGui2;

    // buffer
    auto szImportBuffer = jAllocBase.dump( ).c_str( );
    printf("Sending buffer...");
    // send buffer
    g_RequestManager->SendBuffer( m_Socket, ( void* )( szImportBuffer ), strlen( szImportBuffer ) );

    // imports
    char aImports[ 16384 ];
    ZeroMemory( aImports, 16384 );
    printf("Getting buffer...");
    // recv buffer
    g_RequestManager->RecvBuffer( m_Socket, aImports, 16384 );

    // setup import list
    m_jImportList = nlohmann::json::parse( aImports );
Как вообще упустить это, не привязываться к этим модулям кски? чтоб можно было и под другие игры использовать
 
Начинающий
Статус
Оффлайн
Регистрация
24 Июл 2021
Сообщения
44
Реакции[?]
21
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
27 Дек 2020
Сообщения
60
Реакции[?]
53
Поинты[?]
34K
Трансляция памяти субъективна в каждом случае, учитывая, что это вообще очень редкий кейс. Ты можешь найти только очертания проблемы, если будешь смотреть на пример с ксго, движки-же, как минимум, противоположно разные.
 
Забаненный
Статус
Оффлайн
Регистрация
27 Ноя 2022
Сообщения
77
Реакции[?]
26
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Меня смущает вот это, это на сервере
C++:
DWORD dwImageBase = m_Session->m_dwAllocationBase;
    if ( dwImageBase )
    {
        // setup client
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x4 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "client.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup engine
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x8 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "engine.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup vgui
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0xC )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vgui.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup vgui2
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x10 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vgui2.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
   
        // setup datacache
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x14 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "datacache.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
   
        // setup material system
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x18 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "materialsystem.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
   
        // setup vstdlib
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x1C )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vstdlib.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
   
        // setup vphysics
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x20 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "vphysics.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
   
        // setup inputsystem
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x24 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "inputsystem.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
   
        // setup filesystem_stdio
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x28 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "filesystem_stdio.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup localize
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x2C )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "localize.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );

        // setup shaderapidx9
        *( DWORD* )( ( DWORD )( m_Session->m_Image.data( ) ) + 0x30 )
            =
            _byteswap_ulong( _rotr( m_Session->m_dwModuleList[ FNV32( "shaderapidx9.dll" ) ] + m_Session->m_dwAllocationBase, 32 ) );
    }

    // remove extra section
    SecureZeroMemory( ( void* )( ( DWORD )( m_Session->m_Image.data( ) ) + m_dwRelocs ), m_dwRelocSize );
А это в клиенте
C++:
// alloc memory
    m_ImageBase = AllocateMemory( m_hProcess, m_dwImageSize );

    // setup message
    nlohmann::json jAllocBase;
    jAllocBase[ _S( "Data" ) ][ _S( "ID" ) ]    = MessageType::SetAllocationBase;
    jAllocBase[ _S( "Data" ) ][ _S( "Base" ) ]    = ( DWORD )( m_ImageBase );
   
    printf(_S("Adding modules by name...\n"));
    // add modules
    AddModuleByName( dwClientDll, _S( "client.dll" ) );
    AddModuleByName( dwEngineDll, _S( "engine.dll" ) );
    AddModuleByName( dwD3D9, _S( "d3d9.dll" ) );
    AddModuleByName( dwMaterialSystem, _S( "materialsystem.dll" ) );
    AddModuleByName( dwFileSystem, _S( "filesystem_stdio.dll" ) );
    AddModuleByName( dwVSTDLib, _S( "vstdlib.dll" ) );
    AddModuleByName( dwDataCache, _S( "datacache.dll" ) );
    AddModuleByName( dwVPhyiscs, _S( "vphysics.dll" ) );
    AddModuleByName( dwInputSystem, _S( "inputsystem.dll" ) );
    AddModuleByName( dwLocalize, _S( "localize.dll" ) );
    AddModuleByName( dwShaderApiDX9, _S( "shaderapidx9.dll" ) );
    AddModuleByName( dwVGui, _S( "vguimatsurface.dll" ) );
    AddModuleByName( dwVGui2, _S( "vgui2.dll" ) );
    printf("Pushing modules...");
    // push modules
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "client.dll" ) ] = dwClientDll;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "engine.dll" ) ] = dwEngineDll;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "d3d9.dll" ) ] = dwD3D9;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "materialsystem.dll" ) ] = dwMaterialSystem;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "filesystem_stdio.dll" ) ] = dwFileSystem;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vstdlib.dll" ) ] = dwVSTDLib;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "datacache.dll" ) ] = dwDataCache;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vphysics.dll" ) ] = dwVPhyiscs;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "inputsystem.dll" ) ] = dwInputSystem;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "localize.dll" ) ] = dwLocalize;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "shaderapidx9.dll" ) ] = dwShaderApiDX9;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vgui.dll" ) ] = dwVGui;
    jAllocBase[ _S( "Data" ) ][ _S( "Modules" ) ][ _S( "vgui2.dll" ) ] = dwVGui2;

    // buffer
    auto szImportBuffer = jAllocBase.dump( ).c_str( );
    printf("Sending buffer...");
    // send buffer
    g_RequestManager->SendBuffer( m_Socket, ( void* )( szImportBuffer ), strlen( szImportBuffer ) );

    // imports
    char aImports[ 16384 ];
    ZeroMemory( aImports, 16384 );
    printf("Getting buffer...");
    // recv buffer
    g_RequestManager->RecvBuffer( m_Socket, aImports, 16384 );

    // setup import list
    m_jImportList = nlohmann::json::parse( aImports );
Как вообще упустить это, не привязываться к этим модулям кски? чтоб можно было и под другие игры использовать
я как понимаю это будет работать только в чите, для которого делался данный маппер, ты это можешь просто стереть я думаю
 
Похожие темы
Сверху Снизу