일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- custom packer
- pthread
- apm
- 난독화
- Linux custom packer
- tracing
- thread local storage
- OSR
- linux thread
- android inject
- tracerpid
- LLVM 난독화
- Injection
- v8 optimizing
- on stack replacement
- 안티디버깅
- so inject
- anti debugging
- LLVM Obfuscator
- Android
- LLVM
- pinpoint
- on-stack replacement
- Obfuscator
- initial-exec
- v8 tracing
- Linux packer
- linux debugging
- TLS
- uftrace
- Today
- Total
목록분류 전체보기 (139)
Why should I know this?
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://youtu.be/C5Y977rLqpw?si=JXvJ7RsQ-26XSW4i 패치 만들고 LLVM 에 보내기 코드를 수정한 뒤 LLVM 에 기여하는 방식은 code-review 과정을 별도의 플랫폼에서 거친다는 차이가 있습니다. 이에 대한 자세한 과정은 다음 글을 참고하시면 됩니다. https://developers.redhat.com/articles/2022/12/20/how-contribute-llvm#implementing_the_transform How to contribute to LLVM | Red Hat Developer Interested in contributing to the open source LLVM project? This article walks you through..
Juneyoung_Lee_PhD.pdf (utl.pt) 위는 링크 왜인지 링크가 죽어있어서 다운받아놓은 파일도 첨부합니다. 매우 찾던 내용. 단지, 굳이 SMT?? 에 대한 구체적인 내용이 서술되지 않은 점이 아쉽다.
1. Undef – Explicit value in the IR – Acts like a free-floaLng hardware register • Takes all possible bit pakerns at the specified width • Can take a different value every Lme it is used – Comes from uniniLalized variables – Further reading • We want this opLmizaLon: %add = add nsw i32 %a, %b %cmp = icmp sgt i32 %add, %a => %cmp = icmp sgt i32 %b, 0 • But undef doesn’t let us do it: %add = add n..
@a = external global i32 define i1 @src(ptr %ptr) { entry: %first1 = getelementptr inbounds i8, ptr %ptr, i32 -2 %last1 = getelementptr inbounds i8, ptr %ptr, i32 48 %last2 = getelementptr inbounds i8, ptr %last1, i32 -6 %cmp = icmp slt ptr %first1, %last2 ret i1 %cmp } => 비교 define i1 @tgt(ptr %ptr) { %0: ret i1 1 } Transformation doesn't verify! define i1 @tgt(ptr %ptr) { %0: ret i1 0 } Transf..
LLVM PASS의 에러 검출 목적의 SOLVER 활용 https://llvm.org/devmtg/2020-09/slides/Lee-UndefPoison.pdf 발췌 -- 19. DSEPass ---------------------------------------- define i32 @test_captured_after_load_same_bb_2_clobbered_later(ptr %in.ptr) { %0: %a = alloca i64 4, align 4 store i32 55, ptr %a, align 4 %in.lv.1 = load ptr, ptr %in.ptr, align 2 %in.lv.2 = load i32, ptr %in.lv.1, align 2 call void @escape_writeon..
실행방식에 따른 구분 정적 동적 실행방식 분석기 (에뮬레이터|인터프리터) 실행기 (인터프리터|리얼머신) 문제점 경로 폭발 단일 경로로 분석이 제한 분석방식에 따른 구분 컨크릿 심볼릭 분석방식 상수 조건을 축적 기호화 된 논리 조건을 축적 경로탐색 상수 조건에 따라 결정 논리 조건에 따라 결정 정적 컨트릿 분석 == 정적분석. 동적 컨크릿 분석 == 테스트케이스. 정적 심볼릭 분석 == 심볼릭 실행. 동적 심볼릭 분석 == 컨클릭 실행. 라고 생각하면 된다. 이 네 가지 경우의 수가 헤깔리는 이유는, 대부분의 프로그램 분석 툴들이 실행 엔진과 함께 다수의 메커니즘을 혼용해 쓰기 때문이다. 하지만 각 조합마다 장단점 및 한계점은 명확하기 때문에 정확한 판단을 내리려면 정확하게 분리해서 사고하는게 좋다.
공부 문서 : 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..
Symbolic Execution은 대부분의 낯선 것들이 그렇듯 관념적으로 이해하게 된다. 이 글에서는 Symbolic Execution 을 만든 사람들이 어떤 고민을 했는지를 생각해보는 과정을 통해 그리고 몇 가지 예시를 통해 수학에서는 함수를 f 로 표기하고 함수=function이라고 부른다. 공교롭게도 이 함수는 프로그래밍에서 함수=function이라고 부르는 것과 일치한다 . f(x) = x + 4 인 함수를 C로 작성한다면? int f(int x) { return x+4; } 너무 쉬워서 더 생각할 필요도 없는것 같지만 Symbolic Execution은 우리가 간과하는 것을 고민한다. 대표적인게, "위에서 작성한 코드를 어떻게 테스트 할 수 있을까?"에 대한 고민이 그것이다. 내 생각에 고민은..
Simplify 테스트 케이스 중에는 다음과 같은 항목이 있습니다. 아무도 관심갖지 않는 TODO 입니다 ㅠ_ㅠ ; TODO: simplify this to %a define i1 @test8(i1 %a) { ; CHECK-LABEL: @test8( ; CHECK-NEXT: [[C:%.*]] = add i1 [[A:%.*]], true ; CHECK-NEXT: [[RES:%.*]] = xor i1 [[C]], true ; CHECK-NEXT: ret i1 [[RES]] ; %c = add i1 %a, true %res = xor i1 %c, true ret i1 %res } ; TODO: simplify this to %a define i1 @test10(i1 %a) { ; CHECK-LABEL: @te..