Strong Analysis Automation Tool with llm
LLM-Integrated Automation Script
Introduction
최근에 llm 을 이용하여 분석 자동화 도구에 대한 가능성을 확인하였고 이를 실행에 옮겼다. llm 을 사용하는 것은 많은 데이터를 정리하고 요약하여 손쉽게 접할 수 있다는 1차원적인 출발에서 시작할 수 있다. 그러나 이를 한 번 더 사용할 수 있는 방법은 무궁무진하게 열려있다. 개발할 때 코드를 읽을 수 있고 코드를 해석할 수 있고 코드를 만들 수 있다. 또한 취약한 코드를 찾아낼 수 있으며 나아가 난독화된 코드를 해독하는데까지 이를 수 있다. 이는 현재 가장 유용하게 사용하고 있는 도구를 더욱 강력하게 사용할 수 있는 방법을 제시하였고 기존보다 사용성에 대한 효율을 다소 상승시켰다.
이 페이지에서는 llm 을 통한 플러그인 (CodeDescriptor) 에 대한 사용 방법을 기재하여 어떻게 사용하고 어떤 결과를 가져오는지 작성하였다.
What is that
일반적으로 컴파일한 Java 코드를 디컴파일하면 변수이름과 메소드 이름은 변경되어 코드를 따라가기 어려워진다.
그래서 이를 보는 방법은 대개 다양한 방법으로 찾아볼 수 있다.
그중 최근에 이용하는 것은 코드를 llm 에게 물어보고 그 결과를 llm 이 첨부하여 알려주는 방식이다.
물론 이걸 위해선 깐깐한 프롬포트가 기반이 되어야 하며 종종 회신되어 오는 답문에서 잘못된 정보를 스스로 잡아낼 수 있는 부분도 필요하다.
이를 몇번 시도하다보니 작업 범위에서 자동화할 수 있는 부분이 보였고 관련 오픈소스는 없었지만 매순간 llm 을 통해 여러가지 플러그인들이 쏟아져 나오는 걸 확인할 수 있었다.
이를 통해 전반적으로 구동되는 프로세스를 본떠서 PoC 를 작성할 수 있었다.
출처: https://www.unimedia.tech/
먼저 플러그인은 툴에서 제공되는 API 를 사용할 수 있어 의존성을 갖는다.
해당 API 는 *.dex 파일로부터 메소드 오프셋을 파싱받아 디컴파일된 메소드 코드를 llm 을 통해 해독하여 코멘트를 기반으로 원본 코드를 설명해준다.
1차적으로 사용하여 Before/After 를 비교해볼 수 있는 결과가 나와 이에 기점으로 가이드라인을 작성해본다.
How to
아래는 플러그인의 동작과정과 사용법을 기재하였다.
플러그인은 Jython 으로 쓰여졌으며 툴 내부에 /script 안에 위치하여야 한다.
How to work
먼저 플러그인(CodeDescriptor) 는 확장할 수 있는 도구들 가운데 스크립트 형태로 작동된다. 스크립트는 Python 언어로 작성할 수 있으며 툴 내부에서 스크립트를 변환할 수 있는 Jython 을 지원한다. 간단한 반복 작업을 자동화 스크립트화 할 수 있게 지원해준다.
위는 찾으려는 오프셋이 위치한 코드를 디컴파일한 코드를 가져오는 과정이다. 이는 layout format 을 따라 코드를 디컴파일하는 과정인데 간략한 과정은 아래와 같다.
header 에서 method 와 index 와 시그니처 index 를 확인할 수 있다. 또한 class data 에서 code_off 세부 정보를 볼 수 있다. 이를 기반으로 string index 영역에서 함수를 문자열 형태로 추출할 수 있다.
위는 스크립트 구동 시 llm 사용 정보에 대한 설정과 함께 오프셋을 통해 디컴파일한 코드를 기반으로 llm 을 통한 난독화 해제 코드를 생성하는 전체 과정이다.
script 로 llm 에 요청을 보내는 것은 다음 저장소에서 확인할 수 있다.
이때 사용하려면 개인이 발급받은 llm 에 대한 API 키가 필요하다. API key 발급은 여기서 할 수 있다.
How to use
스크립트 사용법은 일반 스크립트 사용법과 동일하다. script/
안에 파일을 배치하고서 File->Scripts->Selector 에서 파일을 찾은 후 실행하면 된다.
A. dex file 에서 분석할 메소드 오프셋에 포커스를 위치한다.
먼저 dex 파일을 열어서 알아보고자 하는 메소드의 오프셋을 찾는다.
B. LLM 에 관한 Configuration 정보를 입력한다.
Select a LLM4JEB (CodeDescriptor)
script 항목에서 CodeDescriptor 를 선택해주면 위와 같은 Configuration 창이 나오면서 세부 정보를 기입하는 부분이 나온다. 항목을 입력하고 OK 를 누르면 llm 을 위한 준비는 끝났다.
여기선 다른 llm 도 사용할 수 있게 수정할 수 있다. 사용하려는 모델에 대한 model type, endpoint, API key 등을 입력하면 된다.
C. 디컴파일된 코드를 확인한다.
다음 창에서는 처음에 오프셋을 둔 곳에 메소드를 컴파일한 코드를 보여준다.
D. llm 을 통한 분석된 메소드 코드를 확인한다.
Display deobfuscated method code
확인을 누르면 프롬포트 기반으로 디컴파일된 코드를 선책한 llm model 이 처리하여 line by line 으로 comment 를 작성하여 반환해준다.
Conclusion
종종 모르는 코드나 낯선 코드를 보면 llm 을 통해 왔다갔다 하면서 수작업을 하는 일상이 있는데 이를 완전 자동화할 수 있는 것이 이번 기회에 큰 시작으로 다가온다.
또한 다른 llm 을 직접 설정하도록 사용이 가능해 DeepSeek, Claude 또는 다른 로컬 커스텀 llm 도 가능하다.
llm 의 등장으로 도구와 도구 사이를 자동화할 수 있었으며 나아가 다른 에디터에서도 충분히 활용할 수 있을 것으로 예상된다.
에디터에서 외부 플러그인을 import 할 수 있으며 이는 다른 관리 도구에서도 이를 활용할 수 있을 것이다.
추후에는 llm 을 활용한 다른 확장 플러그인이나 앱을 만들어보려고 한다.
If you find any errors, please let me know by comment or email. Thank you.