
Triton — это библиотека динамического анализа бинарного кода. Создавайте собственные инструменты анализа программ, автоматизируйте реверс-инжиниринг, выполняйте верификацию программного обеспечения или просто эмулируйте код.

Triton — это библиотека динамического анализа бинарного кода. Она предоставляет внутренние компоненты, которые позволяют создавать инструменты анализа программ, автоматизировать обратную разработку, выполнять верификацию программного обеспечения или просто эмулировать код.
Поскольку Triton является своего рода проектом, ведущимся в свободное время, пожалуйста, не вините нас, если он не полностью надежен. Открытые вопросы или пул-реквесты всегда лучше троллинга =). Однако вы можете следить за разработкой в Twitter @qb_triton.
from triton import *
Create the Triton context with a defined architecture
ctx = TritonContext(ARCH.X86_64)
Define concrete values (optional)
ctx.setConcreteRegisterValue(ctx.registers.rip, 0x40000)
Symbolize data (optional)
ctx.symbolizeRegister(ctx.registers.rax, 'my_rax')
Execute instructions
ctx.processing(Instruction(b"\x48\x35\x34\x12\x00\x00")) # xor rax, 0x1234 ctx.processing(Instruction(b"\x48\x89\xc1")) # mov rcx, rax
Get the symbolic expression
rcx_expr = ctx.getSymbolicRegister(ctx.registers.rcx) print(rcx_expr) (define-fun ref!8 () (_ BitVec 64) ref!1) ; MOV operation - 0x40006: mov rcx, rax
Solve constraint
ctx.getModel(rcx_expr.getAst() == 0xdead) {0: my_rax:64 = 0xcc99}
0xcc99 XOR 0x1234 is indeed equal to 0xdead
hex(0xcc99 ^ 0x1234) '0xdead'
## Установка с помощью pip
Triton можно установить с помощью `pip`:```console
pip install triton-library
Triton зависит от следующих зависимостей:```
### Linux и MacOS```console
$ git clone https://github.com/JonathanSalwan/Triton
$ cd Triton
$ mkdir build ; cd build
$ cmake ..
$ make -j3
$ sudo make install
По умолчанию LLVM и Bitwuzla не компилируются. Если вы хотите использовать всю мощь Triton, команда cmake для компиляции:```console $ cmake -DLLVM_INTERFACE=ON -DCMAKE_PREFIX_PATH=$(llvm-config --prefix) -DBITWUZLA_INTERFACE=ON ..
#### Примечание для MacOS M1:
В случае, если вы получите ошибки компиляции, такие как:```
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
Попробуйте указать PYTHON_EXECUTABLE, PYTHON_LIBRARIES и PYTHON_INCLUDE_DIRS для вашей конкретной версии Python:```console
cmake -DCMAKE_INSTALL_PREFIX=/opt/homebrew/
-DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3
-DPYTHON_LIBRARIES=/opt/homebrew/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib
-DPYTHON_INCLUDE_DIRS=/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.10/include/python3.10/
..
Эту информацию вы можете получить из этого фрагмента:```python
from sysconfig import get_paths
info = get_paths()
print(info)
Если автодополнение Python не работает, выполните следующие шаги:
/usr/lib/python3.13/).Ваша IDE должна поддерживать разбор файлов .pyi.
Вы можете использовать cmake для генерации .sln файла libTriton.```console
git clone https://github.com/JonathanSalwan/Triton.git cd Triton mkdir build cd build cmake -G "Visual Studio 14 2015 Win64"
-DBOOST_ROOT="C:/Users/jonathan/Works/Tools/boost_1_61_0"
-DPYTHON_INCLUDE_DIRS="C:/Python36/include"
-DPYTHON_LIBRARIES="C:/Python36/libs/python36.lib"
-DZ3_INCLUDE_DIRS="C:/Users/jonathan/Works/Tools/z3-4.6.0-x64-win/include"
-DZ3_LIBRARIES="C:/Users/jonathan/Works/Tools/z3-4.6.0-x64-win/bin/libz3.lib"
-DCAPSTONE_INCLUDE_DIRS="C:/Users/jonathan/Works/Tools/capstone-5.0.1-win64/include"
-DCAPSTONE_LIBRARIES="C:/Users/jonathan/Works/Tools/capstone-5.0.1-win64/capstone.lib" ..
Вы можете использовать setup.py для создания отладочной версии triton.pyd в Windows.```console
> git clone https://github.com/JonathanSalwan/Triton.git
> cd Triton
> $env:COMPILER_DIR="C:/deps/llvm/llvm2116r/bin"
> $env:CMAKE_PREFIX_PATH="C:/deps/llvm/llvm-project-21.1.6.src/install/lib/cmake/llvm;C:/code/cxx-common-cmake/build/install"
> python_d -m build --wheel
> python_d -m pip install (Get-ChildItem .\dist\triton_library*)
Однако, если вы предпочитаете напрямую скачать предварительно скомпилированную библиотеку, посмотрите наши артефакты на AppVeyor. Обратите внимание, что если вы используете артефакты AppVeyor, вам, вероятно, потребуется установить пакеты Visual C++ Redistributable для Visual Studio 2012.
Порт Triton в vcpkg поддерживается в актуальном состоянии участниками команды Microsoft и участниками сообщества. URL-адрес vcpkg: https://github.com/Microsoft/vcpkg. Вы можете скачать и установить Triton с помощью менеджера зависимостей vcpkg:```console $ git clone https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ ./bootstrap-vcpkg.sh # ./bootstrap-vcpkg.bat for Windows $ ./vcpkg integrate install $ ./vcpkg install triton
Если версия устарела, пожалуйста, [создайте вопрос или pull request](https://github.com/Microsoft/vcpkg) в репозитории vcpkg.
# Авторы
* [**Alberto Garcia Illera**](https://twitter.com/algillera) - Cruise Automation
* [**Alexey Vishnyakov**](https://vishnya.xyz/) - ISP RAS
* [**Black Binary**](https://github.com/black-binary) - н/д
* [**Christian Heitman**](https://github.com/cnheitman) - Quarkslab
* [**Daniil Kuts**](https://github.com/apach301) - ISP RAS
* [**Jessy Campos**](https://github.com/ek0) - н/д
* [**Matteo F.**](https://twitter.com/fvrmatteo) - н/д
* [**Pierrick Brunet**](https://github.com/pbrunet) - Quarkslab
* [**PixelRick**](https://github.com/PixelRick) - н/д
* [**Romain Thomas**](https://twitter.com/rh0main) - Quarkslab
* [**И многие другие**](https://github.com/JonathanSalwan/Triton/graphs/contributors)
## Кто уже использовал Triton
### Инструменты
* [Exrop](https://github.com/d4em0n/exrop): Автоматическая генерация ROP-цепочек.
* [Pimp](https://github.com/kamou/pimp): Плагин на основе Triton для R2, обеспечивающий конкретное выполнение и полный контроль.
* [Ponce](https://github.com/illera88/Ponce): Победитель конкурса плагинов IDA 2016! Символическое выполнение в один клик!
* [QSynthesis](https://github.com/quarkslab/qsynthesis): Серый ящик-синтезатор, предназначенный для деобфускации ассемблерных инструкций.
* [TritonDSE](https://github.com/quarkslab/tritondse): Библиотека DSE на основе Triton с возможностями загрузки и исследования.
* [Titan](https://github.com/archercreat/titan): Titan — девиртуализатор VMProtect с использованием Triton.
### Статьи и конференции<ul dir="auto">
<li>
<b>Sydr-Fuzz: Непрерывный гибридный фазинг и динамический анализ для безопасного жизненного цикла разработки</b><br />
<b>Доклад на</b>: Ivannikov ISP RAS Open Conference, Москва, Россия, 2022. [<a href="publications/ISPOPEN2022-sydr-fuzz.pdf">статья</a>] [<a href="publications/ISPOPEN2022-slide-sydr-fuzz-vishnyakov.pdf">слайды</a>]<br />
<b>Авторы</b>: Vishnyakov A., Kuts D., Logunova V., Parygina D., Kobrin E., Savidov G., Fedotov A.<br />
<b>Аннотация</b>: <em>В настоящее время автоматизированные фреймворки динамического анализа для непрерывного тестирования пользуются высоким спросом для обеспечения безопасности программного обеспечения и удовлетворения требований безопасного жизненного цикла разработки (SDL). Эффективность поиска уязвимостей с помощью передовых методов гибридного фазинга превосходит широко используемый фазинг, основанный на покрытии. Мы предлагаем улучшенный конвейер динамического анализа для повышения производительности автоматического обнаружения ошибок на основе гибридного фазинга. Мы реализуем предложенный конвейер в наборе инструментов непрерывного фазинга Sydr-Fuzz, который работает на основе оркестратора гибридного фазинга, интегрирующего наш инструмент DSE Sydr с libFuzzer и AFL++. Sydr-Fuzz также включает проверки предикатов безопасности, инструмент триажа сбоев Casr, а также утилиты для минимизации корпуса и сбора покрытия. Сравнительное тестирование нашего гибридного фазинга с альтернативными современными решениями демонстрирует его превосходство над фазингами, основанными на покрытии, при сохранении на том же уровне, что и продвинутые гибридные фазинги. Кроме того, мы подтверждаем актуальность нашего подхода, обнаружив 85 новых ошибок в реальном программном обеспечении в рамках проекта OSS-Sydr-Fuzz. Наконец, мы открываем исходный код Casr для сообщества, чтобы облегчить анализ существующих сбоев.</em>
</li><br/>
<li>
<b>Strong Optimistic Solving for Dynamic Symbolic Execution</b><br />
<b>Доклад на</b>: Ivannikov Memorial Workshop, Казань, Россия, 2022. [<a href="publications/IVMEM2022-strong-optimistic-parygina.pdf">статья</a>] [<a href="publications/IVMEM2022-slide-strong-optimistic-parygina.pdf">слайды</a>]<br />
<b>Авторы</b>: Parygina D., Vishnyakov A., Fedotov A.<br />
<b>Аннотация</b>: <em>Динамическое символьное выполнение (DSE) является эффективным методом автоматического тестирования программ и обнаружения ошибок. Оно увеличивает покрытие кода за счет исследования сложных ветвей во время гибридного фазинга. Инструменты DSE инвертируют ветви вдоль некоторого пути выполнения и помогают фазингу исследовать ранее недоступные части программы. DSE часто сталкивается с проблемами пере- и недоопределения. Первая приводит к значительному усложнению анализа, в то время как вторая вызывает неточное символьное выполнение. Мы предлагаем метод сильного оптимистичного решения, который устраняет нерелевантные ограничения предиката пути для целевой инверсии ветви. Мы устраняем такие символьные ограничения, от которых целевая ветвь не зависит по управлению. Более того, мы отдельно обрабатываем символьные ветви, которые имеют вложенные инструкции передачи управления, передающие управление за пределы родительской ветви, например return, goto, break и т.д. Мы реализуем предложенный метод в нашем инструменте динамического символьного выполнения Sydr. Мы оцениваем сильную оптимистичную стратегию, оптимистичную стратегию, содержащую только отрицание последнего ограничения, и их комбинацию. Результаты показывают, что комбинация стратегий помогает увеличить либо покрытие кода, либо среднее количество правильно инвертированных ветвей в минуту. Оптимально применять обе стратегии вместе, в отличие от других конфигураций.</em>
</li><br/>
<li>
<b>Greybox Program Synthesis: A New Approach to Attack Dataflow Obfuscation</b><br />
<b>Доклад на</b>: Blackhat USA, Лас-Вегас, Невада, 2021. [<a href="publications/BHUSA2021-David-Greybox-Program-Synthesis.pdf">слайды</a>]<br />
<b>Авторы</b>: Robin David<br />
<b>Аннотация</b>: <em>В этом докладе представлены последние достижения в области синтеза программ, применяемого для деобфускации. Он направлен на демистификацию этой техники анализа, показывая, как её можно применить на практике для обфускации. В частности, реализация Qsynthesis, выпущенная для этого доклада, демонстрирует полный сквозной рабочий процесс для деобфускации инструкций ассемблера обратно в оптимизированные (деобфусцированные) инструкции, повторно собираемые в бинарный файл.</em>
</li><br/>
<li>
<b>From source code to crash test-case through software testing automation</b><br />
<b>Доклад на</b>: C&ESAR, Ренн, Франция, 2021. [<a href="publications/CESAR2021_robin-david-paper.pdf">статья</a>] [<a href="publications/CESAR2021_robin-david-slide.pdf">слайды</a>]<br />
<b>Авторы</b>: Robin David, Jonathan Salwan, Justin Bourroux<br />
<b>Аннотация</b>: <em>В этой статье представлен подход, автоматизирующий процесс тестирования программного обеспечения от исходного кода до динамического тестирования скомпилированной программы. В частности, на основе отчета статического анализа, указывающего на предупреждения в строках исходного кода, он позволяет тестировать эти строки динамически и оппортунистически проверять, могут ли они вызвать сбой. Результатом является тестовый корпус, позволяющий покрыть предупреждения и вызвать их, если они оказываются истинно-положительными. В статье обсуждается методология отслеживания предупреждений в скомпилированном бинарном файле, процесс выбора движков тестирования и результаты, полученные на реализации стека TCP/IP для встраиваемых систем и систем IoT.</em>
</li><br/>
<li>
<b>Symbolic Security Predicates: Hunt Program Weaknesses</b><br />
<b>Доклад на</b>: Ivannikov ISP RAS Open Conference, Москва, Россия, 2021. [<a href="publications/ISPOPEN2021-security-predicates-vishnyakov.pdf">статья</a>] [<a href="publications/ISPOPEN2021-slide-security-predicates-vishnyakov.pdf">слайды</a>]<br />
<b>Авторы</b>: A.Vishnyakov, V.Logunova, E.Kobrin, D.Kuts, D.Parygina, A.Fedotov<br />
<b>Аннотация</b>: <em>Динамическое символьное выполнение (DSE) является мощным методом для исследования путей во время гибридного фазинга и автоматического обнаружения ошибок. Мы предлагаем предикаты безопасности для эффективного обнаружения неопределенного поведения и ошибок нарушения доступа к памяти. Изначально мы символьным образом выполняем программу на путях, которые не вызывают никаких ошибок (гибридный фазинг может исследовать эти пути). Затем мы строим символьный предикат безопасности для проверки некоторого условия ошибки. Таким образом, мы можем изменить поток данных программы, чтобы вызвать слабости разыменования нулевого указателя, деления на ноль, выхода за границы или целочисленного переполнения. В отличие от статического анализа, динамическое символьное выполнение не только сообщает об ошибках, но и генерирует новые входные данные для их воспроизведения. Кроме того, мы вводим моделирование семантики функций для распространенных функций стандартной библиотеки C/C++. Мы стремимся моделировать поток управления внутри функции с помощью одной символьной формулы. Это помогает в обнаружении ошибок, ускоряет исследование путей и преодолевает проблемы избыточных ограничений в предикате пути. Мы реализуем предложенные методы в нашем инструменте динамического символьного выполнения Sydr. Таким образом, мы используем мощные методы из Sydr, такие как разрезание предиката пути, которое устраняет нерелевантные ограничения. Мы представляем Juliet Dynamic для измерения точности инструментов динамического обнаружения ошибок. Система тестирования также проверяет, что сгенерированные входные данные вызывают срабатывание санитайзеров. Мы оцениваем точность Sydr для 11 CWE из тестового набора Juliet. Sydr показывает общую точность 95,59%. Мы делаем артефакты оценки Sydr общедоступными для облегчения воспроизводимости результатов.</em>
</li><br/>
<li>
<b>Towards Symbolic Pointers Reasoning in Dynamic Symbolic Execution</b><br />
<b>Доклад на</b>: Ivannikov Memorial Workshop, Нижний Новгород, Россия, 2021. [<a href="publications/IVMEM2021-symbolic-pointers-kuts.pdf">статья</a>] [<a href="publications/IVMEM2021-slide-symbolic-pointers-kuts.pdf">слайды</a>]<br />
<b>Авторы</b>: Daniil Kuts<br />
<b>Аннотация</b>: <em>Динамическое символьное выполнение — широко используемый метод автоматического тестирования программного обеспечения, предназначенный для исследования путей выполнения и обнаружения ошибок программы. В последнее время широкое распространение получил гибридный подход, когда основной целью символьного выполнения является помощь фазингу в увеличении покрытия программы. Чем больше ветвей символьный исполнитель может инвертировать, тем более он полезен для фазинга. Поток управления программы часто зависит от значений в памяти, которые получаются путем вычисления индексных адресов из пользовательского ввода. Однако большинство инструментов DSE не поддерживают такие зависимости, поэтому они пропускают некоторые желаемые ветви программы. Мы реализуем обработку символьных адресов при чтении памяти в нашем инструменте динамического символьного выполнения Sydr. Возможные области доступа к памяти определяются либо анализом символьных выражений адресов памяти, либо бинарным поиском с помощью SMT-решателя. Мы предлагаем улучшенную технику линеаризации для моделирования обращений к памяти. Различные методы моделирования памяти сравниваются на наборе программ. Наша оценка показывает, что обработка символьных адресов позволяет обнаруживать новые символьные ветви и увеличивать покрытие программы.</em>
</li><br/>
<li>
<b>QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation</b><br />
<b>Доклад на</b>: BAR, Сан-Диего, Калифорния, 2020. [<a href="publications/BAR2020-qsynth-robin-david.pdf">статья</a>]<br />
<b>Авторы</b>: Robin David, Luigi Coniglio, Mariano Ceccato<br />
<b>Аннотация</b>: <em>Мы представляем общий подход, использующий как DSE, так и синтез программ для успешного синтеза программ, обфусцированных с помощью Mixed-Boolean-Arithmetic, Data-Encoding или виртуализации. Предлагаемый алгоритм синтеза представляет собой автономный перечислительный синтез примитивов, направляемый нисходящим поиском в ширину. Мы показываем его эффективность против современного обфускатора и его масштабируемость, превосходящую другие подобные подходы, основанные на синтезе. Мы также показываем его эффективность в присутствии составной обфускации (комбинации различных техник). Эта текущая работа освещает эффективность синтеза для борьбы с определенными видами обфускации и открывает путь к более надежным алгоритмам и стратегиям упрощения.</em>
</li><br/>
<li>
<b>Sydr: Cutting Edge Dynamic Symbolic Execution</b><br />
<b>Доклад на</b>: Ivannikov ISP RAS Open Conference, Москва, Россия, 2020. [<a href="publications/ISPRAS2020-sydr.pdf">статья</a>] [<a href="publications/ISPOPEN2020-slide-sydr-vishnyakov.pdf">слайды</a>] [<a href="https://www.ispras.ru/conf/2020/video/compiler-technology-11-december.mp4#t=6021">видео</a>]<br />
<b>Авторы</b>: A.Vishnyakov, A.Fedotov, D.Kuts, A.Novikov, D.Parygina, E.Kobrin, V.Logunova, P.Belecky, S.Kurmangaleev<br />
<b>Аннотация</b>: <em>Динамическое символьное выполнение (DSE) имеет огромное количество применений в компьютерной безопасности (фазинг, обнаружение уязвимостей, реверс-инжиниринг и т.д.). Мы предлагаем несколько улучшений производительности и точности для динамического символьного выполнения. Пропуск несимвольных инструкций позволяет строить предикат пути в 1,2–3,5 раза быстрее. Символьный движок упрощает формулы во время символьного выполнения. Разрезание предиката пути устраняет нерелевантные конъюнкты из запросов к решателю. Мы обрабатываем каждую таблицу переходов (оператор switch) как множество ветвей и описываем метод символьного выполнения многопоточных программ. Предложенные решения были реализованы в инструменте Sydr. Sydr выполняет инверсию ветвей в предикате пути. Sydr комбинирует инструмент динамической бинарной инструментации DynamoRIO с символьным движком Triton.</em>
</li><br/>
<li>
<b>Symbolic Deobfuscation: From Virtualized Code Back to the Original</b><br />
<b>Доклад на</b>: DIMVA, Париж-Сакле, Франция, 2018. [<a href="publications/DIMVA2018-deobfuscation-salwan-bardin-potet.pdf">статья</a>] [<a href="publications/DIMVA2018-slide-deobfuscation-salwan-bardin-potet.pdf">слайды</a>]<br />
<b>Авторы</b>: Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet<br />
<b>Аннотация</b>: <em>Защита программного обеспечения заняла важное место в последнее десятилетие для защиты легитимного программного обеспечения от реверс-инжиниринга или взлома. Виртуализация считается одной из лучших защит от таких атак. Мы представляем общий подход, основанный на символьном исследовании путей, трассировке и рекомпиляции, позволяющий восстановить из виртуализированного кода девиртуализированный код, семантически идентичный исходному и близкий по размеру. Мы определяем критерии и метрики для оценки релевантности деобфусцированных результатов с точки зрения корректности и точности. Наконец, мы предлагаем открытую среду для оценки предложенного подхода против нескольких форм виртуализации.</em>
</li><br/>
<li>
<b>Deobfuscation of VM based software protection</b><br />
<b>Доклад на</b>: SSTIC, Ренн, Франция, 2017. [<a href="publications/SSTIC2017-French-Article-desobfuscation_binaire_reconstruction_de_fonctions_virtualisees-salwan_potet_bardin.pdf">французская статья</a>] [<a href="publications/SSTIC2017_Deobfuscation_of_VM_based_software_protection.pdf">английские слайды</a>] [<a href="https://static.sstic.org/videos2017/SSTIC_2017-06-07_P08.mp4">французское видео</a>]<br />
<b>Авторы</b>: Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet<br />
<b>Аннотация</b>: <em>В этой презентации мы описываем подход, который заключается в автоматическом анализе программных защит на основе виртуальной машины и перекомпиляции новой версии бинарного файла без таких защит. Этот автоматизированный подход опирается на символьное выполнение, направляемое анализом трассировки и некоторыми политиками конкретизации, а затем на бинарную перезапись с использованием LLVM-перехода.</em>
</li><br/>
<li>
<b>How Triton can help to reverse virtual machine based software protections</b><br />
<b>Доклад на</b>: CSAW SOS, Нью-Йорк, Нью-Йорк, 2016. [<a href="publications/CSAW2016-SOS-Virtual-Machine-Deobfuscation-RThomas_JSalwan.pdf">слайды</a>]<br />
<b>Авторы</b>: Jonathan Salwan, Romain Thomas<br />
<b>Аннотация</b>: <em>Первая часть доклада будет посвящена знакомству с фреймворком Triton, чтобы представить его компоненты и объяснить, как они работают вместе. Затем вторая часть будет включать демонстрации того, как можно обратить защиты на основе виртуальной машины, используя анализ трассировки, символьное выполнение, упрощения SMT и оптимизации LLVM-IR.</em>
</li><br/>
<li>
<b>Dynamic Binary Analysis and Obfuscated Codes</b><br />
<b>Доклад на</b>: St'Hack, Бордо, Франция, 2016. [<a href="publications/StHack2016_Dynamic_Binary_Analysis_and_Obfuscated_Codes_RThomas_JSalwan.pdf">слайды</a>]<br />
<b>Авторы</b>: Jonathan Salwan, Romain Thomas<br />
<b>Аннотация</b>: <em>В этой презентации мы поговорим о том, как DBA (динамический бинарный анализ) может помочь реверс-инженеру в анализе обфусцированного кода. Сначала мы представим некоторые базовые техники обфускации, а затем покажем, как можно взломать некоторые вещи (используя наш фреймворк DBA с открытым исходным кодом — Triton), такие как обнаружение непрозрачных предикатов, восстановление CFG, нахождение исходного алгоритма, изоляция чувствительных данных и многое другое... Затем мы заключим демонстрацией и несколькими словами о нашей будущей работе.</em>
</li><br/>
<li>
<b>How Triton may help to analyse obfuscated binaries</b><br />
<b>Публикация в</b>: MISC magazine 82, 2015. [<a href="publications/MISC-82_French_Paper_How_Triton_may_help_to_analyse_obfuscated_binaries_RThomas_JSalwan.pdf">французская статья</a>]<br />
<b>Авторы</b>: Jonathan Salwan, Romain Thomas<br />
<b>Аннотация</b>: <em>Бинарная обфускация используется для защиты интеллектуальной собственности программного обеспечения. Существуют разные виды обфускации, но в целом она преобразует одну бинарную структуру в другую, сохраняя ту же семантику. Цель обфускации — сделать так, чтобы исходная информация «утонула» в бесполезной информации, что затруднит реверс-инжиниринг. В этой статье мы покажем, как можно проанализировать обфусцированную программу и взломать некоторые обфускации с помощью фреймворка Triton.</em>
</li><br/>
<li>
<b>Triton: A Concolic Execution Framework</b><br />
<b>Доклад на</b>: SSTIC, Ренн, Франция, 2015. [<a href="publications/SSTIC2015_French_Paper_Triton_Framework_dexecution_Concolique_FSaudel_JSalwan.pdf">французская статья</a>] [<a href="publications/SSTIC2015_English_slide_detailed_version_Triton_Concolic_Execution_FrameWork_FSaudel_JSalwan.pdf">подробные английские слайды</a>] <br />
<b>Авторы</b>: Jonathan Salwan, Florent Saudel<br />
<b>Аннотация</b>: <em>Этот доклад посвящен выпуску Triton — фреймворка конкретного выполнения, основанного на Pin. Он предоставляет такие компоненты, как движок трассировки, движок динамического символьного выполнения, движок моментальных снимков, трансляцию инструкций x64 в SMT2, интерфейс Z3 для решения ограничений и привязки Python. На основе этих компонентов Triton предоставляет возможность создавать инструменты для исследования уязвимостей или помощи в реверс-инжиниринге.</em>
</li><br/>
<li>
<b>Dynamic Behavior Analysis Using Binary Instrumentation</b><br />
<b>Доклад на</b>: St'Hack, Бордо, Франция, 2015. [<a href="publications/StHack2015_Dynamic_Behavior_Analysis_using_Binary_Instrumentation_Jonathan_Salwan.pdf">слайды</a>]<br />
<b>Авторы</b>: Jonathan Salwan<br />
<b>Аннотация</b>: <em>Этот доклад можно рассматривать как часть 2 нашего выступления на SecurityDay. В предыдущей части мы говорили о том, как можно покрыть целевую функцию в памяти с помощью подхода DSE (динамическое символьное выполнение). Покрытие функции (или её состояний) не означает обнаружение всех уязвимостей: некоторые уязвимости не вызывают сбоев программы. Поэтому мы должны реализовать специальные методы анализа для поиска конкретных ошибок. Эти методы анализа основаны на бинарной инструментации и анализе поведения программы во время выполнения. В этом докладе мы увидим, как можно найти следующие виды ошибок: off-by-one, переполнение стека/кучи, use-after-free, строки формата и {запись, чтение}-что-куда.</em>
</li><br/>
<li>
<b>Covering a function using a Dynamic Symbolic Execution approach</b><br />
<b>Доклад на</b>: Security Day, Лилль, Франция, 2015. [<a href="publications/SecurityDay2015_dynamic_symbolic_execution_Jonathan_Salwan.pdf">слайды</a>]<br />
<b>Авторы</b>: Jonathan Salwan<br />
<b>Аннотация</b>: <em>Этот доклад посвящен бинарному анализу и инструментации. Мы увидим, как можно нацелиться на конкретную функцию, создать снимок контекста памяти/регистров до функции, перевести инструментацию в промежуточное представление, применить анализ трассировки на основе этого IR, построить/сохранить формулы для динамического символьного выполнения (DSE), сгенерировать конкретное значение для прохода по конкретному пути, восстановить контекст памяти/регистров и сгенерировать другое конкретное значение для прохода по другому пути, и повторять эту операцию, пока целевая функция не будет покрыта.</em>
</li>
</ul>
## Цитирование Triton```latex
@inproceedings{SSTIC2015-Saudel-Salwan,
author = {Saudel, Florent and Salwan, Jonathan},
title = {Triton: A Dynamic Symbolic Execution Framework},
booktitle = {Symposium sur la s{\'{e}}curit{\'{e}} des technologies de l'information
et des communications},
series = {SSTIC},
pages = {31--54},
address = {Rennes, France},
month = jun,
year = {2015},
}