
Triton은 동적 바이너리 분석 라이브러리입니다. 자신만의 프로그램 분석 도구를 구축하고, 리버스 엔지니어링을 자동화하며, 소프트웨어 검증을 수행하거나 코드를 에뮬레이션할 수 있습니다.

Triton은 동적 바이너리 분석 라이브러리입니다. 이 라이브러리는 프로그램 분석 도구를 구축하고, 리버스 엔지니어링을 자동화하며, 소프트웨어 검증을 수행하거나 코드를 에뮬레이션할 수 있는 내부 구성 요소를 제공합니다.
Triton은 일종의 파트타임 프로젝트이므로, 완전히 신뢰할 수 없더라도 우리를 탓하지 마세요. 이슈 열기나 풀 리퀘스트를 보내는 것이 항상 트롤링보다 낫습니다 =). 하지만, 트위터 @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 Note:
만약 다음과 같은 컴파일 오류가 발생하는 경우:```
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
사용 중인 Python 버전에 맞게 PYTHON_EXECUTABLE, PYTHON_LIBRARIES 및 PYTHON_INCLUDE_DIRS를 지정해 보세요:```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를 사용하여 libTriton의 .sln 파일을 생성할 수 있습니다.```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를 사용하여 Windows에서 triton.pyd의 디버그 버전을 생성할 수 있습니다.```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*)
However, if you prefer to directly download the precompiled library, check out our AppVeyor's artefacts. Note that if you use AppVeyor's artefacts, you probably have to install the Visual C++ Redistributable packages for Visual Studio 2012.
vcpkg의 Triton 포트는 Microsoft 팀 구성원 및 커뮤니티 기여자에 의해 최신 상태로 유지됩니다. vcpkg의 URL은 https://github.com/Microsoft/vcpkg입니다. vcpkg 종속성 관리자를 사용하여 Triton을 다운로드하고 설치할 수 있습니다:```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
만약 버전이 오래된 경우, vcpkg 저장소에서 [이슈 또는 풀 리퀘스트를 생성해 주세요](https://github.com/Microsoft/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): 로딩 및 탐색 기능을 갖춘 Triton 기반 DSE 라이브러리.
* [Titan](https://github.com/archercreat/titan): Triton을 사용하는 VMProtect 역가상화기.
### 논문 및 컨퍼런스<ul dir="auto">
<li>
<b>Sydr-Fuzz: SDL을 위한 지속적 하이브리드 퍼징 및 동적 분석</b><br />
<b>발표</b>: Ivannikov ISP RAS Open Conference, Moscow, Russia, 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, 코퍼스 최소화 및 커버리지 수집 유틸리티를 포함합니다. 하이브리드 퍼저를 최신 대안 솔루션과 비교한 벤치마킹 결과, 고급 하이브리드 퍼저와 동등한 수준을 유지하면서 커버리지 기반 퍼저보다 우수한 성능을 보였습니다. 또한 OSS-Sydr-Fuzz 프로젝트에서 85개의 새로운 실제 소프트웨어 결함을 발견하여 접근 방식의 관련성을 입증했습니다. 마지막으로, 기존 충돌 분석을 용이하게 하기 위해 Casr 소스 코드를 커뮤니티에 공개합니다.</em>
</li><br/>
<li>
<b>동적 기호 실행을 위한 강력한 낙관적 해결</b><br />
<b>발표</b>: Ivannikov Memorial Workshop, Kazan, Russia, 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>그레이박스 프로그램 합성: 데이터 흐름 난독화 공격의 새로운 접근법</b><br />
<b>발표</b>: Blackhat USA, Las Vegas, Nevada, 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>소스 코드에서 충돌 테스트 케이스까지: 소프트웨어 테스트 자동화를 통해</b><br />
<b>발표</b>: C&ESAR, Rennes, France, 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>이 논문은 소스 코드에서 컴파일된 프로그램의 동적 테스트까지 소프트웨어 테스트 프로세스를 자동화하는 접근 방식을 제시합니다. 보다 구체적으로, 소스 라인의 경고를 나타내는 정적 분석 보고서에서 시작하여 이러한 라인을 동적으로 커버하고 기회적으로 검사하여 충돌을 유발할 수 있는지 여부를 확인할 수 있도록 합니다. 결과는 경고를 커버하고 실제 양성인 경우 이를 트리거할 수 있는 테스트 코퍼스입니다. 이 논문은 컴파일된 바이너리에서 경고를 추적하는 방법론, 테스트 엔진 선택 프로세스, 임베디드 및 IoT 시스템용 TCP/IP 스택 구현에서 얻은 결과에 대해 논의합니다.</em>
</li><br/>
<li>
<b>기호 보안 술어: 프로그램 취약점 탐색</b><br />
<b>발표</b>: Ivannikov ISP RAS Open Conference, Moscow, Russia, 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)은 하이브리드 퍼징 및 자동 버그 탐지 중 경로 탐색을 위한 강력한 방법입니다. 본 논문에서는 정의되지 않은 동작 및 메모리 접근 위반 오류를 효과적으로 탐지하기 위한 보안 술어를 제안합니다. 먼저, 오류를 트리거하지 않는 경로에서 프로그램을 기호 실행합니다(하이브리드 퍼징이 이러한 경로를 탐색할 수 있음). 그런 다음 기호 보안 술어를 구성하여 일부 오류 조건을 확인합니다. 따라서 프로그램 데이터 흐름을 변경하여 널 포인터 역참조, 0으로 나누기, 범위를 벗어난 접근, 정수 오버플로우 취약점을 유발할 수 있습니다. 정적 분석과 달리 동적 기호 실행은 오류를 보고할 뿐만 아니라 이를 재현하기 위한 새로운 입력 데이터를 생성합니다. 또한 일반적인 C/C++ 표준 라이브러리 함수에 대한 함수 의미론 모델링을 도입합니다. 단일 기호 공식을 사용하여 함수 내의 제어 흐름을 모델링하는 것을 목표로 합니다. 이는 버그 탐지를 지원하고, 경로 탐색 속도를 높이며, 경로 술어의 과잉 제약을 극복합니다. 제안된 기술을 동적 기호 실행 도구 Sydr에 구현했습니다. 따라서 관련 없는 제약 조건을 제거하는 경로 술어 슬라이싱과 같은 Sydr의 강력한 방법을 활용합니다.
동적 버그 탐지 도구의 정확도를 측정하기 위해 Juliet Dynamic을 제시합니다. 테스트 시스템은 생성된 입력이 sanitizer를 트리거하는지도 확인합니다. Juliet 테스트 스위트의 11개 CWE에 대한 Sydr의 정확도를 평가했습니다. Sydr은 전체 정확도 95.59%를 보여줍니다. 결과 재현성을 용이하게 하기 위해 Sydr 평가 아티팩트를 공개적으로 제공합니다.</em>
</li><br/>
<li>
<b>동적 기호 실행에서 기호 포인터 추론을 향하여</b><br />
<b>발표</b>: Ivannikov Memorial Workshop, Nizhny Novgorod, Russia, 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: 프로그램 합성 기반 바이너리 코드 난독화 해제 접근법</b><br />
<b>발표</b>: BAR, San Diego, California, 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, 데이터 인코딩 또는 가상화로 난독화된 프로그램을 성공적으로 합성하는 일반적인 접근 방식을 제시합니다. 제안된 합성 알고리즘은 하향식 너비 우선 검색으로 안내되는 오프라인 열거 합성 프리미티브입니다. 최신 난독화 도구에 대한 효과성과 합성 기반의 다른 유사한 접근법을 능가하는 확장성을 보여줍니다. 또한 복합 난독화(다양한 기술의 조합)가 있는 경우에도 효과적임을 보여줍니다. 이 진행 중인 연구는 특정 종류의 난독화를 대상으로 하는 합성의 효과성을 밝히고 보다 강력한 알고리즘 및 단순화 전략을 위한 길을 엽니다.</em>
</li><br/>
<li>
<b>Sydr: 최첨단 동적 기호 실행</b><br />
<b>발표</b>: Ivannikov ISP RAS Open Conference, Moscow, Russia, 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>기호 난독화 해제: 가상화된 코드에서 원본으로</b><br />
<b>발표</b>: DIMVA, Paris-Saclay, France, 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>소프트웨어 보호는 지난 10년 동안 합법적인 소프트웨어를 리버스 엔지니어링이나 변조로부터 보호하기 위해 중요한 위치를 차지했습니다. 가상화는 이러한 공격에 대한 가장 강력한 방어 수단 중 하나로 간주됩니다. 본 논문에서는 가상화된 코드에서 원본과 의미적으로 동일하고 크기가 유사한 탈가상화된 코드를 복구할 수 있는 기호 경로 탐색, 오염 및 재컴파일을 기반으로 하는 일반적인 접근 방식을 제시합니다. 난독화 해제 결과의 정확성과 정밀도를 평가하기 위한 기준과 지표를 정의합니다. 마지막으로, 여러 형태의 가상화에 대해 제안된 접근 방식을 평가할 수 있는 오픈 소스 설정을 제안합니다.</em>
</li><br/>
<li>
<b>VM 기반 소프트웨어 보호의 난독화 해제</b><br />
<b>발표</b>: SSTIC, Rennes, France, 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>Triton이 가상 머신 기반 소프트웨어 보호를 리버스하는 데 어떻게 도움이 될 수 있는가</b><br />
<b>발표</b>: CSAW SOS, NYC, New York, 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>동적 바이너리 분석 및 난독화된 코드</b><br />
<b>발표</b>: St'Hack, Bordeaux, France, 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>Triton이 난독화된 바이너리 분석에 어떻게 도움이 될 수 있는가</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: 혼합 실행 프레임워크</b><br />
<b>발표</b>: SSTIC, Rennes, France, 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>이 발표는 Pin 기반의 혼합 실행 프레임워크인 Triton의 출시에 관한 것입니다. 오염 엔진, 동적 기호 실행 엔진, 스냅샷 엔진, x64 명령어의 SMT2 변환, 제약 조건 해결을 위한 Z3 인터페이스 및 Python 바인딩과 같은 구성 요소를 제공합니다. 이러한 구성 요소를 기반으로 Triton은 취약점 연구 또는 리버스 엔지니어링 지원을 위한 도구를 구축할 수 있는 가능성을 제공합니다.</em>
</li><br/>
<li>
<b>바이너리 계측을 사용한 동적 동작 분석</b><br />
<b>발표</b>: St'Hack, Bordeaux, France, 2015. [<a href="publications/StHack2015_Dynamic_Behavior_Analysis_using_Binary_Instrumentation_Jonathan_Salwan.pdf">슬라이드</a>]<br />
<b>저자</b>: Jonathan Salwan<br />
<b>개요</b>: <em>이 발표는 SecurityDay에서의 발표의 파트 2로 간주될 수 있습니다. 이전 파트에서는 DSE(동적 기호 실행) 접근 방식을 사용하여 메모리의 대상 함수를 커버하는 방법에 대해 논의했습니다. 함수(또는 그 상태)를 커버하는 것이 모든 취약점을 찾는 것을 의미하지는 않습니다. 일부 취약점은 프로그램을 충돌시키지 않습니다. 따라서 특정 버그를 찾기 위해 특정 분석을 구현해야 합니다. 이러한 분석은 바이너리 계측 및 프로그램의 런타임 동작 분석을 기반으로 합니다. 이 발표에서는 off-by-one, 스택/힙 오버플로우, use-after-free, 포맷 문자열 및 {write, read}-what-where와 같은 종류의 버그를 찾는 방법을 살펴봅니다.</em>
</li><br/>
<li>
<b>동적 기호 실행 접근 방식을 사용한 함수 커버</b><br />
<b>발표</b>: Security Day, Lille, France, 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},
}