SlideShare a Scribd company logo
1 of 17
Download to read offline
July 2015
How to add new arch in miasm
mslc university
miasm
✤ Фреймворк для reverse engineering написаный на Python
✤ Реализованы ассемблер, дизассемблер, транслятор в
промежуточное представление, символьное выполнение
и симулятор c JIT
✤ Умеет упрощать выражения (деобфускация)
✤ Умеет генерировать запросы к STP
✤ Жутко медленный :(
Текущие задачи RE. Почему не IDA?
✤ Анализ новых архитектур со всем существующим набором
инструментов и методов
✤ Нужна деобфускация
✤ Нужно анализировать связку библиотек в одном адресном
пространстве
✤ Нужно анализировать разные версии одной библиотеки (bindiff)
✤ Нужно декомпилировать в С (большие проекты)
✤ Нужно проверять какие значения могут быть у переменных
✤ Data mining
Что такое дизассемблер?
✤ декодирование бинарных данных в
соответсвующие имеющие смыслы поля (опкоды,
аргументы и т.п.)
✤ визуальное представление этих полей
Что такое ассемблер?
✤ синтаксический анализ текста
✤ выделение из нее идентификаторов
✤ кодирование их в двоичную форму
Что такое симулятор?
✤ хранение контекста выполнения (регистры,
память)
✤ обновление контекста (выполнение команды)
✤ while True:

inst = get_instruction(PC)

execute_instruction(inst, context)
Что такое символическая запись?
✤ Запись в виде математической формулы
✤ add R1, R2

mul R1, 4

add R1, 0x100
✤ R1: ((R1_init+R2_init)*4)+0x100
Шаблон архитектуры
commit d8b79aeb6e92de3df0abd03d6de30cc439952dfe
Author: snk <snk@ctf.su>
miasm2/analysis/machine.py | 10 +++-
miasm2/arch/hc16/__init__.py | 4 ++
miasm2/arch/hc16/arch.py | 131 ++++++++++++++++++++++++++
miasm2/arch/hc16/disasm.py | 10 ++++
miasm2/arch/hc16/regs.py | 32 +++++++++++
miasm2/arch/hc16/sem.py | 36 ++++++++++++
test/arch/hc16/arch.py | 41 ++++++++++++++
test/arch/hc16/sem.py | 54 ++++++++++++++++++
Самый минимум
✤ Добавить запись об архитектуре в

miasm2/analysis/machine.py
✤ Определить регистры в

miasm2/arch/hc16/regs.py
✤ в miasm2/arch/hc16/arch.py

class instruction_hc16(cpu.instruction)

class mn_hc16(cpu.cls_mn)
✤ Зарегистрировать дизасемблер (прослойка к дефолтному)

miasm2/arch/hc16/disasm.py
✤ Зарегистрировать транслятор в IR

miasm2/arch/hc16/sem.py
✤ Тесты!
Первые команды
✤ def hc16_op(name, fields, args=None, alias=False):

dct = {"fields": fields, "alias":alias}

if args != None:

dct['args'] = args 

type(name, (mn_hc16,), dct)
✤ hc16_op("nop", [bs(‘0010011101001100')])
✤ hc16_op("ldab", [bs(‘01110101’), imm8])
Первые команды
DEMO
Аргументы инструкции
✤ class m32r_reg(cpu.reg_noarg, cpu.m_arg):

reg_info = gpregs

parser = reg_info.parser
✤ class m32r_imm(cpu.imm_noarg):

parser = cpu.base_expr

def fromstring(self, s, parser_result=None)

def decode(self, v)

def encode(self)
Аргументы инструкции
✤ arg_R = cpu.bs(l=4, cls=(m32r_gpreg,))
✤ arg_dR = cpu.bs(l=4, cls=(m32r_deref_reg,))
✤ arg_pcdisp8 = cpu.bs(l=8, cls=(m32r_pcdisp8,),
fname="pcdisp", order=-1)
✤ arg_imm8 = cpu.bs(l=8, cls=(m32r_imm8,),
fname="imm", order=-1)
Аргументы инструкции
DEMO
Символьное выполнение
✤ @sbuild.parse

def add(Rdest, Rsrc):

Rdest = Rdest + Rsrc
✤ Все :)
Символьное выполнение
✤ def bc(target):

next = ExprId(ir.get_next_instr(instr))

PC = target if C else next

IRDst = PC



def ld(ir, instr, Rdest, Rsrc):

instr_ir = []

Rmem = instr.get_mem_expr(Rsrc).arg

instr_ir.append(ExprAff(Rdest, ExprMem(Rmem)))

if instr.is_post_inc():

instr_ir.append(ExprAff(Rmem, ExprOp('+', Rmem, ExprInt(int32(4)))))

return instr_ir, []

Символьное выполнение
DEMO

More Related Content

What's hot

Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Ontico
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 

What's hot (20)

Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Шишки, набитые за 15 лет использования акторов в C++
Шишки, набитые за 15 лет использования акторов в C++Шишки, набитые за 15 лет использования акторов в C++
Шишки, набитые за 15 лет использования акторов в C++
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 

Viewers also liked

Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23
DefconRussia
 
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC [DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
DefconRussia
 

Viewers also liked (17)

Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
 
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
 
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
 
nosymbols - defcon russia 20
nosymbols - defcon russia 20nosymbols - defcon russia 20
nosymbols - defcon russia 20
 
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
 
Георгий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangГеоргий Зайцев - Reversing golang
Георгий Зайцев - Reversing golang
 
Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23
 
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC [DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
 
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
 
Weakpass - defcon russia 23
Weakpass - defcon russia 23Weakpass - defcon russia 23
Weakpass - defcon russia 23
 
Vm ware fuzzing - defcon russia 20
Vm ware fuzzing  - defcon russia 20Vm ware fuzzing  - defcon russia 20
Vm ware fuzzing - defcon russia 20
 
Attacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей ТюринAttacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей Тюрин
 
Zn task - defcon russia 20
Zn task  - defcon russia 20Zn task  - defcon russia 20
Zn task - defcon russia 20
 
HTTP HOST header attacks
HTTP HOST header attacksHTTP HOST header attacks
HTTP HOST header attacks
 
Cisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-oneCisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-one
 
Defcon Moscow #9 - Oleg Kupreev "Telecommunication Hardware Vulnerabilities"
Defcon Moscow #9 - Oleg Kupreev "Telecommunication Hardware Vulnerabilities"Defcon Moscow #9 - Oleg Kupreev "Telecommunication Hardware Vulnerabilities"
Defcon Moscow #9 - Oleg Kupreev "Telecommunication Hardware Vulnerabilities"
 
Automating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShellAutomating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShell
 

Similar to Miasm defcon russia 23

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
sportgid
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
m2rus
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
Andrew Mayorov
 

Similar to Miasm defcon russia 23 (20)

Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениАнтон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времени
 
05 HappyDev-lite'14 Александр Самолов. Автоматизация бирж, скорость и данные
05 HappyDev-lite'14 Александр Самолов. Автоматизация бирж, скорость и данные05 HappyDev-lite'14 Александр Самолов. Автоматизация бирж, скорость и данные
05 HappyDev-lite'14 Александр Самолов. Автоматизация бирж, скорость и данные
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на python
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SAST
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 

More from DefconRussia

Roman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryRoman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 Scary
DefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeRoman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 Practice
DefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryRoman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 Theory
DefconRussia
 
Peter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzPeter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzz
DefconRussia
 
Vadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationVadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitation
DefconRussia
 
Tomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSTomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNS
DefconRussia
 

More from DefconRussia (12)

Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условияхSergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
 
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
 
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
 
Alexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implementAlexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implement
 
Anton Alexanenkov - Tor and Botnet C&C
Anton Alexanenkov -  Tor and Botnet C&C Anton Alexanenkov -  Tor and Botnet C&C
Anton Alexanenkov - Tor and Botnet C&C
 
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-HashTyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
 
Roman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryRoman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 Scary
 
Roman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeRoman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 Practice
 
Roman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryRoman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 Theory
 
Peter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzPeter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzz
 
Vadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationVadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitation
 
Tomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSTomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNS
 

Miasm defcon russia 23

  • 1. July 2015 How to add new arch in miasm mslc university
  • 2. miasm ✤ Фреймворк для reverse engineering написаный на Python ✤ Реализованы ассемблер, дизассемблер, транслятор в промежуточное представление, символьное выполнение и симулятор c JIT ✤ Умеет упрощать выражения (деобфускация) ✤ Умеет генерировать запросы к STP ✤ Жутко медленный :(
  • 3. Текущие задачи RE. Почему не IDA? ✤ Анализ новых архитектур со всем существующим набором инструментов и методов ✤ Нужна деобфускация ✤ Нужно анализировать связку библиотек в одном адресном пространстве ✤ Нужно анализировать разные версии одной библиотеки (bindiff) ✤ Нужно декомпилировать в С (большие проекты) ✤ Нужно проверять какие значения могут быть у переменных ✤ Data mining
  • 4. Что такое дизассемблер? ✤ декодирование бинарных данных в соответсвующие имеющие смыслы поля (опкоды, аргументы и т.п.) ✤ визуальное представление этих полей
  • 5. Что такое ассемблер? ✤ синтаксический анализ текста ✤ выделение из нее идентификаторов ✤ кодирование их в двоичную форму
  • 6. Что такое симулятор? ✤ хранение контекста выполнения (регистры, память) ✤ обновление контекста (выполнение команды) ✤ while True:
 inst = get_instruction(PC)
 execute_instruction(inst, context)
  • 7. Что такое символическая запись? ✤ Запись в виде математической формулы ✤ add R1, R2
 mul R1, 4
 add R1, 0x100 ✤ R1: ((R1_init+R2_init)*4)+0x100
  • 8. Шаблон архитектуры commit d8b79aeb6e92de3df0abd03d6de30cc439952dfe Author: snk <snk@ctf.su> miasm2/analysis/machine.py | 10 +++- miasm2/arch/hc16/__init__.py | 4 ++ miasm2/arch/hc16/arch.py | 131 ++++++++++++++++++++++++++ miasm2/arch/hc16/disasm.py | 10 ++++ miasm2/arch/hc16/regs.py | 32 +++++++++++ miasm2/arch/hc16/sem.py | 36 ++++++++++++ test/arch/hc16/arch.py | 41 ++++++++++++++ test/arch/hc16/sem.py | 54 ++++++++++++++++++
  • 9. Самый минимум ✤ Добавить запись об архитектуре в
 miasm2/analysis/machine.py ✤ Определить регистры в
 miasm2/arch/hc16/regs.py ✤ в miasm2/arch/hc16/arch.py
 class instruction_hc16(cpu.instruction)
 class mn_hc16(cpu.cls_mn) ✤ Зарегистрировать дизасемблер (прослойка к дефолтному)
 miasm2/arch/hc16/disasm.py ✤ Зарегистрировать транслятор в IR
 miasm2/arch/hc16/sem.py ✤ Тесты!
  • 10. Первые команды ✤ def hc16_op(name, fields, args=None, alias=False):
 dct = {"fields": fields, "alias":alias}
 if args != None:
 dct['args'] = args 
 type(name, (mn_hc16,), dct) ✤ hc16_op("nop", [bs(‘0010011101001100')]) ✤ hc16_op("ldab", [bs(‘01110101’), imm8])
  • 12. Аргументы инструкции ✤ class m32r_reg(cpu.reg_noarg, cpu.m_arg):
 reg_info = gpregs
 parser = reg_info.parser ✤ class m32r_imm(cpu.imm_noarg):
 parser = cpu.base_expr
 def fromstring(self, s, parser_result=None)
 def decode(self, v)
 def encode(self)
  • 13. Аргументы инструкции ✤ arg_R = cpu.bs(l=4, cls=(m32r_gpreg,)) ✤ arg_dR = cpu.bs(l=4, cls=(m32r_deref_reg,)) ✤ arg_pcdisp8 = cpu.bs(l=8, cls=(m32r_pcdisp8,), fname="pcdisp", order=-1) ✤ arg_imm8 = cpu.bs(l=8, cls=(m32r_imm8,), fname="imm", order=-1)
  • 15. Символьное выполнение ✤ @sbuild.parse
 def add(Rdest, Rsrc):
 Rdest = Rdest + Rsrc ✤ Все :)
  • 16. Символьное выполнение ✤ def bc(target):
 next = ExprId(ir.get_next_instr(instr))
 PC = target if C else next
 IRDst = PC
 
 def ld(ir, instr, Rdest, Rsrc):
 instr_ir = []
 Rmem = instr.get_mem_expr(Rsrc).arg
 instr_ir.append(ExprAff(Rdest, ExprMem(Rmem)))
 if instr.is_post_inc():
 instr_ir.append(ExprAff(Rmem, ExprOp('+', Rmem, ExprInt(int32(4)))))
 return instr_ir, []