Hide your P/Invoke signatures through other people's signed assemblies!
[PARAMETER MANDATORY]
"--path <PATH>", "The start directory to list .NET assemblies from."
[OPTIONAL PARAMS]
"-r|--recurse", "Recursively discover assemblies"
"--method <METHOD>", "Name of the PInvoke method to find"The tool accepts one mandatory parameter, it is path. If you simply specify a --path (For ex, --path C:\), the tool will find all .NET assemblies on that path and output the P/Invoke signatures used in them, which you can use in your code to hide the use of P/Invoke (see Example below). To perform a recursive search for assemblies, add the -r parameter.
.\ParasiteInvoke.exe --path C:\ -rBut most likely you will be interested in hiding a particular PInvoke method. That's why I created the --method argument. You can use it to find .NET builds that have this method signature.
.\ParasiteInvoke.exe --path C:\ -r --method VirtualAllocLet's go to an example
Suppose you want to hide the use of the VirtualAlloc() function. You run my tool and receive the following output:
.\ParasiteInvoke.exe --path C:\ -r --method VirtualAllocYou should just copy the signature into your code, then add arguments to call the method and quietly PARASITE on the PInvoke signature from someone else's (often signed) .NET assembly.
using System;
using System.Reflection;
using System.Runtime.InteropServices;
namespace Template
{
class Program
{
static void Main()
{
Assembly asm = Assembly.LoadFrom(@"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WPF\UIAutomationClientsideProviders.dll");
Type t = asm.GetType("MS.Win32.UnsafeNativeMethods", true);
var methodInfo = t.GetMethod("VirtualAlloc", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
IntPtr result = (System.IntPtr)methodInfo.Invoke(null, new object[] { IntPtr.Zero, new UIntPtr(10), 0x3000, 0x40 } );
Marshal.Copy(new byte[] { 1, 2, 3 }, 0, result, 3);
Console.WriteLine(result);
return;
}
}
}




