Skip to content

Releases: SamboyCoding/Cpp2IL

Milestone Preview: 2022.1.0 #9

07 Dec 22:31
Compare
Choose a tag to compare
Pre-release

Cpp2IL.Core

  • Refactored the Dummy DLL creation process to allow API users to call it easily.
  • Fixed an exception that could be thrown when loading parameter custom attributes from a non-standard binary
  • Dummy DLL: Constructors now call an appropriate base constructor. Thanks to @ds5678 in #163!
  • New processing layer: Call Analysis. Thanks to @ds5678 in #164!
  • Dummy DLL: Fixed an exception which could occur when saving DLLs that contain an object array custom attribute parameter.

LibCpp2IL

  • Fixes for NSO file loading

Milestone Preview: 2022.1.0 #8

03 Oct 23:00
Compare
Choose a tag to compare
Pre-release

All projects

  • Dependency cleanup

LibCpp2IL

  • Fixed a small oversight which could cause WASM loading to fail
  • Demoted a rather spammy warning in the WASM loader to a verbose log statement
  • (Experimental) support for IL2CPP v23 (Unity 5.6.5)
  • Decreased the initial backtrack on v27+ to fix issues with some games that have a lot of codegen modules after mscorlib

Milestone 2022.0.7

26 Sep 20:21
Compare
Choose a tag to compare

Small addendum to the previous release to address the following:

LibCpp2IL

  • Backported support for IL2CPP v29.1 (Unity 2022.0.1b7 and later) from development branch

Cpp2IL.Core has been updated purely to pull in the updated LibCpp2IL.
WasmDisassembler has not been updated and remains on 2022.0.2

Milestone 2022.0.6

26 Sep 00:16
c4a854c
Compare
Choose a tag to compare

LibCpp2IL

  • Cleaned up some behavior around the handling of ELF files
  • Added support for R_AMD64_RELATIVE relocations in ELF binaries, allowing loading of more games successfully
  • Disabled assertion that metadata usage count and pointer are both 0 on v27+, because this isn't always the case

Cpp2IL Core

  • Fixed possible crash when encountering a type named just <

Attribute Restoration

  • Fixed some issues caused by incorrectly sorting the list of attribute type ranges which could cause restoration to fail
  • Fixed a potential crash caused by an out-of-bounds read

Analysis

  • Implemented support for array allocation on Arm64, which has a decently large impact on output code and attribute quality
  • Some improvements to key function address scanning

Command-line wrapper

  • Fixed --simple-attribute-restoration argument being ignored if --skip-analysis was not specified.

WasmDisassembler has not been updated and remains on 2022.0.2

Milestone Preview: 2022.1.0 #7

04 Sep 15:52
Compare
Choose a tag to compare
Pre-release

Command-line wrapper

  • Support APKM files as game-path argument.

Core

  • Fixed an exception which could occur in the DummyDLL output format when running on IL2CPP v29+ games which use a null array as a custom attribute argument
  • Added support for custom attributes on parameters (mainly params keyword)
  • Stable-namer processing layer now supports all members
  • Attribute injector processing layer now outputs the length of the method body to the address attribute
  • Added a new "EZ-Diff" output format for machine-readable summaries of types and members
  • Rewrote the type context system to properly support generics
  • Updated AsmResolver
  • Some work on ISIL by @Alluseri in #134
  • Added a new plugin hook for unpacking container formats (like APKs)
  • @gompoc re-enabled the jump table detector for x86 ISIL.
  • Performance improvements:
    • Changed TryMapVirtualAddressToRaw to not use exceptions for control flow

General

  • Added a WIP prototype pure-c# Arm64 disassembler and the option to use it (not recommended!) by setting the CPP2IL_NEW_ARM64 environment variable.

OrbisPkg plugin

  • WIP plugin to allow unpacking of Orbis PKG files, using the new hook for container formats.
  • Note that running this requires downloading LibOrbisPkg.Core from here and placing the DLL in the plugins folder

GUI

Milestone Preview: 2022.1.0 #6

24 Jun 20:44
Compare
Choose a tag to compare
Pre-release

LibCpp2IL

  • Added support for Mach-O files
  • Fixed exception related to generic types on v27
  • Added support for v29.1
  • Fixed loading of binaries that contain more than 200 managed modules
  • Optimised the time it takes to load relocations from an ELF file
  • Added more relocation support to ELF files, allowing some binaries that previously wouldn't load to do so.
  • Added the ability to track the total size used by various structures in a binary or metadata file.
  • Fixed some functions which would fail to be located in WASM files.

Cpp2IL.Core

  • Made some previously-internal APIs public. Thanks to @ds5678 in #104
  • Added a utility method to generate a stacktrace from a list of pointers
  • More ISIL work by @gompoc
  • Added a hook for output formats when they get selected, before il2cpp data is loaded
  • Added a logging system for plugins.
  • Removed all initial disassembly from Arm64 binaries, making loading them much quicker.

Cpp2IL command-line application

  • Turned down the build trimming level to allow plugins to load - this has resulted in slightly larger binaries for all artifacts apart from the .NET Framework Zip.

Processing Layers

  • Added a new stablenamer processing layer which renames obfuscated types (only, currently, methods eventually) to names that can be used in c# source code
  • Added a deobfuscation map processing layer which applies name overrides from a csv file

Output Formats

  • DummyDll:
    • Initialize out parameters in method stubs. Thanks to @ds5678 in #113
  • Added (as a plugin) a buildreport output format which provides information useful to game developers.

Please note that plugins are provided only for the non-netframework (platform-specific) versions of the application, and must be placed in a Plugins directory next to the executable.

Milestone 2022.0.5

02 May 13:44
Compare
Choose a tag to compare

I should really learn to stop saying "this is the last release".

LibCpp2IL

  • Fixed an oversight where already-decompressed NSO files could not be loaded

Attribute Restoration

  • Runs for method parameters too now, allowing restoration of params behavior.

Milestone 2022.0.4

27 Apr 13:11
Compare
Choose a tag to compare

This is hopefully the last release in the 2022.0.x series to fix a few small issues and support Mach-O (MacOS) binaries.

Attribute Restoration

  • Fixed a chunk of unoptimized code which caused --simple-attribute-restoration to perform poorly. It should be a lot faster now.

Analysis

  • A couple more band-aid fixes to prevent DllSaveExceptions. Note this likely means more methods will refuse to export, even in unsafe mode. Nothing I really can do about this in the constraints I have, a proper fix will come with the rewrite (eventually).

LibCpp2IL

  • Added experimental support for Mach-O binaries.
  • Increased (again!) the sanity limits when detecting CodeRegistration, and made them be ignored if only one valid address was located.
  • Fixed a missing lock when reading string literals which could cause random data (string or otherwise) to be returned instead of the correct literal.

Milestone Preview: 2022.1.0 #5

25 Apr 19:16
Compare
Choose a tag to compare
Pre-release

Cpp2IL.Core

  • Processing layers
    • AttributeInjector: Fixed an issue where attributes would not be injected on V29 (Unity 2021.2+) games.

LibCpp2IL

  • Ported all remaining instances of reflection-based structure loading to virtual-method-based
  • Updated the sanity checks on the code registration struct locator, which should reduce location failures.
  • Fixed an issue where string literals could be read incorrectly due to a missing lock. Thanks to unproductive on Discord for reporting this!

Milestone Preview: 2022.1.0 #4

14 Apr 11:30
Compare
Choose a tag to compare
Pre-release

This is another pre-release build of the rewrite branch, which brings some big performance and correctness improvements, support for custom attributes on parameters (crucially, this brings support for params arrays), and fixes some bugs.

General

LibCpp2IL

  • Switched the data reader from reflection-based to virtual method based, reducing load times to as low as 25% of what they were.
  • Cherry-picked a big performance boost on v27+ games from the new-analysis branch.
  • Optimised the algorithm used to find code registration on unity versions >= 2019
  • Added support for the rearranged il2cpptype bitfield on v27.2+ (2020.1.0+)

Core

  • Analysis Contexts: Don't attempt to get method bodies for abstract or interface methods, even if they appear to have a valid pointer.
  • Analysis Contexts: Added a ParameterAnalysisContext, fixing support for params arrays in methods, and closing #95. Thanks to @js6pak for pointing this out.
  • v29 custom attribute parser: Fixed reading of custom attributes containing arrays of enums, closing #77 and #89

Output Formats

  • DummyDll:
    • Fixed how a default value of null was output in parameter and field definitions.
    • Fixed an exception that could occur if a custom attribute had a type argument with a null value
    • Stopped outputting type sizing information on enum types, closing #65.
    • We now copy MethodImplAttributes from the il2cpp metadata.
  • ISIL Dump:
    • Added a basic ISIL dump output format.