<?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[Teile einer Funktion verstehen]]></title><description><![CDATA[<p>Hi, kann mir mal bitte jemand erläutern was hier so ungefehr passiert?</p>
<pre><code>DWORD UnknownFunction(HANDLE hProc) { 
   HANDLE hRemote = NULL; 
   void *rem = NULL; 
   DWORD dwBuf = 0, dwOffset = 0x6FB31120; 

   char szCode[] = { 
      0xB8, 0x00, 0x00, 0x00, 0x00,        
      0xBB, 0x00, 0x00, 0x00, 0x00,              
      0xFF, 0xD3,                        
      0xC1, 0xF8, 0x08,                   
      0xC3                              }; 

   *(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset; 

   rem = VirtualAllocEx(hProc, NULL, sizeof(szCode), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); 

   WriteProcessMemory(hProc, rem, szCode, sizeof(szCode), NULL); 

   hRemote = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)rem, NULL, 0, NULL); 
   WaitForSingleObject(hRemote, INFINITE); 
   GetExitCodeThread(hRemote, &amp;dwBuf); 

   VirtualFreeEx(hProc, rem, sizeof(szCode), MEM_DECOMMIT|MEM_RELEASE); 

   return dwBuf; 
}
</code></pre>
<p>Eigentlich verstehe ich nur diese folgenden Zeilen nicht: (Die verwendeten Funktionen weiter unten im Programm stehen ja einfach in der msdn, wo ich schon nachgesehen habe)</p>
<pre><code class="language-cpp">DWORD dwBuf = 0, dwOffset = 0x6FB31120; 

   char szCode[] = { 
      0xB8, 0x00, 0x00, 0x00, 0x00,          
      0xBB, 0x00, 0x00, 0x00, 0x00,          
      0xFF, 0xD3,                        
      0xC1, 0xF8, 0x08,                  
      0xC3                           
   }; 

   *(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset;
</code></pre>
<p>Ich habe mir selbst Gedanken gemacht:</p>
<pre><code class="language-cpp">DWORD dwBuf = 0
</code></pre>
<p>bedeutet wohl einfach nur :</p>
<pre><code class="language-cpp">unsigned long dwBuf = 0
</code></pre>
<pre><code class="language-cpp">dwOffset = 0x6FB31120;
</code></pre>
<p>Ich glaube 6FB31120 ist hexadezimal und müßte damit (wenn ich richtig gerechnet habe) 1874006304 sein. Dies sieht aus, wie eine Speicheradresse.</p>
<p>Die folgenden Befehle habe ich schon in der MSDN nachgesehen</p>
<pre><code class="language-cpp">VirtualAllocEx(...)
WriteProcessMemory(...)
CreateRemoteThread(...)
WaitForSingleObject(...)
GetExitCodeThread(...)
VirtualFreeEx(...)
</code></pre>
<p>(Somit denke ich das gesamte Programm ließt einfach eine Variable an einer bestimmten Speicheradresse von einem Process dessen Handle man angeben kann, aus.)</p>
<p>Das Problem liegt auch eher beim Folgenden:</p>
<pre><code class="language-cpp">char szCode[] = {
</code></pre>
<p>legt einfach ein Array von char an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">0xB8, 0x00, 0x00, 0x00, 0x00,        
      0xBB, 0x00, 0x00, 0x00, 0x00,              
      0xFF, 0xD3,                        
      0xC1, 0xF8, 0x08,                   
      0xC3
</code></pre>
<p>Legt hexadezimal Werte dort ab. Hier ist z.B die Frage: Wo ist der Sinn Hexadezimal Werte anzugeben und nicht normale Zeichen? (Und warum genau diese Werte?)</p>
<pre><code class="language-cpp">*(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset;
</code></pre>
<p>Diese beiden Zeilen verstehe ich leider wirklich nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236219/teile-einer-funktion-verstehen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 23:13:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236219.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Mar 2009 11:36:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Thu, 12 Mar 2009 11:36:07 GMT]]></title><description><![CDATA[<p>Hi, kann mir mal bitte jemand erläutern was hier so ungefehr passiert?</p>
<pre><code>DWORD UnknownFunction(HANDLE hProc) { 
   HANDLE hRemote = NULL; 
   void *rem = NULL; 
   DWORD dwBuf = 0, dwOffset = 0x6FB31120; 

   char szCode[] = { 
      0xB8, 0x00, 0x00, 0x00, 0x00,        
      0xBB, 0x00, 0x00, 0x00, 0x00,              
      0xFF, 0xD3,                        
      0xC1, 0xF8, 0x08,                   
      0xC3                              }; 

   *(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset; 

   rem = VirtualAllocEx(hProc, NULL, sizeof(szCode), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); 

   WriteProcessMemory(hProc, rem, szCode, sizeof(szCode), NULL); 

   hRemote = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)rem, NULL, 0, NULL); 
   WaitForSingleObject(hRemote, INFINITE); 
   GetExitCodeThread(hRemote, &amp;dwBuf); 

   VirtualFreeEx(hProc, rem, sizeof(szCode), MEM_DECOMMIT|MEM_RELEASE); 

   return dwBuf; 
}
</code></pre>
<p>Eigentlich verstehe ich nur diese folgenden Zeilen nicht: (Die verwendeten Funktionen weiter unten im Programm stehen ja einfach in der msdn, wo ich schon nachgesehen habe)</p>
<pre><code class="language-cpp">DWORD dwBuf = 0, dwOffset = 0x6FB31120; 

   char szCode[] = { 
      0xB8, 0x00, 0x00, 0x00, 0x00,          
      0xBB, 0x00, 0x00, 0x00, 0x00,          
      0xFF, 0xD3,                        
      0xC1, 0xF8, 0x08,                  
      0xC3                           
   }; 

   *(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset;
</code></pre>
<p>Ich habe mir selbst Gedanken gemacht:</p>
<pre><code class="language-cpp">DWORD dwBuf = 0
</code></pre>
<p>bedeutet wohl einfach nur :</p>
<pre><code class="language-cpp">unsigned long dwBuf = 0
</code></pre>
<pre><code class="language-cpp">dwOffset = 0x6FB31120;
</code></pre>
<p>Ich glaube 6FB31120 ist hexadezimal und müßte damit (wenn ich richtig gerechnet habe) 1874006304 sein. Dies sieht aus, wie eine Speicheradresse.</p>
<p>Die folgenden Befehle habe ich schon in der MSDN nachgesehen</p>
<pre><code class="language-cpp">VirtualAllocEx(...)
WriteProcessMemory(...)
CreateRemoteThread(...)
WaitForSingleObject(...)
GetExitCodeThread(...)
VirtualFreeEx(...)
</code></pre>
<p>(Somit denke ich das gesamte Programm ließt einfach eine Variable an einer bestimmten Speicheradresse von einem Process dessen Handle man angeben kann, aus.)</p>
<p>Das Problem liegt auch eher beim Folgenden:</p>
<pre><code class="language-cpp">char szCode[] = {
</code></pre>
<p>legt einfach ein Array von char an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">0xB8, 0x00, 0x00, 0x00, 0x00,        
      0xBB, 0x00, 0x00, 0x00, 0x00,              
      0xFF, 0xD3,                        
      0xC1, 0xF8, 0x08,                   
      0xC3
</code></pre>
<p>Legt hexadezimal Werte dort ab. Hier ist z.B die Frage: Wo ist der Sinn Hexadezimal Werte anzugeben und nicht normale Zeichen? (Und warum genau diese Werte?)</p>
<pre><code class="language-cpp">*(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset;
</code></pre>
<p>Diese beiden Zeilen verstehe ich leider wirklich nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1678613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1678613</guid><dc:creator><![CDATA[Fragender_1]]></dc:creator><pubDate>Thu, 12 Mar 2009 11:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Thu, 12 Mar 2009 12:46:26 GMT]]></title><description><![CDATA[<p>nix für ungut, abr wenn du das nich checkst is das noch ne nr. zu hoch für dich. das sind opcodes, was die machen kannste ja mal in deiner x86 befehlsreferenz nachlesen, das such ich dir jetzt nich raus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1678647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1678647</guid><dc:creator><![CDATA[asdca]]></dc:creator><pubDate>Thu, 12 Mar 2009 12:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Thu, 12 Mar 2009 12:52:01 GMT]]></title><description><![CDATA[<p>Auch funktioniert dat ganze mit Vista nicht mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1678652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1678652</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 12 Mar 2009 12:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Fri, 13 Mar 2009 16:55:20 GMT]]></title><description><![CDATA[<p>asdca schrieb:</p>
<blockquote>
<p>das sind opcodes</p>
</blockquote>
<p>Danke!</p>
<p>Ich habe mir jetzt die Arbeit gemacht und diese rausgesucht:</p>
<pre><code class="language-cpp">char szCode[] = { 
      0xB8, 0x00, 0x00, 0x00, 0x06,         //mov eax, 6 
      0xBB, 0x00, 0x00, 0x00, 0x00,         //mov ebx, 0 
      0xFF, 0xD3,                        //call ebx 
      0xC1, 0xF8, 0x08,                  //sar eax, 8 
      0xA3, 0x00, 0x00, 0x00, 0x00,         //mov DWORD PTR DS:[0], eax 
      0xC3                           //ret 
   };
</code></pre>
<p>Kann mir jetzt Jemand sagen was das macht?</p>
<p>Und vor allem was diese beiden Zeilen machen?</p>
<pre><code class="language-cpp">*(DWORD*)&amp;szCode[1] = 6; 
   *(DWORD*)&amp;szCode[6] = dwOffset;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1679505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679505</guid><dc:creator><![CDATA[Fragender_1]]></dc:creator><pubDate>Fri, 13 Mar 2009 16:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Fri, 13 Mar 2009 17:16:10 GMT]]></title><description><![CDATA[<p>wenn du das rausgesucht hast, musst du es doch wissen. der frickelcode da unten schreibt nur 6 in an die stelle da oben wo &quot;0x00, 0x00, 0x00, 0x06&quot; steht und dwOffset an die position hinter 0xbb wo die vier null bytes sind. wenn der code da in szCode ausgeführt wird lädt er also eax mit 6, ebx mit 0x6FB31120, callt die funktion an der adresse 0x6FB31120 und shiftet danach das funktionsergebnis um 8 nach rechts. wenn du damit nix anfangen kannst, dann frickel damit nich rum, sonst kann windows zerstört werden und dein pc könnte explodieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679524</guid><dc:creator><![CDATA[asdca]]></dc:creator><pubDate>Fri, 13 Mar 2009 17:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Fri, 13 Mar 2009 17:49:12 GMT]]></title><description><![CDATA[<p>asdca schrieb:</p>
<blockquote>
<p>wenn du das rausgesucht hast, musst du es doch wissen. der frickelcode da unten schreibt nur 6 in an die stelle da oben wo &quot;0x00, 0x00, 0x00, 0x06&quot; steht und dwOffset an die position hinter 0xbb wo die vier null bytes sind. wenn der code da in szCode ausgeführt wird lädt er also eax mit 6, ebx mit 0x6FB31120, callt die funktion an der adresse 0x6FB31120 und shiftet danach das funktionsergebnis um 8 nach rechts. wenn du damit nix anfangen kannst, dann frickel damit nich rum, sonst kann windows zerstört werden und dein pc könnte explodieren.</p>
</blockquote>
<p>Danke!</p>
<p>Also wird insgesamt nur die Speicherstelle bestimmt, an der der Code weiter unten den Wert ausließt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679534</guid><dc:creator><![CDATA[Fragender_1]]></dc:creator><pubDate>Fri, 13 Mar 2009 17:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Teile einer Funktion verstehen on Fri, 13 Mar 2009 18:15:43 GMT]]></title><description><![CDATA[<p>naja so ungefär</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679550</guid><dc:creator><![CDATA[asdca]]></dc:creator><pubDate>Fri, 13 Mar 2009 18:15:43 GMT</pubDate></item></channel></rss>