<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281680</guid>
        <pubDate>Tue, 02 Jun 2009 20:16:10 +0000</pubDate>
        <title>добавление кода в exe</title>
        <link>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281680</link>
        <description><![CDATA[sxd: Базово-независимый код, он же адресно-независимый код, он же позиционно-независимый код, он же Position-independent code и так далее...<br>
В помощь по теме <strong class='tag-b'>elsuk</strong> :)<br>
<a class='tag-url' href='http://www.wasm.ru/forum/viewtopic.php?id=13518' target='_blank'>http://www.wasm.ru/forum/viewtopic.php?id=13518</a><br>
<a class='tag-url' href='http://www.wasm.ru/article.php?article=green2red03' target='_blank'>http://www.wasm.ru/article.php?article=green2red03</a><br>
<a class='tag-url' href='http://www.xakep.ru/magazine/xs/048/064/1.asp' target='_blank'>http://www.xakep.ru/magazine/xs/048/064/1.asp</a> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-06-03T00:18:40+04:00">02.06.09, 20:18</time></span></span><br>
Можно кстати и без таблицы импорта... Избитый сетевой пример :)<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;windows.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma comment(linker,&quot;/ENTRY:WinMain&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;DWORD h, DWORD hash, class A&#62;</div><div class="code_line">inline LPVOID pushargEx(A a1)</div><div class="code_line">{ &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef LPVOID (WINAPI *newfunc)(A);</div><div class="code_line">&nbsp;&nbsp; &nbsp;newfunc func = (newfunc)GetProcAddressEx(h, hash);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return func(a1);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;DWORD h, DWORD hash, class A, class B, class C, class D&#62;</div><div class="code_line">inline LPVOID pushargEx(A a1, B a2, C a3, D a4)</div><div class="code_line">{ &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef LPVOID (WINAPI *newfunc)(A, B, C, D);</div><div class="code_line">&nbsp;&nbsp; &nbsp;newfunc func = (newfunc)GetProcAddressEx(h, hash);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return func(a1,a2,a3,a4);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">#define GLoadLibraryA &nbsp; pushargEx&#60;1, 0xC8AC8026&#62;</div><div class="code_line">#define GMessageBoxA &nbsp; &nbsp;pushargEx&#60;2, 0xABBC680D&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">inline DWORD CalcHash(char *str)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD hash = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char* copystr = str;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(*copystr) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;hash = ((hash &#60;&#60; 7) &amp; (DWORD)(-1))|(hash &#62;&#62; (32-7));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;hash = hash^(*copystr);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;copystr++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return hash;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">inline HMODULE GetKernel32(void)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;__asm </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax,dword ptr fs:[30h]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax,dword ptr [eax+0ch]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; esi,dword ptr [eax+1ch]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lodsd</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax,dword ptr [eax+08h]</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">#define RVATOVA(base, offset) ((DWORD)base + (DWORD)offset) </div><div class="code_line">&nbsp;</div><div class="code_line">LPVOID GetProcAddressEx(DWORD dwModule, DWORD dwProcNameHash)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;HMODULE hModule;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char user32_dll[]={&#39;u&#39;,&#39;s&#39;,&#39;e&#39;,&#39;r&#39;,&#39;3&#39;,&#39;2&#39;,0};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch (dwModule) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case 1: </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;hModule = GetKernel32();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case 2:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;hModule = (HMODULE)GLoadLibraryA(user32_dll);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;default:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PIMAGE_OPTIONAL_HEADER poh = (PIMAGE_OPTIONAL_HEADER)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;((char*)hModule + ((PIMAGE_DOS_HEADER)hModule)-&#62;e_lfanew + </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PIMAGE_EXPORT_DIRECTORY ped = (IMAGE_EXPORT_DIRECTORY*)RVATOVA(hModule, </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;poh-&#62;DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int nOrdinal;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (HIWORD((DWORD)dwProcNameHash) == 0) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nOrdinal = (LOWORD((DWORD)dwProcNameHash)) - ped-&#62;Base;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DWORD *pdwNamePtr = (DWORD*)RVATOVA(hModule, ped-&#62;AddressOfNames);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WORD *pwOrdinalPtr = (WORD*)RVATOVA(hModule, ped-&#62;AddressOfNameOrdinals);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (unsigned int i = 0; i &#60; ped-&#62;NumberOfNames; i++, pdwNamePtr++, pwOrdinalPtr++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (CalcHash((char*)RVATOVA(hModule, *pdwNamePtr)) == dwProcNameHash)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nOrdinal = *pwOrdinalPtr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (i == ped-&#62;NumberOfNames) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PDWORD pAddrTable = (PDWORD)RVATOVA(hModule, ped-&#62;AddressOfFunctions);</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwRVA = pAddrTable[nOrdinal];</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD ret = (DWORD)RVATOVA(hModule, dwRVA);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (LPVOID)ret;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int APIENTRY WinMain(HINSTANCE hInstance,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HINSTANCE hPrevInstance,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPTSTR &nbsp; &nbsp;lpCmdLine,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int &nbsp; &nbsp; &nbsp; nCmdShow)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;char str[]={&#39;s&#39;,&#39;h&#39;,&#39;i&#39;,&#39;t&#39;,0};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GMessageBoxA(0, str, str, 0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>sxd</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281253</guid>
        <pubDate>Tue, 02 Jun 2009 10:32:59 +0000</pubDate>
        <title>добавление кода в exe</title>
        <link>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281253</link>
        <description><![CDATA[Alexandoros: По ссылкам есть описания формата ПЕ. Добавление/изменение секции  импорта, после прочтения доки о формате не составит труда.]]></description>
        <author>Alexandoros</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281228</guid>
        <pubDate>Tue, 02 Jun 2009 10:06:31 +0000</pubDate>
        <title>добавление кода в exe</title>
        <link>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281228</link>
        <description><![CDATA[elsuk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=274310&view=findpost&p=2281206'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Alexandoros &#064; <time class="tag-quote__quoted-time" datetime="2009-06-02T09:37:19+00:00">02.06.09, 09:37</time></span><div class='quote '>LoadLibrary + GetProcAddress</div></div><br>
в том и дело что так не получится, к примеру запускаю я свою прогу на XP, получаю адрсс MessageBoxA, добавляю код к какому-то exe и получится что мой добавленный код будет работать только на XP с такимже SP что и у меня, если измененный exe запустить на висте то он выдась тип по такомото адресу нет функции(( поэтому надо привязыватся к таблице импорта. а как это сделать хз.  <br>
также можно хранить имена функций и затем на asm написать получени адреса через связку LoadLibrary GetProcAddress но опять естьли эти функции в таблице импорта exe и как к ним обратится?]]></description>
        <author>elsuk</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281215</guid>
        <pubDate>Tue, 02 Jun 2009 09:55:31 +0000</pubDate>
        <title>добавление кода в exe</title>
        <link>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281215</link>
        <description><![CDATA[Urich: <strong class='tag-b'>elsuk</strong><br>
Вообще вы не по адресу, вам в asm.<br>
пс. делать это руками будете долго и сложно. Лучше дисасембл. -&gt; добавить ф-цю -&gt; Компилить.]]></description>
        <author>Urich</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281206</guid>
        <pubDate>Tue, 02 Jun 2009 09:37:19 +0000</pubDate>
        <title>добавление кода в exe</title>
        <link>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281206</link>
        <description><![CDATA[Alexandoros: LoadLibrary + GetProcAddress<br>http://wasm.ru<br>http://cracklab.ru/]]></description>
        <author>Alexandoros</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281148</guid>
        <pubDate>Tue, 02 Jun 2009 08:17:29 +0000</pubDate>
        <title>добавление кода в exe</title>
        <link>https://forum.sources.ru/index.php?showtopic=274310&amp;view=findpost&amp;p=2281148</link>
        <description><![CDATA[elsuk: как сделать чтобы exe после мой модификации работал и на др винде? понимаю что надо вызывать вместо mov ebx,7e3a07eah и call ebx функцию из таблици импорта. но как это сделать? <br>
также если нету в таблице импорта оригинального файла необходимой функции как ее туда добавить? в инете искал, встречались протекторы которые формируют новую свой таблицу. <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void ProcessPE(CString strPathName)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Modify file attributes to archive, or read-only files will be encountered an error</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwOldFileAttr = GetFileAttributes(strPathName);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFileAttributes(strPathName, FILE_ATTRIBUTE_ARCHIVE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Open the file and read into the 10K, 10K enough to contain all the head</div><div class="code_line">&nbsp;&nbsp; &nbsp;HANDLE hFile = CreateFile(strPathName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;char *pBuffer = new char[10240];</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwRead;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReadFile(hFile, pBuffer, 10240, &amp;dwRead, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Get the first head of DOS and NT head pointer</div><div class="code_line">&nbsp;&nbsp; &nbsp;IMAGE_DOS_HEADER *pDosHeader=(IMAGE_DOS_HEADER *)pBuffer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IMAGE_NT_HEADERS32 *pNtHeaders = (IMAGE_NT_HEADERS32 *)(pBuffer + pDosHeader-&#62;e_lfanew);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Modify some of the data head</div><div class="code_line">&nbsp;&nbsp; &nbsp;UINT dwAddedCodeLen,dwAddedCodeBegin,dwIntervalOfJmp,dwIntervalOfString;</div><div class="code_line">&nbsp;&nbsp; &nbsp;__asm</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov eax,offset CODEEND</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub eax,offset CODEBEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov dwAddedCodeLen,eax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov eax,offset TOOLDENTRY</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub eax,offset CODEBEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov dwIntervalOfJmp,eax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov eax,offset STRING</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub eax,offset CODEBEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov dwIntervalOfString,eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov dwAddedCodeBegin,offset CODEBEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNtHeaders-&#62;FileHeader.NumberOfSections++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNtHeaders-&#62;OptionalHeader.SizeOfCode += Align(dwAddedCodeLen, pNtHeaders-&#62;OptionalHeader.SectionAlignment);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNtHeaders-&#62;OptionalHeader.SizeOfImage += Align(dwAddedCodeLen, pNtHeaders-&#62;OptionalHeader.SectionAlignment);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Add new IMAGE_SECTION_HEADER not be the last before the pointer IMAGE_SECTION_HEADER</div><div class="code_line">&nbsp;&nbsp; &nbsp;IMAGE_SECTION_HEADER *pLastSecHeader = (IMAGE_SECTION_HEADER *)((char *)pNtHeaders+</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sizeof(IMAGE_NT_HEADERS32)+</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(pNtHeaders-&#62;FileHeader.NumberOfSections-2)*sizeof(IMAGE_SECTION_HEADER));</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Get newly added pointer IMAGE_SECTION_HEADER</div><div class="code_line">&nbsp;&nbsp; &nbsp;IMAGE_SECTION_HEADER *pNewSecHeader = pLastSecHeader + 1;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Fill in some of the new data IMAGE_SECTION_HEADER</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNewSecHeader-&#62;PointerToRawData = pLastSecHeader-&#62;PointerToRawData + pLastSecHeader-&#62;SizeOfRawData;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNewSecHeader-&#62;SizeOfRawData = Align(dwAddedCodeLen, pNtHeaders-&#62;OptionalHeader.FileAlignment);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNewSecHeader-&#62;VirtualAddress = pLastSecHeader-&#62;VirtualAddress+</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Align(pLastSecHeader-&#62;Misc.VirtualSize, pNtHeaders-&#62;OptionalHeader.SectionAlignment);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNewSecHeader-&#62;Misc.VirtualSize = dwAddedCodeLen;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNewSecHeader-&#62;Characteristics = IMAGE_SCN_CNT_CODE|IMAGE_SCN_MEM_EXECUTE|IMAGE_SCN_MEM_READ|IMAGE_SCN_MEM_WRITE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;lstrcpy((char *)(pNewSecHeader-&#62;Name), &quot;.acode&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Record and modify the original entrance</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwOldEntry = pNtHeaders-&#62;OptionalHeader.AddressOfEntryPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pNtHeaders-&#62;OptionalHeader.AddressOfEntryPoint = pNewSecHeader-&#62;VirtualAddress;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Location to the new section should be the beginning of the location and write</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dw;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, (const void *)dwAddedCodeBegin, pNewSecHeader-&#62;Misc.VirtualSize, &amp;dw, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Add a new location to post documents and set the end of the final mark</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData+pNewSecHeader-&#62;SizeOfRawData, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetEndOfFile(hFile);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Navigate to the file and write the beginning of a new head</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, 0, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, (const void *)pDosHeader, pNtHeaders-&#62;OptionalHeader.SizeOfHeaders, &amp;dw, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Code in the new Department of jmp instructions fill orders</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned char c = 0xe9; &nbsp;//0xe9 is the instruction opcode transfer</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData + dwIntervalOfJmp, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, &amp;c, 1, &amp;dw, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwNewEntry = dwOldEntry - (pNewSecHeader-&#62;VirtualAddress + dwIntervalOfJmp + 5);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData + dwIntervalOfJmp + 1, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, &amp;dwNewEntry, 4, &amp;dw, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Add the code in the new Office, fill in the string string</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData + dwIntervalOfString, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, &quot;virus&quot;, 6, &amp;dw, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData + dwIntervalOfString + 6, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, &quot;really run the program?&quot;, 24, &amp;dw, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Modify the new code section 2 of push operand instructions</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwCaptionAddress = pNtHeaders-&#62;OptionalHeader.ImageBase + </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pNewSecHeader-&#62;VirtualAddress + dwIntervalOfString; &nbsp;//need is a virtual address, it increases with load-based site RVA</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData + 3, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, &amp;dwCaptionAddress, 4, &amp;dw, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Modify the new code in the first three operand instructions push</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwTextAddress = pNtHeaders-&#62;OptionalHeader.ImageBase + </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pNewSecHeader-&#62;VirtualAddress + dwIntervalOfString + 6;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFilePointer(hFile, pNewSecHeader-&#62;PointerToRawData + 8, NULL, FILE_BEGIN);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteFile(hFile, &amp;dwTextAddress, 4, &amp;dw, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete []pBuffer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(hFile);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetFileAttributes(strPathName, dwOldFileAttr);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;__asm</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">CODEBEGIN:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //4 that is MB_YESNO</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push 300 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //operand must be greater than 255, otherwise the compiler will use 2-byte push instruction, and we need to push the 5-byte instruction</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push 300 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //ditto</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//mov ebx,77d5050bh &nbsp;//This figure is MessageBoxA () import address from GetProcAddress () to obtain</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov ebx,7e3a07eah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call ebx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//CALL DS:MessageBoxA</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp eax,6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//6 that is IDYES</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;je TOOLDENTRY</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">TOOLDENTRY:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Jmp instructions to set aside five bytes of space, the first is the operation code, the latter four are offset Jump</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">STRING:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//6 bytes left, ready to fill the string &quot;virus&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//24 bytes set aside, ready to fill the string &quot;really run the program?&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nop</div><div class="code_line">CODEEND:</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
зарание спасибо&#33;&#33;&#33;]]></description>
        <author>elsuk</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      </channel>
      </rss>
	