Перейти к содержанию

VoLT

Пользователи
  • Постов

    21
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные VoLT

  1. Перехват функций + вызов функций игр написанных на Delphi

    Так же DDetours может перехватывать функции относящиеся к различным классам. Опять же Delphi only.

    library sr2;uses    Windows  , SysUtils  , DDetours // https://code.google.com/p/delphi-detours-library/  ;{$R *.res}var  dwThrdHack: Dword = 0;  dwThrdMain: Dword = 0;  dwThrdKeys: Dword = 0;  CALL: Boolean = False;  Trampoline: function(    p0: Integer;    p1: Integer;    p2: Integer;    p3: WideString): Integer;  dwLoadOffset: Dword;function TrampolineFunc(  p0: Integer;  p1: Integer;  p2: Integer;  p3: WideString): Integer;begin  OutputDebugString(PWideChar(p3));  Result := Trampoline(p0, p1, p2, p3);end;Function FuncKeys(const LPVOID: variant): Boolean;begin  while (True) do  begin    if (GetAsyncKeyState(VK_END) <> 0) then      CALL := True;    sleep(100);  end;end;function FuncMain(const LPVOID: variant): Boolean;begin  while (True) do  begin    asm      pushad;    end;    if CALL then    begin      OutputDebugString('FPS');      CALL := False;    end;    sleep(100);    asm      popad;    end;  end;end;Function HackThread(): Dword;var  cHandle: Cardinal;begin  repeat    sleep(500);  until (dwThrdMain = 0);  dwLoadOffset := GetModuleHandle(nil);  Dec(dwLoadOffset, $400000);  @Trampoline := InterceptCreate(Pointer($0051DD38 + dwLoadOffset), @TrampolineFunc);  CreateThread(nil, 0, @FuncKeys, nil, 0, dwThrdKeys);  CreateThread(nil, 0, @FuncMain, nil, 0, dwThrdMain);  Result := 0;end;procedure DllMain(reason: Integer);begin  case reason of    DLL_PROCESS_ATTACH:      begin        CreateThread(nil, 0, @HackThread, nil, 0, dwThrdHack);      end;    DLL_PROCESS_DETACH:      begin        if dwThrdMain <> 0 then CloseHandle(dwThrdMain);        if dwThrdKeys <> 0 then CloseHandle(dwThrdKeys);      end;  end;end;begin  OutputDebugString('inject');  DisableThreadLibraryCalls(hInstance);  DllProc := @DllMain;  DllProc(DLL_PROCESS_ATTACH);end.
    • Плюс 3
  2. Мастер скинь пожалуйста эту программу "Converter (HEX, DEC, BIN)"

    Не понимаю какого лешего этот вопрос тут, но раз хотели ответ, получайте http://www.hiew.ru/f.../sencalc106.zip он ещё и складывать умеет всё в ReadMe

    // MasterGH: программу скинул. Сообщения почистил. Пользоваться ли этой программой решайте сами.

  3. Далеко не всё можно реализовать изменением каких либо значений, например добавление в игру определённого оружия, или скажем каких либо игровых бонусов, а иногда в разы проще реализовать через процедуры игры.

    И так мной была написана DLL работоспособная на Космических рейнджерах 2: Перезагрузка которая добавляет текст в игру используя процедуры в игре :closeyes:

    void AddMsg()
    {
    BSTR bstr = SysAllocString(L"Галактика в опасности!");

    int curtime = *(DWORD *)(*(DWORD *)(*(DWORD *)(0x007058D0))+0x48); // в CE 0x007058D0+0x48
    //данный способ универсален можно расписать до сколь угодно глубокого вложения
    _call(0x006B67BC, 3, 7, curtime, bstr); // первый параметр адрес второй количество параметров остальное параметры

    DWORD *screens = *(DWORD **)(0x007056BC);
    BYTE index = *(BYTE *)(*(DWORD *)(0x00705DA8));
    DWORD curscreen = *(DWORD *)(screens[index]+0xB8); // поверьте в отладчике, при поиске сего чуда, код выглядит страшнее )
    // как реализовать его в CE без скрипта мне не довелось узнать
    _call(0x006A6374, 1, curscreen);

    SysFreeString(bstr);
    }

    woweg.th.png

    За сим всё, получилось несколько сумбурно, но исходные коды должны расказать большее, их можно скачать тут

    PS поскольку fastcall в Delphi и C++ отличается как хлеб и рама пришлось использовать обёртку - процедуру _call которая выполняет вызов процедур таким образом как это принято в Delphi

    PSS для компиляции требуется MinGW например можно заюзать Code::Blocks.

    PSSS чудную вставку на MSVC++ можно написать путём goto и меток

    PSSSS данным способом можно изголятся так же и на играх написанных на Borland C++

    • Плюс 2
  4. aliast собственно разобрал довольно быстро сравнивая в IDA похожие участки кода используя базу от listener'a и свежий дамп с exe эпизодов ... без него и неё ничего бы не вышло :closeyes:

    PS И да Шефы плохо отозвались об этом методе :closeyes:

  5. а ведь можно было использовать стандартные процедуры которые от скриптов :closeyes:

    если интересно могу подсказать

    Сорцы трейнера от 1с версии кажется 1031 не важно всё равно надо многое переписывать

    http://www.datafilehost.com/download-adf0f799.html

    И да он не может выполнять некоторые скриптовые функции

    ещё информации http://gtamodding.ru/w/index.php?title=Scripting.pas

    и ещё


    push offset loc_C04290
    push 62E319C6h // имя процедуры (в ранних версиях текстовое имя процедуры) ((
    call sub_4CDF70
    [00C05563]

    идём туда и находим процедуру получения ID игрока


    mov eax, dword_F1B4A4
    cmp eax, 0FFFFFFFFh
    jnz short loc_C02BA4
    xor eax, eax
    movsx eax, byte ptr [eax+4DAh]
    retn
    [00C02B90]  void GetPlayerId()

    ну и так дальше

    да в качестве бонуса )


    00C01650 - mov eax, [esp+arg_0]
    00C01654 - push esi
    00C01655 - push eax
    00C01656 - call sub_870960
    00C0165B - mov esi, eax
    00C0165D - mov eax, [esi+58Ch]
    00C01663 - mov eax, [eax+228h]
    00C01669 - add esp, 4
    00C0166C - test eax, eax
    00C0166E - jz short loc_C01675
    00C01670 - lea ecx, [eax+60h]
    00C01673 - jmp short loc_C01677
    00C01675 - xor ecx, ecx
    00C01677 - call sub_992BB0
    00C0167C - mov ecx, [esp+4+arg_4]
    00C01680 - cmp ecx, eax
    00C01682 - jge short loc_C016AE
    00C01684 - push 0
    00C01686 - push ecx
    00C01687 - mov ecx, [esi+58Ch]
    00C0168D - call sub_A158B0
    00C01692 - mov ecx, offset unk_15E3260
    00C01697 - call sub_A6F500
    00C0169C - cmp byte_182199E, 0
    00C016A3 - jz short loc_C016BF
    00C016A5 - mov byte_182199E, 0
    00C016AC - pop esi
    00C016AD - retn
    00C016AE - push 2710h
    00C016B3 - push ecx
    00C016B4 - mov ecx, [esi+58Ch]
    00C016BA - call sub_A158B0
    00C016BF - pop esi
    00C016C0 - retn
    [00C01650] void AlterWantedLevel(Player, unsigned int)

    После AlterWantedLevel не всегда изменяется уровень разыскиваемости сразу для того что бы применить незамедлительно необходимо так же выполнить [00C01700] ApplyWantedLevelChangeNow(Player)EXE взят с http://www.nodvd.net/850-gta-episodes-from-liberty-city-v11-ru-nodvd.html

    • Плюс 1
  6. Вызов процедуры из DLL

    Объявление:

    DWORD dwLoadOffset = ((DWORD)GetModuleHandle (NULL)-0x400000);
    void (__cdecl *AddScore)(int) = (void (__cdecl *)(int))(0xDEADBEEF + dwLoadOffset);

    где 0xDEADBEEF адрес процедуры которую мы хотим вызвать в игре

    Использование:

    AddScore(300);

    Тут важно одно - правильно определить какие параметры функции нужны и что она возвращает

  7. И так же добавлю что в ScriptHook от aru список хешей-функций встроен уж не знаю как он их надыбал

    В общем к чему это я ... если хотите спавн машин с помощью ScriptHook проблем нет ... если полностью свой тут вам потребуется определённые телодвижения о чём я и пытался сказать но как видимо ни А ни Б не поняли друг друга

  8. Куски трейнера для гта4 :rolleyes:

    Скачать

    упс а на свн gta4modding тока хидеры :lol:

    и да помнится после объединения рус и енг в один ехе случилось неприятное - все скриптовые команды стали хешами о хэшах можно прочесть тут http://www.hexblog.com/?p=193

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.