<?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=414464&amp;view=findpost&amp;p=3794398</guid>
        <pubDate>Sun, 31 Mar 2019 20:44:59 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794398</link>
        <description><![CDATA[Rzonex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794395'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-03-31T22:35:52+03:00">31.03.19, 19:35</time></span><div class='quote '>я же предлагал - почитай Рихтера, в книге лучше изложено.</div></div><br>
Читал я его... Это совсем не легкое чтиво. Сидеть и вникать в каждую строчку.<br>
В общем спасибо за помощь <strong class='tag-b'>ЫукпШ</strong>, <strong class='tag-b'>Славян</strong>.]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794395</guid>
        <pubDate>Sun, 31 Mar 2019 19:35:52 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794395</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rzonex &#064; <time class="tag-quote__quoted-time" datetime="2019-03-31T12:14:21+00:00">31.03.19, 12:14</time></span><div class='quote '><strong class='tag-b'>ЫукпШ</strong> Я хукаю функцию в модуле Engine.dll и эта функция юзается там же, этим же модулем. Импорт я не смотрел, но очень сильно подозреваю, что этой функции там нет. Что делать? :)</div></div><br>
Однозначного рецепта нет, нужно исследовать конкретную ситуацию.<br>
Просто читаем экспорт этого модуля (специальной утилитой).<br>
Если в экспорте функция есть, значит вероятно кто-то её вызывает.<br>
Тоже некой утилитой читаем импорт подозреваемого модуля и <br>
ищем ссылку на эту функцию из него.<br>
Если есть, значит будем перехватывать.<br>
Если нет, значит надо перехватывать LoadLibrary и GetProcAdress ...<br>
и исследовать дальше. Что именно явно загружается и какие<br>
функции ищутся там.<br>
я же предлагал - почитай Рихтера, в книге лучше изложено.<br>
-----<br>
В процессе реверс инжиниринга решения придётся принимать по ходу<br>
расследования. Заранее указать, как достигнуть успеха в <br>
конкретном случае невозможно.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794378</guid>
        <pubDate>Sun, 31 Mar 2019 14:51:15 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794378</link>
        <description><![CDATA[Rzonex: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Да банально:<br>
1. взять какую-то функцию A(...) из DLL, что поближе к желаемой B(...).<br>
2. Узнать внешне/руками/физически смещение от A к B.<br>
3. Узнавая адрес A, и делая к нему тот самый прирост, полу́чите полное владение и B. :whistle:</div></div><br>
Славян, мы про адреса функции в таблице импорта говорили =)<br>
<br>
Довел до ума свой хук перенес хук в функцию, просчитал все адреса, сделал вывод всех ошибок из функции, вылизал код, сделал переходник __stdcall to cdecl, хукаю теперь очень просто, одной командой:<br>
hook(имя_оригинала_функции, оригинал_модуль, моя_функция, мой_модуль, размер_перемещаемых_команд)<br>
Хукает на раз два, пока что только __stdcall, будет потребность и другие соглашения добавлю. Самое оригинальное решение было сделать буфер и писать туда асм код, т.к. язык на котором пишу асм вставки не поддерживает, а потом вызывать джампом этот буфер под видом функции. Работать будет в 90% случаев, если в перемещаемом коде нет jmp/call, в таком случае доп инструкции нужно будет писать. Назвал его &quot;Буферный нубо хук&quot;  :D Будет время, добью всетаки хук таблиц импорта.]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794371</guid>
        <pubDate>Sun, 31 Mar 2019 14:08:22 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794371</link>
        <description><![CDATA[Славян: Да банально:<br>1. взять какую-то функцию A(...) из DLL, что поближе к желаемой B(...).<br>2. Узнать внешне/руками/физически смещение от A к B.<br>3. Узнавая адрес A, и делая к нему тот самый прирост, полу́чите полное владение и B. :whistle:]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794363</guid>
        <pubDate>Sun, 31 Mar 2019 12:14:21 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794363</link>
        <description><![CDATA[Rzonex: <strong class='tag-b'>ЫукпШ</strong> Я хукаю функцию в модуле Engine.dll и эта функция юзается там же, этим же модулем. Импорт я не смотрел, но очень сильно подозреваю, что этой функции там нет. Что делать? :)]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794362</guid>
        <pubDate>Sun, 31 Mar 2019 12:02:08 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794362</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794344'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rzonex &#064; <time class="tag-quote__quoted-time" datetime="2019-03-30T19:18:52+00:00">30.03.19, 19:18</time></span><div class='quote '>Насколько я понял - если патчить ипморт, то нужно патчить все таблицы импорта во всех модулях, искать импортируется ли туда эта функция и менять адрес.<br>
Это сложновато выглядит.</div></div><br>
Это зависит от того, чего именно ты желаешь добиться.<br>
И ничего сложного тут нет.<br>
Это потребует 2-3 строчки исходника.<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">// pModName &nbsp; &nbsp;- имя модуля, в котором перехватываем API в импорте</div><div class="code_line">// pDllNames &nbsp; - имя dll, в которой перехваченный API</div><div class="code_line">// pApiName &nbsp; &nbsp;- имя перехваченной функции</div><div class="code_line">// pRoutine &nbsp; &nbsp;- адрес функции подмены</div><div class="code_line">//</div><div class="code_line">BOOL WINAPI HookApi</div><div class="code_line">(</div><div class="code_line">&nbsp;const char* pModName, </div><div class="code_line">&nbsp;const char* pDllName,</div><div class="code_line">&nbsp;const char* pApiName,</div><div class="code_line">&nbsp;void* &nbsp; &nbsp; &nbsp; &nbsp;pRoutine</div><div class="code_line">);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
А дальше составляешь массив параметров для неё.<br>
И запускаешь в цикле. Парой строк подменишь всё, что нужно.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794344</guid>
        <pubDate>Sat, 30 Mar 2019 19:18:52 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794344</link>
        <description><![CDATA[Rzonex: Нашел все адреса экспортируемых функций, и их адреса в таблице экспорта.<br>
Все данные нашел путем парсинга PE формата. Внутри процесса такую операцию можно сделать вообще не используя WinApi. Это профит, я КОРОЛЬ&#33;&#33;&#33;  :D  (Король аськи&#33;&#33;&#33;)  :D <br>
Насколько я понял - если патчить ипморт, то нужно патчить все таблицы импорта во всех модулях, искать импортируется ли туда эта функция и менять адрес.<br>
Это сложновато выглядит. А если сама длл использует свою экспортируемую функцию? Тогда хук не сработает и надо патчить экспорт?<br>
<br>
Одно не понимаю - все адреса функций в экспорте внутренние для самой длл, то есть смещение у них от начала длл задано. Я к ним специально адрес длл прибавлял, чтоб получить глобальный адрес.<br>
Что будет, если я локальный адрес какой-нить функции заменю глобальным адресом своей хук функции? По идее мне и сам хук нужно размещать внутри этой длл, но MemAlloc мне там память же не выделит?<br>
Хотя можно 5 байт пустых найти в самой длл и сделать обертку - разместить там джамп на сам обработчик.<br>
<br>
<strong class='tag-b'>ЫукпШ</strong> подскажи куда копать???<br>
<br>
<img class='tag-img' src='https://i.ibb.co/hZqYdCf/1.jpg' alt='user posted image'>]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794336</guid>
        <pubDate>Sat, 30 Mar 2019 16:18:18 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794336</link>
        <description><![CDATA[Rzonex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794334'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-03-30T15:09:58+00:00">30.03.19, 15:09</time></span><div class='quote '>Наверное, мы не поняли друг друга.</div></div><br>
Addr import table         : 000D6D8Ch<br>
Size of import table      : 420<br>
Оно? Делал по описанию РЕ файла - <a class='tag-url' href='http://www.droopy.narod.ru/develop/EXEhdr.htm' target='_blank'>Структура EXE заголовка</a><br>
Я читал что и экспорт можно патчить? А какая разница? Просто он тут маленького размера, я решил что быстрее найду нужное в экспорте  :D<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Без ассемблера, реверсных исследований.</div></div><br>
А чем мой способ плох? Я же нашел адреса таблиц, это же они? Притом это делается довольно просто - находим адрес нужной библиотеки, считываем пару адресов в памяти и получаем нужный адрес.<br>
Внутри процесса это совсем просто сделать - LoadLibraryA, GetProcAddress, и прыгаем по смещениям читаем адреса...<br>
Притом без всяких библиотек.]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794334</guid>
        <pubDate>Sat, 30 Mar 2019 15:09:58 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794334</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794333'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rzonex &#064; <time class="tag-quote__quoted-time" datetime="2019-03-30T14:47:59+00:00">30.03.19, 14:47</time></span><div class='quote '>Сделал читалку РЕ файлов, в начальный адрес добавил адрес нужной dll в памяти &#036;10000000, вот что получил:<br>
<br>
Прибавил к адресам таблиц адрес dll, получилось адрес таблицы экспорта: 100DC4F0.<br>
Перешел по адресу попал на vftable, но там же должны идти адреса функций, а там явно какой то вменяемый asm код, а не адреса...</div></div><br>
Наверное, мы не поняли друг друга.<br>
1. Менять надо адрес в таблице импорта исполнительного<br>
модуля (любого - .exe или .dll) одного по выбору<br>
или у всех сразу.<br>
В PE файле есть таблица с адресами.<br>
Для вызова функции делается что-то вроде:<br>
call [addr] - т.е. вызов по содержимому указанной переменной в памяти.<br>
<br>
2. Как это сделать подробно написано в широко известной<br>
книге Рихтера. У него же в книге подробный исходник.<br>
Мой опус по ссылке - это исходник Рихтера с добавкой,<br>
необходимой для систем после Win2000.<br>
3. Запускаем подопытный процесс с внедрённой своей dll.<br>
Внедряем как нравится. Можно внешним стартёром, можно<br>
утилитой &quot;iidking&quot; вставить ссылку на свою dll<br>
в таблицу импорта подсудимого файла.<br>
Если наше приложение, цепляем dll обычным образом.<br>
Для начала и отладки инструмента можно сделать именно так.<br>
4. Из уведомления DLL_PROCESS_ATTACH перехватываем<br>
указанный API. Фактически, в таблицу импорта<br>
впишем адрес процедуры перехватчика, а из неё<br>
вызовем нужную процедуру самым обычным образом.<br>
В результате получим процедуру-посредника.<br>
---<br>
Это устойчиво работает для любых виндусов и для x64 версий тоже.<br>
Без ассемблера, реверсных исследований. Надо только знать<br>
прототип желаемой функции и всё.<br>
---<br>
Вот, кстати, внешний стартёр для инжекта своей dll в процесс.<br>
Который я сам написал:<br>
<a class='tag-url' href='https://yadi.sk/d/vbAqvUJB3QToGx' target='_blank'>dllInjector</a>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794333</guid>
        <pubDate>Sat, 30 Mar 2019 14:47:59 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794333</link>
        <description><![CDATA[Rzonex: Сделал читалку РЕ файлов, в начальный адрес добавил адрес нужной dll в памяти &#036;10000000, вот что получил:<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">=========================================</div><div class="code_line">Process ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4816</div><div class="code_line">Base addr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 00000000h</div><div class="code_line">PE signature &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 00004550h</div><div class="code_line">Processor type &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 0000014Ch</div><div class="code_line">Section count &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 00000005h</div><div class="code_line">Date of create &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 1386212911</div><div class="code_line">Addr export table &nbsp; &nbsp; &nbsp; &nbsp; : 000DC4F0h</div><div class="code_line">Size of export table &nbsp; &nbsp; &nbsp;: 104080</div><div class="code_line">Addr import table &nbsp; &nbsp; &nbsp; &nbsp; : 000D6D8Ch</div><div class="code_line">Size of import table &nbsp; &nbsp; &nbsp;: 420</div></ol></div></div></div></div><br>
<br>
Прибавил к адресам таблиц адрес dll, получилось адрес таблицы экспорта: 100DC4F0.<br>
Перешел по адресу попал на vftable, но там же должны идти адреса функций, а там явно какой то вменяемый asm код, а не адреса...<br>
Это разве оно?<br>
<img class='tag-img' src='https://i.ibb.co/2MGRk2Z/1.jpg' alt='user posted image'>]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794294</guid>
        <pubDate>Fri, 29 Mar 2019 21:29:43 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794294</link>
        <description><![CDATA[Rzonex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794293'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-03-29T21:01:13+00:00">29.03.19, 21:01</time></span><div class='quote '>А откуда ты знаешь, что 5 байт кратны целому числу команд ?</div></div><br>
OllyDbg юзаю. Я же не пытаюсь сделать что-то универсальное, для этого моих познаний еще маловато.]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794293</guid>
        <pubDate>Fri, 29 Mar 2019 21:01:13 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794293</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794292'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rzonex &#064; <time class="tag-quote__quoted-time" datetime="2019-03-29T20:48:50+00:00">29.03.19, 20:48</time></span><div class='quote '>А как ее найти? Именно адрес начала таблицы? Я читал описание РЕ, но нифига не понял. <br>
...<br>
4) копируем в наш буфер со смещением 0х05 первые 5 байт оригинальной функции<br>
5) пишем в буфер со смещением 0х10 джамп на ( оригинальную функцию +0х05 )<br>
6) пишем в начало оригинальной функции джамп на наш буфер.<br>
...<br>
 далее выполняем инструкции оригинальной функции (которые мы скопировали) и джампимся в оригинал + 0х05.</div></div><br>
<a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=411679&view=findpost&p=3756752' target='_blank'>в этой теме</a> почти полный исходник.<br>
Там же есть ссылка на статью в Сети.<br>
У Рихтера в книге есть пример.<br>
---<br>
А откуда ты знаешь, что 5 байт кратны целому числу команд ?<br>
Чтобы с гарантией эти мероприятия делать, надо буквально<br>
дизассемблер иметь в перехватчике.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794292</guid>
        <pubDate>Fri, 29 Mar 2019 20:48:50 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794292</link>
        <description><![CDATA[Rzonex: А как ее найти? Именно адрес начала таблицы? Я читал описание РЕ, но нифига не понял. Шерстил длл, так то на практике видел что она в памяти представляет, но не нашел...<br>Я если честно, то уже хукнул, очень оригинально) Суть моего метода такая:<br><br>1) обрабатываем оригинальную функцию виртуал-протектом.<br>2) делаем AllockMem и резервируем буфер байт на 20.<br>3) пишем в начало нашего буфера (смещение 0х00) CALL функция_обработчик<br>4) копируем в наш буфер со смещением 0х05 первые 5 байт оригинальной функции<br>5) пишем в буфер со смещением 0х10 джамп на ( оригинальную функцию +0х05 )<br>6) пишем в начало оригинальной функции джамп на наш буфер.<br><br>Вуаля, как только основной поток вызывает оригинальную функцию - он попадает на наш джамп и летит по адресу нашего буфера, в буфере он сразу же летит на наш обработчик хука,<br>там мы делаем свои дела и ретурном возвращаемся в буфер, далее выполняем инструкции оригинальной функции (которые мы скопировали) и джампимся в оригинал + 0х05.<br>Профит, салют, аплодисменты  :D <br><br>Это я сам так придумал хукать по нубски) А если честно, то язык на котором программирую, не поддерживает ассемблерные вставки, приходится вот так изголяться. Таблицу экспорта в тыщу раз было бы легче похукать.<br>И еще я не восстанавливал ни указатель на стек, ни регистры, ни сам стек после обработчика своего, оно (вот чудо) и так заработало.]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794291</guid>
        <pubDate>Fri, 29 Mar 2019 20:03:58 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794291</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794182'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rzonex &#064; <time class="tag-quote__quoted-time" datetime="2019-03-28T20:36:10+00:00">28.03.19, 20:36</time></span><div class='quote '>А получится сплайсингом функцию хукнуть если у нее в конце джамп?</div></div><br>
Через таблицу импорта попробуй.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794182</guid>
        <pubDate>Thu, 28 Mar 2019 20:36:10 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794182</link>
        <description><![CDATA[Rzonex: <strong class='tag-b'>Славян</strong> Спасибо.<br>
А получится сплайсингом функцию хукнуть если у нее в конце джамп? Мне же после работы оригинала надо снова хук ставить, а управление уплыло неизвестно куда...<br>
<br>
Перехватить получилось, а если восстанавливать хук после вызова оригинала - ловлю крит. Видимо из за джампа в конце ws2_32 recv.<br>
Не хукают сплайсингом функции с джампом? Или я кривой?]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794181</guid>
        <pubDate>Thu, 28 Mar 2019 20:13:43 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794181</link>
        <description><![CDATA[Славян: Да, вам нужен вариант А.<br>
Почти как у вас: ((char*)recvx)[1] = первый байт, и т.д.<br>
Или сразу адрес: *((DWORD*)(((char*)recvx)+1)) = 0xAaBbCcDd;]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794177</guid>
        <pubDate>Thu, 28 Mar 2019 19:42:39 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794177</link>
        <description><![CDATA[Rzonex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414464&view=findpost&p=3794173'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2019-03-28T18:54:10+00:00">28.03.19, 18:54</time></span><div class='quote '>но вам DEP (запись данных в код) запретить должен сие.</div></div><br>
я заюзал VirtualProtectEx<br>
Если оба варианта не подходят, то как хукнуть ws2_32 recv? Как его хукают обычно? Я бы сплайсингом хотел... Никак?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>*((char*)recvx) = 0xE9, и далее нужное</div></div><br>
Я вот и спросил - как далее то? Я синтаксис Си плохо знаю...<br>
*((char+1*)recvx) или *((char*)[1]recvx) или как?))]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794173</guid>
        <pubDate>Thu, 28 Mar 2019 18:54:10 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794173</link>
        <description><![CDATA[Славян: Я как-то двояко понял вопрос, и на оба варианта ответ отрицателен. Так что может быть и третий вариант. Итак:<br>
А) если вы хотите, чтобы при вызове recvx(...) управление ушло куда надо и там вызвался переход на ..._food, то можете, конечно, записать: *((char*)recvx) = 0xE9, и далее нужное, но вам DEP (запись данных в код) запретить должен сие.<br>
Б) если же вы хотите, чтобы при вызове recvx(...) сразу шло исполнение jmp куда_надо, то тоже не выйдет, ибо переменную положат, скажем, в EAX и будет вызвано call [EAX], т.е. не то, что хотелось.<br>
В) ???]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794167</guid>
        <pubDate>Thu, 28 Mar 2019 18:23:33 +0000</pubDate>
        <title>Как записать в память по адресу функции?</title>
        <link>https://forum.sources.ru/index.php?showtopic=414464&amp;view=findpost&amp;p=3794167</link>
        <description><![CDATA[Rzonex: Добрый день/вечер.<br><br>У меня есть две функции:<br><br>void __fastcall recvx_food(int This, void *Src, int len, int flags);<br>и<br>recvx = (recvx_f)GetProcAddress(hWS2_32, &quot;recv&quot;);<br><br>Как мне записать в память по адресу функции recvx<br>в ноль (в самое начало) 0хE9 (jmp)<br>а по смещению +1 записать адрес функции recvx_food?<br>И как и куда можно сохранить первые 5 байт, чтоб потом удобно и быстро восстановить функцию recvx?<br>Спасибо&#33;]]></description>
        <author>Rzonex</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	