eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Gideon Vi (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› API - функция для VB
Посл.ответ Сообщение

Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 23 октября 2016 17:06 New!
Цитата · Личное сообщение · #1

Никак не могу найти описание __vbaNew2.
Может кто подскажет?


Ранг: 307.7 (мудрец)
Статус: Участник

Создано: 23 октября 2016 17:17 · Поправил: 23 октября 2016 18:13 mysterio New!
Цитата · Личное сообщение · #2

Руководство по исследованию программ, написанных на Visual Basic 6.0 .... в гугле сейчас не занято ;)
не понравится на русском пожалуйста - на китайском/английском.

upd: у __vbaNew2 5 параметров.

Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 23 октября 2016 17:58 New!
Цитата · Личное сообщение · #3

mysterio - К сожалению там фактически ничего нет.
Написана только строчка: __vbaNew2 - аналог API - функции Dialogboxparam/a.
По смыслу - да аналоги, а по форме использования - нет: у них разное число параметров!


Ранг: 630.2 (!)
Статус: Участник
Автор VB Decompiler

Создано: 24 октября 2016 21:09 New!
Цитата · Личное сообщение · #4

__vbaNew2 можно условно назвать CreateObject. Создает новый инстанс объекта.
Первый параметр адрес описания объекта, второй - адрес куда размещать созданный объект.


Ранг: 752.8 (! !)
Статус: Участник
Student

Создано: 25 октября 2016 10:40 New!
Цитата · Личное сообщение · #5

GPcH у тебя на сайте раньше вроде где-то дока была по этой теме, потом потерялась из виду
убрал ссылку или переместилось куда?

Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 26 октября 2016 17:25 New!
Цитата · Личное сообщение · #6

mysterio пишет:
upd: у __vbaNew2 5 параметров.

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


Ранг: 630.2 (!)
Статус: Участник
Автор VB Decompiler

Создано: 26 октября 2016 17:48 · Поправил: 26 октября 2016 17:49 GPcH New!
Цитата · Личное сообщение · #7

Isaev пишет:
GPcH у тебя на сайте раньше вроде где-то дока была по этой теме, потом потерялась из виду
убрал ссылку или переместилось куда?


Ничего никуда не удалялось. Только у сайта редизайн был. Все тут: Статьи по программированию и реверсу

К слову в плане VB6 я писал только по декомпиляции форм и декомпиляции P-Code в уме.

| Сообщение посчитали полезным: ksol, Isaev



Ранг: 307.7 (мудрец)
Статус: Участник

Создано: 26 октября 2016 18:01 New!
Цитата · Личное сообщение · #8

ksol
Ответ давал исходя из того что видел в дебагере - использовалось 5 параметров 2 адреса (push) и 3 регистра.

Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 26 октября 2016 18:37 New!
Цитата · Личное сообщение · #9

mysterio
Может вы знаете какой из этих параметров содержит адрес обработчика
диалогового окна?


Ранг: 307.7 (мудрец)
Статус: Участник

Создано: 26 октября 2016 20:50 New!
Цитата · Личное сообщение · #10

С "барсиком" не дружу, но логично предположить, если параметра 2 то первый это "адрес обработчика", а второй кто/откуда его вызвал. Это сугубо догадки - дождись ответа того кто реально знает.


Ранг: 630.2 (!)
Статус: Участник
Автор VB Decompiler

Создано: 27 октября 2016 11:05 New!
Цитата · Личное сообщение · #11

Показ формы в VB6 обычно производится так:

Создается копия объекта 00401364

Code:
  1.   loc_00401BC8: push 00402024h
  2.   loc_00401BCD: push 00401364h
  3.   loc_00401BD2: call [00401050h] ; __vbaNew2
  4. ...


Получаем адрес виртуальной таблицы адресов пропертей и методов

Code:
  1.   loc_00401BF4: mov esi, [00402024h]
  2. ...
  3.   loc_00401BFF: mov edi, [esi]
  4. ...


Вызываем Property/Method формы. В данном случае 2B0 - это Show

Code:
  1.   loc_00401C1F: call [edi+000002B0h]


Весь натив код VB6 - это сплошное COM/OLE. Логика анализа нужна немного другая.

| Сообщение посчитали полезным: DenCoder


Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 27 октября 2016 17:56 New!
Цитата · Личное сообщение · #12

GPcH - Спасибо за обстоятельное разъяснение! Собственно вопрос о __vbaNew2 стал ясен.
Но возникли другие:
Show - это открыть форму, а можно ли как-то задать в коде закрыть уже открытую форму,
или задать в её свойствах значение что-то типа Visible=false, чтобы она не открывалась совсем;
и другой вопрос - на другой форме стоит скрытый таймер, который через 10с её закрывает.
Похоже эти 10с заданы в свойствах формы. Не подскажете как их найти, чтобы заменить на 0.


Ранг: 296.9 (наставник)
Статус: Участник

Создано: 27 октября 2016 18:46 · Поправил: 27 октября 2016 18:50 DenCoder New!
Цитата · Личное сообщение · #13

ksol
Поделюсь своими соображениями

ksol пишет:
Show - это открыть форму, а можно ли как-то задать в коде закрыть уже открытую форм

По идее, когда получена инфа где находится и как устроена таблица, либо реверсом найти, либо как-то отловить SendMessage(hWnd, WM_CLOSE, NULL, NULL) и дальше по кросс-рефам выйти на искомый адрес в этой таблице.

ksol пишет:
или задать в её свойствах значение что-то типа Visible=false

Если метод Show показывает форму, то он должен вызывать api ShowWindow(hWnd, SW_SHOW) // SW_SHOW = 5
Чтобы найти метод Hide должно быть достаточно найти аналогичный код с вызовом ShowWindow(hWnd, SW_HIDE) // SW_HIDE = 0
Получение/Установка что дельфишных, что барсиковых свойств вызывает соответствующие методы get или set, насколько помню, в которых и будут вызовы соответствующих апи-функций.
....

ksol пишет:
Похоже эти 10с заданы в свойствах формы.

Скорее в коде при инициализации формы или после вызова Show инициализируется таймер с периодом в 10с. Это делается функцией SetTimer(), но необязательно, может быть и по-другому реализовано.

| Сообщение посчитали полезным: ksol


Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 28 октября 2016 17:35 New!
Цитата · Личное сообщение · #14

DenCoder - Спасибо, много всякого сказали! - есть что посмотреть!
Скорее всего устанавливать в отладчике ВР прямо на API SendMessage(), ShowWindow()
не возможно будет, если они вызываются из бейсиковских типа get(), set().
Это вы хорошо, предусмотрительно показали значения SW_SHOW и SW_HIDE - если
найду апи, вставлю!


Ранг: 288.0 (наставник)
Статус: Участник

Создано: 28 октября 2016 17:49 New!
Цитата · Личное сообщение · #15

ksol

В гуе фактически можно выделить три типа функционала, это если обобщить фундаментально разные механизмы. Их необходимо понимать, если вы начали дебажить шадов(гуй).

1. Есть непосредственно вызов ядерного сервиса, который выполняет задачу.
2. Есть теневой вызов из ядра при исполнении сервиса для юзер нотифи(apfn-dispatch). Так доставляются любые сообщения и выполняется механизм хуков.
3. Существует gdi batching", пакетная обработка запроса в ядро при выполнении любого сервиса. Так например можно отрисовать текст через сервис, который генерит звук


Ранг: 296.9 (наставник)
Статус: Участник

Создано: 29 октября 2016 12:13 New!
Цитата · Личное сообщение · #16

ksol пишет:
Скорее всего устанавливать в отладчике ВР прямо на API SendMessage(), ShowWindow()
не возможно будет, если они вызываются из бейсиковских типа get(), set().

Почему невозможно? user32.dll никто не отменял! И SendMessage и ShowWindow там. Упомянутые difexacaw сервисы вызываются оттуда для этих апи. Только бряк SendMessage() если только условный ставить, а то их много вызовов...

Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 29 октября 2016 17:59 New!
Цитата · Личное сообщение · #17

Вот не подумал, что и бейсик пользуется user32.dll. BP ShowWindow срабатывает! Больше ничего
с ней пока не проверял, а обращение к SendMessage не находит совсем.


Ранг: 296.9 (наставник)
Статус: Участник

Создано: 29 октября 2016 21:14 New!
Цитата · Личное сообщение · #18

ksol пишет:
а обращение к SendMessage не находит совсем.

Я предположил, что для закрытия формы посылается WM_CLOSE. Вероятно, форма не разрушается, а просто прячется. Так что та же ShowWindow() должна срабатывать.

ksol пишет:
BP ShowWindow срабатывает! Больше ничего
с ней пока не проверял

Дальше по стеку смотрите, кто её вызывает, и выйдете на метод из таблицы формы.

Добавлено спустя 2 минуты
Может быть несколько "прокладок" между ShowWindow() и методом формы.

| Сообщение посчитали полезным: ksol


Ранг: 99.3 (постоянный)
Статус: Участник

Создано: 30 октября 2016 17:45 New!
Цитата · Личное сообщение · #19

DenCoder пишет:
Дальше по стеку смотрите

Это я знаю. Нашел я SendMessage: надо было ловить как BP SendMessageA и тогда всё окей!
При трассировке видна последовательность вызовов этих двух функций: установка таймера
и окон. Нейтрализовать - это только дело времени.
Большое спасибо!
 eXeL@B —› Программирование —› API - функция для VB
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS