This script is written in python and is used to quickly parse a .NET assembly to read its methods and instructions. It's just a quick way to parse and decompile raw bytecode to IL and read the instructions, instead of loading it to a decompiler like DnSpy, ILSpy etc.
It was just an exercise I did for myself and thought it would be a good tool for anyone looking to parse .NET code this way. So enjoy:D
Running the tool provides this output, which we can compare with the gui output of DnSpy:
Also, the script outputs the instructions of each non empty static method to the corresponding file for further analysis:
└─$ cat Main_instructions.txt
System.Void qCaVAPJGIk.OItkKtykOO::Main(System.String[]) INSTRUCTIONS
IL_0000: ldstr "kernel32.dll"
IL_0005: call System.IntPtr qCaVAPJGIk.OItkKtykOO::LoadLibrary(System.String)
IL_000A: stloc.0
IL_000B: ldloc.0
IL_000C: call System.Text.Encoding System.Text.Encoding::get_UTF8()
IL_0011: ldstr "7Nlzeiulaok36CkiA7cg1PZCx7oWzwew3998xAF7DZY="
IL_0016: call System.Byte[] System.Convert::FromBase64String(System.String)
IL_001B: ldstr "8AOx7b0fGddReqjf+6WzB7n6yOJGvgsGZXvpBa9764w="
IL_0020: call System.Byte[] System.Convert::FromBase64String(System.String)
IL_0025: ldstr "T1D5QuS4MCdJRbPrcYCB/Q=="
IL_002A: call System.Byte[] System.Convert::FromBase64String(System.String)
IL_002F: call System.Byte[] qCaVAPJGIk.OItkKtykOO::GtsGqcLyiX(System.Byte[],System.Byte[],System.Byte[])
IL_0034: callvirt System.String System.Text.Encoding::GetString(System.Byte[])
IL_0039: call System.IntPtr qCaVAPJGIk.OItkKtykOO::GetProcAddress(System.IntPtr,System.String)
IL_003E: stloc.1
IL_003F: ldloc.0
IL_0040: call System.Text.Encoding System.Text.Encoding::get_UTF8()
IL_0045: ldstr "6EcApKsMBv3vWB/3DjNzSZqGNNgYdHg9di7QBebhuwQ="
-- more --
- pythonnet
- ironpython
- dnlib.dll (you can find it this in my Jlaive-Deobfuscator repo)