# [Powershell] Import kernel32.dll/ ReadProcessMemory



## Entwickler-Ian (26. Oktober 2014)

Moin,

seit einer weile beschäftige ich mich nun intensiv mit der Programmierung für Powershell. Dabei würfe ich gerne die Funktion "ReadProcessMemory" benutzen, die sofern ich alles richtig verstanden habe in der kernel32.dll sein sollte. 
Allerdings bin ich nach 2 Tagen quer durch Google und inzwischen immer weniger werdenden kreativen Stichworten nach wie vor noch nicht in der Lage die kernel32.dll zu laden. 

Kann mir einer sagen wie falsch ich mit meinem Ansatz bin, bzw. mir Tutorials/ Links/ Suchbegriffe nahelegen?

Gruß Ian


----------



## ComFreek (26. Oktober 2014)

Hallo Ian,

bist du schon auf Folgendes gestoßen? http://poshcode.org/3859
Falls du nicht am ganzen Code interessiert bist, dann schau dich in Zeile 110 und Umgebung um, in denen ReadProcessMemory "geladen" wird.

Ansonsten kannst du auch Folgendes probieren:

http://www.leeholmes.com/blog/2009/01/19/powershell-pinvoke-walkthrough/ in Bezug auf http://www.pinvoke.net/default.aspx/kernel32/ReadProcessMemory.html


----------



## Entwickler-Ian (26. Oktober 2014)

Hallo ComFreek,

danke für deine schnelle Antwort. Auf den ersten Link bin ich bereits gestoßen. Wie ich mittels dieser Informationen jedoch ein Modul bzw. eine Cmdlet daraus baue bleibt mir verborgen.

Zumal ich jedesmal, folgendes um die Ohren geschlagen bekommen:

In Zeile:1 Zeichen:1
+ [DllImport("kernel32.dll")]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unerwartetes Attribut "DllImport".


----------



## ComFreek (1. November 2014)

DllImport ist selbst kein PowerShell, du musst dies so schreiben:
(Quelle: http://blogs.technet.com/b/heyscrip...-to-interact-with-the-windows-api-part-1.aspx)


```
$MethodDefinition = @'

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]

public static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);

'@

$Kernel32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Kernel32' -Namespace 'Win32' -PassThru

# You may now call the CopyFile function

# Copy calc.exe to the user's desktop

$Kernel32::CopyFile("$($Env:SystemRoot)\System32\calc.exe", "$($Env:USERPROFILE)\Desktop\calc.exe", $False)
```


----------



## Entwickler-Ian (1. November 2014)

Hey,

danke das bringt mich wieder ein gutes Stück weiter besonderst der Link 

Bevor man das hier als erledigt schließen kann, nur noch eine Frage am rande. 
Dir ist nicht zufällig noch eine Funktion bekannt "Binär2String", wie man sie aus anderen Sprachen kennt?

Gruß Ian


----------



## ComFreek (2. November 2014)

Via Google mit "powershell bin to str" zwei vielversprechende Links gefunden:

- http://www.powershellmagazine.com/2012/10/16/converting-numbers-to-binary-and-back/
- http://blogs.technet.com/b/heyscrip...asily-convert-decimal-to-binary-and-back.aspx

Auch wenn PowerShell sowas nicht integriert hätte, könnte man den Weg über das .NET-Framework gehen.


----------

