GTA Vice City > Справочная информация

Выкладываем наработки по анализу кода, дизассемблированные базы, адреса

<< < (2/16) > >>

xanser:
Может интересно будет, по-моему это 0x813D10 адресс указателя на полицейский вертолет.
Если он полноценный объект класса CVehicle (или CHeli), то доступны например его координаты:

--- Код: C++ ---DWORD* dwPoliceHeli  = (DWORD*) (0x813D10); if (*dwPoliceHeli) {        BYTE* bHeliBlock = (BYTE*)(*dwPoliceHeli);                                float* fHeliX = (float*)(bHeliBlock+0x34);        float* fHeliY = (float*)(bHeliBlock+0x38);        float* fHeliZ = (float*)(bHeliBlock+0x3C);                                *fHeliZ = max(*fHeliZ,100);     // не дает приближаться ниже 100 метров} 
Почему этот адрес никто не искал раньше, лично меня бесит этот тупой хеликоптер, лучше сделать свои вертолеты.
Можно также активировать второй вертолет, например при 6 звездах, это известный адрес 0xA10ADB


Sektor:
Цвет лазера снайперки LASER.
Не знаю, но может быть кому это пригодиться, изменить сам цвет лазера, не точки текстуры. Ниже дам конкретные адреса:


--- Код: C++ ---005CCB76 //Alpha005CCB7B //B005CCB7D //G005CCB7F  //R

Если присвоим такие значение на примере:



--- Код: C++ ---  *(BYTE*)0x05CCB7B = 0;  *(BYTE*)0x05CCB7D = 255;  *(BYTE*)0x05CCB7F = 0; 
то получим это:


Если сделаем так:


--- Код: C++ ---  *(BYTE*)0x05CCB7B = 255;  *(BYTE*)0x05CCB7D = 0;  *(BYTE*)0x05CCB7F  = 0; 
То результат будет такой:



Если захотите более подробно рассмотреть код, то кнопка "G" вбить туда адрес 05CCB7B в IDA, и вы окажитесь в нужном месте.

mike43842:
так как в ассемблере я понимаю мало,  sektor мог бы ты объяснить как ты определил где именно какой цвет и альфу?
005CCB76 //Alpha
005CCB7B //B
005CCB7D //G
005CCB7F  //R

Sektor:
Тут совсем все просто:


--- Код: ASM ---.text:005CCB50 070 FF 35 08 D4 69 00                             push    dword_69D408    ; float.text:005CCB56 074 6A 00                                         push    0               ; char.text:005CCB58 078 FF 35 98 D3 69 00                             push    dword_69D398    ; float.text:005CCB5E 07C 6A 01                                         push    1               ; char.text:005CCB60 080 6A 00                                         push    0               ; char.text:005CCB62 084 6A 01                                         push    1               ; char.text:005CCB64 088 6A 00                                         push    0               ; char.text:005CCB66 08C 6A 00                                         push    0               ; char.text:005CCB68 090 FF 35 90 D4 69 00                             push    dword_69D490    ; float.text:005CCB6E 094 FF 35 94 D4 69 00                             push    dword_69D494    ; float.text:005CCB74 098 50                                            push    eax             ; int.text:005CCB75 09C 68 FF 00 00 00                                push    0FFh            ; char.text:005CCB7A 0A0 6A 00                                         push    0               ; char.text:005CCB7C 0A4 6A 00                                         push    0               ; char.text:005CCB7E 0A8 68 80 00 00 00                                push    80h             ; char.text:005CCB83 0AC 55                                            push    ebp             ; int.text:005CCB84 0B0 E8 17 5C F7 FF                                call    sub_5427A0 
call    sub_5427A0, это как раз и есть то, что рисует партиклы (CParticle), так вот первые у нее параметры, кроме push ebp вот эти:


--- Код: ASM ---.text:005CCB75 09C 68 FF 00 00 00                                push    0FFh            ; char.text:005CCB7A 0A0 6A 00                                         push    0               ; char.text:005CCB7C 0A4 6A 00                                         push    0               ; char.text:005CCB7E 0A8 68 80 00 00 00                                push    80h             ; char
Это и есть RGBA. Именно через push, функция при вызове принимает эти параметры как через стек. Хочу довести сведенья что вы можете по играть с этими значениями:


--- Код: ASM ---.text:005CCB50 070 FF 35 08 D4 69 00                    push    dword_69D408    ; float.text:005CCB58 078 FF 35 98 D3 69 00                             push    dword_69D398    ; float.text:005CCB68 090 FF 35 90 D4 69 00                             push    dword_69D490    ; float.text:005CCB6E 094 FF 35 94 D4 69 00                             push    dword_69D494    ; float 
Это передаются указатели на float значения, сами же значения находятся тут:


--- Код: ASM ---.data:0069D408 00 00 C0 3F                       dword_69D408    dd 3FC00000h .data:0069D398 00 00 00 00                       dword_69D398    dd 0  .data:0069D490 00 00 48 42                       dword_69D490    dd 42480000h  .data:0069D494 9A 99 99 3F                       dword_69D494    dd 3F99999Ah
Что-бы их перевести в более понятный вид float, для этого на примере выделим 3FC00000h это, затем в главном меню IDA, нажмем Edit->Operand type -> Number и наконец Floating Point и наша константа приобретает такой вид:


--- Код: ASM ---.data:0069D408 00 00 C0 3F                       dword_69D408    dd 1.5
Почему я назвал это константой?
потому-что она использовалась только для чтения, когда нажал кнопку X и проверил ее полностью:



Обратите внимание, как везде type установлен как r, это и есть просто чтение. Таким образом вы определили что это константа а не переменная, это трюк из реверсивной инженерии.

graveman:
xanser, Sektor. Да, весьма интересный материал.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Перейти к полной версии