Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ghidra-llm-pipeline — C 재구현을 위한 결정론적 PyGhidra 추출, 트리아지 및 로컬 LLM 컴파일러 백엔드 파이프라인. | Kitploit
도구/GitHubGitHub/happytotoro116/ghidra-llm-pipeline
Static AnalysisCode AnalysisReverse EngineeringScripting & AutomationBinary AnalysisMachine LearningAI-Assisted ReversingAI Security
GitHubhappytotoro116/ghidra-llm-pipeline

ghidra-llm-pipeline

C 재구현을 위한 결정론적 PyGhidra 추출, 트리아지 및 로컬 LLM 컴파일러 백엔드 파이프라인.

저장소 보기
41401일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

ghidra-llm-pipeline

제 Ghidra + LLM 파이프라인을 다운로드해 주셔서 감사합니다.

이것은 제 첫 README입니다. 제 모국어는 ASL(미국 수어)이라서 제 영어는 완벽하지 않습니다. 최선을 다했습니다.


----- 제작 동기 -----

어린 시절부터 해 온 오래된 PC 시뮬레이션 게임을 좋아하는데, 그 내부를 개선하고 싶습니다.

OpenRA나 OpenTTD 같은 오픈소스 게임들을 보면서 배운 것은 이것입니다: 취미로 하는 재구현은 원본 소스 코드를 얻는 것이 아닙니다. 원본의 에셋을 불러올 수 있는 새로운 오픈소스 버전의 게임을 만드는 것입니다. 그러면 누구나 확장하거나 기여할 수 있습니다.

작업을 위해 두 종류의 AI를 함께 사용합니다:

  • 지식과 조언을 위한 클라우드 AI (그리고 Python 스크립팅 도움용).
  • 무거운 작업(코드 작성)을 위한 로컬 LLM.

----- 파이프라인 -----

  1. PyGhidra가 프로그램을 어셈블리와 C 의사코드로 덤프합니다.
  2. 헤더가 가장 중요한 부분입니다. 각 함수는 자신이 사용하는 함수와 전역 변수를 담은 헤더를 갖습니다.
  3. 그룹화: Python이 서로를 호출하는 함수들을 "클래스"로 묶습니다.
  4. 분류: Python이 각 그룹이 사용하는 문자열을 읽어 그 용도를 추측합니다.
  5. 역할: 스크립트가 각 클래스의 예상 역할을 나열하고 작업 큐를 만듭니다.

----- 레이블 (분류) -----

모든 함수는 하나의 레이블을 받습니다. 이는 많은 시간을 절약해 줍니다. OS와 런타임 잡동사니의 큰 풀에 노력을 낭비하지 않기 때문입니다.

|-----------|------------------------------------------------------------------------------------------------------------------

레이블의미
KEEP게임 자체의 로직 (예: 비행 모델, 데미지 모델, TrackIR)
WRAPOS나 입력 API를 호출하는 Java 대면 글루 코드: 시그니처는 유지하고 본문을 새로 작성.
(IL-2 1946은 흥미로운 엔진입니다: C++와 Java가 함께 있습니다.)
REPLACE오래된 C 런타임, 할당자, thunk: 컴파일러나 OS가 제공하므로 새로운 64비트 버전에는 필요 없음
UNKNOWN불분명: 직접 살펴볼 것
-----------------------------------------------------------------------------------------------------------------------------

제 테스트 프로그램에서는 약 44%의 함수가 REPLACE였으므로, 변환할 필요가 전혀 없었습니다.


----- C 의사코드가 아닌 어셈블리 -----

처음에는 C 의사코드가 모든 답을 갖고 있다고 믿었습니다. 그것은 순진한 생각이었습니다. 그것은 Ghidra의 어셈블리 해석이며, 추측을 담고 있습니다(변수 타입, 유실된 인자).

어셈블리가 원시 진실입니다. 변수 타입은 없지만, 각 함수의 정확한 동작을 담고 있습니다. 그래서 스크립트는 어셈블리를 읽고, 그것을 C 형태의 청사진으로 변환합니다. Ghidra의 C는 힌트로만 유지됩니다.


----- 어셈블러가 아닌 컴파일러로서의 LLM -----

초기 테스트에서는 로컬 LLM(Qwen 2.5 Coder, DeepSeek Coder V2 Lite, Mellum 2)을 사용해 어셈블리를 직접 읽게 했습니다. 그것은 결코 안정적으로 작동하지 않았습니다. LLM은 코드를 작성하도록 만들어졌지 원시 기계어를 읽도록 만들어지지 않았기 때문에 환각을 일으켰습니다.

많은 실패한 실험 끝에 작업을 나눴습니다:

  • Python이 어셈블러입니다. 어셈블리를 읽고 청사진을 작성합니다: 정확한 사실, 레지스터 수준의 C 초안, 체크리스트.
  • LLM이 컴파일러입니다. 청사진으로부터 실제 C를 자유롭게 작성합니다.
  • Python이 답을 검사하고(텍스트 검사와 실제 컴파일러) 작은 실수를 고칩니다.

참고: Python이 답을 검사하는 방법

  • 텍스트 검사: 함수 이름, 청사진의 모든 호출, 전역 변수, 문자열, 루프, 스텝 크기, 비교되는 상수, 반환 값, 그리고 레지스터 이름이나 지어낸 이름이 남아 있지 않은지.

  • gcc 컴파일 검사: 코드는 gcc로 컴파일된다(구문 검사만 수행하며, 아무것도 실행되지 않는다). 이것이 큰 도움이 되었다. 초기 실행에서 텍스트 검사는 Mellum 2의 답변을 통과시켰지만, 주석 밖에 작성된 헤더 주석 때문에 어느 것도 컴파일되지 않았다. gcc는 텍스트 검사가 볼 수 없는 것을 잡아낸다: 선언되지 않았거나 재선언된 변수, 잘못된 타입, 그리고 깨진 중괄호나 세미콜론. 함수는 텍스트 검사와 컴파일이 모두 OK일 때만 PASS로 간주된다. gcc는 로직이 올바르다는 것을 증명하지 않으므로, 나는 여전히 청사진과 대조하여 코드를 읽는다.

  • 검사가 실패하면, LLM은 실패한 항목 목록을 받고 한 번 더 시도한다.

  • Python은 LLM 없이 사소한 실수를 스스로 수정한다: 각 변수를 한 번씩 선언하고, 느슨한 헤더 줄을 주석으로 감싸고, 마지막 return이 올바른 결과를 반환하도록 하며, include와 선언을 추가한다.

이 체크리스트는 LLM이 매우 긴 함수에서 실패하는 것을 보고 나서 만들었다. 이는 조종사가 이륙과 착륙 전에 사용하는 체크리스트처럼 작동한다. Python이 함수로부터 이를 작성하고, 그에 대조하여 답변을 검사한다. 내 테스트에서 긴 함수들이 통과하기 시작했고, 실행 속도도 빨라졌다.


----- 이 저장소에 있는 것 -----

|-------------------|---------------------------------------|---------------------------------------------

폴더하는 일읽을 파일
ghidra_pipeline덤프, 그룹화, 트리아지, 역할ghidra_pipeline/INSTRUCTION.txt
llm_pipeline청사진과 LLM 러너 (v3)llm_pipeline/INSTRUCTION_BLUEPRINT_LLM.txt
-------------------------------------------------------------------------------------------------------

ghidra_pipeline부터 시작하고, 로컬 LLM을 사용할 준비가 되면 llm_pipeline으로 넘어가라.


----- 빠른 시작 -----

먼저 PyGhidra에서 프로그램을 분석하고 PyGhidra Scripts/decompile_full_dump.py를 실행하라. 두 INSTRUCTION 파일이 폴더 설정을 설명한다. 그런 다음:

먼저 PyGhidra에서 프로그램을 분석하고 PyGhidra Scripts/decompile_full_dump.py를 실행하라. 두 INSTRUCTION 파일이 폴더 설정을 설명한다. 그런 다음:

python .\make_full_lite_v2.py --in . --out .\OUT
python .\triage_evidence_v2.py --lite .\OUT\LITE_AC
python .\build_roles_v2.py --triage .\OUT\TRIAGE

python .\blueprint_v3.py --group ".\SOURCE\LITE_AC\<GroupName>" --out ".\G_<GroupName>\BLUEPRINT_v3"
python .\run_blueprint_llm_v3.py --bp ".\G_<GroupName>\BLUEPRINT_v3" --out ".\G_<GroupName>\RUN1_v3_<model>" --model <model name>

Ghidra와 PyGhidra, Python 3, LM Studio(모델 하나 로드됨), gcc(권장, 컴파일 검사에 사용)가 필요합니다.


----- 지금까지의 결과 -----

  • 32비트 Windows 프로그램 하나에서 나온 6개 함수 그룹, 로컬 모델 세 개.
  • 세 모델 모두 논리적으로 올바른 코드를 생성했습니다(청사진과 대조해 직접 읽어보았습니다). 자동 검사기는 6/6, 6/6, 5/6으로 통과했습니다.
  • 계속 작업 중입니다. 이것이 첫 번째 릴리스입니다.

----- 한계 -----

  • 프로그램 하나에서만 테스트했습니다. 다른 프로그램으로도 시도해 보세요.
  • PASS는 검사와 컴파일이 정상이라는 뜻입니다. 논리가 올바르다는 것을 증명하지는 않습니다.
  • 32비트 프로그램 전용입니다(주소를 8자리 16진수로 읽습니다).
  • 포인터는 32비트 정수로 형변환됩니다. 64비트 빌드에는 포인터 크기 타입이 필요합니다.
  • 분류(triage) 레이블은 추측이며 증명이 아닙니다.
  • 스크립트의 일부 설정은 제 테스트 프로그램을 위한 예시입니다. 사용하시는 프로그램에 맞게 설정하세요.
  • PASS만 믿지 마세요. Claude 같은 클라우드 AI가 있다면, LLM 출력과 SOURCE 폴더의 원본 어셈블리 및 C 의사코드를 함께 주고 함수별로 비교해 달라고 요청하세요. 그러면 코드가 실제로 통과하는지 알 수 있습니다. 저도 이렇게 제 결과를 확인했습니다. 공유가 허용된 파일만 업로드하세요.

----- 게임 파일 없음 -----

이 저장소에는 스크립트와 문서만 있습니다. 게임 파일, 코드, 데이터는 없습니다. 소유한 프로그램에만 사용하고, 해당 프로그램에 적용되는 규칙을 따르세요.


----- 기여하기 -----

다른 게임에서 시도해 보고 무엇이 잘 되고 무엇이 안 되는지 알려주세요. 아이디어와 개선 사항을 환영합니다.

스크립트를 가져다가 더 개선해도 자유롭게 하셔도 됩니다. Apache 2.0 라이선스는 사용, 변경, 공유를 허용하므로 포크하고, 자신만의 버전을 만들고, 배운 것을 공유하세요.

제가 가장 좋아하는 단어는 탈중앙화입니다. 저에게 그것은 커뮤니티 기반의 공유와 지원을 뜻하며, 우리가 이미 가진 것을 함께 개선해 나가는 것입니다. 이것이 취미 수준의 재구현(리버스 엔지니어링)과 LLM 개발에 새로운 아이디어를 가져오기를 바랍니다.


----- 라이선스 -----

Apache License 2.0. LICENSE와 NOTICE를 참조하세요.

Copyright 2026 Ryu116 (also known as HappyTotoro116)

도구 다운로드