Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler

494 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler

  1. 1. Восстановление С/С++ из ASM’aАнтон Кукоба C++ Saturday 2011
  2. 2. О чем не сегодняНи какого погружения в дебри ассемблераМы не будем разбирать как восстанавливаютсяструктуры, классы или стековые переменныеЭто не мастер класс по IDAДекомпилятора в Си не существуетОбсуждать прохождение Fallout тоже не будем 
  3. 3. Сегодня о другом Как можно вносить изменения в «чужой» код? И как можно использовать «чужой» код у себя? Почему листинг дизассемблера нельзя просто так скомпилировать? Как связывать свой код с «чужим»?При чем тут вообще Fallout к восстановлению в С++?
  4. 4. Как вносить изменения в код Патчи: 1) Обычный 2) in-line 3) Наращивание файла Хуки: 1) Подкладывание DLL 2) Дописывание в импорт 3) ИнжектЭТО ВСЕ РАВНО ПЛЯСКИ С БУБНОМ!
  5. 5. Как использовать чужой код у себя Хуки/патчи Прямой вызов Перенести ассемблерный кусок вручную DLL2Lib
  6. 6. DLL2LIBМАЛОВАТО БУДЕТ!
  7. 7. А что если руками декомпилировать? Долго Много ошибок Сложно тестировать Невозможно распределить работу Hex Rays – не декомпилятор !
  8. 8. Что ж за невезуха с дизассемблерами Неполное дизассемблирование Ошибки в генераторе ассемблера Олбанский синтаксис Теряются связи кода с данными Не интерактивно + нет Intellisence IDA – Interactive Disassembler
  9. 9. Генерация компилируемого ассемблера Минимум распознавания! Отключить: 1) Деманглинг 2) Flirt 3) Распознавание типов Исправить импорт Доработать напильником
  10. 10. Сборка в Visual Studio Пустой проект типа «windows application» Custom Build tool: ML.EXE /coff /Fl /Sf /I. /Zi /c /Cp /Zp1 /Zm /Ta !DEP && !ASLR Entry Point = startИ совсем чуточку везения…
  11. 11. Все будет Nuca-Cola!
  12. 12. Sfall и другие изобретения моддеров
  13. 13. Как заменять ассемблер на С++extern "C" __declspec(naked) int * jMyCFunc(Object *object){ static void * result; __asm pushad __asm push eax __asm call MyCFunc __asm mov result, eax __asm popad __asm mov eax, result __asm ret}extern _jMyCFunc : proc
  14. 14. Как вызывать ассемблер из С++extern "C" __declspec(naked) int CallAsmFunc(){ static void * result; __asm pushad __asm push eax __asm call AsmFunc __asm mov result, eax __asm popad __asm mov eax, result __asm ret}
  15. 15. Насколько это трудозатратно Подготовка базы: 1 день Подготовка ассемблера к компиляции: 1 день Перенос ассемблера в C++: 20 функций в день Fallout 2: 4300 функций – 10% библиотечных = ~ 200 человеко-дней 200 * 3 = 600 = 3 года если водиночкуFallout 2 был написан командой ЗА ГОД

×