<?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[Wie realisiert man einen hook für memcpy?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss für ein Projekt ein Hook auf die memcpy-Funktion schreiben, um diverse Aktionen zu protokollieren. Nur leider komme ich nicht mehr weiter...</p>
<p>Im moment habe ich eine simple Win-Anwendung die auf Knopfdruck ein memcpy ausführt, sie dient qausi als Testobjekt.<br />
Ein Injector, der mir eine DLL in eine Anwenung lädt.<br />
Als letztes Stück noch eine DLL, die &quot;versucht&quot; per IAT-Hook die Adresse für die memcpy Funktion zu überschreiben.</p>
<p>Die DLL erzeugt sich einen Snapshot aller geladenen Module, iteriet sie und durchsucht ggf. den Header nach den importierten Funktionen.<br />
Leider wird mir für die ntdll.dll leider keine importierte memcpy-Funktion angezeigt bzw. ausgegeben, dafür jede menge anderer.</p>
<p>Für andere/selbstgeschriebene DLLs klappt diese Methode wunderbar, nur bei der uminösen ntdll.dll nicht.</p>
<p>Ist es überhaupt möglich auf diesen Weg die memcpy-Funktion der ntdll.dll zu hooken oder muss man dafür einen anderen Weg gehen?</p>
<p>Ich hoffe, dass mir jemand helfen kann oder zumindest einen kleinen Denkanstoss geben kann.</p>
<p>Gruß,<br />
-mh</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191122/wie-realisiert-man-einen-hook-für-memcpy</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 18:56:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191122.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Aug 2007 12:18:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 12:18:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss für ein Projekt ein Hook auf die memcpy-Funktion schreiben, um diverse Aktionen zu protokollieren. Nur leider komme ich nicht mehr weiter...</p>
<p>Im moment habe ich eine simple Win-Anwendung die auf Knopfdruck ein memcpy ausführt, sie dient qausi als Testobjekt.<br />
Ein Injector, der mir eine DLL in eine Anwenung lädt.<br />
Als letztes Stück noch eine DLL, die &quot;versucht&quot; per IAT-Hook die Adresse für die memcpy Funktion zu überschreiben.</p>
<p>Die DLL erzeugt sich einen Snapshot aller geladenen Module, iteriet sie und durchsucht ggf. den Header nach den importierten Funktionen.<br />
Leider wird mir für die ntdll.dll leider keine importierte memcpy-Funktion angezeigt bzw. ausgegeben, dafür jede menge anderer.</p>
<p>Für andere/selbstgeschriebene DLLs klappt diese Methode wunderbar, nur bei der uminösen ntdll.dll nicht.</p>
<p>Ist es überhaupt möglich auf diesen Weg die memcpy-Funktion der ntdll.dll zu hooken oder muss man dafür einen anderen Weg gehen?</p>
<p>Ich hoffe, dass mir jemand helfen kann oder zumindest einen kleinen Denkanstoss geben kann.</p>
<p>Gruß,<br />
-mh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355318</guid><dc:creator><![CDATA[mh]]></dc:creator><pubDate>Thu, 30 Aug 2007 12:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 12:34:03 GMT]]></title><description><![CDATA[<p>1. Die ntdll verwendet keine CRT! Hättest Du DEPENDS mal für diese DLL aufegrufen, dann müsstest Du sehen, dass die NTDLL gar keine weiteren DLLs verwendet.<br />
2. memcpy wird dortintern wahrscheinlich intrinsic ausgeführt werden, d.h. der Compiler had entsprechenden Assembler Code expandended.<br />
Du kannt selbst in einem C++ Programm, dass die CRT als DLL verwendet, memcpy evtl. nicht hooken, genau aus diesem Grund.<br />
3. Es gibt die SDK Funktion CopyMemory, die auch gerne verwendet wird.<br />
4. Die ntdll kannst Du gar nicht hooken Code aus dieser DLL läuft immer im Kernel-Mode.</p>
<p>Was willst Du denn bitte mit solch einem Trick: Die memcpy Funktion zu hooken?<br />
Protokollieren? Was denn da bitte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355328</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 30 Aug 2007 12:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 12:35:36 GMT]]></title><description><![CDATA[<p>guck dir mal mit nem debugger an welche funktion wirklich aufgerufen wird bei memcpy, ich glaub das war sowas wie hmemcpy wenn ich mich recht erinnere. kann sein dass diese auch gar nciht in einer dll steckt sondern statisch gelinkt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355329</guid><dc:creator><![CDATA[asmboggy]]></dc:creator><pubDate>Thu, 30 Aug 2007 12:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 12:37:48 GMT]]></title><description><![CDATA[<p>Die memcpy ist nicht in der ntdll!<br />
Das ist eine CRT funktion, und wenn die statisch gelinkt wird hast du auch keine IAT und kannst folglich auch nicht die addresse der funktion auslesen. Besser wäre es, wenn du vor dem ausführen der zu protokollierenden exe nach der byte repräsentation von memcpy suchst(8-16 bytes sollten reichen: &quot;(char(*)[8])memcpy&quot;) uund diese stellen dann in der exe mit deiner funktion ersetzst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355331</guid><dc:creator><![CDATA[dfssdfsdf]]></dc:creator><pubDate>Thu, 30 Aug 2007 12:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 12:59:55 GMT]]></title><description><![CDATA[<p>Die NTDLL.DLL exportiert eine Funktion namens memcpy (). Sie importiert aber keine. Sie hat nicht mal eine &quot;Import-Section&quot; im PE-Header.</p>
<pre><code>Funktionen
7C910000 in NTDLL     DLL 

adresse   ordnungszahl   name 
----------------------------------- 
7C911D1D     04BB     _memccpy
7C980106     04BC     _memicmp
7C9120A5     04F1      memchr
7C91214F     04F2      memcmp
7C912200     04F3      memcpy
7C91253A     04F4      memmove
7C91287A     04F5      memset
</code></pre>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1355346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355346</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 30 Aug 2007 12:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 18:55:46 GMT]]></title><description><![CDATA[<p>Um mal ein bisschen weiter auszuholen...<br />
Der Hook soll für eine Applikation werden, die zur Steuerung eines Robotersystems dient. Diese schreibt zwar ein Logfile, allerdings erst wenn die gewünschte Aktion fertig ausgeführt wurde. Wichtig zu wissen wäre aber, wann sie damit anfängt. Ein ehemaliger Kollege aus einem anderem Geschäftsbereich benutzt für eine ähnliche Software dazu erfolgreich einen memcpy hook. Leider komme ich aber nicht an die Sourcen ran, politische Gründe <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>
<p>@dfssdfsdf<br />
Sowas hatte ich mir auch schon überlegt bzw. die Calls nach memcpy zu patchen.<br />
In der art, jedes &quot;CALL 0xDEADBEEF // call memcpy&quot; auf meine eigene Funktion umzulenken.</p>
<p>@merker<br />
Genau, aber meine Applikation importiert eine memcpy Funktion...</p>
<p>Hat jemand ideen, wie man sonst noch einen memcpy-hook umsetzen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355611</guid><dc:creator><![CDATA[mh]]></dc:creator><pubDate>Thu, 30 Aug 2007 18:55:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 19:10:55 GMT]]></title><description><![CDATA[<p>Also ich verstehe nicht was Du mit diesem memcpy Hook willst. Woher weißt Du denn wer wann diese Funktion in welcher Weise ausführt?<br />
Ganz zu schweigen davon, dass eine Applikation diese Funktion überhaupt nicht zu benutzen braucht?</p>
<p>Was hat dieser Hook mit der Steuerung eines Robotersystems zu tun?</p>
<p>Warum änderst Du nicht die entsprechende Software, dass Sie den Log-File schreibt wenn Du möchtest? Was sind das für Bedingungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355638</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 30 Aug 2007 19:10:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 19:40:56 GMT]]></title><description><![CDATA[<p>Die Meldungen werden wohl erstmal intern vorgehalten und später ausgegeben. Laufen derweil aber durch die memcpy Funktion...</p>
<p>Mit der Steuerung des Roboters hat die memcpy gar nichts zu tun, hatte ich auch nicht geschrieben. Die Software zur Steuerung des Roboters benutzt nur die memcpy Funktion.</p>
<p>Weil die Software leider nicht von uns stammt, sondern von einer Fremdfirma erstellt wurde. Der ganze Zusammenhang ist ein bisschen umfangreicher und würde hier weit über das eigentliche Thema hinaus gehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355665</guid><dc:creator><![CDATA[mh]]></dc:creator><pubDate>Thu, 30 Aug 2007 19:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 19:47:11 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>4. Die ntdll kannst Du gar nicht hooken Code aus dieser DLL läuft immer im Kernel-Mode.</p>
</blockquote>
<p>mit tricks schon, z.b. den speicherbereich, den die ntdll belegt, schreibfähig machen und dann den hook-code dort einschleusen.<br />
...und dass die ntdll immer im kernel-mode läuft, ist natürlich unsinn.<br />
<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="🙂"
    /><br />
--&gt; <a href="http://vx.netlux.org/lib/vzo12.html" rel="nofollow">http://vx.netlux.org/lib/vzo12.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1355666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355666</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Thu, 30 Aug 2007 19:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to Wie realisiert man einen hook für memcpy? on Thu, 30 Aug 2007 21:15:47 GMT]]></title><description><![CDATA[<p>mh schrieb:</p>
<blockquote>
<p>Genau, aber meine Applikation importiert eine memcpy Funktion...</p>
</blockquote>
<p>Dann reicht es (falls nicht via LoadLibrary () geladen) wenn die DLL den IAT-Hook in die IAT der EXE setzt. Die &quot;anderen&quot; DLL's müssen nicht durchsucht werden.<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1355719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1355719</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 30 Aug 2007 21:15:47 GMT</pubDate></item></channel></rss>