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

</content></entry></feed>