<?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[Сделать большой брейкпоинт на структуру через  dbk_useKernelmodeOpenProcess]]></title><description><![CDATA[<p dir="auto">Обычно, дается 4 аппаратных брейкпоинта на адреса памяти. Их можно включать одновременно  и найти инструкции, которые в данный момент срабатывают. Так можно определить тип данных у адресов и найти инструкции. По инструкциям найти смещения внутри дизассемблированной инструкции. По смещениям визуально определить структуры в структурах. Расструтуризовать структуру в dessect data и найти много интересных параметров для читов. Вручную с 4мя бряками делать очень хлопотно.</p>
<p dir="auto">Начинается все с установки огромного бряка на структуру из туториала CE.</p>
<p dir="auto"><img src="/assets/uploads/files/1680387823876-3931d315-3242-4905-ac49-8dc56de2c6c3-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="3931d315-3242-4905-ac49-8dc56de2c6c3-изображение.png" class=" img-fluid img-markdown" /></p>
<pre><code>\-- Tutorial-x86_64.exe+2B3A9 - 81 BB F0070000 E8030000 - cmp [rbx+000007F0],000003E8 { 1000 }

local addressStructure = 0x000001FB07E391B0
local sizeStrucure = 0x1000
local TYPE_BREAKPOINT_ACESS = "READ" -- "READ" "WRITE" режимы брейкпоинта
local scanTIme = 7000   -- через 7 секунд показать результат
local stopTimee = true  -- остановить таймер после получения результата

if dbkInited == nil or not dbkInited then
  dbkInited = dbk_initialize()
  dbk_useKernelmodeOpenProcess()
  OpenProcess(getOpenedProcessID())
  if not dbkInited then
     print("Can't load DBK")
     return
  end
  -- Появится диалог, жем "ДА"
  dbvm_initialize(true)
end

string.format('Start watching address: = %016X  size: %X', addressStructure, sizeStrucure)

local physicalAddress = dbk_getPhysicalAddress(addressStructure)
print (physicalAddress)

if TYPE_BREAKPOINT_ACESS == "WRITE" then
   IDscannerWrites = dbvm_watch_writes(physicalAddress, sizeStrucure)
elseif TYPE_BREAKPOINT_ACESS == "READ" then
   IDscannerReads = dbvm_watch_reads(physicalAddress, sizeStrucure)
end

function PrintResult(IDscanner)
   data = dbvm_watch_retrievelog(IDscanner)

   if data == nil then
     print('Inforamtion: Data nil')
    return
   end

   if #data &lt;= 0 then
     print('Inforamtion: #data &lt;= 0')
    return
   end

   for i=1,#data do
     print(string.format('RIP = %016X',data[i].RIP))
     print(disassemble(data[i].RIP))
   end

end

timer = createTimer(nil, false)
timer.OnTimer = function(timer)

  if TYPE_BREAKPOINT_ACESS == "WRITE" then
    print "Result Writes"
    PrintResult(IDscannerWrites)
  elseif TYPE_BREAKPOINT_ACESS == "READ" then
    print "Result Reads"
    PrintResult(IDscannerReads)
  end

  if stopTimee then
    print "Stop Timer"
    timer.Enabled = false
    dbvm_watch_disable(IDscannerWrites)
    dbvm_watch_disable(IDscannerReads)
  end

end
timer.Interval = 10000
timer.Enabled = true
</code></pre>
<p dir="auto">Логи</p>
<pre><code>Result Reads 
RIP = FFFFF8040E9D5320 
FFFFF8040E9D5320 - 00 00  - add [rax],al 
RIP = FFFFF8040E9D5300 
FFFFF8040E9D5300 - 00 00  - add [rax],al 
RIP = 000000010002B3A9 
10002B3A9 - 81 BB F0070000 E8030000 - cmp [rbx+000007F0],000003E8 
RIP = 000000010009D080 
10009D080 - 48 83 B8 88050000 00 - cmp qword ptr [rax+00000588],00 
RIP = 000000010002599D 
10002599D - 80 B8 02040000 00 - cmp byte ptr [rax+00000402],00 
RIP = 00000001000259AE 
1000259AE - 48 8B 00  - mov rax,[rax] 
RIP = 00000001000A429D 
1000A429D - 8A 81 00040000  - mov al,[rcx+00000400] 
RIP = 00000001000259C3 
1000259C3 - 48 8B 00  - mov rax,[rax] 
RIP = 000000010001D70C 
10001D70C - F7 40 50 10000000 - test [rax+50],00000010 
RIP = 000000010001D71D 
10001D71D - 80 B8 A1050000 00 - cmp byte ptr [rax+000005A1],00 
RIP = 000000010001D734 
10001D734 - 48 8B 00  - mov rax,[rax] 
RIP = 00000001000AAB40 
1000AAB40 - 48 83 78 70 00 - cmp qword ptr [rax+70],00 
RIP = 000000010001D741 
10001D741 - 48 83 B8 98060000 00 - cmp qword ptr [rax+00000698],00 
RIP = 000000010001D7F8 
10001D7F8 - 80 B8 A1050000 00 - cmp byte ptr [rax+000005A1],00 
RIP = 000000010001D809 
10001D809 - F7 40 50 10000000 - test [rax+50],00000010 
RIP = 000000010009B630 
10009B630 - 48 83 B8 70040000 00 - cmp qword ptr [rax+00000470],00
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1680387880260-f7c869d2-f790-4ed0-b7da-d7d1a574cac7-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="f7c869d2-f790-4ed0-b7da-d7d1a574cac7-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">По логам видим, что какие-то инструкции обращаются и скорее всего обращаются к нашей той самой структуре. Проверим так ли это и заодно увидим к каким другим структурам идет обращение<br />
<img src="/assets/uploads/files/1680387949843-df5c8aed-7148-49c0-bba8-bb91fe31d947-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="df5c8aed-7148-49c0-bba8-bb91fe31d947-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Видим, что одна из инструкций действительно обращается к нашей структуре и далеко за пределам диапазона 4 брейкпоинтов. Т.е. это действительно огромный такой брейкпоинт на всю структуру.</p>
<p dir="auto">Также видим, что инструкция отработала по другим 4 структурам и это могли быть враги  и друзья игрока.</p>
<p dir="auto">Также видим, что тип данных автоматически неверно определился в окна DesectData и мы можем его скорективать - это будет 1 байт<br />
<img src="/assets/uploads/files/1680387978262-53a9ef34-fbbf-41ab-8c02-505ca89eded1-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="53a9ef34-fbbf-41ab-8c02-505ca89eded1-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Вот так можно проводить ручную расструктуризацию. Кропотливо по байтикам на весь размер структуры выставлять комментарий и правильный тип данных - не все типы данных могут подцепиться и при экспериментах с изменением значений могут быть глюки в игре или даже вылеты. После того как вся структура изучена, можно сделать множество читов, которых нет ни в одном трейнере, если их еще не сделали.</p>
]]></description><link>https://celua.ru/topic/25/сделать-большой-брейкпоинт-на-структуру-через-dbk_usekernelmodeopenprocess</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 03:39:07 GMT</lastBuildDate><atom:link href="https://celua.ru/topic/25.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Apr 2023 22:26:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Сделать большой брейкпоинт на структуру через  dbk_useKernelmodeOpenProcess on Sun, 02 Apr 2023 18:34:28 GMT]]></title><description><![CDATA[<p dir="auto">Пользователь <a class="plugin-mentions-user plugin-mentions-a" href="/user/pitronic" aria-label="Profile: Pitronic">@<bdi>Pitronic</bdi></a> написал в <a href="/post/66">Сделать большой брейкпоинт на структуру через dbk_useKernelmodeOpenProcess</a>:</p>
<blockquote>
<p dir="auto">Мы знаем что адрес таймера на выстрел во первых лежит в одной структуре с патронами, во вторых адрес в начале меняется в момент выстрела одновременно с уменьшением патронов и в пределах от одной до 100 миллисекунд возвращается в прежнее значение. может lua скрипт специальный можно сделать?</p>
</blockquote>
<p dir="auto">Я бы сделал без скриптов.</p>
<ol>
<li>делаешь dessect structure<br />
<img src="/assets/uploads/files/1680459954033-6b8ca47d-ed90-46ea-95e7-cd454196cb74-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="6b8ca47d-ed90-46ea-95e7-cd454196cb74-изображение.png" class=" img-fluid img-markdown" /></li>
<li>Далее как обычно. Создаешь структуру. Затем вот это (следить за изменениями)<br />
<img src="/assets/uploads/files/1680460072686-17867765-a66b-43e9-9242-482b0b8c7cf3-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="17867765-a66b-43e9-9242-482b0b8c7cf3-изображение.png" class=" img-fluid img-markdown" /></li>
<li>ну а дальше воспроизводишь свой выстрел</li>
<li>потом создаешь структуру из изменившихся данных (потому что их будешь очень много наверняка)<br />
<img src="/assets/uploads/files/1680460222886-783b72ad-84e9-4444-9d5f-c02f5beb20c3-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="783b72ad-84e9-4444-9d5f-c02f5beb20c3-изображение.png" class=" img-fluid img-markdown" /></li>
<li>затем делаешь lock на структуру, чтобы значения зафиксирвать<br />
<img src="/assets/uploads/files/1680460259752-a8243497-20b9-4ad1-9a14-056b452cace1-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="a8243497-20b9-4ad1-9a14-056b452cace1-изображение.png" class=" img-fluid img-markdown" /></li>
<li>затем рядом создаешь второй ряд по ctrl +a и смотрим изменения в реальном времени (игра должна быть в оконном режим, чтобы мы видели как цифры скачут)<br />
<img src="/assets/uploads/files/1680460364737-227628c2-13fe-485d-8632-0defed52710b-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="227628c2-13fe-485d-8632-0defed52710b-изображение.png" class=" img-fluid img-markdown" /></li>
<li>чтобы увидеть изменения менее 100мс нужно поставить интервал меньше<br />
<img src="/assets/uploads/files/1680460434218-5dff820a-cb72-45a6-b625-04112696daec-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="5dff820a-cb72-45a6-b625-04112696daec-изображение.png" class=" img-fluid img-markdown" /></li>
</ol>
<p dir="auto">По идее это должно сработать</p>
]]></description><link>https://celua.ru/post/70</link><guid isPermaLink="true">https://celua.ru/post/70</guid><dc:creator><![CDATA[MasterGH]]></dc:creator><pubDate>Sun, 02 Apr 2023 18:34:28 GMT</pubDate></item><item><title><![CDATA[Reply to Сделать большой брейкпоинт на структуру через  dbk_useKernelmodeOpenProcess on Sun, 02 Apr 2023 17:35:15 GMT]]></title><description><![CDATA[<p dir="auto">у меня такой вопрос если можно сделать большой бряк на всю структуры, можно ли найти адрес от патронов в обойме на таймер выстрела(на этом адресе можно сделать скорострельный огонь) Я когда делаю rapid fire от адреса патронов всю структуру ручками просматриваю муторно, иногда этот адрес далеко лежит. И так что мы знаем? Мы знаем что адрес таймера на выстрел во первых лежит в одной структуре с патронами, во вторых адрес в начале меняется в момент выстрела одновременно с уменьшением патронов и в пределах от одной до 100 миллисекунд возвращается в прежнее значение. может lua скрипт специальный можно сделать?</p>
]]></description><link>https://celua.ru/post/66</link><guid isPermaLink="true">https://celua.ru/post/66</guid><dc:creator><![CDATA[Pitronic]]></dc:creator><pubDate>Sun, 02 Apr 2023 17:35:15 GMT</pubDate></item></channel></rss>