Skip to content

Releases: SamboyCoding/Cpp2IL

Commit 6060ed6e86f8c891bc2b706b78b34e729bc738f1

commit_6060ed6e86f8c891bc2b706b78b34e729bc738f1

Make cecil give better error messages, fix more dll save failures.

Milestone 2021.4.1

12 Oct 22:02
Compare
Choose a tag to compare

Analysis

  • Fixes bug with indirectly pointed at offsets. Thanks to @gompoc in #44
  • Implement IL generation for AddConstantToRegAction. Thanks to @gompoc in #45
  • Made RegToRegMoveAction slightly less zealous in what it considers to be a copy-not-move.

DummyDLLs

  • Fixes a long-standing bug where, in very specific cases, generic parameters on types could be out-of-order.

Command-line wrapper

  • Added --analyze-all argument, to analyze every single assembly sequentially.

LibCpp2IL has not been updated and remains on 2021.4.0

Commit 9726ab44916707dc2dc6d4b38aebec4d9d2fcb8a

commit_9726ab44916707dc2dc6d4b38aebec4d9d2fcb8a

Fix rare case when generic params can be out-of-order, nerf reg2regmo…

Commit 8798cc238666ac2b7bee932540290834bd2c9b08

commit_8798cc238666ac2b7bee932540290834bd2c9b08

Bump cpp2il version

Commit b77894005e6ec496ad88a58235c47c52d5384dda

commit_b77894005e6ec496ad88a58235c47c52d5384dda

Fix bug when resolving indirectly pointed at field offsets

Commit 7227d173ca344d7bbdb0f7abf5676d19a925028d

commit_7227d173ca344d7bbdb0f7abf5676d19a925028d

Avoid using typeof unnecessarily

Commit 66c215126bace1583406655053ed89b0eeb614a6

commit_66c215126bace1583406655053ed89b0eeb614a6

Add --analyze-all option, update README for recent changes.

Milestone 2021.4.0

10 Oct 14:06
Compare
Choose a tag to compare

Analysis

  • Did a lot of work to decouple the analysis engine from the x86 architecture specifically
    • Specifically, this means analysis for other instruction sets is possible.
  • Added a rudimentary analysis engine for ARM64/ARMv8.
    • Basic actions, such as field read/writes, non-virtual function calls, instance allocation, and some conditional jumps, are supported.
  • Added a template for an analysis engine for ARMv7.
    • This has almost no functionality besides the fact that it saves each method's machine code to the method dump
  • Improved detection of KeyFunctionAddresses for x86, leading to more accurate decompilation of certain functions (e.g. #32)
  • Fixes for non-generic methods on generic types
  • Fixed IsImplicitNRE not catching all NREs, leading to fewer junk if statements in generated IL. Thanks to @gompoc in #42
  • Proper support for booleans in ImmediateToFieldAction. Thanks to @gompoc in #43
  • Performance enhancements in unused local stripper (#39)
  • Fix for function calls which take a delegate function as their last parameter being marked invalid.

Attribute Restoration

  • Fixed certain attribute configurations resulting in a NRE when saving due to null being passed as a constructor param.

CLI Wrapper

  • Added support for automatically extracting the required files from APKs. Now --game-path can specify the path to an APK.
  • Added --output-root to change the name and/or path of the cpp2il_out folder.
  • Added --throw-safety-out-the-window to try and force as much IL generation as possible. Can result in more readable decompilation of the managed dll, at the risk of it being incorrect or just flat-out failing to decompile.
  • Added builds for .NET Framework 4.7.2
  • Added a fallback method for getting the unity version if running on an exe and the exe's version is incorrect.
  • Added UnityCrashHandler32 to the ignore list for executable names.

LibCpp2IL

  • Fixes for cases where the PE export table is invalid or stripped
  • Performance improvements
  • Expose IsBigEndian on binaries.
  • Fix for GetPost27GlobalAt throwing for invalid addresses.

Core Module API Changes

  • KeyFunctionAddresses is now a base type, BaseKeyFunctionAddresses, which is extended per-instruction set
  • BaseKeyFunctionAddresses.Find is no longer static - create an instance of a subclass, then call Find on it. Cpp2ILApi.ScanForKeyFunctionAddresses does this for you, as it already did - this hasn't changed.
  • AsmAnalyzer is now an interface, IAsmAnalyzer, with implementing types being AsmAnalyzer[Instruction Set], e.g. AsmAnalyzerX86
  • MethodAnalysis now has a generic parameter for the type of the instruction.
  • Analysis is now supported for ARMv8 and ARMv7, through mostly the same methods as x86.
    • These two use Capstone as the disassembler, which may need to be installed separately on non-windows host operating systems.
  • Cpp2ILApi has two new methods:
    • GetVersionFromGlobalGameManagers takes a byte array representing the content of the globalgamemanagers (or any other serialized) asset file, and returns a unity version suitable for use in InitializeLibCpp2Il
    • GetVersionFromDataUnity3D does the same thing but for data.unity3d. As these files are usually large (>1GB), this takes a Stream instead of a byte array.
    • In addition, the version of AnalyseAssembly previously available is now deprecated, in favor of a new overload which takes an additional bool. If set to true, this enables the same functionality as the --throw-safety-out-the-window option for the CLI wrapper.

Commit 5d0735bbf07d39be3e3dd35c8ee310072c09c43a

commit_5d0735bbf07d39be3e3dd35c8ee310072c09c43a

Performance enhancement for unused local stripper. Closes #5

Commit 529ef1185611ddd9716115495526a575c28b58aa

commit_529ef1185611ddd9716115495526a575c28b58aa

Add 32-bit crash handler to exe ignore list.