일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- initial-exec
- 안티디버깅
- LLVM
- linux debugging
- Linux custom packer
- on stack replacement
- OSR
- LLVM 난독화
- Injection
- uftrace
- tracing
- v8 tracing
- 난독화
- Linux packer
- Android
- pinpoint
- Obfuscator
- thread local storage
- LLVM Obfuscator
- tracerpid
- on-stack replacement
- linux thread
- pthread
- v8 optimizing
- TLS
- so inject
- custom packer
- apm
- anti debugging
- android inject
- Today
- Total
목록Study (14)
Why should I know this?
SOUPER는 Super Optimization를 약자로 한 프로젝트 입니다. 이런 이름 때문에 오해할 수 있는데, Super Optimization이라고 해서 코드를 "슈퍼향상 시키는 최적화"가 아니고, "자동화 된 최적화" 가 목적입니다. 6^^ Souper 에 대해 다루기 전에 먼저 자동화 된 최적화를 구현하기 위해서는 최적화를 자동으로 만들 수 있어야 겠죠. 그러자면 자동으로 생성된 "최적화에 대한 검증" 방식이 필요합니다. SOUPER는 CEGIS 방식을 취하는데, 이를 우리나라 말로 옮기면 "반증 기반 유도 합성" 이 됩니다. 발견된 최적화 방식에 대해서, "반증 했을 때 만족하는(SAT) 경우가 있는가?" 를 확인하는 방식입니다. 예를 들어 봅시다. 위처럼, 아주 형편없는 예제 코드가 ..
* 이 글은 작성 중 입니다. 왜 작성 중인 글을 올려놓냐면 그래야 동기 부여가 되서 귀차니즘을 극복할 수 있기 때문입니다. * * 양해 바라고 양질의 글로 보답하겠습니다. * 0. Super Optimization 개요 peephole optimization 에 대한 정의는 wiki에서 확인 가능 https://en.wikipedia.org/wiki/Peephole_optimization Peephole optimization - Wikipedia From Wikipedia, the free encyclopedia Compiler optimization technique Peephole optimization is an optimization technique performed on a small se..
https://llvm.org/devmtg/2019-10/slides/Hsu-Souper-ChargingPeepholes.pdf https://users.cs.utah.edu/~regehr/dataflow-pruning.pdf https://arxiv.org/pdf/1711.04422.pdf A Synthesizing Superoptimizer https://llvm.org/devmtg/2011-11/Sands_Super-optimizingLLVMIR.pdf 2011년 superoptimization 의 컨셉에 대해 이해하기 좋은 자료 Synthesis without Syntactic Templates https://polgreen.github.io/polgreen_thesis.pdf Sound and ..
실행방식에 따른 구분 정적 동적 실행방식 분석기 (에뮬레이터|인터프리터) 실행기 (인터프리터|리얼머신) 문제점 경로 폭발 단일 경로로 분석이 제한 분석방식에 따른 구분 컨크릿 심볼릭 분석방식 상수 조건을 축적 기호화 된 논리 조건을 축적 경로탐색 상수 조건에 따라 결정 논리 조건에 따라 결정 정적 컨트릿 분석 == 정적분석. 동적 컨크릿 분석 == 테스트케이스. 정적 심볼릭 분석 == 심볼릭 실행. 동적 심볼릭 분석 == 컨클릭 실행. 라고 생각하면 된다. 이 네 가지 경우의 수가 헤깔리는 이유는, 대부분의 프로그램 분석 툴들이 실행 엔진과 함께 다수의 메커니즘을 혼용해 쓰기 때문이다. 하지만 각 조합마다 장단점 및 한계점은 명확하기 때문에 정확한 판단을 내리려면 정확하게 분리해서 사고하는게 좋다.
공부 문서 : https://www.doc.ic.ac.uk/~herbert/teaching/PA4S.pdf https://homepages.dcc.ufmg.br/~fernando/classes/dcc888/ementa/slides/ConstraintBasedAnalyses.pdf http://staff.ustc.edu.cn/~yiyun/chapter/ConstraintBasedAnalysis.pdf Principles of program analysis - Abstract 0-CFA Analysis λ = 람다식 N ∈ Term λ-terms x ∈ Var variables N은 λ 의 일부 = N은 λ 식 x는 변수의 일부 = x 는 변수 N ::= x | (λx.N) | (N1N2) 람다식의 term..
Uftrace에서 Nodejs Javascript function calling record 기능을 개발 진행했을때 기록. 기능을 추가할 일이 있을지 미지수지만 일단 기록은 해놈 https://github.com/namhyung/uftrace/issues/617 tricky way to trace the javascript running with v8. · Issue #617 · namhyung/uftrace As mentioned earlier, it is very useful to use the metadata provided by the tracing target. Tracing the execution of Javascript in v8 is possible with the -trace optio..
최근에 면접을 보러 다니는데 제목과 같은 내용을 질문받아서 흥미롭다는 생각을 했습니다. 이 글은 해당 내용에 대해 다루고자 합니다. 1. LLVM libcxx 에 구현되어 있는 new _LIBCPP_WEAK void * operator new(std::size_t size) _THROW_BAD_ALLOC { if (size == 0) size = 1; void* p; while ((p = ::malloc(size)) == nullptr) { // If malloc fails and there is a new_handler, // call it to try free up memory. std::new_handler nh = std::get_new_handler(); if (nh) nh(); else #if..
소개글. Shuffle이란 단어는 카드 게임에서 카드를 섞을 때 사용되는 단어이다. shuffle을 ‘섞다’라고 한다면 Shuffler는 ‘섞는자’ 라고 하면 될까? Shuffler는 Control Flow Integrity와 동일한 Code-reuse attack = ‘실행 흐름의 변조/위조’ 를 방지하는 기술로 ROP, JOP와 같은 exploit 기법의 방어 기제에 대한 연구이다. Shuffler 요약. CFI기술은 compile 시 혹은 binary rewriting으로 실행 흐름에 무결성을 확보하기 위한 코드를 주입한다. 이를 통해 Control Flow의 변경 시(Call, Jmp 등) 목적지가 정당한 지를 검증하는 방식을 일반적으로 취하게 된다. 단점은, 그로 인해 CPU의 Branch Pr..
Control Flow Integrity for COTS Binaries august 2013 USENIX best paper awarded. (https://www.usenix.org/node/174767) “Security thesis review는 보안 관련된 논문의 개인 review로 다수의견과 일치되지 않을 수도 있습니다.” 소개글. Control Flow Integrity(이하 CFI)는 많이 연구되는 분야로 Return Oriented Program(ROP), Jump Oriented Program(JOP)와 같은 Code reuse 공격 기법에 대한 방어 기법이다. 2013년 발표된 이 논문에서는 CFI를 real-world에 적용하기 위한 방안에 대한 연구 내용을 다루고 있다. 배경. 기..
C++ / JAVA 와 같이 class와 상속을 지원하는 언어들은 class를 linking 하는 과정이 필요하다. AOSP에 구현된 JVM을 통해 이 과정을 간단히 살펴보자. 왜? 재밌으니까~? Class와 Instance 의 차이를 알고 계십니까? Class는 설계도이고 Instance는 Class 설계도를 메모리에 적재한 것을 말하죠. 위 그림처럼 Class의 설계도는 ..dex=안드로이드 파일에 보관되어 있습니다. class를 생성하는 과정에서 해당 설계도를 기반으로 ClassObject를 만듭니다. Class는 Variable/Method 로 이루어져있고 Variable은 ClassObject에, Method들은 Method 를 보관하는 테이블에 보관되며 해당 Method들에 대한 Index가 ..