<?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[CE Tiny Dumper]]></title><description><![CDATA[<div class="iframely-link">


<div class="iframely-container">


<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom:50%;padding-top:120px"><a href="https://github.com/celuaru/CE_Tiny_Dumper" data-iframely-url="//cdn.iframe.ly/api/iframe?align=left&amp;url=https%3A%2F%2Fgithub.com%2Fceluaru%2FCE_Tiny_Dumper.git&amp;key=ae3f7efe69fd7659776282ad948bd52b"></a></div></div>


</div>

</div>
<p dir="auto"><img src="/assets/uploads/files/1684619462574-7a0117d9-fc33-467d-9ef8-3ad6b1049fe0-image.png" alt="7a0117d9-fc33-467d-9ef8-3ad6b1049fe0-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Функции:</p>
<ol>
<li>
<p dir="auto">Копирование участка виртуальной памяти фиксированной длины</p>
</li>
<li>
<p dir="auto">Связывание адреса копированных данных с новой меткой</p>
</li>
<li>
<p dir="auto">Возможность сравнивать дампы во время игры с любого доступного адреса (в том числе стека)</p>
</li>
<li>
<p dir="auto">Возможность сравнивать сохраненные дампы структур после перезагрузки игры</p>
</li>
</ol>
<p dir="auto">Основное назначение - снимать дампы со стека в пошаговой отладке по адресу ESP и сравнивать эти дампы в окне расструктуризации данных (Dessect Data/Structure). Таким образом можно найти сходства или различия в передаваемых аргументах функций, а также в адресах обратного вызова по инструкции ret. Сравнение аргументов может помочь определить указатели, смещения на данные. Сравнение адресов возврата может помочь определить развилки между ветками кода ботов и ветками персонажа за которого играете. Можно начать исследовать эту развилку для определения условий свой/чужой.</p>
<p dir="auto">Второе назначение - сравнивать дампы после перезагрузки игры. Сравнения дампов после перезагрузки, загрузки уровней игры, загрузки слотов сохранения, смены оружия, изменения в инвентаре, смены уровня героя и многие другие изменения после перезагрузки игры могут позволить найти отличия или совпадения данных структур от начала базового адреса структуры и обратить на них гораздо большее внимание среди данных в структуре</p>
<p dir="auto">Данные для ввода:</p>
<p dir="auto">Source Address - адрес с которого будет сниматься дамп</p>
<p dir="auto">Size dump - размер участка данных в байтах</p>
<p dir="auto">Register label - метка для обращения к адресу</p>
<p dir="auto">*Подсказки:</p>
<ol>
<li>
<p dir="auto">Плагин можно найти в первом окне дизассемблера в меню Tools (Утилиты). Окна-клоны дизассемблера не имеют подключенного подменю.</p>
</li>
<li>
<p dir="auto">Зарегистрированные метки, которые вы забыли можно посмотреть и удалить через окно зарегистрированных меток "Symbol Config" (нажать на CTRL+U в окне дизассемблера)</p>
</li>
<li>
<p dir="auto">Память дампов сама не очищается. Поэтому не рекомендуется снимать очень часто огромные дампы и тем самым засорять память. Если все же память переполнена, что мало вероятно, то просто перезапустить игру.</p>
</li>
</ol>
<p dir="auto">Что нового в версии 1.1<br />
Размещено 6 марта, 2015</p>
<ol>
<li>Добавлен список зарегистрированных меток</li>
<li>Добавлено контекстное меню с опциями копирования меток в буфер обмена и удаление меток с освобождением памяти</li>
<li>Кнопка снятия дампа больше не закрывает окно</li>
</ol>
<p dir="auto">Что нового в версии 1.2<br />
Размещено 6 марта, 2015</p>
<p dir="auto">Добавления:</p>
<ol>
<li>При выделении записи в полях выводятся данные адреса, размер дампа и название зарегистрированной метки</li>
<li>Добавлена опция сохранения дампов</li>
<li>Добавлена опция загрузки дампов</li>
<li>Добавлена опция очистить таблицу</li>
<li>Добавлена опция перезаписи дампов</li>
<li>После закрытия игры дампы можно сохранять<br />
Исправления:</li>
<li>Исправлено подключение к русской версии</li>
<li>Исправлены название опций<br />
Описание контекстного меню:</li>
<li>Copy Name - копирует имя выделенной записи</li>
<li>Remove selected - удаляет выделенную запись</li>
<li>Save to file - сохранить все дампы в файл, в указанную директорию</li>
<li>Load from file - загрузить дампы из файла</li>
<li>Ramove all records - удаляет все дампы и зарегистрированные метки</li>
<li>Rewrite dumps - перезаписывает дампы в новую память, регистрирует метки адресов дампов повторно</li>
</ol>
]]></description><link>https://celua.ru/topic/116/ce-tiny-dumper</link><generator>RSS for Node</generator><lastBuildDate>Tue, 17 Mar 2026 03:03:12 GMT</lastBuildDate><atom:link href="https://celua.ru/topic/116.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 May 2023 21:58:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CE Tiny Dumper on Sat, 20 May 2023 22:03:54 GMT]]></title><description><![CDATA[<p dir="auto">Пошаговое руководство по Tiny Dumper</p>
<p dir="auto">В этом руководстве по шагам описано как снять дамп со стека и раструктуризовать его. Если лень читать, то предлагаю посмотреть хотя бы последний скрин. Там можно увидеть результат. Это самый важный скрин.</p>
<ol>
<li>
<p dir="auto">Перед запуском CE устанавливаем файлы плагина в папку autorun (frmTinyDumper.xml и TinyDumper.lua)</p>
</li>
<li>
<p dir="auto">Запускаем игру например "Painkiller - Battle out of Hell 1.64" поставленная в оконный режим через 3DAnalyze.</p>
</li>
</ol>
<p dir="auto">Оконный режим ставить обязательно, т.к. будет пошаговая отладка. В противном случае игра зависнет, а с CE рабтать нельзя будет</p>
<ol start="3">
<li>
<p dir="auto">Запустить CE с установленным плагином и подключиться к игре</p>
</li>
<li>
<p dir="auto">Ищем адрес здоровья (или брони, или патронов), тип Double (8 байт)<br />
0x24571EA8 = 99.2900238037109</p>
</li>
<li>
<p dir="auto">Ставим бряк на доступ или на запись на адрес 0x24571EA8</p>
</li>
</ol>
<p dir="auto"><img src="/assets/uploads/files/1684619928720-2bf8d038-de92-4de0-88f6-944b9093adf5-image.png" alt="2bf8d038-de92-4de0-88f6-944b9093adf5-image.png" class=" img-fluid img-markdown" /></p>
<ol start="6">
<li>Идем в игру и встаем под удар персонажем</li>
</ol>
<p dir="auto">Появляются инструкции<br />
<img src="/assets/uploads/files/1684619954804-3b2e99be-4a03-455c-a575-28511d347064-image.png" alt="3b2e99be-4a03-455c-a575-28511d347064-image.png" class=" img-fluid img-markdown" /><br />
и там же нажимаем на кнопку Stop, чтобы бряки не мешались в окне бряков</p>
<ol start="7">
<li>Берем например инструкцию</li>
</ol>
<p dir="auto">1015C194 - 89 53 08 - mov [ebx+08],edx<br />
<img src="/assets/uploads/files/1684619975675-6ad80302-80f1-4905-8bac-bdbfbb930bfd-image.png" alt="6ad80302-80f1-4905-8bac-bdbfbb930bfd-image.png" class=" img-fluid img-markdown" /><br />
По ней идем в дизассемблер и на инструкции жмем F5 - установка бряка на доступ</p>
<p dir="auto"><img src="/assets/uploads/files/1684620000576-2755fb71-f09c-4815-88c7-191fbfdf2dc7-image.png" alt="2755fb71-f09c-4815-88c7-191fbfdf2dc7-image.png" class=" img-fluid img-markdown" /></p>
<ol start="8">
<li>Открываем окно бряков, выделяем инструкцию и пишем условие на прерывание с остановкой процесса</li>
</ol>
<p dir="auto">EBX==0x24571EA0 (это условие взяли, потому что ebx находится в инструкции, а значение взяли EBX из отладчика)</p>
<p dir="auto"><img src="/assets/uploads/files/1684620024926-2c1e1ed4-0df0-4314-981f-f8e31550959d-image.png" alt="2c1e1ed4-0df0-4314-981f-f8e31550959d-image.png" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1684620045056-43e9dfd5-1c49-4bf2-bf1a-b588c308181c-image.png" alt="43e9dfd5-1c49-4bf2-bf1a-b588c308181c-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Нажимаем Ок, идем в игру<br />
9. Видим, что произошла остановка игры<br />
<img src="/assets/uploads/files/1684620068248-148b600b-4ffe-4e2c-893a-df3330aff53f-image.png" alt="148b600b-4ffe-4e2c-893a-df3330aff53f-image.png" class=" img-fluid img-markdown" /><br />
10. Открываем окно ТиниДампера<br />
<img src="/assets/uploads/files/1684620091428-6db64901-ca0e-4d32-8be9-2fcb27894556-image.png" alt="6db64901-ca0e-4d32-8be9-2fcb27894556-image.png" class=" img-fluid img-markdown" /></p>
<ol start="11">
<li>
<p dir="auto">Пишем значение регистра esp и название будущей зарегенной метки<br />
<img src="/assets/uploads/files/1684620109175-26586a39-c6f1-40ee-a44b-bd966578e736-image.png" alt="26586a39-c6f1-40ee-a44b-bd966578e736-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">Нажимаем "Dump and Close" и CTRL+U чтобы видеть под рукой зареганные ваши метки</p>
</li>
</ol>
<p dir="auto"><img src="/assets/uploads/files/1684620129226-7f7a0d40-9107-4c19-b13f-2105a57422a5-image.png" alt="7f7a0d40-9107-4c19-b13f-2105a57422a5-image.png" class=" img-fluid img-markdown" /></p>
<ol start="13">
<li>
<p dir="auto">Открываем окно расструктуризации CTRL+D и пишем метку в свободное поле<br />
<img src="/assets/uploads/files/1684620142673-1104aed5-e0c1-45bd-b880-877433c6c1a1-image.png" alt="1104aed5-e0c1-45bd-b880-877433c6c1a1-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">Далее следуем действия как на рисунках<br />
<img src="/assets/uploads/files/1684620159194-9cac0888-208c-4f0e-9ae2-b53f6c49aeb4-image.png" alt="9cac0888-208c-4f0e-9ae2-b53f6c49aeb4-image.png" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1684620166969-7db1307b-9305-4fd6-9b34-e75c2c8cc466-image.png" alt="7db1307b-9305-4fd6-9b34-e75c2c8cc466-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">Наконец результат<br />
<img src="/assets/uploads/files/1684620184351-6d506668-7bed-4cae-9c22-47af124c0c16-image.png" alt="6d506668-7bed-4cae-9c22-47af124c0c16-image.png" class=" img-fluid img-markdown" /></p>
</li>
</ol>
<p dir="auto">Не только сохраняются данные, которые пропадут на следующий такт процессора, но и расструктуризовали и можем сравнивать эти данные с другими дампами стека. Зачем, как и для чего это выходит за рамки этого руководства.</p>
<ol start="16">
<li>
<p dir="auto">Сейчас процесс игры остановлен на бряке кода. Чтобы продолжить игру. Удаляем бряк из окна бряков и отпускаем игру по F9.</p>
</li>
<li>
<p dir="auto">Теперь снимаем другие дампы на том же адресе для адресов здоровья врагов на предмет отличиях их или для поиска указателей... Во всяком случае сохраненный дамп может дать какие-то подсказки и зацепки. Главное не начать новый уровень игры или не загружать сохранения, т.к. обычно при переходе на новый уровень данные могут измениться... На этом пока все</p>
</li>
</ol>
<p dir="auto">-----<br />
Tiny dumper 1.2 Сравнение структур после перезагрузки. Поиск фильтра свой-чужой-дружественый</p>
<ol>
<li>
<p dir="auto">Запускаем игру, запускаем CE и присоединяем процесс игры к CE</p>
</li>
<li>
<p dir="auto">Сохраняем игровой слот перед тем как искать структуры</p>
</li>
<li>
<p dir="auto">Находим три структуры игроков: свой игрок, дружественный, враг</p>
</li>
<li>
<p dir="auto">Дампим три структуры из пункта 3 указывая: базовый адрес структуры, уникальную метку</p>
</li>
<li>
<p dir="auto">Игру закрываем, снова открываем, загружаем слот, присоединяем процесс игры к CE</p>
</li>
<li>
<p dir="auto">В Tiny dumper 1.2 вызываем контекстное меню правой кнопки мышки и вызываем опцию "Rewrite dumps" - дампы из кеша перезаписываются в память в процесса игры</p>
</li>
<li>
<p dir="auto">Снова находим три структуры игроков: свой игрой, дружественный, враг</p>
</li>
<li>
<p dir="auto">В окне расструктуризации создаем три группы</p>
</li>
</ol>
<p dir="auto">Группа1 "Свой игрок":</p>
<p dir="auto">-адрес после перезагрузки</p>
<p dir="auto">-метка из тини дампера своего игрока до перезагрузки</p>
<p dir="auto">Группа2 "Чужой игрок":</p>
<p dir="auto">-адрес после перезагрузки</p>
<p dir="auto">-метка из тини дампера чужого игрока до перезагрузки</p>
<p dir="auto">Группа3 "Дружественный игрок":</p>
<p dir="auto">-адрес после перезагрузки</p>
<p dir="auto">-метка из тини дампера дружественного игрока до перезагрузки</p>
<ol start="9">
<li>
<p dir="auto">Если повезет, то находим фильтр - фиолетового цвета строка. Если филетовых строк несколько, то запоминаем их смещения и значения на всякий случай</p>
</li>
<li>
<p dir="auto">Пишем АА-скрипт со смещением фильтра. Правильно написанный АА-скрипт не будет крешить игру.</p>
</li>
<li>
<p dir="auto">Активируем АА-скрипт и проверяем в игре, что свой и дружественный игроки не получают урон, а вражеские получают урон. Если это не так, то берем другие смещения из пункта 9 и повторяем 10.</p>
</li>
</ol>
<p dir="auto">Если фильтр найти не удалось, то ищем 3 многоуровневых указателя до верхего статического адреса для своего, для 2-х врагов. Открываем Structure Spider.</p>
<p dir="auto">Указываем в поиске уровень вложенности указателей.</p>
<p dir="auto">Попеременно вводим два статических адреса - начала структур своего и чужих игроков. Правило поиска выбираем исходя из типов игроков. Если это свой и чужой, то искать отличные. Если это чужой и чужой, то искать одинаковые. Перезапускам игру и опять проделываем эти действия.</p>
<p dir="auto">Если не нашлось ничего, то что-то делали не так или отличия между группами игроков нет. Однако графический интерфейс обычно связан только с нашим героем и не связан с другими. Поэтому по связи GUI как минимум фильтр свой-чужой можно сделать всегда. Что касается дружественных игроков, то нужно будет исследовать более углубленно.</p>
]]></description><link>https://celua.ru/post/347</link><guid isPermaLink="true">https://celua.ru/post/347</guid><dc:creator><![CDATA[MasterGH]]></dc:creator><pubDate>Sat, 20 May 2023 22:03:54 GMT</pubDate></item></channel></rss>