Анализ Dissect Data Structure 2
Охота на структуры и удивительное путешествие в мир структур в L4D2
1. Игру L4D2 в оконный режим
2. Установка плагина (позже)
3. Установка VEH отладчика, иначе вылеты
4. Первая миссия. Ищем адрес патронов. Бряк на адрес. Нашли инструкцию
Красным показано, что я не всю структуру проанализирую позже. Долго было ждать. Структура больше 5К байт...
5. Делаем сигнатуру любой инструкции при работе с патронами на всякий случай, если игра вылетит.
server.dll,83 BE 14 14 00 00 00 7F 4D
6. Переходим в код и ищем проскакивающие адреса на инструкции. Там один адрес нашего пистолета. Клик на него и переносим адрес начала будущей структуры в окно Dissect Window. Можно не создавать структуру (отказываемся). Кликаем "Scanner" (он будет на всех окнах dissrct data)
7. Далее побежало сканирование.
В игре можно что-то делать, можно ничего не делать. Долго ждать..
Меняю опции. Чувствительность как была так и осталась минимальная (это время ожидания прерывания на адресе умноженное на коэфициент чувсвительности и на 100 мс). Размер структуры меняю, до 1100
Наконец ~30 секунд дождался без вылетов (иногда бывают, возможно из-за VEH). Появился результат
Самые интересны это байтовые и float значения. и инструкции чтения. Их определит можно пока только по логам...
Меняю первый байт на 1 и пистолет стал очень быстро стрелять.
Ради чего это все и делалось, чтобы похожие адреса искать...
Если сравнить дефолтную расструктуризацию, она слева
Логи (для меня и для желающих) по определению типа по опкодам
+0 (2F3B49B0): vtDword 64FC73CB - mov edx,[ecx]
+28 (2F3B49D8): vtDword 6530433E - mov eax,[esi+28]
+4C (2F3B49FC): vtDword 651169A3 - cmp dword ptr [esi+30],00
+4F (2F3B49FF): vtDword 651169B6 - mov eax,[esi+30]
+53 (2F3B4A03): vtDword 65116C60 - mov eax,[ecx+34]
+64 (2F3B4A14): vtByte 64F8627D - cmp byte ptr [esi+64],00
+84 (2F3B4A34): vtDword 64F861F0 - movss xmm0,[esi+00000084]
+88 (2F3B4A38): vtDword 64F86215 - movss xmm2,[esi+00000088]
+8C (2F3B4A3C): vtDword 64F9F9A6 - movss xmm0,[eax+0000008C]
+90 (2F3B4A40): vtDword 64FF2CC6 - fld dword ptr [eax]
+C8 (2F3B4A78): vtDword 64FF2DA6 - mov ecx,[eax]
+CC (2F3B4A7C): vtDword 64FF2DE6 - mov ecx,[eax]
+E0 (2F3B4A90): vtDword 64FF2DA6 - mov ecx,[eax]
+104 (2F3B4AB4): vtDword 651141FA - mov eax,[eax]
+10C (2F3B4ABC): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+10D (2F3B4ABD): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+10E (2F3B4ABE): vtWord 64FF2D96 - movsx ecx,word ptr [eax]
+110 (2F3B4AC0): vtDword 64FF2DB6 - mov ecx,[eax]
+138 (2F3B4AE8): vtDword 64FBB772 - or [esi+00000138],edi
+171 (2F3B4B21): vtByte 64FBB7D4 - cmp byte ptr [esi+00000171],00
+172 (2F3B4B22): vtByte 64FA6572 - cmp byte ptr [esi+00000172],03
+173 (2F3B4B23): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+174 (2F3B4B24): vtDword 651141FA - mov eax,[eax]
+178 (2F3B4B28): vtDword 64FBB79D - mov eax,[esi+00000178]
+17C (2F3B4B2C): vtDword 64FBB7E8 - mov eax,[esi+0000017C]
+180 (2F3B4B30): vtDword 64FDD9A6 - mov eax,[ecx]
+188 (2F3B4B38): vtDword 64FF2D66 - fld dword ptr [eax]
+18C (2F3B4B3C): vtDword 64FF2D6D - fld dword ptr [eax+04]
+190 (2F3B4B40): vtDword 64FF2D73 - fld dword ptr [eax+08]
+194 (2F3B4B44): vtDword 64FF2D66 - fld dword ptr [eax]
+198 (2F3B4B48): vtDword 64FF2D6D - fld dword ptr [eax+04]
+19C (2F3B4B4C): vtDword 64FF2D73 - fld dword ptr [eax+08]
+1A0 (2F3B4B50): vtByte 64F9FD30 - movzx eax,word ptr [ecx+20]
+1A1 (2F3B4B51): vtByte 64F9FD30 - movzx eax,word ptr [ecx+20]
+1A2 (2F3B4B52): vtByte 64FDDBB0 - movzx eax,byte ptr [ecx+22]
+1A3 (2F3B4B53): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+1AA (2F3B4B5A): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+1AC (2F3B4B5C): vtDword 64FF2D66 - fld dword ptr [eax]
+1B0 (2F3B4B60): vtDword 64FF2D6D - fld dword ptr [eax+04]
+1B4 (2F3B4B64): vtDword 64FF2D73 - fld dword ptr [eax+08]
+1B8 (2F3B4B68): vtDword 64FF2D66 - fld dword ptr [eax]
+1BC (2F3B4B6C): vtDword 64FF2D6D - fld dword ptr [eax+04]
+1C0 (2F3B4B70): vtDword 64FF2D73 - fld dword ptr [eax+08]
+1E0 (2F3B4B90): vtDword 64FF2DA6 - mov ecx,[eax]
+1E4 (2F3B4B94): vtDword 64FF2DA6 - mov ecx,[eax]
+1E8 (2F3B4B98): vtDword 64FF2DA6 - mov ecx,[eax]
+1EC (2F3B4B9C): vtDword 64FF2DB6 - mov ecx,[eax]
+1F0 (2F3B4BA0): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+20C (2F3B4BBC): vtDword 651141FA - mov eax,[eax]
+210 (2F3B4BC0): vtDword 651141FA - mov eax,[eax]
+214 (2F3B4BC4): vtDword 64FF2CC6 - fld dword ptr [eax]
+218 (2F3B4BC8): vtDword 64FF2CC6 - fld dword ptr [eax]
+21C (2F3B4BCC): vtDword 64FF2CC6 - fld dword ptr [eax]
+220 (2F3B4BD0): vtDword 64FF2DE6 - mov ecx,[eax]
+22C (2F3B4BDC): vtDword 64FF2CC6 - fld dword ptr [eax]
+238 (2F3B4BE8): vtDword 64FF2DA6 - mov ecx,[eax]
+2B4 (2F3B4C64): vtDword 64FF2CC6 - fld dword ptr [eax]
+2E4 (2F3B4C94): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2E5 (2F3B4C95): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2E6 (2F3B4C96): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2E7 (2F3B4C97): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2E8 (2F3B4C98): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2E9 (2F3B4C99): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2EA (2F3B4C9A): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2EB (2F3B4C9B): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+2EC (2F3B4C9C): vtByte 64FF2DC6 - movzx ecx,byte ptr [eax]
+374 (2F3B4D24): vtDword 64FA65AC - mov edi,[esi+00000374]
+378 (2F3B4D28): vtDword 64FF2DE6 - mov ecx,[eax]
+37C (2F3B4D2C): vtDword 64FF2DE6 - mov ecx,[eax]
+380 (2F3B4D30): vtDword 64FF2DE6 - mov ecx,[eax]
+384 (2F3B4D34): vtDword 64FF2DE6 - mov ecx,[eax]
+388 (2F3B4D38): vtDword 64FA65B8 - movss xmm1,[ecx]
+38C (2F3B4D3C): vtDword 64FA660B - movss xmm1,[ecx+04]
+390 (2F3B4D40): vtDword 64FA6653 - movss xmm1,[ecx+08]
+394 (2F3B4D44): vtDword 64FA68AD - movss xmm1,[eax]
+398 (2F3B4D48): vtDword 64FA68E1 - movss xmm2,[eax+04]
+39C (2F3B4D4C): vtDword 64FA6904 - movss xmm2,[eax+08]
+3A0 (2F3B4D50): vtDword 64FDEC3A - mov ecx,[edi]
+3B8 (2F3B4D68): vtDword 6508F54F - test [eax+000003B8],edx
+42C (2F3B4DDC): vtDword 64F84E81 - fstp dword ptr [esi+0000042C]
+434 (2F3B4DE4): vtDword 64FF2DA6 - mov ecx,[eax]
+438 (2F3B4DE8): vtDword 64FF2D66 - fld dword ptr [eax]
+43C (2F3B4DEC): vtDword 64FF2D6D - fld dword ptr [eax+04]
+440 (2F3B4DF0): vtDword 64FF2D73 - fld dword ptr [eax+08]
+444 (2F3B4DF4): vtDword 64FF2DA6 - mov ecx,[eax]
+448 (2F3B4DF8): vtDword 64FF2DA6 - mov ecx,[eax]
+44C (2F3B4DFC): vtDword 64FF2DE6 - mov ecx,[eax]
Плагин выложу позже. Надо еще доработать и потестить.
Вот к примеру float распознал как Pointer и там где fst тоже по +42C тоже фигня. Это ошибки. Это быстро поправить, но могут быть еще ошибки.
Не менее интересны еще вложенные структурки, которые удается раскрыть (не все). Вот одна из них и усеяна параметрами, которые можно покрутить
Вложенные структуры пока отдельно можно создавать в окнах, чистить сканером, потом подставлять их в основную структуру по имени. В общем пока рано об этом писать.
Больше всего меня волнует польза, т.е. что можно с этим сделать. Пока только сразу вышел на скорострельность. Еще шесть параметров покрутил байтовых, ничего не дало. Надо еще попробовать выводить только смещения, которые работают на инструкцияъ чтения, а не "чтении и записи". Запись скорее всего не нужна. Значения просто активно перезаписываются в структуре. А вот оставлять смещения, с которыми работает только "чтение" скорее всего даст куда больше вероятности найти параметр настройки.
-
1
-
3
0 Комментариев
Рекомендуемые комментарии
Комментариев нет
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти