![]() |
https://forum.antichat.xyz/attachments/28548946/
Код: Код:
void* __fastcall CChat_CChat(void* this_ptr, void *edx, void* pDevice, void* pFontRenderer, const char* Source);не могу сообразить как поменять значение в 14й строчке на нужное, этот this ставит в ступор |
Открой список структур в IDA и посмотри из чего состоит CChat; обращение по указателю - это фактически разыменовывание адреса по смещению от начала структуры до нужного элемента, m_nPageSize является первым элементом структуры, поэтому тебе повезло - просто представь адрес this в виде 32-битного числа (тип dd в IDA) и поменяй его на нужное
C++: Код:
*Но в твоем случае нужно, разумеется, патчить функцию, а не ставить хук, чтобы получить адрес на this, поскольку если ты сперва изменишь его, а потом вызовешь оригинал - оно ресетнется в 10 |
Цитата:
Код:
.text:10067C05 56 push esiesi я так понимаю будет как this? пробовал разные варианты, крашит к примеру Код: Код:
int* esi = reinterpret_cast(0x67C05); |
Цитата:
твоя ошибка в том, что ты не снимаешь протект + используешь абсолютный адрес, хотя длл, очевидно, встраивается в исполняемый процесс, получая свой сегмент памяти, поэтому адреса смещаются каждый запуск игры; использование абсолютных адресов возможно только для самой GTA, т.к. её адреса всегда будут начинаться с 0x400000 также в листинге мы видим адрес инструкции mov, а нам нужно поменять число 10 (0x0A), поэтому впоследствии к 0x67C6F нужно будет прибавить ещё 2: Цитата:
C++: Код:
constлучше, конечно, накатить на всё это дело удобный интерфейс, чтобы не приходилось сталкиваться вновь |
плюсы:
Код:
constпопытался захавать твою инфу с объяснением, попытался че то сделать с https://forum.antichat.xyz/attachments/28549305/ чтобы поменять 611 -> 20000 но дальше краша не ушел |
Цитата:
0x0E40D + 0x01 (0x0E40E) ну и точно также снять защиту с 4 байт, а не с 6, но это особо роли не сыграет |
Цитата:
|
Цитата:
C++: Код:
.Числа представлены в порядке little-endian (от большего байта к меньшему), поэтому мы видим что после инструкции cmp (hex: 3D) следует 63 02 (263), если бы число занимало один байт инструкция была бы более понятна: C++: Код:
.ну или в случае с нулём: C++: Код:
.как видишь, 3D всегда остаётся - это инструкция cmp, беря в качестве адреса тот, что показывает тебе IDA (0E40D) - ты берешь адрес, ссылающийся на эту инструкцию, а не на число, которое ты хочешь поменять, поэтому мы и делаем отступ на 1 байт: для совсем уж наглядности сделаю так: C++: Код:
. |
после того как произвел смену с 611 -> 20000
после чего закинул пару машинок в gta.img и vehicles.ide при спавне выбивает Warning(opcode 0x247): Exception 0xC0000005 at 0x40890A попытался посмотреть в иде по gta_sa по 0x40890A, но не увидел какой то логики и взаимосвязи с машинами |
Цитата:
|
| Время: 01:16 |