Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› бряк глючит
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 18 июня 2008 00:59 · Поправил: Mavlyudov
· Личное сообщение · #1

Есть вопрос.
почему-то, когда я в своей программе делаю вызов messagebox
по нажатию на какою-нибудь клавишу, а потом в олли пытаюсь отловить, то не выходит.

А когда пишу в проге

var i:integer;
....

i:=messagebox(....)
то бряк срабатывает...СТРАННО!!!!

Сделал еще вызов ExitProcess по нажатию клавиши "3", но брякнуть на него не получается...

При этом, в отладчике видно следующее

0041A0A5 . FF35 F0404200 PUSH DWORD PTR DS:[4240F0]
0041A0AB . 68 F8A04100 PUSH 0041A0F8
0041A0B0 . E9 1F0A0000 JMP <JMP.&kernel32.ExitProcess>
.....................
0041A0F8 > C9 LEAVE
......................
004240F0 0000 ADD BYTE PTR DS:[EAX],AL

Да. тут мне подсазали, что в олли версии плагина к командной строке разные.
Брякнул я bpx ExitProcess
и остановился в модуле kernel32 на строчке
7C81CA82 > 8BFF MOV EDI,EDI ; 00429580
Тут я совсем запутался.......

В чем тут проблема?



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 18 июня 2008 01:05
· Личное сообщение · #2

Бряки разные бывают. Где у тебя остановка происходит (когда происходит), на call или уже внутри, на младшей команде API-функции?

-----
Всем привет, я вернулся




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 18 июня 2008 01:09
· Личное сообщение · #3

Mavlyudov
Накатал на дэлфи пример. На "bp MessageBoxA" всё отлично тормозится




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 18 июня 2008 01:17
· Личное сообщение · #4

tihiy_grom
я не на делфи писал, а на фри паскале



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 18 июня 2008 14:03
· Личное сообщение · #5

Mavlyudov пишет:
я не на делфи писал, а на фри паскале

Особенности компилятора, а bp MessageboxA срабатывал потому что ты брякался на саму функцию. В меню Debug после того как брякнулся нажимай execute till return потом ф8 и ты на следующей после call строчке

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 18 июня 2008 14:07
· Личное сообщение · #6

Stack пишет:
Особенности компилятора, а bp MessageboxA срабатывал потому что ты брякался на саму функцию. В меню Debug после того как брякнулся нажимай execute till return потом ф8 и ты на следующей после call строчке

Не понял нифига. Я в курсе что я попаду на следующую строку после call. А цель какая? Попасть на строчку выше неё что ли?




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 19 июня 2008 23:59 · Поправил: Mavlyudov
· Личное сообщение · #7

tihiy_grom
Да просто немного непонятно. Сделал обработку трех кнопок и для всех трех сделал
вызов messagebox.
Одна из них нормально дизассемблится(call MessageboxA), а две другие как jmp messageboxA...

Делал обработку клавиш для того, чтобы найти кусок кода в отладчике и попробовать ввести обработчик для еще одной клавиши.
Ищу мето, куда вставить свой код для обработки еще одной клавиши...
Хочу сделать это без исходника, т.е дать прыг на свой код в свободное место в проге.
Есть идея найти сначала обработчик сообщения WM_COMMAND, а точнее wm_keydown.
Так вот, я отловил и поставил бряк...запустил, нажал клавишу, которую хочу обрабатывать(допустим это кнопка "5").
Встал на таком месте

004185E2 |> \FF75 10 PUSH [ARG.3] ; / Case 100 (WM_KEYDOWN) of switch 0041842C
004185E5 |. E8 8AFDFFFF CALL 00418374

Теперь нужно найти прыг, который осуществляет переход в случае, если обработка полученного сообщения(нажатой клавиши) не предусмотрена.
Т.е., если клавиша не удовлетворяет условиям - управление предается виндовскому обработчику.
А значит, как я понял, нужно искать переход на кусок кода, где происходит обработка TranslateMessage.
Далее заменить этот переход на прыг в свой код и сделать возврат после кода.
Но что-то я не могу найти, куда воткнуть прыг на свой код....
Нужны советы. Заранее благодарен.



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 20 июня 2008 00:07
· Личное сообщение · #8

Mavlyudov
кинь сюда свою прогу, так можно бесконечно гадать




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 20 июня 2008 01:12 · Поправил: Mavlyudov
· Личное сообщение · #9

tihiy_grom
Прикрепил

8ded_19.06.2008_CRACKLAB.rU.tgz - msgbox.rar




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 25 июня 2008 23:47 · Поправил: Mavlyudov
· Личное сообщение · #10

Вот, что удалось сделать:

было:

00418A25 CMP AL,31 ; Switch (cases 31..34)
00418A27 JB 00418AA8
00418A2D SUB AL,31
00418A2F JE SHORT 00418A8D
00418A31 DEC AL
00418A33 JE SHORT 00418A6D
00418A35 DEC AL
00418A37 JE SHORT 00418A5D
00418A39 DEC AL
00418A3B JNZ SHORT 00418AA8
00418A3D PUSH 1 ; Case 34 ('4') of switch 00418A25
00418A3F LEA EAX,[DWORD DS:4218BA]
00418A45 PUSH EAX
00418A46 LEA EAX,[DWORD DS:4218BA]
00418A4C PUSH EAX
00418A4D PUSH [DWORD DS:4220F0]
00418A53 PUSH 00418AA8
...............
00418AA8 LEAVE ; Default case of switch 00418A25
00418AA9 . C2 0400 RETN 4

========================================
С внесенными изменениями:

00418A25 CMP AL,31 ; Switch (cases 0..69)
00418A27 JB 00418AA8
00418A2D SUB AL,31
00418A2F JE SHORT 00418A8D
00418A31 DEC AL
00418A33 JE SHORT 00418A6D
00418A35 DEC AL
00418A37 JE SHORT 00418A5D
00418A39 DEC AL
00418A3B JNZ sss_000_.0041F0A0

00418A41 MOV EDX,50004218 ; Case 34 of switch 00418A25
00418A46 LEA EAX,[DWORD DS:4218BA]
00418A4C PUSH EAX
00418A4D PUSH [DWORD DS:4220F0]
00418A53 PUSH 00418AA8

..........
00418AA8 LEAVE

---свой код----
0041F0A0 PUSHAD
0041F0A1 CMP AL,35 ; Код клавиши '5' это 35h
0041F0A3 JE SHORT 0041F0AB
0041F0A5 JMP 00418A45
0041F0AA NOP
0041F0AB PUSH EAX
0041F0AC CALL kernel32.ExitProcess
0041F0B1 JMP 00418AA8
0041F0B6 POPAD

//Жирным выделен кусок кода, изменения в котором произошли вследствие того,
//что short jump был изменен на long.

Но почему-то, клавиша не отрабатываетя в программе и по ее нажатию ничего не происходит.
case стал теперь от 0 до 9 и мне непонятно почему.
Если теперь щелкнуть в меню (правой кн. мыши) Go to с адреса
00418A25 CMP AL,31 ; Switch (cases 0..69)
на любой из Case i (i=0..69), то попадаю на строчку

00418AA8 LEAVE ; Cases 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C ,1D,1E,1F,20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F,30 of switch 00418A25



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 26 июня 2008 02:09
· Личное сообщение · #11

Mavlyudov
По адресу 00418374 происходит обработка события WM_KEYDOWN (по идее в ней должен формироваться адрес на процедуру обработки нажатой клавиши - адрес 004189B4, в которой ты менял switch), но мне так и не удалось в ней разобраться.


 eXeL@B —› Программирование —› бряк глючит
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати