Сейчас на форуме: Lohmaty, tyns777, cppasm (+7 невидимых)

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

Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 10 марта 2018 09:47
· Личное сообщение · #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 ?



Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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




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

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

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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


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

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




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

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

DrVB_5_6

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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

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

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

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

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

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




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

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

DrVB_5_6

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

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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

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




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

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

DrVB_5_6

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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

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

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




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

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

DrVB_5_6

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

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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

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

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


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




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

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

DrVB_5_6

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

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

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

NT internals --> Link <--

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

-----
vx




Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

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

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

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

global_9C211A




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

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

cryptX

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

-----
vx





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

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

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

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

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

Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 10 марта 2018 17:27 · Поправил: DrVB_5_6
· Личное сообщение · #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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.


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

Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 11 марта 2018 10:07 · Поправил: DrVB_5_6
· Личное сообщение · #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
На первых порах, наверное, хватит. Здесь базовые вещи.




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

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

ARCHANGEL

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

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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

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

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

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

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

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


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




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

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

DrVB_5_6

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

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

-----
vx





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

DrVB_5_6

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

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

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

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

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

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

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

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

Ранг: 0.5 (гость)
Активность: 0=0
Статус: Участник

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

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

difexacaw

А вэто ам:





Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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




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

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

forever_

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

-----
vx





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

Создано: 11 марта 2018 22:20
· Личное сообщение · #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) отфильтровано лишнее в коде выше (недоломанная версия)

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




Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

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

GPcH
Зачем покупать лицензию на декомпиль, если с таким же успехом можно купить лицензию на софт и вообще ничего не ломать? И форум тогда в потребляб.рф переименовать. Только покупки, только хардкор


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