Сейчас на форуме: jinoweb, bartolomeo (+5 невидимых)

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

Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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




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

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

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

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

-----
Don_t hate the cracker - hate the code.




Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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




Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

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

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

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

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

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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

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




Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

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

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


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

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

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!


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


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

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

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

-----
Don_t hate the cracker - hate the code.




Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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




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

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

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

-----
Don_t hate the cracker - hate the code.





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 27 октября 2016 11:05
· Личное сообщение · #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

Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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




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

Создано: 27 октября 2016 18:46 · Поправил: DenCoder
· Личное сообщение · #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(), но необязательно, может быть и по-другому реализовано.

-----
IZ.RU


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

Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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




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

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

ksol

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

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

-----
vx





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

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

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

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

-----
IZ.RU




Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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




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

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

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

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

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

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

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

-----
IZ.RU


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

Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

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

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

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


 eXeL@B —› Программирование —› API - функция для VB
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати