Сейчас на форуме: tyns777 (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Помогите в понимании. Ассемблерный код. функция. |
Посл.ответ | Сообщение |
|
Создано: 03 августа 2019 00:37 · Личное сообщение · #1 Так как писал я на асме давно, то не помню как всё работает. Да и под windows я такого не писал, чтобы запомнить. У меня есть несколько вопросов относительно одной функции в крэкми. Она не относится ко взлому, но понимание как устроена функция мне многое даст. Уж люблю хорошо вникнуть, чтобы было понятно очень хорошо. Я каждый вопрос пронумерую, чтобы было удобней отвечать на вопрос, поставив нужный номер вопроса. 1. В ida мне показывает начало функции. Code:
Я посчитал, 14 - С = 8, то есть 8 байт. Но что 8 байт, perfomanceCount? Или как? Как то непривычно расчитывается. Под структуру SystemTimeAsFileTime тогда получается выделено c - 4 = 8, тоже 8 байт. Блин такое впечатление, будто я неправильно понимаю. Не может быть структура с двумя переменными по 4 байта. Значит я неправильно считаю. Так ли это? 2. Далее в коде вначале фукнции стоит такой код. Code:
Это как раз выделяется для этих переменных память в стеке. Значит это стековые переменные. А как тогда глобальные выглядят в ida? Ну насчёт стековых это вроде точно, но так ли это? 3. Есть такой код Code:
Почему указывается ds? Как я уже знаю что в программе пишется список импорта. Значит они в данных записываются. Ведь их откуда же программы берут, чтобы показать какие функции экспортированы. Когда я заглянул в эту функцию, то увидел много других функций. Это что, все функции библиотеки экспортируются? Или только нужные? Хотя в отладчике когда я смотрел какую то программу, то там показывались функции, только те, которые использует программа. Значит это такая куча функций в крэкми, которые только запутывают код. Ну нафига делать вызовы ядра ( системные функции ), если хочется защитить от взлома программу. 4. Code:
Я помню что если были входящие параметры для функции, то функция leave или retn, очищает стек. Допустим что стек не очищался, но для стековых переменных ebp был push, который остался в стеке, он куда девается? 5. Ну и последнее. Тот крэкми, который я изучаю, содержит тупо мусор, если это были стековые переменные. Потому что не понятно зачем вызывать функции получения времени, функции получения id процесса и id потока, и в итоге вызвать функцию QueryPerformanceCounter, результат которой и будет использоваться вне функции. Видимо это для прикола так сделано, ибо непонятно зачем узнавать параметры, если они никак не обрабатываются. ![]() |
|
Создано: 03 августа 2019 01:04 · Поправил: plutos · Личное сообщение · #2 xverizex пишет: для стековых переменных ebp был push, который остался в стеке, он куда девается? Enter creates a stack frame: Code:
and leave destroys a stack frame: Code:
Ret: Return from procedure. Ret terminates execution a procedure and transfers the flow of control to the calling program. Ret has an optional word operands: N. This indicates the number of bytes that you want to be deleted on the stack after the return address has been taken out of the stack. xverizex пишет: Это что, все функции библиотеки экспортируются? Или только нужные? из dll, dynamically linked может быть использована любая функция, которую она экспортирует, но понятное дело, используются только те функции, которые нужны. ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 03 августа 2019 01:14 · Личное сообщение · #3 |
|
Создано: 03 августа 2019 05:36 · Личное сообщение · #4 |
|
Создано: 03 августа 2019 07:22 · Поправил: xverizex · Личное сообщение · #5 plutos хорошо. Я же хочу только одну функцию написать, чтобы посмотреть структуру. Но написана будет для линукс. Позже посмотрю как на windows дела обстоят. Добавлено спустя 18 минут Пока что не понел всех локальных переменных. Вот снимок Блин написано что ptr а ptr это указатель, который занимает 8 бит вроде или 8 байт, скорее всего 8 байт, ничего себе какой длинный размер, это из-за того наверное, чтобы можно было получить адрес в размере 8 байт. Добавлено спустя 22 минуты А значит в ассемблере все переменные становяться указателями на память. Понятно. Блин, автор форума не может что за столько времени сделать так, чтобы изображение нормально смотрелось в браузере, а не занимало больше экрана. Добавлено спустя 24 минуты Ещё почему то из сегмента cs:body присваивается 7, хотя сегмент cs как сегмент кода наверное имеется ввиду что в x86_64 один сегмент. Поэтому из cs. Так то почему из сегмента кода видна переменная, которая должна быть в сегменте данных? Наверное это из-за 64 разрядности. И сегмент здесь один. вот так. От модератора: Не юзай тег img на больших картинках ![]() |
|
Создано: 03 августа 2019 12:16 · Личное сообщение · #6 |
|
Создано: 03 августа 2019 15:27 · Личное сообщение · #7 С такими вопросами надо не крякмисы предлагать и защиты от битхаков, а менструальные календари на басике писать. google:LARGE_INTEGER первая же ссылка срывает покровы: "Represents a 64-bit signed integer value.". Глобальные переменные адресуются всеми существующими способами кроме как по базе esp/ebp. Дефолтный сегмент ds ида указывает просто для порядка: нет префикса, переключающего на другой сегмент, но ида считает долгом сегмент таки показать. Пофигу какое значение esp на момент эпилога leave+retn, смотреть псевдокод инструкции leave. Если результат какой-то апи нигде не используется, значит либо компилер, либо программу делали яркие и талантливые личности. ----- 2 оттенка серого ![]() |
|
Создано: 03 августа 2019 15:51 · Личное сообщение · #8 ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 03 августа 2019 15:53 · Поправил: BlackCode · Личное сообщение · #9 |
|
Создано: 03 августа 2019 16:56 · Поправил: Clerk · Личное сообщение · #10 f13nd > календари на басике писать. Выхлоп vb это виртуальная машина, так что это было бы норм крэкми, если бы небыло декомпилера или использованы какие то спец методы, которые его поломают. Ида кстате такое не может, да ? Добавлено спустя 3 минуты xverizex > Так то почему из сегмента кода видна переменная, которая должна быть в сегменте данных? Плоская модель памяти. Базы/значения сегментов одинаковы. ![]() |
|
Создано: 03 августа 2019 21:55 · Поправил: plutos · Личное сообщение · #11 f13nd пишет: С такими вопросами надо не крякмисы предлагать и защиты от битхаков нарочитая бессмысленность вопросов и предложений наводит на мысль о том, что все это довольно тупой троллинг, а мы по доброте душевной ведемся, как всегда. ![]() Да и почерк автора знакомый. xverizex пишет: ничего себе какой длинный размер, это из-за того наверное, чтобы можно было получить адрес в размере 8 байт. а вообще-то ничего, даже забавно. Может чел скоро за учебник по computer science возмется. Издаст и деньги получит. Всякое бывает. ----- Give me a HANDLE and I will move the Earth. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Помогите в понимании. Ассемблерный код. функция. |