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

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


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

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

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

 eXeL@B —› Вопросы новичков —› vb6 - Как найти где инициализируется (глобальная) переменная/константа ?
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 42.9 (посетитель)
Статус: Участник

Создано: 10 марта 2018 09:47 New!
Цитата · Личное сообщение · #1

Другая проблема)

Есть прога на vb6, не напичкана ничем. Декомпилировал, теперь в Sub Main() нашел переменную (флаг) которая отвечает за версия (демо или полная). В остальных формах проверяется этот флаг, но вот где инициализируется не видно, видно только проверки, типа:

....
loc_00658A6A: If var_9C211A Then
loc_00658AE1: var_eax = %y 'Ignore this '__vbaChkstk
loc_00658B10: var_eax = %y 'Ignore this '__vbaChkstk
loc_00658B49: var_eax = frmDemo.Show 1, var_3D8
loc_00658B51: var_58C = frmDemo.Show 1, var_3D8
loc_00658B90: End If
....

Вопрос - как можно найти место инициализаций var_9C211A ?

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 12:05 New!
Цитата · Личное сообщение · #2

Коль это найтив и знаешь адрес, так встань в любом отладчике и смотри, откуда прилетит.
Вот и все дела.
IDA может дать все ссылки использования переменной, но надо корректно дизассемблировать, впрочем, точнее: хотя бы частично декомпилировать!


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

Создано: 10 марта 2018 13:11 New!
Цитата · Личное сообщение · #3

Может это константа, которая при сборке задаётся, раз ссылок на запись нет.

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 13:21 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #4

difexacaw пишет:
Может это константа, которая при сборке задаётся, раз ссылок на запись нет.


Блин, надо же хоть чуть-чуть в тему въезжать: написано же прога на vb6 .

Для особо одарённых: там используется переменная!!!
Из примера же видно!
Если "конкретный" декомпилятор не даёт ссылок, то это не означает, что их нет в природе!


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

Создано: 10 марта 2018 13:26 New!
Цитата · Личное сообщение · #5

DrVB_5_6

Тогда получается что декомпиль нашёл ссылку на запись, раз придал значение переменной. В таком случае почему это не видит тс.. странно, может декомпиль кривой, я например им как то не доверяю

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 13:39 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #6

Да, есть некоторые проблемы у данного декомпилятора.
Что там конкретно в этом случае происходит, не знаю, смотреть надо!

difexacaw пишет: декомпиль кривой, я например им как то не доверяю

Вообще-то декомпилятор - это программа по сложности более крутая (в некоторых моментах), чем сам компилятор.

Очень грубо говоря, задача декомпиляции эквивалентна (практически обратна) задаче глобальной оптимизации при трансляции исходного кода.

(сразу говорю: обсуждать или обсасывать данное утверждение ни с кем не собираюсь!)

А то, что выхлоп декомпилятора не идеален и возможны глюки (не в полне корректные алгоритмы) или даже просто баги - так от этого ни одна программа не застрахована!
Я, по крайней мере, таких не встречал, если это не "Hello, world!"


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

Создано: 10 марта 2018 13:44 · Поправил: difexacaw New!
Цитата · Личное сообщение · #7

DrVB_5_6

Я знаю про сложность, спасибо.)

Странным оказалось присвоение смысла переменной константе, без отображения ссылок на запись. Не имеет значения яп. Чтобы присвоить константе значение переменной нужна хотя бы одна W-fetch(одна выборка данных на запись). Это всё получается пустое гадание, нужна подробная инфа или семплы.

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 13:48 New!
Цитата · Личное сообщение · #8

difexacaw пишет:
Не имеет значения яп.

Вот тут не согласен, реализации возможны разные. Можно значение засунуть и в линковщике!
А во всех местах только читать!
В VB так не делается!


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

Создано: 10 марта 2018 13:56 New!
Цитата · Личное сообщение · #9

DrVB_5_6

Общие принципы везде одинаковы. Если к области памяти происходят только выборки на чтение, то это константа или лишь вероятно что переменная. Что бы константа стала переменной нужна запись в неё. Если это обнаружил декомпилер, то варианта возможно лишь два: либо он глючит, раз не отображает ссылки на запись/не использует константы вообще, либо тс не знает интерфейсы инструмента. Другого варианта нет. Да и в целом можно просто отладчиком открыть и посмотреть, происходит ли запись. А не использовать только декомпилер, не правильный подход.

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 14:15 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #10

difexacaw пишет:
Что бы константа стала переменной нужна запись в неё.

Прежде чем вести обсуждение, следовало бы договориться о терминологии. То, что у ТС сумбур в голове - это понятно из названия темы.
Здесь может идти речь о переменной, имеющей постоянное значение на всё время работы программы!!!

Если в исходном коде ЯП встретится константа, то и в самом коде это будет константа, а не ссылка на переменную с этой константой.
В VB кучи нет и это не Python, где на одну константу (не переменную) может быть уйма ссылок из разных мест!
Блин, не думал, что придётся разжевывать это Вам difexacaw!


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

Создано: 10 марта 2018 14:39 New!
Цитата · Личное сообщение · #11

DrVB_5_6

> Блин, не думал, что придётся разжевывать это Вам difexacaw!

Это вы не понимаете общие принципы, как работает выборка памяти. Никакого значения не имеет куча или есчо какой менеджер памяти. Есть только механизм трансляции и выборка данных. Если вы мыслите в локальных понятиях, например того же вба, то это не правильно. И понятие ссылки не корректно, что вы понимаете под ссылкой" ?
Я давно от данного термина отказался. Это условно загруженный по некоторому адресу иной адрес. Такое определение путает, поэтому понятие ссылки юзать не следует. Адрес ссылкой не является. И вообще понятие ссылки пришло из си, там это чётко определяется.

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 14:47 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #12

difexacaw пишет:
Это вы не понимаете общие принципы, как работает выборка памяти.

Ну это уже совсем круто. Я вообще-то давным давно (не один десяток лет) занимаюсь дизассемблированием и декомпиляцией!
Когда слышу подобные высказывания в свой адрес, то подобному советчику всегда советую не терять времени и пойти поучить собственного папу детей делать... а то результат получился очень сомнительным...
Bye-Bye!

difexacaw пишет:
А есчо и делает приоритетом какой то возраст или детей.


Рекомендую больше не пользоваться травкой и всякой фигнёй...
Ты бы, блин, придурок, хотя бы по слогам прочитал выше, что написано, авось бы понял...
А может это весеннее обострение, тогда это неизлечимо...
А К&R я изучал первое издание на русском, в то время, когда оно вышло... И до сих пор по этим вопросам спецам, которые даже в одну фразу врубиться не могут, фору дам, не открывая книги.!!!


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

Создано: 10 марта 2018 14:53 New!
Цитата · Личное сообщение · #13

DrVB_5_6

Вот своих детей и учите, фундаментальную матчасть заодно курните. А то как то нелепо выглядит, когда человек своё бредовое мнение пишет. А есчо и делает приоритетом какой то возраст или детей. По факту вы тс ничем не помогли, лишь вводите в заблуждение.

Добавлено спустя 22 минуты
DrVB_5_6

IA фундаментальные архитектурные доки --> Link <--

NT internals --> Link <--

К&R сами в гугле найдите. Так же и базовые доки по алгоритмизации.

Ранг: 42.9 (посетитель)
Статус: Участник

Создано: 10 марта 2018 15:40 New!
Цитата · Личное сообщение · #14

DrVB_5_6 пишет:
То, что у ТС сумбур в голове - это понятно из названия темы.

Откуда у тебя уверенность что это именно переменная а не константа ?
Я же говорю -> в декомпиляторе нигде ни видно где оно инициализируется, есть еще и глобальное переменная с тем же именем только префикс другой:

global_9C211A


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

Создано: 10 марта 2018 15:55 New!
Цитата · Личное сообщение · #15

cryptX

Почему вы не используете отладчик ?


Ранг: 512.2 (!)
Статус: Участник
оптимист

Создано: 10 марта 2018 16:34 New!
Цитата · Личное сообщение · #16

Может это чисто демка?))

Ранг: 32.2 (посетитель)
Статус: Участник

Создано: 10 марта 2018 17:27 · Поправил: BlackCode New!
Цитата · Личное сообщение · #17

difexacaw пишет:
Почему вы не используете отладчик ?

Чтобы использовать отладчик, надо уметь им пользоваться))

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


Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 10 марта 2018 17:27 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #18

cryptX пишет:
Откуда у тебя уверенность что это именно переменная а не константа ?
Я же говорю -> в декомпиляторе нигде ни видно где оно инициализируется, есть еще и глобальное переменная с тем же именем только префикс другой:
global_9C211A

Судя по названию, это в декомпиляторе переменная уровня модуля, не формы или класса.
Блин, ну сколько можно объяснять.
Если б в коде использовалась явная константа, то компилятор бы и сформировал сравнение с константой, как он и делает, проверяя булевскую переменную на true/false значение.

loc_00658A6A: If var_9C211A Then
означает
loc_00658A6A: If var_9C211A = True Then !!!!!

Ну и где здесь переменная и где константа??? Кому и что ещё надо раэжевывать?

То, что эта переменная может иметь только единственное значение на всё время работы программы,
абсолютно ничего не меняет.
То, что декомпилятор может не показать, что где-то производится присваивание, абсолютно ничего не означает:
1). Возможно, что надо просто уметь искать!
2). Вполне допускаю, что VBDecompiler вообще не показывает это место или показывает некорректно. Он никогда не делал и не стремился к Full Decompilation. Без ложной скромности могу сказать, что это делал только я на нескольких проектах своими средствами и только на р-коде.

Понял, перечитал.
Возможно, что GPcH до сих пор не разобрался с уровнями переменных, хотя пинал его лет 5-7 назад. (С оговоркой, что Вы используете последнюю версию декомпилятора, а то окажется, что он это уже сделал в последних - я уж парочку версий не загружал, некогда да и тема у меня сейчас полностью поменялась).

Если цифры (адрес) совпадают - то это одна и та же переменная уровня модуля, какой бы там префикс бы ни был. (var_9C211A это одно и то же, что global_9C211A).

ClockMan пишет:
Может это чисто демка?))

И это вполне возможно. Из приведённого ТС огрызка абсолютно ничего не следует!

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



Ранг: 646.0 (!)
Статус: Участник
ALIEN Hack Team

Создано: 11 марта 2018 02:09 New!
Цитата · Личное сообщение · #19

DrVB_5_6
Слушайте, раз тут разгорелся такой спор выше, не сочтите за труд, порекомендуйте что-то почитать на тему декомпиляции.

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


Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 11 марта 2018 10:07 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #20

ARCHANGEL пишет:
что-то почитать на тему декомпиляции.

1. Те же книги, которые рекомендуют по компиляции.
2. http://program-transformation.org/Transform/DeCompilation

Здесь информации выше крыши.

Самые ценные две PhD диссертации:

1.C. Cifuentes. Reverse Compilation Techniques. PhD Dissertation. Queensland University of Technology, Department of Computing Science, 1994. (можно найти и скачать).
2.M. Van Emmerik. Static Single Assignment for Decompilation. PhD thesis, University of Queensland, 2007. http://vanemmerikfamily.com/mike/master.pdf
На первых порах, наверное, хватит. Здесь базовые вещи.


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

Создано: 11 марта 2018 10:13 New!
Цитата · Личное сообщение · #21

ARCHANGEL

Учебник по логике возьмите докучи, ну что бы всё адекватно понимать, а то станете как DrVB_5_6, клином мир сойдётся на вба

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 11 марта 2018 10:54 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #22

difexacaw пишет:
клином мир сойдётся на вба

Ну опять дурачок в воду пукнул!!!
И так во всех его постах в данной ветке. Ну никак в тему попасть не может.
То VB6 и VBA в одну кучу свалит.
То въехать, что оператор If var_9C211A Then означает не может. Хотя этот синтаксис для большинства языков справедлив.

Найдет в посте знакомые слова и давай пургу гнать чаще всего не в тему!

Впрочем, то, что на форуме есть штатный "дурачок", иногда даже забавляет.

Но уж больно часто он не в себе и даже во фразу из 5-7 слов (не въезжает) особенно во время сезонного обострения, как сейчас.

difexacaw пишет:
Это область памяти, только потом это языковая конструкция. Откуда вы взяли вообще идею, что свойство области памяти зависит от его содержимого, те что булевая переменная именно переменная, а не константа ?


Я вообще-то ничего подобного не утверждал, ни о чем подобном не писал. Не надо приписывать собственные гальюники другим.
Впрочем, я уже писал ранее о проблемах восприятия содержания. Это - яркий пример.
Кому надо, сам сделает выводы, мне больше комментировать нечего!


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

Создано: 11 марта 2018 11:12 New!
Цитата · Личное сообщение · #23

DrVB_5_6

Это область памяти, только потом это языковая конструкция. Откуда вы взяли вообще идею, что свойство области памяти зависит от его содержимого, те что булевая переменная именно переменная, а не константа ?

И зачем же оскорблять, я этого не делал. А vbX разницы нет, это всё басика скрипт. Впрочем не важно. Мне интересен ответ тс, а не ваш, он почему то не отвечает.


Ранг: 646.0 (!)
Статус: Участник
ALIEN Hack Team

Создано: 11 марта 2018 12:25 New!
Цитата · Личное сообщение · #24

DrVB_5_6

Классная ссылка, наверное, но там закрыта регистрация, а валидного логина/пароля у меня нет

Ранг: 37.6 (посетитель)
Статус: Участник

Создано: 11 марта 2018 12:51 · Поправил: DrVB_5_6 New!
Цитата · Личное сообщение · #25

ARCHANGEL пишет:
Классная ссылка, наверное, но там закрыта регистрация, а валидного логина/пароля у меня нет

Извините, это тег на ехелабе странно так сработал

http://program-transformation.org/Transform/DeCompilation

выше подправил тоже.

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


Ранг: 1.4 (гость)
Статус: Участник

Создано: 11 марта 2018 13:57 New!
Цитата · Личное сообщение · #26

ТС сорян не удержалси

difexacaw

А вэто ам:


Ранг: 0.0 (гость)
Статус: Участник

Создано: 11 марта 2018 15:49 New!
Цитата · Личное сообщение · #27

difexacaw пишет: Откуда вы взяли вообще идею, что свойство области памяти зависит от его содержимого, те что булевая переменная именно переменная, а не константа ?

Из анализа кодогенератора компилятора vb, в нем нет пары тьюринг полных языков, как в с++ и код получается вполне предсказуемый.
ТС прежде чем создавать топики не мешало бы для начала поставить БП на переменную (чтение-запись), даже IDA часто лажает в поиске ссылок на переменные и константы, приходится вручную добавлять ссылки.


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

Создано: 11 марта 2018 18:01 New!
Цитата · Личное сообщение · #28

forever_

Вы зарегались что бы это сообщить. Где вы тут нашли тему про бога, вам это и пропишут


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

Создано: 11 марта 2018 22:20 New!
Цитата · Личное сообщение · #29

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

По существу к сожалению добавить могу не так много. Надо видеть весь файл. И вариантов тут несколько:

1) если это реально var_ а не global_ - и после var идет адрес - большой процент вероятности что это нераспознанный адрес GUID'а или UUID'а или уже созданного по UUID'у объекта. И строка
loc_00658A6A: If var_9C211A Then
может означать:
loc_00658A6A: If [создан объект, на который указывает адрес 9C211A] Then
а перед этим легко может быть CreateObject или CheckObject, который скрыт Procedure analyze and optimizer'ом, так как VB6 их генерирует пачками и в 90% случаев они нужны только для работы машинного кода, а не для исходника. Но есть исключения (создание объектов по GUID'у вручную пользователем, что встречается в чистом (не malware) коде крайне редко.

2) это global_XXXXXXXX (недоломанная версия)

3) отфильтровано лишнее в коде выше (недоломанная версия)

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

Создано: 12 марта 2018 00:47 New!
Цитата · Личное сообщение · #30

GPcH
Зачем покупать лицензию на декомпиль, если с таким же успехом можно купить лицензию на софт и вообще ничего не ломать? И форум тогда в потребляб.рф переименовать. Только покупки, только хардкор
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› vb6 - Как найти где инициализируется (глобальная) переменная/константа ?
Эта тема закрыта. Ответы больше не принимаются.

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

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