Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Transformers-Forged-To-Fight-Offline-Version — TRANSFORMERS: Forged to Fight는 트랜스포머 유니버스에서 바로 나온 가장 카리스마 넘치는 전사들을 조종할 수 있는 3D 전투 게임입니다. 옵티머스 프라임, 메가트론, 범블비, 래칫, 사운드웨이브, 그라인더와 같은 큰 이름들이죠–그 이상도 아닙니다. 네, 제대로 읽으셨습니다. 어떤 트랜스포머 시리즈에서든 여러분이 좋아하는 캐릭터들 | Kitploit
도구/GitHubGitHub/geamztheangrybirds727/transformers-forged-to-fight-offline-version
Dynamic Analysis (Sandboxing)Reverse EngineeringDebuggersBinary AnalysisPapers & ResearchLearning & EducationCurated ResourcesBinary Exploitation

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
geamztheangrybirds727/transformers-forged-to-fight-offline-version

Transformers-Forged-To-Fight-Offline-Version

TRANSFORMERS: Forged to Fight는 트랜스포머 유니버스에서 바로 나온 가장 카리스마 넘치는 전사들을 조종할 수 있는 3D 전투 게임입니다. 옵티머스 프라임, 메가트론, 범블비, 래칫, 사운드웨이브, 그라인더와 같은 큰 이름들이죠–그 이상도 아닙니다. 네, 제대로 읽으셨습니다. 어떤 트랜스포머 시리즈에서든 여러분이 좋아하는 캐릭터들

저장소 보기
262개월 전아직 검토되지 않음

Transformers: Forged to Fight, 오프라인 부활 인계

이 패키지는 Transformers: Forged to Fight의 작동하는 오프라인 부팅과 함께, 그 과정에 사용된 모든 도구, 패치, 리버스 엔지니어링 노트를 포함합니다. 이는 시간과 에너지를 들여 다음이자 훨씬 더 큰 단계인 게임 서버 측 콘텐츠를 처음부터 다시 구축하려는 사람을 위해 준비되었습니다. 여기에 있는 모든 것은 문서화되어 있어 제가 했던 것처럼 처음부터 시작할 필요가 없도록 했습니다.

무엇이든 건드리기 전에 이 파일 전체를 읽으십시오. 특히 "Gotchas" 섹션은 며칠을 절약해 줄 것입니다.

현재 실제로 작동하는 것

게임은 완전히 오프라인으로 부팅되며, 라이브 서버 없이 실제 대화형 홈 화면에 도달합니다. 홈 화면에서 메뉴는 충돌 없이 탐색됩니다: 기지, 봇 로스터(계정에 소유한 봇이 있음), 전투 모드 선택, 크리스탈 화면, 일반적인 팝업 및 팁. 전체 로그인 흐름이 완료되고, 모든 온라인 하위 시스템이 연결되며, 첫 경험 및 튜토리얼 게이트가 통과됩니다. 스크립트된 인트로 전투(Optimus 대 Starscream)는 전투 로딩을 시작하기에 충분히 진행되며, 3D 캐릭터 모델이 렌더링되고 애니메이션됩니다.

이것이 어려운 부분이었고 해결되었습니다. 클라이언트 자체가 오프라인에서 다시 살아났습니다.

작동하지 않는 것과 그 이유

실제 게임플레이는 작동하지 않습니다. 스토리에 미션이 표시되지 않으며, 전투가 완전히 로드되지 않습니다. 이것은 버그가 아니며 패치로 고칠 수 있는 것이 아닙니다.

Forged to Fight는 완전히 서버 주도적이었습니다. 휴대폰의 앱은 기본적으로 컨트롤이 있는 화면이었습니다. 게임에 관한 거의 모든 것이 앱 안에 있지 않았습니다. 모든 미션, 모든 전투, 모든 적 라인업, 전체 로스터의 능력치와 스킬, 경제, 모든 밸런스는 Kabam의 서버에 살아 있었고 세션마다 기기로 스트리밍되었습니다. 2020년 초 서버가 종료되었을 때 그 콘텐츠 데이터베이스도 함께 사라졌으며, 제가 도달할 수 있는 곳에 공개적으로 보관되지 않았습니다.

따라서 상황은 깔끔하게 두 가지로 나뉩니다. 아트와 오디오는 살아남았습니다. 왜냐하면 그것들은 앱 내부에 포함되어 있기 때문입니다(re_notes/ASSET_INVENTORY.txt 참조). 모든 캐릭터는 모델, 텍스처, 리그, 애니메이션 클립, 애니메이터 컨트롤러, 이펙트, 오디오를 담고 있는 완전한 Unity 에셋 번들입니다. 환경, 건물, UI, 초상화, 컷신, 대화도 모두 있습니다. 살아남지 못한 것은 게임에 어떤 에셋을 사용할지, 그것들을 전투나 미션으로 조립하는 방법, 그리고 각 봇의 수치가 실제로 무엇인지를 알려주는 데이터입니다. 모든 조각은 존재합니다. 그것들을 어떻게 조합해야 하는지 아는 것이 남아 있지 않을 뿐입니다. 그것을 재구축하는 것이 남은 전체 작업입니다.

오프라인 부팅의 작동 방식

네 가지 움직이는 부분이 있습니다. 함께 작동하여 수정되지 않은 게임이 Kabam과 통신하고 있다고 생각하게 만듭니다.

  1. 네이티브 바이너리 패치. 게임은 Unity IL2CPP이므로 로직은 편집 가능한 스크립트 파일이 아닌 컴파일된 ARM 라이브러리 libil2cpp.so에 있습니다. patches/patch_il2cpp.py는 해당 라이브러리의 여섯 가지 함수를 다시 작성하여 죽은 서버 검사를 우회합니다: 두 개의 인증서 고정 경로를 무력화하여 자체 TLS 인증서가 허용되도록 하고, 라이브 구성이 null임에도 매니저 등록 블록이 실행되도록 강제하며, 로컬 장치 세션으로 로그인이 성공하도록 하고, 그렇지 않으면 "로그인 실패" 대화상자를 표시할 하위 시스템 치명적 오류를 무음 처리합니다. 또한 단일 종속성 항목을 다시 주입하여( Gotchas 섹션 참조) 런타임 훅이 실제로 로드되도록 합니다. 출력은 libil2cpp.patched.so입니다.

  2. 가짜 Sparx 서버. server/fakeserver.py는 Kabam의 백엔드를 대신합니다. TLS 443 및 일반 HTTP 80에서 수신 대기하며 게임의 API 호출에 응답합니다. 캔 응답은 server/responses/에 있으며, 엔드포인트당 하나의 파일로, 메서드와 경로로 이름이 지정됩니다(예: GET__account_data.json). 몇몇 엔드포인트는 파일이 아닌 코드에서 동적으로 응답합니다. 게임이 요청의 값을 에코할 것으로 예상하기 때문입니다(튜토리얼 엔드포인트 및 영웅 상세 엔드포인트). 응답 봉투는 {"error":null,"result": ...}입니다. Sparx 오류 페이로드 내부에서 필드는 err로 철자되며 error가 아닙니다. 이 세부 사항은 중요하며 놓치기 쉽습니다.

  3. 네이티브 런타임 훅. tools/nativehook/는 libdothook.so를 빌드합니다. 이는 게임 시작 시 로드되어 게임이 읽는 모든 데이터 키와 몇 가지 대상 동작 미세 조정을 기록하는 작은 라이브러리입니다. 이것은 다른 모든 것을 가능하게 만든 피드백 루프입니다: 게임이 정확히 무엇을 요청하는지 알려주어 응답을 합성하고 확인할 수 있게 합니다. 실행 전에 설치된 순수 바이트 덮어쓰기 인라인 훅입니다. 일반적인 도구(Frida)는 에뮬레이터의 ARM 변환 계층 아래에서 충돌하기 때문입니다.

런타임 데이터 흐름은 다음과 같습니다: 게임이 Kabam 도메인에 HTTPS 호출을 하고, 호스트 파일이 이를 PC로 보내며, 가짜 서버가 server/responses/의 응답으로 응답하고, 패치된 라이브러리가 인증서와 응답을 수락하며, 훅이 읽은 내용을 기록합니다. 이 루프를 통해 이 빌드의 모든 화면이 올라왔습니다.

이 패키지에 포함된 것

root@kitploit:~
README.md                     이 파일
TECHNICAL_NOTES.md            더 깊은 기술 참조: 패치, 복구된 데이터 형태, 발견 사항
patches/
  patch_il2cpp.py             여섯 가지 네이티브 패치 + 종속성 재주입
  disasm_fn.py                도우미: 오프셋에서 함수 분해
  find_callers.py             도우미: 함수 호출자 찾기
  find_str_ref.py             도우미: 문자열 참조 찾기
server/
  fakeserver.py               가짜 Sparx 서버
  gen_certs.sh                TLS 인증서 및 CA 재생성 (실행, 아래 참조)
  setup_device.sh             기기 측 네트워크 및 신뢰 설정 참조
  iterate.sh                  빠른 재시작 및 캡처 루프
  responses/                  게임이 호출하는 엔드포인트당 하나의 JSON 파일
tools/
  provision_ldplayer.sh       에뮬레이터를 작업 상태로 한 번에 재프로비저닝
  setup_arm64.sh              툴체인 설정 노트
  decompile_targets.py        선택된 오프셋에서 Ghidra 헤드리스 디컴파일러 구동
  find_xrefs.py               바이너리 전체 교차 참조 검색
  apply_labels.py             IL2CPP 심볼 레이블 적용
  light_analyze.py            경량 정적 분석 도우미
  frida_attach.py             Frida 도우미 (참고용 보관, libnb 참고 참조)
  frida_run.py
  hook_dot.js
  nativehook/
    hook.c                    libdothook.so의 소스, 런타임 훅
    libdothook.so             사전 빌드된 훅, arm64
    deploy.sh                 훅 빌드 및 배포
    relaunch_and_capture.sh   게임 재실행 및 로그 캡처
  hook/dothook.c              이전 훅 변형, 참고용 보관
re_notes/
  dump.cs                     전체 IL2CPP 덤프: 게임의 모든 클래스, 메서드, 필드
  decomp_out.c                주요 함수의 디컴파일된 본문
  decompile_targets.txt       디컴파일할 가치가 있는 오프셋
  ASSET_INVENTORY.txt         앱 내에 이미 포함된 아트 및 오디오 목록

re_notes/dump.cs는 남은 작업을 위해 가장 가치 있는 단일 파일입니다. 이는 게임의 완전한 타입 모델입니다: 모든 클래스, 모든 메서드, 그리고 결정적으로 클라이언트가 서버에서 읽는 모든 데이터 필드. 이는 전체 백엔드 API의 지도입니다. 응답의 형태가 무엇이어야 하는지 알아야 할 때, 답은 여기에 있습니다.

이 패키지에 포함되지 않은 것과 구하는 방법

다음은 의도적으로 제외되었습니다. 크기가 크거나, 저작권이 있거나, 비밀이거나, 직접 생성해야 하기 때문입니다.

  • APK 자체 (com.kabam.bigrobot, 버전 9.2.0). 약 800 MB입니다. 자신의 사본을 구하십시오. 패키지 이름과 버전은 TECHNICAL_NOTES.md에 있습니다.
  • 원본 libil2cpp.so 및 게임 에셋. 둘 다 APK에서 직접 추출됩니다. APK의 압축을 풀면 라이브러리는 lib/arm64-v8a/ 아래에, 에셋은 assets/ 아래에 있습니다.
  • TLS 인증서 및 CA. 개인 키를 배송하지 마십시오. server/gen_certs.sh를 실행하여 자신의 쌍을 만든 다음 기기 신뢰 저장소를 새 CA로 지정하십시오.
  • 패치된 라이브러리. 다시 생성하십시오: APK의 원본 libil2cpp.so에 대해 patches/patch_il2cpp.py를 실행하십시오.
  • Frida 서버 및 Il2CppDumper. 둘 다 공개 도구입니다. Il2CppDumper는 APK의 라이브러리와 전역 메타데이터에서 re_notes/dump.cs를 생성한 도구입니다.
  • Android NDK (r26 사용) 및 JDK 21. 훅을 빌드하고 Ghidra 헤드리스 디컴파일러를 실행하는 데 필요합니다.

현재 존재하는 것을 실행하는 방법

ARM 변환 가능 에뮬레이터(LDPlayer 9 사용, 루트 및 쓰기 가능한 시스템 필요)에 APK가 설치되어 있고, PC에 Python이 있으며, 위 섹션의 항목들이 필요합니다.

  1. 인증서를 한 번 생성: bash server/gen_certs.sh.
  2. 패치된 라이브러리를 한 번 빌드: python patches/patch_il2cpp.py path/to/original/libil2cpp.so --apply.
  3. 훅을 다시 빌드하려면 한 번 빌드하고, 그렇지 않으면 사전 빌드된 것을 사용하십시오. tools/nativehook/deploy.sh 참조.
  4. PC에서 가짜 서버 시작: python server/fakeserver.py. 에뮬레이터에서 포트 443 및 80에 접근 가능해야 합니다.
  5. 기기 프로비저닝: bash tools/provision_ldplayer.sh <your-PC-LAN-IP>. 에뮬레이터 재부팅 후 매번 다시 실행하십시오.
  6. 약 45초 기다린 후 제목 화면을 탭하여 로그인하십시오. 홈 화면에 도달해야 합니다.

로그인에서 멈추면 Gotchas 섹션의 첫 번째 항목을 먼저 확인하십시오.

시간을 잡아먹을 Gotchas

이것들은 저에게 시간을 소모하게 만든 것들입니다. 여러분도 같은 일을 겪지 않도록 기록해 둡니다.

  • 런타임 훅은 원본 라이브러리에는 없는 종속성 항목을 통해서만 로드됩니다. 패치 스크립트는 원본 라이브러리에서 빌드되므로, 해당 항목을 다시 추가하지 않으면 훅이 조용히 로드되지 않고 로그인이 그냥 멈춥니다. 이제 패치 스크립트는 모든 빌드마다 이를 다시 주입합니다. 훅이 죽은 것 같다면 가장 먼저 확인해야 할 것은 패치된 라이브러리가 실제로 libdothook.so를 참조하는지입니다. 정확한 바이트와 오프셋은 패치 스크립트와 TECHNICAL_NOTES.md에 문서화되어 있습니다.
  • 테스트에 LDPlayer9/Bluestacks를 사용하는 경우 Frida는 작동하지 않습니다. 에뮬레이터는 ARM을 x86으로 변환하며, Frida는 해당 변환 아래에서 충돌합니다. 프로젝트가 순수 바이트 덮어쓰기 인라인 훅을 사용하는 이유는 Frida가 작동하지 않는 곳에서도 작동하기 때문입니다. Frida를 작동시키려고 시간을 낭비하지 마십시오.
  • 기기 네트워크 마운트는 에뮬레이터 재부팅 후에도 유지되지 않습니다. 호스트 리디렉션과 CA 신뢰는 바인드 마운트입니다. 에뮬레이터를 다시 시작한 후에는 provision_ldplayer.sh를 다시 실행하지 않으면 아무것도 연결되지 않습니다.
  • Sparx 오류 페이로드 내부에서 필드는 err이며 error가 아닙니다. 잘못된 것을 사용하면 클라이언트가 조용히 무시하거나 잘못 처리하는 응답이 생성됩니다.
  • 대화형 튜토리얼 프롬프트 상태는 오프라인에서 무한 루프됩니다. 튜토리얼 요청에 응답하여 만족시키려고 하지 마십시오. 대신 튜토리얼을 트리거하는 조건을 제거하십시오. 쉴드 튜토리얼 프리즈는 이런 방식으로 수정되었습니다. 튜토리얼에 응답하는 대신, 부재가 트리거한 리소스를 플레이어에게 제공함으로써 해결되었습니다.
  • 에뮬레이터 아래에서 라이브 3D 콘텐츠 렌더링은 취약합니다. 모델은 렌더링되지만, 이는 가장 불안정한 영역이며 에뮬레이터의 그래픽 백엔드 및 텍스처 설정에 민감합니다. 이는 데이터 문제가 아닌 에뮬레이터 그래픽 문제입니다.

실제로 부활시키고 싶다면: 백엔드 재구축

이것이 진짜 작업이며 규모가 큽니다. 그 형태와 시작점은 다음과 같습니다.

목표는 이전에 클라이언트로 스트리밍되던 서버 측 콘텐츠를 수동으로 재생성하는 것입니다: 퀘스트와 미션, 맵과 적 라인업, 각 봇의 능력치와 스킬이 포함된 전체 로스터, 전투 공식, 경제. 이 중 어느 것도 더 이상 존재하지 않으므로, 모든 것이 클라이언트가 예상하는 정확한 형태로 새롭게 작성되어야 합니다.

작동하는 방법은 이 프로젝트가 기반으로 하는 루프입니다. 훅이 연결된 상태로 게임을 실행하십시오. 훅은 클라이언트가 읽는 모든 키를 기록합니다. 클라이언트가 제공하지 않은 것을 요청하면 정확히 무엇을 원했는지 볼 수 있습니다. 그런 다음 올바른 형태의 응답을 합성하여 server/responses/에 넣거나 fakeserver.py의 동적 핸들러에 추가하고, 다시 시작한 후 클라이언트가 이를 수락하고 진행하는지 확인하십시오. 반복하십시오. 현재 빌드의 모든 화면이 정확히 이 방식으로 올라왔습니다. re_notes/dump.cs는 실행 전에 각 구조의 형태를 알려줍니다. 클라이언트가 읽는 모든 필드를 나열하기 때문입니다.

공격하기에 합리적인 순서:

  1. 하나의 완전한 전투가 로드되어 끝까지 실행되도록 하십시오. 이것이 가장 가치가 높은 목표입니다. 전투는 게임의 핵심이며 한 번에 가장 많은 서버 데이터를 사용하기 때문입니다. 참가자 정의, 그들의 능력치와 스킬, 그리고 전투 초기화 경로가 요청하는 모든 것이 필요합니다. 인트로 전투는 이미 로딩을 시작하므로, 거기서 먼저 밀어보십시오. 전투 초기화 및 전투 데이터 경로를 디컴파일하고(decompile_targets.py 사용) 정확한 필드를 읽어내십시오.
  2. 로스터 데이터 모델을 완전히 재구성하십시오. 한 번에 한 봇씩, 능력치와 스킬을 포함하여. 각 봇의 아트는 이미 ASSET_INVENTORY.txt에 나열된 번들에 존재하므로, 숫자와 스킬 정의만 작성하면 되고 에셋은 필요하지 않습니다.
  3. 퀘스트 및 맵 구조를 재구축하여 스토리가 비어 있지 않도록 하십시오. 기본 구조는 이미 부분적으로 해독되었습니다. 키는 TECHNICAL_NOTES.md를 참조하십시오.
  4. 경제와 진행 시스템은 마지막에 채우십시오. 전투와 미션이 존재하여 소비할 수 있게 된 후에.

규모에 대해 현실적이어야 합니다. 팬들이 종료 전에 라이브 서버 데이터를 저장한 게임조차도 개인 서버를 세우는 것은 긴 프로젝트입니다. 여기에는 시작할 저장된 데이터가 없으므로, 모든 숫자와 모든 스킬은 조사되거나 재발명된 후 클라이언트에 대해 검증되어야 합니다. 진정한 게임을 목표로 한다면 이것은 여러 명이 여러 해 동안 해야 하는 작업입니다. 하지만 길은 더 이상 미스터리가 아닙니다. 부팅은 해결되었고, 피드백 루프가 존재하며, 타입 모델은 덤프되었고, 에셋은 온전합니다. 남은 것은 매우 많은 양의 신중한 데이터 재구성일 뿐, 더 이상 알려지지 않은 리버스 엔지니어링이 아닙니다.

TECHNICAL_NOTES.md부터 시작하십시오. 이 README보다 더 자세한 정확한 패치, 복구된 데이터 형태, 특정 발견 사항이 담긴 더 깊은 기술 참조입니다. 그런 다음 루프를 실행하십시오.

행운을 빕니다. 이제 진짜 기계입니다. 콘텐츠가 재구축되기만 하면 됩니다.

도구 다운로드
  • 기기 배선. 에뮬레이터는 Kabam의 도메인을 PC로 보내고 가짜 인증서를 신뢰해야 합니다. tools/provision_ldplayer.sh는 한 번에 이 작업을 수행합니다: 패치된 라이브러리와 훅을 푸시하고, 호스트 파일을 통해 Kabam 호스트 이름을 PC의 LAN 주소로 리디렉션하며, 가짜 CA를 시스템 신뢰 저장소에 마운트하고 SELinux를 완화합니다. 에뮬레이터를 다시 시작할 때마다 실행하십시오. 이러한 마운트는 재부팅 후에도 유지되지 않기 때문입니다.