Java 프로그램을 IR로 변환하여 난독화하는 도구 개발 1. 프로젝트 개요 이 프로젝트는 컴파일러의 코드 변환 기술을 활용하여 Java 프로그램을 IR (Intermediate Representation, 중간 표현)로 변환하고, IR을 조작하는 방식으로 코드를 난
1. 개요 앞 장에서 언급했던 Pretty Printer 와 달리, Ugly Print는 말 그대로 못생긴 출력이다. 이는 코드를 난독화하여 이해하기 어렵게 하는 방식이다. 이를 위해서 Listener pattern을 활용할 수 있다. 2. ANTLR ANother
Java, ANTLR을 이용하여 MiniC 문법으로 된 코드에 대한 Pretty Print 코드를 listener를 활용하여 작성하기 초기 설정은 일전의 ugly printer 블록이나 nesting 되어 들어갈 떄는 4칸 들여쓰기 2진 연산자와 피 연산자 사이에는

ANTLR로 파싱된 MiniC 코드에 대해 난독화를 적용하는 리스너 클래스ANTLR이 소스 코드를 파싱하여 Parse Tree 생성ParseTreeWalker가 리스너(MiniCPrintListener)를 통해 트리를 순회각 노드에서 난독화 처리 후, 문자열로 저장최종

난독화란, '의미를 유지한 채' 사람이 읽기 어렵고 분석하기 어렵게 만드는 것. 즉 난독화되기 전 코드와 동작은 같아야 함.해당 코드는 변수,함수명 치환, 정수 리터럴을 수식으로 치환, 조건식 내부에 항상 true인 조건 추가, 공백 제거 등의 난독화를 수행한다. 때문

난독화도 최적화도 코드를 분석해야 실행 가능특히 다음과 같은 분석 기법들이 공통적으로 사용Control Flow Graph (CFG)Data Flow AnalysisLiveness AnalysisUse-Def Chain분석 기술이 같고, 분석 후의 조작 방향이 반대.L

LLVM LLVM 이란 ? Low Level Virtual Machine의 약자. Virtual machine은 실제 하드웨어를 소프트웨어로 가상화(Emulation)한 컴퓨터 환경이다. 물리적인 컴퓨터 한 대 위에 여러개의 가상 컴퓨터를 software로 만든다.

주로 C언어로 작성된 프로그램의 소스 코드를 대상으로 다양한 난독화 및 코드 변환 가능을 제공하는 오픈소스 도구 소스 코드 변환 기반 난독화 : C source code를 직접 변환한다. 다양한 난독화 기법 지원 보안 강화 목적으로 사용Tigress 홈페이지 접속, 후
Kaleidoscope 언어를 통하여 LLVM의 컴포넌트를 활용하여 언어의 프론트앤드를 직접 구현해보자. https://llvm.org/docs/tutorial/index.html 1~10장으로 구성되어 있다. 소스 코드를 tokenize 하는 Lexer 구현 paser 구현 -> token stream을 AST로 변환 AST 기반으로 IR 코드 생성...

Chapter 5 Introduction 1~4장까지는 기본 언어 구조와 LLVM IR 생성을 구현하고, 최적화된 JIT(just in time) 컴파일러까지 도입하였다. 1. Kaleidoscope: Kaleidoscope Introduction and the Lex
Kaleidoscope의 for 문 예시는 위와 같다. i = 1: i를 1에서 시작i < n: i가 n보다 작은 동안 반복1.0: 매 반복마다 i를 1.0씩 증가in ...: for 루프의 내부 실행 코드(여기선 putchard)putchard(42): 42는
Kaleidoscope에 사용자가 직접 자신만의 이항연산자나 단항연산자를 정의할 수 있게 하는 기능ex) def binary |> 10 (lhs rhs); 등과 같이 |> 새로운 연산자 정의 이렇게 하면 표준 라이브러리의 상당 부분을 언어 자체로 구현전체적인 줄거리는

https://github.com/leejaymin/llvm8-tutorials-jemin/tree/master?tab=readme-ov-file해당 주소에 있는 튜토리얼로 진행하였다. 해당 실습에서는 LLVM의 ModulePass를 활용하여, 새로운 함수와

이전 코드 난독화 제작에서는, 소스 코드 레벨에서의 난독화를 진행하였다. 하지만 최근 LLM의 발전으로, 평이하거나 전통적인 난독화 코드에 대하여 역난독화가 가능해졌다. 소스 코드 수준에서의 난독화만으로는 보안 유지가 어려워지고 있는 현실이다.위의 예시와 같이 소스 코