<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@d1sn3l4nd</title><generator>teletype.in</generator><description><![CDATA[@d1sn3l4nd]]></description><link>https://teletype.in/@d1sn3l4nd?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=d1sn3l4nd</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/d1sn3l4nd?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/d1sn3l4nd?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sat, 03 Oct 2026 19:52:33 GMT</pubDate><lastBuildDate>Sat, 03 Oct 2026 19:52:33 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@d1sn3l4nd/MPwkFtWY7bF</guid><link>https://teletype.in/@d1sn3l4nd/MPwkFtWY7bF?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=d1sn3l4nd</link><comments>https://teletype.in/@d1sn3l4nd/MPwkFtWY7bF?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=d1sn3l4nd#comments</comments><dc:creator>d1sn3l4nd</dc:creator><title>введение в Reverse Engineering</title><pubDate>Thu, 29 Jun 2023 12:53:40 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/46/db/46db3bbe-592b-4b93-8684-17b864432465.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/ce/d1/ced10088-1cb1-4afe-85df-fff73c91a0a1.png"></img>всем привет! это статья нацелена на новичков. которые хотят научиться анализировать приложения / малвари. и так начнем!]]></description><content:encoded><![CDATA[
  <p id="s4vB">всем привет! это статья нацелена на новичков. которые хотят научиться анализировать приложения / малвари. и так начнем!</p>
  <p id="vp0h">что же такое реверс ижиниринг ?</p>
  <p id="xOXp"><strong>Реверс инжиниринг</strong> это - процесс анализа и понимания работы приложения. выполняя обратные действия, тоесть, программист упаковывает приложение(компилирует) а реверс инженер делает обратные действия. распаковку приложения с целью понять как оно работает!</p>
  <p id="ZXev"><strong><em>что же должен знать реверс инженер для того что бы выполнять действия?</em></strong></p>
  <ol id="7Q8D">
    <li id="LunF">знать язык ассемблер ( в зависимости от архитектуры системы)</li>
    <li id="iS9x">знать язык С++ или С (для того что бы переводить из языка асемблера в C подобный код)</li>
    <li id="S8xj">знать архитектуру системы под которую выполняются действия (Windows - PE, linux - ELF)</li>
  </ol>
  <p id="Jn7n"><strong>так же мы рассмотрим 2 вида анализа приложений. </strong></p>
  <ol id="1TwE">
    <li id="dbJl"><strong>Статический анализ</strong></li>
    <li id="Wk80"><strong>динамический анализ</strong></li>
  </ol>
  <p id="fPpP"><strong>что такое статический анализ?</strong><br /><strong>статический анализ</strong> - это процесс анализа скомпилированного кода или исполняемого файла. без выполнения<br />статический анализ включает в себя:<br /><strong>Дизассемблирование: </strong><br />преобразование машинного кода в читаемый для человека вид, позволяющий изучить инструкции и структуру программы.</p>
  <p id="dHG2"><strong>что такое динамический анализ?</strong><br /><strong>динамический анализ</strong> - это процесс анализа скомпилированного кода или исполняемого файла. путем выполнения программы</p>
  <p id="nutF"><strong>сейчас мы рассмотрим базовые инструкции асемблера!</strong><br />1. MOV - копирует данные с одного места в другое, например, из памяти в регистр или между регистрами<br />2. ADD/SUB - выполняет сложение и вычитание чисел. ADD используется для сложения, а SUB для вычитания <br />3. INC/DEC - увеличивают или уменьшают значение переменной или регистра на 1 (пример I++, i--)<br />4. CMP - сравнивает два значения и устанавливает флаги состояния в соответствии с результатом сравнения <br />5. CALL/RET - вызывает функцию и возвращает управление обратно в основной код<br />6. PUSH / POP - перемещает значение на вершину стека или извлекает значение из вершины стека<br />7. AND/OR/XOR - выполняют логические действия И, ИЛИ, ИЛИ НЕ</p>
  <p id="dgh9"><strong>что такое стек?</strong><br /><strong>стек</strong> - это структура данных, которая используется для хранения временных значений и возврата адресов. стек это участок в памяти, в котором данные добавляются и извлекаются в порядке &quot;последним пришел - первым вышел&quot;</p>
  <p id="1vZM"><strong>сейчас мы поговорим об регистрах, зачем они нужны и какую роль выполняют!</strong><br /><strong>регистры</strong> - это небольшие участки в памяти, которые находятся непосредственно в процессоре и используются для хранения данных и выполнения операций.</p>
  <p id="RYCk">EAX/EBP/ESP - используется для хранения результата вычислений или возвращаемого значения из функций (EBP/ESP) в большинство случаев используются для управления стеком и доступа к параметрам функции, а так же для хранения любых данных.<br />ESP - указывает на вершину стека и используется для добавления и извлечения данных из стека<br />EIP - указывает на следующую инструкцию, которая должна быть выполнена<br />CS/DS/ES/SS - используются для адресации и доступа к различным сегментам памяти <br />VIP - используется для управления виртуальным адресом следующей инструкции, которая должна быть выполнена. <br /><strong><br />Сейчас мы поговорим о флагах</strong></p>
  <p id="cUFJ">флаги - используются для управления и контроля выполнения программы. Они представляют собой битовые флаги, которые устанавливаются и сбрасываются процессором в зависимости от результата выполнения инструкций. <br />CF - флаг переноса, устанавливается если при выполнении арифметической операции произошло переполнение<br />ZF - флаг нуля, устанавливается если результат операции равен нулю<br />OF - флаг переполнения, устанавливается если при выполнении операции с данными со знаком произошло переполнение<br />SF - флаг знака, устанавливается если результат операции имеет отрицательный знак<br />PF - флаг четности, устанавливается если результат операции имеет четное количество единичных битов<br />DF - флаг направления, определяет направление операций строковых инструкций (вперед или назад)</p>
  <p id="GVnV">когда мы все это изучили можно приступать к статическому анализу!<br />для этого нам понадобиться IDA PRO (Interactive DisAssembler)<br />допустим что мы имеем какой-то семпл приложения и мы сейчас хотим провести анализ, закидываем наш семпл в иду <br /></p>
  <figure id="5uyD" class="m_original">
    <img src="https://img1.teletype.in/files/ce/d1/ced10088-1cb1-4afe-85df-fff73c91a0a1.png" width="741" />
  </figure>
  <p id="96YI">ничего не меняем а просто нажимаем ОК. ида сама все правильно определила<br /></p>
  <figure id="KCKf" class="m_original">
    <img src="https://img3.teletype.in/files/a6/11/a611dd72-c3ae-4b2f-9501-c7284fb23fed.png" width="1599" />
  </figure>
  <p id="FUeC">видим такую картину. нам нужно найти точку входа в программу, для этого нам нужно либо по столбу слева найти слово старт, или же перейти в экспорты и там тыкнуть 2 раза на старт<br /></p>
  <figure id="ijoi" class="m_original">
    <img src="https://img3.teletype.in/files/e1/ce/e1ceffaf-b39e-42eb-a692-04e2a1d61065.png" width="448" />
  </figure>
  <p id="SDV4">мы нашли нашу точку входа, тут идет вызов __Security_coockie и совершается прыжок в обработку __inittern, переходим по нашему прыжку и листаем вверх. <br /></p>
  <figure id="RIrZ" class="m_original">
    <img src="https://img4.teletype.in/files/30/11/30116296-1586-43a5-88e0-717c146d1fc0.png" width="497" />
  </figure>
  <p id="WFCf"> что мы тут видим, вызывается функция месседжбокаА с аргументами которые помещаются в стек а так же идет помещение в стек строки хелло и вызов принтф. так же при анализе мы можем перейти в блок импортов<br /></p>
  <figure id="rbV3" class="m_original">
    <img src="https://img3.teletype.in/files/6a/3a/6a3aa97e-032c-45d5-99ae-e147b3c2b8c1.png" width="220" />
  </figure>
  <p id="nJzK">найти там месседжбокс <br /></p>
  <figure id="sRmm" class="m_original">
    <img src="https://img2.teletype.in/files/53/44/53449b7d-405c-4835-9894-d6f86dd212b3.png" width="819" />
  </figure>
  <p id="hNh0">два раза тыкнув по нему перейти в блок где видим такую картину<br /></p>
  <figure id="tuIf" class="m_original">
    <img src="https://img1.teletype.in/files/01/f2/01f215bc-86c8-473c-a730-8d115a06cf78.png" width="770" />
  </figure>
  <p id="r5ns">что бы посмотреть где оно используется нажмите на название и нажмите букву X(Ч русскую) <br /></p>
  <figure id="vveS" class="m_original">
    <img src="https://img1.teletype.in/files/02/7d/027d915d-1793-41f3-b242-1cef4489dfec.png" width="735" />
  </figure>
  <p id="r9oS">сейчас мы поговорим об прологе и эпилоге функций<br />пролог - это инструкции сохраняющие значение регистров для выполнения кода<br />Эпилог - это инструкции  восстанавливающие сохраненное состаяение регистров<br />и освобождают выделенную память в стеке <br /><br /></p>
  <figure id="Gzwz" class="m_original">
    <img src="https://img3.teletype.in/files/6b/f9/6bf90e9f-b201-4c26-9314-e69e5c75f24c.png" width="318" />
  </figure>
  <p id="lilL">вот так выглядит пролог <br /></p>
  <figure id="6un0" class="m_original">
    <img src="https://img1.teletype.in/files/49/e1/49e1cc8c-9064-48f7-a6f1-0e19e59a3703.png" width="188" />
  </figure>
  <p id="omP7">вот так эпилог <br />так же мы можем посмотреть строки нажав сочетание клавиш Shift + F12 <br /></p>
  <figure id="AqlY" class="m_original">
    <img src="https://img4.teletype.in/files/fa/02/fa02266c-c8eb-47ab-95ad-700a7b42de5c.png" width="478" />
  </figure>
  <p id="Dkvj">и также посмотреть где они используются, аналогичные действия как и с функциями.</p>
  <h2 id="QKtv">сейчас мы перейдем в динамический анализ!</h2>
  <p id="EoDL">для этого нам понадобиться x32dbg, перекидываем наш ехешник в поле<br /></p>
  <figure id="F5Qq" class="m_original">
    <img src="https://img1.teletype.in/files/00/59/0059150f-8bbb-439e-89b5-6d01a4d2f902.png" width="1209" />
  </figure>
  <p id="jMFI">справа от главного окна кода видим блок с регистрами, под ним стек, а под главным окном раздел с дампом.<br />и так наша программа остановилась, так как сработал брекпоинт на точке входа, давайте перейдем в основной код </p>
  <figure id="HZV6" class="m_original">
    <img src="https://img3.teletype.in/files/ad/81/ad81ca93-bf9e-4cfa-b228-def8aa1f961d.png" width="78" />
  </figure>
  <p id="uDIf">нажимаем эти 2 кнопки, выполнить до возврата и выполнить до пользовательского кода <br /><br /></p>
  <figure id="nB5u" class="m_original">
    <img src="https://img2.teletype.in/files/97/61/9761c56f-3901-431d-88a0-1b050a0dbff9.png" width="825" />
  </figure>
  <p id="feoM">вот мы нашли наш блок тыкаем два раза на инструкцию и нас перекидывает<br /></p>
  <figure id="C1Ge" class="m_original">
    <img src="https://img3.teletype.in/files/66/9c/669ca394-f774-48af-8590-80cbf4adec4a.png" width="755" />
  </figure>
  <p id="AcSP">тут мы видим тоже самое что и в дизасемблере. а что бы поставить брекпоинт два раза тыкаем на инструкцию, тогда она загорится красным.<br /><strong>брекпоинт</strong> - это инструкция которая указывает отладчику остановить выполнение программы в определенном месте.<strong><br />вот и подошла статья к концу, надеюсь всем понравилось и многие получили первоначальный опыт!</strong></p>

]]></content:encoded></item></channel></rss>