Unity의 IL2CPP 빌드 프로세스를 원래 관리 DLL으로 되돌리는 WIP 도구.
아래 정보는 거의 전적으로 Github 릴리스에서 사용 가능한 CLI 응용 프로그램에 적용됩니다. CLI가 래퍼 일뿐입니다. 자신의 프로젝트에서는 readme_core.md를 참조하십시오.
메타 데이터 구조의 초기 구문 분석 및 로딩에 libcpp2il을 사용합니다. Libcpp2il은 IL2CPP 메타 데이터로 직접 무언가를하려면 빌드 아티팩트에서 얻을 수 있으며 MIT 라이센스에 따라 릴리스됩니다. 위의 링크는 libcpp2il의 문서로 이동합니다.
CPP2IL은 현재 주요 재 작성을 진행 중입니다. 이 지점은 진행중인 작업을 나타내며 변경 될 수 있습니다.
개발자를위한 CI 빌드는 내 Nuget 피드에서 얻을 수 있습니다.
명령 줄 인터페이스는 많은 명령 줄 옵션에서 출력 형식 및 처리 계층의 개념으로 이동하여 단순화되었습니다. 그러나 이러한 형식과 계층 중 많은 부분이 아직 구현되지 않았으므로 이전에 출시 된 버전에 비해 기능이 제한됩니다.
--analysis-level , --skip-analysis 등과 같은 많은 옵션이 제거되었습니다. 분석이 아직 구현되지 않았다는 사실을 무시하면 이러한 옵션이 다시 오지 않을 것입니다. 분석은 기본적으로 꺼지고 처리 계층의 사용을 통해 활성화됩니다.
마찬가지로, 이전에 CPP2Ilinjected 속성을 억제 한 --supress-attributes 와 같은 옵션은 프로세스 계층으로 대체되었습니다.이 제품은 실제로 구현되었으며 attributeinjector 라고합니다. --use-processor 옵션을 사용 하여이 레이어를 활성화 할 수 있으며 --list-processors 사용하여 다른 옵션을 나열 할 수 있습니다.
메타 데이터 덤프 및 메소드 덤프는 기본값이 아닌 전용 옵션을 통해 제어되는 대신 자체 출력 형식이됩니다. 현재 이것은 두 덤프를 원할 경우 CPP2IL을 여러 번 실행해야한다는 것을 의미하지만, 여러 형식으로 출력에 대한 지원을 동시에 추가하면 향후 변경 될 수 있습니다. 처리 레이어와 마찬가지로 출력 형식은 --list-output-formats 옵션을 통해 나열 될 수 있으며 --output-as 옵션을 통해 선택됩니다.
후드 아래에서 응용 프로그램은 거의 완전히 다시 작성되었습니다. 주로, 이것은 CPP2IL 정도가 일부 제한이 있었던 Mono.cecil 라이브러리에 의존했기 때문에 필요했습니다. 우리가 전환을 살펴 보았을 때, 우리는 우리가 도서관에 얼마나 의존하는지 깨달았습니다. 이는 더 이상 그렇지 않습니다. 응용 프로그램은 libcpp2il 유형과 새로운 분석 컨텍스트 객체를 중심으로 작성되었으며 mono.cecil 라이브러리는 더 이상 사용되지 않으며 Asmresolver.dotnet으로 대체되었습니다.
게다가, 우리는 현재 ISIL (명령 세트 독립 언어)이라는 중간 표현을 기반으로 분석을 다시 구현하는 과정에 있으며, 이는 새로운 명령 세트를 훨씬 쉽게 지원할 수있게 해줍니다. 그런 다음 ISIL을 제어 흐름 그래프로 변환하여 원시 분해보다 지능적으로 분석 할 수 있습니다.
우리는 또한 타사 개발자가 플러그인을 작성하여 사용자 정의 명령 세트, 이진 형식에 대한 지원을 추가하고 결국 난독 화되거나 암호화 된 메타 데이터 또는 이진 파일을로드 할 수있는 플러그인 시스템을 연구하고 있습니다.
이 응용 프로그램의 가장 간단한 사용은 Windows X86 또는 X64 Unity 게임입니다. 이 경우 Cpp2IL-Win.exe --game-path=C:PathToYourGame 및 CPP2IL은 Unity 버전을 감지하고 필요한 파일을 찾아 CPP2IL_OUT 폴더에 명령을 운영 할 수 있습니다.
단일 APK 파일 (APKM 또는 XAPK가 아님)이 있고 최소한 CPP2IL 2021.4.0을 실행하고 있다고 가정하면 위와 동일한 인수를 사용할 수 있지만 APK로 경로를 전달하면 CPP2IL이 APK에서 필요한 파일을 추출합니다.
| 옵션 | 인수 예 | 설명 |
|---|---|---|
| -게임 경로 | C : path to 게임 | 게임 폴더의 경로를 지정하십시오. 필수의. |
| --exe-name | 테스트 게임 | 자동 감지가 실패한 경우 게임의 EXE 파일의 이름을 지정합니다 (게임 디렉토리에 다른 EXE 파일이 있기 때문에) |
| --말 수가 많은 | <londe> | 우리가하는 일에 대한 자세한 정보를 기록하십시오 |
| -리스트 프로세서 | <londe> | 사용 가능한 처리 계층을 나열한 다음 종료하십시오. |
| -사용 프로세서 | AttributeInjector | 사용할 처리 계층을 선택하여 출력 전에 원시 데이터를 변경할 수 있습니다. 이 옵션은 여러 번 나타날 수 있습니다. |
| -프로세서 -Config | 키 = 값 | 선택한 처리 계층에 구성 옵션을 제공하십시오. 이들은 처리 계층을 추가하는 플러그인에 의해 문서화됩니다. |
| -리스트 출력 -Formats | <londe> | 사용 가능한 출력 형식을 나열한 다음 종료하십시오. |
| -출력-AS | Dummydll | 사용하려는 출력 형식을 지정하십시오. |
| -출력 | CPP2IL_OUT | 루트 디렉토리 출력. 이 경로는 선택한 출력 형식으로 전달 되며이 위치 내에서 하위 디렉토리 등을 생성 할 수 있습니다. |
| -wasm-framework-file | C : path to webgl.framework.js | Wasm Binaries와 함께 사용됩니다. 이들 중 일부는 난독 화 된 수출을 가지고 있지만 Framework.js 파일을 통해 복구 할 수 있으며,이 인수를 사용하는 경로를 제공 할 수 있습니다. |
모든 단일 커밋은 GitHub 작업을 사용하여 CI 빌드에 구축됩니다. 조치 파일은 빌드를 직접 재현하려면 .github 폴더에서 찾을 수 있습니다. 이것들이 가장 안정적이지 않을 수도 있습니다. 다양한 게임과의 호환성을 보장하기위한 테스트가 있지만 때로는 상황이 깨지는 경우가 있습니다! 이것들은 그들이 지은 커밋으로 버전입니다.
릴리스 파일은 GitHub에 로그인 한 경우 작업 탭에서 다운로드하거나 다음 링크를 사용할 수 있으며 항상 최신 성공적인 CI 빌드를 가리킬 수 있습니다. .NET 프레임 워크 빌드는 와인/양성자와의 호환성을 위해 제공됩니다.
또한, 나는 주요 개선이 이루어 졌다고 생각할 때마다 "milestone"릴리스 빌드를 수동으로 출시합니다. 이것들은 Github의 사전 릴리스로 표시되지 않으며 (적어도 이론적으로) 다양한 게임에서 사용하기에 안정적이고 적합해야합니다.
첫 번째 마일스톤 빌드 2021.0에서 CPP2IL은 이제보다 엄격하게 구조화 된 데이터를 콘솔에 출력합니다. 여기에는 로그 레벨 (동사, 정보, 경고, 실패) 및 관련 색상 (동사의 회색, 정보 용 파란색, 경고 용 노란색, 실패 용 빨간색)이 포함됩니다.
Milestone 2021.1에서 CPP2IL이 와인/양성자로 실행중인 것을 감지 할 수 있다면 이러한 ANSI 색상 코드는 와인의 지원을받지 않고 끔찍해 보이기 때문에 비활성화됩니다.
동사 메시지는 cpp2il이 --verbose 옵션으로 시작된 경우에만 기록 되며이 플래그를 활성화 한 문제를보고 할 수있는 경우 도움이됩니다. 정상적인 작동을 위해서는 궁금하지 않으면 필요하지 않아야합니다.
출력을 색상으로 만들기를 원하지 않으면 환경 변수를 설정하십시오. NO_COLOR=true .
이 응용 프로그램은 주로 .NET 9.0을 사용하여 구축되지만 .NET 프레임 워크 4.7.2 빌드도 레거시 목적으로 게시됩니다.
다음 라이브러리를 사용합니다. 매우 감사합니다.
(모두 Apache 2.0+MIT 인 Xunit을 제외하고 MIT 라이센스가 부여됩니다)
WasmDisassembler 서브 디렉토리에서 찾을 수 있습니다.Net472 빌드는 다음과 같은 추가 라이브러리를 사용합니다.
일부 플러그인은 추가 라이브러리를 사용합니다.
CPP2IL은 IL2CPPDUMPER를 기반으로 한 (이 시점에서 매우 느슨하게)입니다. 그러나 그 핵심은 여전히 Libcpp2il에 약간의 덤퍼가 남아 있습니다.
여기에는 djkaty의 허가를 받아 IL2cppinspector의 비트와 조각이 포함되어 있으며, 그녀의 귀중한 도움을 위해 그녀에게 감사를 표하고 싶습니다.
Audica Modding 커뮤니티 와이 프로젝트에 대한 초기 영감, 초기에는 많은 지원, 요즘 기능 요청에 대해 Discord에게 감사의 말씀을 전합니다.
마지막으로,이 프로젝트와 연결되는 다른 멋진 프로젝트를 확인하십시오. 물론, 나는 IL2CPpinterop을 더 언급했지만 더미 DLL 생성에 CPP2IL을 사용하는 Melonloader도 확인했습니다.