2016-07-04 10 views
0

Wie hier zu sehen Programmatic MSIL injection oder hier http://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time können Sie IL-Code zur Laufzeit mit einigen kniffligen Injektionen ändern.Wie kann die MSIL-Laufzeit-Injektion verhindert werden?

Meine Frage ist: Wie kann ich das verhindern? Wenn jemand zum Beispiel eine Sicherheitsfunktion umgeht, wie kann ich diese Sicherheitslücke vermeiden?

+4

Diese Frage ist grundlegend fehlerhaft. Wenn es möglich ist, einige Sicherheitsfunktionen zu umgehen, indem Sie MSIL ändern, ist es auch möglich, dieselbe Sicherheitsfunktion zu umgehen, ohne MSIL zu ändern. Welche Sicherheitsfunktion haben Sie vor? Geben Sie Details darüber an, und dann können Antworten erklären, wie Umgehung vollständig verhindert werden kann, oder warum Umgehung das nie vollständig verhindert werden kann. – hvd

+0

Interessante Frage, willkommen, warum gibt es Unternehmen, deren einziger Zweck es ist, diese Art von Maßnahmen zu verhindern. Ich habe keine Antwort, aber ich kann sagen, dass ich vor etwa 15 Jahren viel Spaß mit SoftICE Debugger Cracking Software für verschiedene ruchlose Zwecke hatte. Die Lektion, die ich dann gelernt habe, ist, dass "sie (wir) immer einen Weg finden!". Heutzutage ist es viel schwieriger, aber es wird schnell ein Gleichgewicht zwischen lästigen legitimen Benutzern und der Verhinderung von Schlechtigkeit. –

+1

Was genau verhindern? Fähigkeit des Benutzers, beliebigen Code auf seinen Maschinen auszuführen oder Binärdateien beliebig zu ändern? Das Ausführen von Code auf Ihrem eigenen Server ist nur eine Option, es sei denn, Sie können es sich leisten, ein geschlossenes System ähnlich wie Xbox/PS –

Antwort

1

wie das zu verhindern?

Sie können nicht, , soweit ich verstehe. Aber du kannst es nicht leicht machen.

Im einfachen Fall müssen Sie IL nicht einmal injizieren. Sie können IL Weben durchführen, um die Baugruppe zu ändern. Zum Beispiel können Sie die Login-Methode finden und den ursprünglichen IL-Code löschen und einfach true zurückgeben, oder Sie können zu Ihrer eigenen Login-Methode springen.

Dafür müssen Sie es tun, wenn die Anwendung nicht ausgeführt wird, Sie die Baugruppe selbst ändern. Sie können es mit mono.cecil tun, und Sie können auf StaticProxy.Fody zum Beispiel schauen.

Der andere Fall ist inject-Code zu laufenden Baugruppe. und dies ist divide auf zwei Fälle:

  1. Wenn der Code nicht jitted \ ngen'd
  2. Wenn der Code jitted wird \ ngen'd

Für den ersten Fall ist leichter , Sie haben immer noch die IL jeder Methode und Sie injizieren Ihre eigenen IL-Anweisungen.

Der zweite Fall ist komplexer, weil der Jitter den IL-Zeiger auf den Maschinencode umleitet.

Für zwei von ihnen können Sie eine Reihe von Artikeln \ Libraris sehen, um die Injektion arbeiten zu lassen.

Aber auch wenn Sie es jedoch unmöglich machen, zu injizieren, können Sie immer noch nicht geschützt. Weil Sie die Bytes selbst ändern können. Einzelheiten finden Sie unter .

Für alle oben genannten Methode gibt es Fälle, wenn es komplizierter ist, die Arbeit zu erledigen. Zum Beispiel verhindern Generics, DynamicMethods das Laden von Assemblys in Ihren Prozess (was in einigen Fällen erforderlich ist).

Zusammenfassend können Sie es kaum tun, Ihren Code zu injizieren, aber nicht verhindern.

+0

"Sie können IL Weben, um die Baugruppe zu ändern. Zum Beispiel können Sie die Login-Methode finden und den ursprünglichen IL-Code löschen und gib einfach true zurück, oder du kannst zu deiner eigenen Login-Methode springen. " Nein, weil meine Anwendung durch einen Manipulationsschutz geschützt ist. Die einzige Möglichkeit, mein Login-System zu umgehen, besteht darin, MSIL zur Laufzeit zu injizieren. Und es ist möglich, weil ich mein eigenes Programm ziemlich leicht geknackt habe. Was ich suche, ist, wie man mein Programm von der Laufzeiteinspritzung schützt, nicht wie die Einspritzung selbst ist. Danke für die Antwort. –

+0

@JacquesMartin Ich verstehe, was Sie suchen. Meine Antwort ist, dass Sie nicht AFAIK, und ich erklärte warum. Ich würde mich sehr freuen, wenn jemand antworten wird, wie Sie vor der Injektion schützen können. –