Debugger x64dbg отладчик

Rio

Администратор
Сообщения
182
Реакции
235


Актуальные ссылки:

sourceforge.net
http://x64dbg.com
https://github.com/x64dbg/x64dbg
scyllahide

Документациия по отладчику - https://github.com/x64dbg/docs
Новый проект от Mr.eXoDia и др.

Features:

Open-source
Intuitive and familiar, yet new user interface
C-like expression parser
Full-featured debugging of DLL and EXE files (TitanEngine)
IDA-like sidebar with jump arrows
IDA-like instruction token highlighter (highlight registers etc.)
Memory map
Symbol view
Thread view
Content-sensitive register view
Fully customizable color scheme
Dynamically recognize modules and strings
Import reconstructor integrated (Scylla)
Fast disassembler (BeaEngine)
User database (JSON) for comments, labels, bookmarks etc.
Plugin support with growing API
Extendable, debuggable scripting language for automation
Multi-datatype memory dump
Basic debug symbol (PDB) support
Dynamic stack view
Built-in assembler (XEDParse)
View your patches and save them to disk
Built-in hex editor
Find patterns in memory

x64dbg отладчик - Оффтоп
 

DX0

Новичок
Сообщения
432
Реакции
92
P.S. Немного добавлю для ясности: я понимаю, что такое само событие, ну скажем ( WM_LBUTTONUP: 0x0202 ) и его обработчик. Я все к тому, что если отловить само событие, то и его обрабочик уже считай в "кармане". Ну не должен он быть где-то за "100 км". Т.е. мне нужна информация - как поставить BP на событие и отловить его, а сам обработчик - это уже дело техники. Т.е. таким образом все равно сужается/ускоряется место поиска и упрощается работа.
Пролистай вниз эту тему https://cracklab.team/index.php?threads/590/ и увидишь как перехватывать событие. Там внизу увидишь скриншоты как я это делаю.
 

f13nd

Мудрец
Сообщения
143
Реакции
414
Какой-то бред ты написал, если честно. Никакой компилятор неспрячит событие, потому как это WinAPI и программы этим пользуются, потому как это, еще раз повторяю, это WinAPI.
В случае с кнопками например в классе Button WM_LBUTTONDOWN обрабатывает дефолтный виндовый обработчик (агрументы - x и y координаты в client area), нет нужды это сообщение обрабатывать программе и наяривать на координаты куда была нажата (и не отпущена) левая кнопка. Программа скорей будет обрабатывать WM_COMMAND (lparam==0 если кнопка нажата клавишей ентер или lparam==hbutton хендл батона), который отправит этот обработчик. Если имеют место модные библиотеки, регистрирующие какие-нибудь дочерние Button'у батоны, то как бы с компилером очень даже связано то, какое сообщение будет обрабатывать код, написанный программистом.
 

DX0

Новичок
Сообщения
432
Реакции
92
В случае с кнопками например в классе Button WM_LBUTTONDOWN обрабатывает дефолтный виндовый обработчик (агрументы - x и y координаты в client area), нет нужды это сообщение обрабатывать программе и наяривать на координаты куда была нажата (и не отпущена) левая кнопка. Программа скорей будет обрабатывать WM_COMMAND (lparam==0 если кнопка нажата клавишей ентер или lparam==hbutton хендл батона), который отправит этот обработчик. Если имеют место модные библиотеки, регистрирующие какие-нибудь дочерние Button'у батоны, то как бы с компилером очень даже связано то, какое сообщение будет обрабатывать код, написанный программистом.
Я тебя понял. Ты имеешь в виду ID кнопки, тогда используй BN_CLICKED
 

_MBK_

Новичок
Сообщения
451
Реакции
118
Т.е. по-вашему, если мне нужно перехватить что-то типа ( WM_COMMAND: 0x0111 или WM_LBUTTONUP: 0x0202 ), то какой-то компилятор с этим справится, а какой-то нет, что ли? Или какой-нибудь компилятор может так запрятать это событие, что его и не найти? Может это вы какие-то одни события из жизни перепутали с другими? :)
По нашему, если вы хотите перехватить конкретное событие, ставьте условный бряк на обработчик сообщений окну, а потом курите трассу. Бряк условный потому, что вы буквально завалены будете всевозможными событиями, которое окно принимает и их сильно фильтровать придется.
 

f13nd

Мудрец
Сообщения
143
Реакции
414
Я тебя понял. Ты имеешь в виду ID кнопки, тогда используй BN_CLICKED
Дык мне это использовать или подсказать разрабу что использовать, чтобы потом найти обработчик в его программе?
 

DX0

Новичок
Сообщения
432
Реакции
92
Вот как перехватить:
Код:
case WM_COMMAND:
    switch( HIWORD( wParam ) )
    {
        case BN_CLICKED:
            if ((HWND)lParam == hButton)
            {
               // Нажатие на кнопку
            }
            break;
    }
    break;
 

DMA/STY

Новичок
Сообщения
54
Реакции
7
и увидишь как перехватывать событие. Там внизу увидишь скриншоты как я это делаю.
Я вижу только то, что вы там умышленно или неумышленно (больше все-таки склоняюсь, что умышленно) ровно половину информации "заныкали" и получилась - полная хрень. Толку ноль от вашей информации. Но зато вы гордо написали, что любое сообщение можно перехватить - главное знать как. Ну вот и расскажите как? Добавте скриншоты и недостающую информацию или, вообще, все удалите. Без вас добрые люди все "раскопают" и напишут полную информацию, а не будут "темнить".
 

not_srd17

Новичок
Сообщения
89
Реакции
59
Я вижу только то, что вы там умышленно или неумышленно (больше все-таки склоняюсь, что умышленно) ровно половину информации "заныкали" и получилась - полная хрень. Толку ноль от вашей информации. Но зато вы гордо написали, что любое сообщение можно перехватить - главное знать как. Ну вот и расскажите как? Добавте скриншоты и недостающую информацию или, вообще, все удалите. Без вас добрые люди все "раскопают" и напишут полную информацию, а не будут "темнить".
1641210930156.png

В чём именно заключается "умышленное скрывание информации"?
 

_MBK_

Новичок
Сообщения
451
Реакции
118
:mad:А я вижу то, что вы там умышленно или неумышленно (больше все-таки склоняюсь, что умышленно) забалтываете непрофильную тему бессмысленным оффтопом изза которого лично у меня шансов получить конкретный ответ на свой (профильный) вопрос все меньше.
 

DMA/STY

Новичок
Сообщения
54
Реакции
7
@_MBK_, если это мне, то вы явно переработали на праздниках и вам нужен отдых. Уже профильные темы от непрофильных не отличаете. :)
 

_MBK_

Новичок
Сообщения
451
Реакции
118
А, все дошло, это такой тонкий нанотроллинг был. Но мой вопрос так и остается в силе: Как в сраном x64dbg поставить сраному bpl сраный переменный адрес в сраное условие останова? :cry:
 

DX0

Новичок
Сообщения
432
Реакции
92
Еще один попутный вопросик подкину:

На окошке диалога две кнопки (Go) и (Close).
У (Go) : Window Handle: 0x0067089E и GWL_ID 0x65 (101)
У (Close) : Window Handle: 0x00550862 и GWL_ID 0x02 (2)

Можно ли как-то грамотно и оперативно найти код, который назначен на каждую из кнопок. Т.е. код который срабатывает при нажатии. Я так предполагаю, что нужно поставить условный BP и по нему уже как-то сориентироваться где начало, а где окончание.

В той же IDA, это все как-то более-менее интуитивно можно сообразить, а вот в x64Dbg что-то не получается.
Может кто просветит ученика церковно-приходского ПТУ? :)

https://cracklab.team/index.php?attachments/690/
Скриншот 3.jpg там база USER32.DLL + RVA: 0x43370 прибавляешь к базе

Вот пример тебе того, как можно выйти на функцию обработчика и вызов окна при нажатии на кнопку "GO" окна:
 

Прикрепленные файлы:

_MBK_

Новичок
Сообщения
451
Реакции
118
Так и где тут решение?
Скорей всего всё, что приведено в разделах Expressions и Expression Functions, можно использовать.
Еще раз конкретизирую вопрос - как надо оформить второй параметр команды bpl в скрипте, дабы в точке останова по адресу ref.addr(i)+18 условие лога было [rsp]<ref.addr(0) в виде прямого адреса ref.addr(0)
 

ant_man

Зарегистрированный
Сообщения
4
Реакции
5
Так и где тут решение?

Еще раз конкретизирую вопрос - как надо оформить второй параметр команды bpl в скрипте, дабы в точке останова по адресу ref.addr(i)+18 условие лога было [rsp]<ref.addr(0) в виде прямого адреса ref.addr(0)
строка в bpl, похоже, не перевычисляется, поэтому или оставлять как есть, т.е

bpl ref.addr(i)+18, qword(rsp)<ref.addr(0)

или, если референсы в процессе исполнения скрипта меняются, использовать переменную

mov ref_addr_0, ref.addr(0)
bpl ref.addr(i)+18, qword(rsp)<ref_addr_0

можно также перейти в питон (x64dbgpy), и там уже делать любые манипуляции со строками.
 

ant_man

Зарегистрированный
Сообщения
4
Реакции
5
bplogcondition, только, конечно
 

_MBK_

Новичок
Сообщения
451
Реакции
118
mov ref_addr_0, ref.addr(0)
bpl ref.addr(i)+18, qword(rsp)<ref_addr_0
Если б так можно было! :( Задача скрипта - создать по референсу много-много точек останова и заполнить их конкретными условиями. А переменная ref_addr_0 активна только на момент исполнения скрипта. :(
Хорошо, тогда как сделать другой вариант - поставить в условие точки останова ее базовый адрес?
 

ant_man

Зарегистрированный
Сообщения
4
Реакции
5
еще, как вариант, скриптом создать скрипт
log "bplogcondition 0x{p:ref.addr(i)+18}, qword(rsp)<0x{p:ref.addr(0)}"

адрес точки останова, по идее, будет в rip
 

_MBK_

Новичок
Сообщения
451
Реакции
118
еще, как вариант, скриптом создать скрипт
log "bplogcondition 0x{p:ref.addr(i)+18}, qword(rsp)<0x{p:ref.addr(0)}"

адрес точки останова, по идее, будет в rip
Тогда уж проще руками вбить значения :( В общем, я понял что прямого решения нету
А такое реализовать тоже без вариантов? В условии точки останова только прямые адреса безо всяких макро?
поставить в условие точки останова ее базовый адрес?
адрес точки останова, по идее, будет в rip
Я имею в виду начало секции
 
Верх Низ