eXeL@B —› Вопросы новичков —› vb6 - Как найти где инициализируется (глобальная) переменная/константа ? |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 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 ? |
|
Создано: 10 марта 2018 12:05 · Личное сообщение · #2 |
|
Создано: 10 марта 2018 13:11 · Личное сообщение · #3 |
|
Создано: 10 марта 2018 13:21 · Поправил: DrVB_5_6 · Личное сообщение · #4 difexacaw пишет: Может это константа, которая при сборке задаётся, раз ссылок на запись нет. Блин, надо же хоть чуть-чуть в тему въезжать: написано же прога на vb6 . Для особо одарённых: там используется переменная!!! Из примера же видно! Если "конкретный" декомпилятор не даёт ссылок, то это не означает, что их нет в природе! |
|
Создано: 10 марта 2018 13:26 · Личное сообщение · #5 |
|
Создано: 10 марта 2018 13:39 · Поправил: DrVB_5_6 · Личное сообщение · #6 Да, есть некоторые проблемы у данного декомпилятора. Что там конкретно в этом случае происходит, не знаю, смотреть надо! difexacaw пишет: декомпиль кривой, я например им как то не доверяю Вообще-то декомпилятор - это программа по сложности более крутая (в некоторых моментах), чем сам компилятор. Очень грубо говоря, задача декомпиляции эквивалентна (практически обратна) задаче глобальной оптимизации при трансляции исходного кода. (сразу говорю: обсуждать или обсасывать данное утверждение ни с кем не собираюсь!) А то, что выхлоп декомпилятора не идеален и возможны глюки (не в полне корректные алгоритмы) или даже просто баги - так от этого ни одна программа не застрахована! Я, по крайней мере, таких не встречал, если это не "Hello, world!" |
|
Создано: 10 марта 2018 13:44 · Поправил: difexacaw · Личное сообщение · #7 DrVB_5_6 Я знаю про сложность, спасибо.) Странным оказалось присвоение смысла переменной константе, без отображения ссылок на запись. Не имеет значения яп. Чтобы присвоить константе значение переменной нужна хотя бы одна W-fetch(одна выборка данных на запись). Это всё получается пустое гадание, нужна подробная инфа или семплы. ----- vx |
|
Создано: 10 марта 2018 13:48 · Личное сообщение · #8 |
|
Создано: 10 марта 2018 13:56 · Личное сообщение · #9 DrVB_5_6 Общие принципы везде одинаковы. Если к области памяти происходят только выборки на чтение, то это константа или лишь вероятно что переменная. Что бы константа стала переменной нужна запись в неё. Если это обнаружил декомпилер, то варианта возможно лишь два: либо он глючит, раз не отображает ссылки на запись/не использует константы вообще, либо тс не знает интерфейсы инструмента. Другого варианта нет. Да и в целом можно просто отладчиком открыть и посмотреть, происходит ли запись. А не использовать только декомпилер, не правильный подход. ----- vx |
|
Создано: 10 марта 2018 14:15 · Поправил: DrVB_5_6 · Личное сообщение · #10 difexacaw пишет: Что бы константа стала переменной нужна запись в неё. Прежде чем вести обсуждение, следовало бы договориться о терминологии. То, что у ТС сумбур в голове - это понятно из названия темы. Здесь может идти речь о переменной, имеющей постоянное значение на всё время работы программы!!! Если в исходном коде ЯП встретится константа, то и в самом коде это будет константа, а не ссылка на переменную с этой константой. В VB кучи нет и это не Python, где на одну константу (не переменную) может быть уйма ссылок из разных мест! Блин, не думал, что придётся разжевывать это Вам difexacaw! |
|
Создано: 10 марта 2018 14:39 · Личное сообщение · #11 DrVB_5_6 > Блин, не думал, что придётся разжевывать это Вам difexacaw! Это вы не понимаете общие принципы, как работает выборка памяти. Никакого значения не имеет куча или есчо какой менеджер памяти. Есть только механизм трансляции и выборка данных. Если вы мыслите в локальных понятиях, например того же вба, то это не правильно. И понятие ссылки не корректно, что вы понимаете под ссылкой" ? Я давно от данного термина отказался. Это условно загруженный по некоторому адресу иной адрес. Такое определение путает, поэтому понятие ссылки юзать не следует. Адрес ссылкой не является. И вообще понятие ссылки пришло из си, там это чётко определяется. ----- vx |
|
Создано: 10 марта 2018 14:47 · Поправил: DrVB_5_6 · Личное сообщение · #12 difexacaw пишет: Это вы не понимаете общие принципы, как работает выборка памяти. Ну это уже совсем круто. Я вообще-то давным давно (не один десяток лет) занимаюсь дизассемблированием и декомпиляцией! Когда слышу подобные высказывания в свой адрес, то подобному советчику всегда советую не терять времени и пойти поучить собственного папу детей делать... а то результат получился очень сомнительным... Bye-Bye! difexacaw пишет: А есчо и делает приоритетом какой то возраст или детей. Рекомендую больше не пользоваться травкой и всякой фигнёй... Ты бы, блин, придурок, хотя бы по слогам прочитал выше, что написано, авось бы понял... А может это весеннее обострение, тогда это неизлечимо... А К&R я изучал первое издание на русском, в то время, когда оно вышло... И до сих пор по этим вопросам спецам, которые даже в одну фразу врубиться не могут, фору дам, не открывая книги.!!! |
|
Создано: 10 марта 2018 14:53 · Личное сообщение · #13 DrVB_5_6 Вот своих детей и учите, фундаментальную матчасть заодно курните. А то как то нелепо выглядит, когда человек своё бредовое мнение пишет. А есчо и делает приоритетом какой то возраст или детей. По факту вы тс ничем не помогли, лишь вводите в заблуждение. Добавлено спустя 22 минуты DrVB_5_6 IA фундаментальные архитектурные доки NT internals К&R сами в гугле найдите. Так же и базовые доки по алгоритмизации. ----- vx |
|
Создано: 10 марта 2018 15:40 · Личное сообщение · #14 DrVB_5_6 пишет: То, что у ТС сумбур в голове - это понятно из названия темы. Откуда у тебя уверенность что это именно переменная а не константа ? Я же говорю -> в декомпиляторе нигде ни видно где оно инициализируется, есть еще и глобальное переменная с тем же именем только префикс другой: global_9C211A |
|
Создано: 10 марта 2018 15:55 · Личное сообщение · #15 |
|
Создано: 10 марта 2018 16:34 · Личное сообщение · #16 |
|
Создано: 10 марта 2018 17:27 · Поправил: BlackCode · Личное сообщение · #17 difexacaw пишет: Почему вы не используете отладчик ? Чтобы использовать отладчик, надо уметь им пользоваться)) | Сообщение посчитали полезным: DimitarSerg |
|
Создано: 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 |
|
Создано: 11 марта 2018 02:09 · Личное сообщение · #19 DrVB_5_6 Слушайте, раз тут разгорелся такой спор выше, не сочтите за труд, порекомендуйте что-то почитать на тему декомпиляции. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: plutos |
|
Создано: 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 На первых порах, наверное, хватит. Здесь базовые вещи. |
|
Создано: 11 марта 2018 10:13 · Личное сообщение · #21 |
|
Создано: 11 марта 2018 10:54 · Поправил: DrVB_5_6 · Личное сообщение · #22 difexacaw пишет: клином мир сойдётся на вба Ну опять дурачок в воду пукнул!!! И так во всех его постах в данной ветке. Ну никак в тему попасть не может. То VB6 и VBA в одну кучу свалит. То въехать, что оператор If var_9C211A Then означает не может. Хотя этот синтаксис для большинства языков справедлив. Найдет в посте знакомые слова и давай пургу гнать чаще всего не в тему! Впрочем, то, что на форуме есть штатный "дурачок", иногда даже забавляет. Но уж больно часто он не в себе и даже во фразу из 5-7 слов (не въезжает) особенно во время сезонного обострения, как сейчас. difexacaw пишет: Это область памяти, только потом это языковая конструкция. Откуда вы взяли вообще идею, что свойство области памяти зависит от его содержимого, те что булевая переменная именно переменная, а не константа ? Я вообще-то ничего подобного не утверждал, ни о чем подобном не писал. Не надо приписывать собственные гальюники другим. Впрочем, я уже писал ранее о проблемах восприятия содержания. Это - яркий пример. Кому надо, сам сделает выводы, мне больше комментировать нечего! |
|
Создано: 11 марта 2018 11:12 · Личное сообщение · #23 DrVB_5_6 Это область памяти, только потом это языковая конструкция. Откуда вы взяли вообще идею, что свойство области памяти зависит от его содержимого, те что булевая переменная именно переменная, а не константа ? И зачем же оскорблять, я этого не делал. А vbX разницы нет, это всё басика скрипт. Впрочем не важно. Мне интересен ответ тс, а не ваш, он почему то не отвечает. ----- vx |
|
Создано: 11 марта 2018 12:25 · Личное сообщение · #24 |
|
Создано: 11 марта 2018 12:51 · Поправил: DrVB_5_6 · Личное сообщение · #25 ARCHANGEL пишет: Классная ссылка, наверное, но там закрыта регистрация, а валидного логина/пароля у меня нет Извините, это тег на ехелабе странно так сработал http://program-transformation.org/Transform/DeCompilation выше подправил тоже. | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 11 марта 2018 13:57 · Личное сообщение · #26 |
|
Создано: 11 марта 2018 15:49 · Личное сообщение · #27 difexacaw пишет: Откуда вы взяли вообще идею, что свойство области памяти зависит от его содержимого, те что булевая переменная именно переменная, а не константа ? Из анализа кодогенератора компилятора vb, в нем нет пары тьюринг полных языков, как в с++ и код получается вполне предсказуемый. ТС прежде чем создавать топики не мешало бы для начала поставить БП на переменную (чтение-запись), даже IDA часто лажает в поиске ссылок на переменные и константы, приходится вручную добавлять ссылки. |
|
Создано: 11 марта 2018 18:01 · Личное сообщение · #28 |
|
Создано: 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) отфильтровано лишнее в коде выше (недоломанная версия) ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 12 марта 2018 00:47 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Вопросы новичков —› vb6 - Как найти где инициализируется (глобальная) переменная/константа ? |
Эта тема закрыта. Ответы больше не принимаются. |