Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2012, 22:48   #11
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Message Breakpoints (BMSG) при посимвольным считывании из окон ввода (имени и серийника) (глава 12)

- запускаем приложение (F9) (если был предыдущий запуск, то удаляем все точки останова, BPX - через кнопку на панели инструментов и BPM - через нажатие в любом месте листинга: ПКМ -> Breakpoint -> Remove memory breakpoint; перезапускаем, для этого: (Debug -> Restart) (или Ctrl+F2))
- открываем окно ввода серийника
- имя и серийник не вводим
- на панели инструментов нажимаем кнопку W (далее обновляем (если нет кнопок), для этого: ПКМ в окне W -> Actualize)
- ПКМ по строке "Button" "OK" -> Message breakpoint on ClassProc
- из списка выбираем сообщение WM_KEYUP (под кодом 101h)
- выбираем Break on any window
- значение Pause program -> On message
- значение Log WinProc arguments -> On message
- начинаем вводить имя
- при нажатии на клавишу должна сработать BMSG (но не для всех программ, к примеру CrackMe считывает данные целиком при нажатии OK)


Сохранение сообщений в файл для анализа (глава 12)

- запускаем приложение (F9) (если был предыдущий запуск, то удаляем все точки останова, BPX - через кнопку на панели иструментов и BPM - через нажатие в любом месте листинга: ПКМ -> Breakpoint -> Remove memory breakpoint; перезапускаем, для этого: (Debug -> Restart) (или Ctrl+F2))
- вводим имя и серийник, но не нажимаем ок
- на панели инструментов нажимаем кнопку W
- ПКМ по строке "Button" "OK" -> Message breakpoint on ClassProc
- из списка выбираем сообщение WM_LBUTTONUP (под кодом 202h)
- выбираем Break on any window
- значение Pause program -> On message
- значение Log WinProc arguments -> On message
- подтверждаем изменения: OK
- на панели инструментов нажимаем кнопку B
- ПКМ на строке точки останова в окне Breakpoints -> Edit condition
- очищаем поле Condition
- в поле Expretion пишем: [exp+8]
- выставляем значение: Program Pause = Never
- выставляем значение: Log value of expression = Always
- выставляем значение: Log function arguments = Always
- подтверждаем изменения: OK
- нажимаем OK в окне регистрации
- на панели инструментов нажимаем кнопку L
- в логе можно найти сообщения 201 WM_LBUTTONDOWN и 202 WM_LBUTTONUP. Клавиатурных WM_KEYDOWN и WM_KEYUP - нет


Запись в лог-файл всех сообщений, которые получает программа (глава 12)

- если был предыдущий запуск, то удаляем все точки останова, BPX - через кнопку на панели иструментов и BPM - через нажатие в любом месте листинга: ПКМ -> Breakpoint -> Remove memory breakpoint; перезапускаем, для этого: (Debug -> Restart) (или Ctrl+F2)
- программа на Entry Point
- вводим в CommandBar: BP TranslateMessage -> нажимаем Enter
- вводим в CommandBar: BP DefWindowProcA -> нажимаем Enter
- на панели инструментов нажимаем кнопку B

Для первой и второй точек останова:
- в окне Breakpoint: (ПКМ на первой точке останова -> Follow in disassembler) (или Enter)
- в окне листинга: (ПКМ на точке останова -> Breakpoint - Conditional log) (или Shift+F4)
- очищаем поле Condition
- в поле Expretion пишем: MSG
- выставляем значение: Program Pause = Never
- выставляем значение: Log value of expression = Always
- выставляем значение: Log function arguments = Always
- подтверждаем изменения: OK

- на панели инструментов нажимаем кнопку L
- ПКМ в окне Log -> Log to file
- запускаем приложение (F9)


P.S. Фух... Вроде начальная подготовка инструментов закончена! Можно приступать к исследованиям! Чувствую у меня будет появляться вопросов куча Очень надеюсь на вашу помощь, друзья
8Observer8 вне форума Ответить с цитированием
Старый 23.11.2012, 22:49   #12
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Парни, помогите, пожалуйста, понять такую вещь: нет функции DefWindowProcA! То есть не могу поставить bp на DefWindowProcA




В списке вызовов из текущего модуля её тоже нет:

8Observer8 вне форума Ответить с цитированием
Старый 25.11.2012, 10:17   #13
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

8Observer8
Зато чуть ниже есть NtdllDefWindowProc_A и судя по функциям GetDialogItemTextA и EndDialog это диалог, а в нем может и не быть функции DefWindowProc
Mikl___ вне форума Ответить с цитированием
Старый 25.11.2012, 18:13   #14
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Спасибо, Mikl___!

NtdllDefWindowProc_A это аналог для DefWindowProc? В инете для NtdllDefWindowProc_A никакого описания не смог найти.
8Observer8 вне форума Ответить с цитированием
Старый 25.11.2012, 18:16   #15
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Жёстко заданный серийник. Перебор строк (глава 13)

Описание. Открываем полный список строк используемых в программе и вводим поочереди. Подходит для "Leccion 13 HARDCODED 1.exe"

Инструкция:

- программа на Entry Point
- ПКМ в листинге -> Search for -> All Referenced text strings
- начинаем использовать все строки в качестве серийного номера

Последний раз редактировалось 8Observer8; 25.11.2012 в 18:21.
8Observer8 вне форума Ответить с цитированием
Старый 25.11.2012, 18:20   #16
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Жёстко заданный серийник. Поиск серийного номера через bp на функции считывания введённых данных (глава 13)

Описание. Ставим точку останова на функции считывания введённых данных (GetDlgItemTextA). Подходит для "Leccion 13 HARDCODED 1.exe" и для "Leccion 13 HARDCODED 2.exe"

Инструкция:

- программа на Entry Point
- открываем список API-функции, используемых в текущем модуле, для этого: (ПКМ в листинге -> Search for -> Name (Label) in current module) (или Ctrl+N)
- ставим обычную точку останова (bp) на первой команде внутри функции GetDlgItemTextA (для этого см. третий пункт сообщения: http://programmersforum.ru/showpost....12&postcount=9)
- запускаем программу (F9)
- вводим лже-серийник -> нажимаем OK
- выполняем GetDlgItemTextA до конца, для этого: (Debug -> Execute till return) (или Ctrl+F9)
- F7 или F8 (шаг вперёд)
- видим сравнение содержимого (4-x первых байт серийного номера) по двум адресам (чтобы посмотреть содержимое, нужно -> ПКМ по командам MOV -> Follow in Dump -> Memmory address (или Immediante constant, если адрес жестко задан))
- запоминаем серийный номер -> убираем точки останова (удаляем в окне B) -> перезапускаем программу (Debug -> Restart (или Ctrl+F2)) -> вводим запомненный серийный номер

Последний раз редактировалось 8Observer8; 25.11.2012 в 18:47.
8Observer8 вне форума Ответить с цитированием
Старый 25.11.2012, 18:46   #17
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Жёстко заданный серийник. Поиск серийного номера через bp на функции считывания введённых данных (домашнее задание для главы 13)

Описание. Ставим точки останова на функции считывания введённых данных (GetWindowTextA). Подходит для "mielecrackme1"

Инструкция:

- программа на Entry Point
- открываем список API-функции, используемых в текущем модуле, для этого: (ПКМ в листинге -> Search for -> Name (Label) in current module) (или Ctrl+N)
- ставим обычную точку останова (bp) на первой команде внутри функции GetWindowTextA (для этого см. третий пункт сообщения: http://programmersforum.ru/showpost....12&postcount=9)
- запускаем программу (F9)
- вводим лже-серийник -> нажимаем OK
- выполняем GetWindowTextA до конца, для этого: (Debug -> Execute till return) (или Ctrl+F9)
- F7 или F8 (шаг вперёд)
- видим сравнение содержимого двух строк функцией lstrcmpA
- запоминаем серийный номер -> убираем точки останова (удаляем в окне B) -> перезапускаем программу (Debug -> Restart (или Ctrl+F2)) -> вводим запомненный серийный номер

Последний раз редактировалось 8Observer8; 25.11.2012 в 18:49.
8Observer8 вне форума Ответить с цитированием
Старый 29.11.2013, 10:32   #18
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вчера нашёл этот туториал в превосходном виде! Его так оформили классно! Начну теперь с начала его читать

Ссылка: http://www.twirpx.com/file/820236/
8Observer8 вне форума Ответить с цитированием
Старый 03.12.2013, 18:01   #19
Bafalov
Новичок
Джуниор
 
Регистрация: 02.12.2013
Сообщений: 1
По умолчанию

либо [правая кнопка мыши в листинге (на месте установки) -> Breakpoint -> Toggle] [Или выделить строчку -> нажать F2]
Bafalov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На чём писать обучающий сайт? Алексей Голубов PHP 5 13.06.2012 16:23
TrinityCore C++ Обучающий проект. + DB MySQL L30m4nc3r Свободное общение 2 26.06.2011 16:08
Обработка массивов экспериментальных данных при исследовании технических систем monarx Помощь студентам 0 08.04.2011 01:07
Мультимедийный Обучающий Курс TeachPro Java Для Начинающих mihali4 Общие вопросы по Java, Java SE, Kotlin 3 04.11.2008 05:39