<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Erkennen einer dll-injection]]></title><description><![CDATA[<p>Hallo!</p>
<p>Wie überprüft eine Firewall ob eine dll-injection stattgefunden hat bzw stattfindet?</p>
<p>Ein Bestandteil der Kontrolle wäre zb die API-Funktionen zu hooken.<br />
Das lässt sich aber umgehen in dem man die Adressen der Funktionen direkt anspringt. (aber bei Inline-Hooking bringt das nichts oder?)<br />
Dann ob die dll in der import table ist oder?</p>
<p>Welche Methoden fallen euch noch ein?</p>
<p>Bzw welche Arten von dll-injections gibt es denn?</p>
<p>Man hört immer es gäbe verschiedenste Arten.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186385/erkennen-einer-dll-injection</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 17:07:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186385.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Jul 2007 12:35:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 12:35:49 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Wie überprüft eine Firewall ob eine dll-injection stattgefunden hat bzw stattfindet?</p>
<p>Ein Bestandteil der Kontrolle wäre zb die API-Funktionen zu hooken.<br />
Das lässt sich aber umgehen in dem man die Adressen der Funktionen direkt anspringt. (aber bei Inline-Hooking bringt das nichts oder?)<br />
Dann ob die dll in der import table ist oder?</p>
<p>Welche Methoden fallen euch noch ein?</p>
<p>Bzw welche Arten von dll-injections gibt es denn?</p>
<p>Man hört immer es gäbe verschiedenste Arten.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320678</guid><dc:creator><![CDATA[muhi]]></dc:creator><pubDate>Sun, 08 Jul 2007 12:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 15:18:03 GMT]]></title><description><![CDATA[<p>Der einfachste Weg ist zu kontrollieren welche Module im eigenen Prozess geladen sind.</p>
<p>Gegen eine Injektion aber, die nur einen Speicherblock allokiert und diesen aktiviert ist man relativ machtlos.</p>
<p>Es gibt Message Hooks und CreateRemoteThread sowie Brut-Force (direktes manipulierend des fremden Prozesscodes). Andere Methoden hat man nicht in einen fremden Prozess hineinzukommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320789</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 08 Jul 2007 15:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 18:20:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für die Antwort.</p>
<blockquote>
<p>Gegen eine Injektion aber, die nur einen Speicherblock allokiert und diesen aktiviert ist man relativ machtlos.</p>
</blockquote>
<p>Wieso?</p>
<p>Stehen Desktop-Firewalls dem etwa auch machtlos gegenüber?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320928</guid><dc:creator><![CDATA[muhi]]></dc:creator><pubDate>Sun, 08 Jul 2007 18:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 19:40:56 GMT]]></title><description><![CDATA[<p>Ausserdem braucht man ja dazu auch die API-Funktionen und die werden gehookt.<br />
Ist ein Programm dass ne dll injecten will gezwungen die dll des Systems zu verwenden oder kann es eine Kopie einer dll eines &quot;frischen&quot; Systems verwenden?</p>
<p>(Ich stelle die Frage, da die Firewall ja die Funktionen selbst verändern kann)</p>
<p>Da dürfte ne Firewall dann machtlos sein oder?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321009</guid><dc:creator><![CDATA[muhi]]></dc:creator><pubDate>Sun, 08 Jul 2007 19:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 19:56:09 GMT]]></title><description><![CDATA[<p>muhi schrieb:</p>
<blockquote>
<p>Gegen eine Injektion aber, die nur einen Speicherblock allokiert und diesen aktiviert ist man relativ machtlos. Wieso?</p>
</blockquote>
<p>Wenn man z.B. mit VirtualAllocEx () von aussen Speicherplatz in einem Prozess allokiert, wird dieser Prozess vom Betriebssystem darüber nicht benachrichtigt.<br />
Anders bei Threads :<br />
Wenn mit CreateRemoteThread () ein Thread erzeugt wird, benachrichtigt das Betriebssystem sämtliche bereits vom Prozess geladenen DLL's.</p>
<p>muhi schrieb:</p>
<blockquote>
<p>Ausserdem braucht man ja dazu auch die API-Funktionen und die werden gehookt.</p>
</blockquote>
<p>Ich glaube nicht, dass eine &quot;Desktop-Firewall&quot; <em>sämtliche</em> API-Funktionen hookt. Das wäre schlecht für die Performance.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321023</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 08 Jul 2007 19:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 20:36:49 GMT]]></title><description><![CDATA[<p>danke für die Antwort,</p>
<blockquote>
<p>Wenn mit CreateRemoteThread () ein Thread erzeugt wird, benachrichtigt das Betriebssystem sämtliche bereits vom Prozess geladenen DLL's.</p>
</blockquote>
<p>Was meinst du damit? Dass es leicht is, so eine dll-injection zu entdecken?</p>
<p>Und wie ich oben gefragt habe:</p>
<p>Kann die Desktop-Firewall nicht einfach die Import-Table (der exe) mit den geladenen dll's vergleichen? Wenn ja könnte man das dann nicht untergraben in dem man die dll gleichbennent? oder werden da Adressen kontrolliert?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321046</guid><dc:creator><![CDATA[muhi]]></dc:creator><pubDate>Sun, 08 Jul 2007 20:36:49 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Sun, 08 Jul 2007 21:25:48 GMT]]></title><description><![CDATA[<p>muhi schrieb:</p>
<blockquote>
<p>Was meinst du damit?</p>
</blockquote>
<p>Einen Remote-Thread kann man daran erkennen, dass z.B. in einer selbstgeschrieben DLL die &quot;DLLMain&quot; mit &quot;fdwReason == DLL_THREAD_ATTACH&quot; durchlaufen wird.<br />
Der Programmierer der EXE weiss ja, ob es sich dann um einen eigenen Thread oder einen &quot;fremden&quot; Thread handelt.</p>
<p>muhi schrieb:</p>
<blockquote>
<p>Dass es leicht is, so eine dll-injection zu entdecken?</p>
</blockquote>
<p>Unter Win2000 / WinXP eigentlich kein Problem :<br />
-&gt; LoadLibrary () hooken und immer kontrollieren, welche DLL geladen wird.<br />
Genauso lassen sich Hooks entdecken :<br />
-&gt; CallNextHookEx () hooken.<br />
Beide Funktionen werden schliesslich immer im Kontext des eigenen Porgramms aufgerufen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>muhi schrieb:</p>
<blockquote>
<p>Kann die Desktop-Firewall nicht einfach die Import-Table (der exe) mit den geladenen dll's vergleichen?</p>
</blockquote>
<p>Das wird nicht viel bringen. Viele Programme laden sich ihre &quot;API&quot; via LoadLibrary () und GetProcAddress () dynamisch zur Laufzeit erst.<br />
Diese sind dann in keiner Table verzeichnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321065</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 08 Jul 2007 21:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Mon, 09 Jul 2007 12:36:29 GMT]]></title><description><![CDATA[<p>muhi schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>danke für die Antwort.</p>
<blockquote>
<p>Gegen eine Injektion aber, die nur einen Speicherblock allokiert und diesen aktiviert ist man relativ machtlos.</p>
</blockquote>
<p>Wieso?</p>
<p>Stehen Desktop-Firewalls dem etwa auch machtlos gegenüber?</p>
</blockquote>
<p>Desktop Firewalls machen das AFAIK über Hooks die nicht Teil der normalen API sind, nur zur Verfügung stehen wenn man Admin Rechte hat etc. - könnte sogar sein dass das Kernelmode Hooks sind.</p>
<p>Man könnte also theoretisch dasselbe machen wie eine gute Desktop Firewall macht, bloss ob der Aufwand dafürsteht ist die Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321491</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 09 Jul 2007 12:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Mon, 09 Jul 2007 15:32:22 GMT]]></title><description><![CDATA[<p>Danke für die Antworten,</p>
<p>Mir fällt gerade eine andere Frage ein,<br />
kann man ohne CreateRemoteThread eine dll in den neu allokierten Speicher laden bzw diese dann auch auszuführen?</p>
<p>Kann man sich da nicht irgendwas mit WriteProcessMemory &quot;basteln&quot; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321649</guid><dc:creator><![CDATA[muhi]]></dc:creator><pubDate>Mon, 09 Jul 2007 15:32:22 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Mon, 09 Jul 2007 15:51:08 GMT]]></title><description><![CDATA[<p>Ja, klar, bloss musst du dazu irgendwie das Programm hijacken.<br />
Ich meine irgend ein Thread muss ja deinen Code ausführen, und wenn du nicht selbst einen mittels CreateRemoteThread erstellst... welcher sollte es dann sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321664</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 09 Jul 2007 15:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Mon, 09 Jul 2007 16:18:27 GMT]]></title><description><![CDATA[<p>Die &quot;normale&quot; API bietet einen mächtigen Debugger-Support.<br />
Einige dieser Funktionen &quot;unkonventionell&quot; angewendet, ermöglichen alles. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321687</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 09 Jul 2007 16:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Mon, 09 Jul 2007 22:05:04 GMT]]></title><description><![CDATA[<p>Wie kann man über die offiziell dokumentierten API Funktionen ein WriteProcessMemory erkennen? (Im Zielprozess natürlich. p.S.: oder in einem &quot;Drittprozess&quot;.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321869</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 09 Jul 2007 22:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 01:00:40 GMT]]></title><description><![CDATA[<p>Ich meinte damit, dass die dokumentierten Debugger-Funktionen ein &quot;Thread-Hijacking&quot; ermöglichen.<br />
Damit lässt sich Code ausführen <em>ohne</em> Remote-Thread. Sehr üble Sache sowas.</p>
<p>Einen Remote-Thread kann ein Programm aber erkennen (z.B. via DLL). Hooks auch.</p>
<p>Aber einem Read/WriteProcessMemory () oder einem VirtualAllocEx () gegenüber ist ein Programm im Prinzip völlig hilflos ausgeliefert.<br />
Dagegen gibt es weder eine dokumentierte noch eine undokumentierte API. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321912</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Jul 2007 01:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 06:32:34 GMT]]></title><description><![CDATA[<p>Wenn aber ein Debugger aktiv ist, kann man das zumindest auch feststellen in senem Programm. Auch hier ist man nicht hilflos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1321948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1321948</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 10 Jul 2007 06:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 15:00:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>was nützt einem eigentlich &quot;nur&quot; WriteProcessMemory() und VirtualAllocEx() bzw umgekehrt? eben ohne einen Thread ausführen zu können?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322410</guid><dc:creator><![CDATA[muhi]]></dc:creator><pubDate>Tue, 10 Jul 2007 15:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 15:43:37 GMT]]></title><description><![CDATA[<p>Wennman bestehenden Code liest und manipuliert, der ausgeführt wird nützt es einem was...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322454</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 10 Jul 2007 15:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 15:46:23 GMT]]></title><description><![CDATA[<p>Wennman bestehenden Code liest und manipuliert, der ausgeführt wird nützt es einem was...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322458</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 10 Jul 2007 15:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 16:37:53 GMT]]></title><description><![CDATA[<p>Mit WriteProcessMemory () kannst Du z.B. Code und Daten in Prozessen manipulieren.<br />
Mit VirtualAllocEx () kannst Du z.B. zur Laufzeit Daten in Prozessen &quot;verstecken&quot;.<br />
Ob das einen &quot;Nutzen&quot; hat, mag jeder für sich selbst entscheiden. &quot;Unschön&quot; ist sowas allemal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322502</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Jul 2007 16:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 16:50:54 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ja, klar, bloss musst du dazu irgendwie das Programm hijacken.<br />
Ich meine irgend ein Thread muss ja deinen Code ausführen, und wenn du nicht selbst einen mittels CreateRemoteThread erstellst... welcher sollte es dann sein?</p>
</blockquote>
<p>Da gibt es noch weitere (un)schöne Möglichkeiten, z.B. APC</p>
<p>Schau mal hier unter &quot;New techniques for codeinjection&quot;, ist von mir:<br />
<a href="http://rootkit.com/" rel="nofollow">http://rootkit.com/</a></p>
<p>Prinzipiell würde ich mal sagen ist es kein Problem Code/Daten unbemerkt in einen fremden Prozess zu laden, sie auszuführen dagegen schon eher.</p>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wenn aber ein Debugger aktiv ist, kann man das zumindest auch feststellen in senem Programm. Auch hier ist man nicht hilflos.</p>
</blockquote>
<p>Und wie? Mit <em>IsDebuggerPresent</em>? PEB-&gt;BeingDebugged auf FALSE setzen und schon ist man wieder fein raus (= der Fremdprozess verarscht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322511</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Tue, 10 Jul 2007 16:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 17:10:36 GMT]]></title><description><![CDATA[<p>CreateFile (), RegOpenKey (), OutputDebugString (je länger, desto besser).<br />
Möglichkeiten gibt es genug. Aber die Präsenz eines Debuggers bedeutet noch längst nicht &quot;Gefahr&quot;.<br />
Ein Debugger sollte schliesslich auf jedem PC installiert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322531</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Jul 2007 17:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Erkennen einer dll-injection on Tue, 10 Jul 2007 19:52:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Prinzipiell würde ich mal sagen ist es kein Problem Code/Daten unbemerkt in einen fremden Prozess zu laden, sie auszuführen dagegen schon eher.</p>
</blockquote>
<p>Eben das meinte ich. Die einzige mir bekannte &quot;saubere&quot; Möglichkeit die Ausführung injizierten Codes hinzubekommen ist eben CreateRemoteThread.<br />
Ansonsten muss man schon etwas brutaleres machen, z.B. den Anfang einer Funktion zu überschreiben deren Adresse man kennt (irgendwas aus KERNEL32 oder GDI oder so), und die das Programm wohl verwendet (GetMessage/HeapAlloc/... irgendeine der &quot;beliebten&quot; Funktionen halt).<br />
Das meinte ich mit &quot;hijacken&quot;.</p>
<p>----</p>
<blockquote>
<p>was nützt einem eigentlich &quot;nur&quot; WriteProcessMemory() und VirtualAllocEx() bzw umgekehrt? eben ohne einen Thread ausführen zu können?</p>
</blockquote>
<p>Naja, nicht viel eben, ausser man ist etwas &quot;brutal&quot; (siehe oben).</p>
<p>----</p>
<blockquote>
<p>Aber einem Read/WriteProcessMemory () oder einem VirtualAllocEx () gegenüber ist ein Programm im Prinzip völlig hilflos ausgeliefert.<br />
Dagegen gibt es weder eine dokumentierte noch eine undokumentierte API. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
</blockquote>
<p>Sicher? Ich bin mir nämlich fast sicher dass man für diese Funktionen globale Hooks setzen kann - wahrscheinlich bloss ausm Kernelmode raus, was u.U. einen Hilfstreiber nötig macht, aber naja. Gehen sollte es. Muss nochmal sehen ob ich genauere Infos dazu finde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322612</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 Jul 2007 19:52:01 GMT</pubDate></item></channel></rss>