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

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


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

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

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

 eXeL@B —› Вопросы новичков —› Помогите в понимании. Ассемблерный код. функция.
Посл.ответ Сообщение

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

Создано: 3 августа 2019 00:37 New!
Цитата · Личное сообщение · #1

Так как писал я на асме давно, то не помню как всё работает. Да и под windows я такого не писал, чтобы запомнить. У меня есть несколько вопросов относительно одной функции в крэкми. Она не относится ко взлому, но понимание как устроена функция мне многое даст. Уж люблю хорошо вникнуть, чтобы было понятно очень хорошо. Я каждый вопрос пронумерую, чтобы было удобней отвечать на вопрос, поставив нужный номер вопроса.
1. В ida мне показывает начало функции.
Code:
  1. sub_402358 proc near
  2. PerformanceCount= LARGE_INTEGER ptr -14h
  3. SystemTimeAsFileTime= _FILETIME ptr -0Ch
  4. var_4= dword ptr -4

Я посчитал, 14 - С = 8, то есть 8 байт. Но что 8 байт, perfomanceCount? Или как? Как то непривычно расчитывается. Под структуру SystemTimeAsFileTime тогда получается выделено c - 4 = 8, тоже 8 байт. Блин такое впечатление, будто я неправильно понимаю. Не может быть структура с двумя переменными по 4 байта. Значит я неправильно считаю. Так ли это?
2. Далее в коде вначале фукнции стоит такой код.
Code:
  1. push    ebp
  2. mov     ebp, esp
  3. sub     esp, 14h

Это как раз выделяется для этих переменных память в стеке. Значит это стековые переменные. А как тогда глобальные выглядят в ida? Ну насчёт стековых это вроде точно, но так ли это?
3. Есть такой код
Code:
  1. call    ds:GetSystemTimeAsFileTime

Почему указывается ds? Как я уже знаю что в программе пишется список импорта. Значит они в данных записываются. Ведь их откуда же программы берут, чтобы показать какие функции экспортированы. Когда я заглянул в эту функцию, то увидел много других функций. Это что, все функции библиотеки экспортируются? Или только нужные? Хотя в отладчике когда я смотрел какую то программу, то там показывались функции, только те, которые использует программа. Значит это такая куча функций в крэкми, которые только запутывают код. Ну нафига делать вызовы ядра ( системные функции ), если хочется защитить от взлома программу.
4.
Code:
  1. leave
  2. retn

Я помню что если были входящие параметры для функции, то функция leave или retn, очищает стек. Допустим что стек не очищался, но для стековых переменных ebp был push, который остался в стеке, он куда девается?
5. Ну и последнее.
Тот крэкми, который я изучаю, содержит тупо мусор, если это были стековые переменные. Потому что не понятно зачем вызывать функции получения времени, функции получения id процесса и id потока, и в итоге вызвать функцию QueryPerformanceCounter, результат которой и будет использоваться вне функции. Видимо это для прикола так сделано, ибо непонятно зачем узнавать параметры, если они никак не обрабатываются.


Ранг: 539.0 (!)
Статус: Участник
_Вечный_Студент_

Создано: 3 августа 2019 01:04 · Поправил: plutos New!
Цитата · Личное сообщение · #2

xverizex пишет:
для стековых переменных ebp был push, который остался в стеке, он куда девается?


Enter creates a stack frame:
Code:
  1. ; enter
  2. push ebp
  3. mov ebp, esp


and leave destroys a stack frame:
Code:
  1. ; leave
  2. mov esp, ebp
  3. pop ebp


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 может быть использована любая функция, которую она экспортирует, но понятное дело, используются только те функции, которые нужны.

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


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

Создано: 3 августа 2019 01:14 New!
Цитата · Личное сообщение · #3

plutos о спасибо. И точно, leave восстанавливает кадр стека. Прочитал дополнительно в инете.

Добавлено спустя 3 часа 42 минуты
Кстати с локальными функциями и глобальными можно сделать самому программу и посмотреть результат. Надо попробывать и посмотреть что в ida получиться.


Ранг: 539.0 (!)
Статус: Участник
_Вечный_Студент_

Создано: 3 августа 2019 05:36 New!
Цитата · Личное сообщение · #4

xverizex пишет:
можно сделать самому программу


как сделаешь, не забудь выложить!

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

Создано: 3 августа 2019 07:22 · Поправил: xverizex New!
Цитата · Личное сообщение · #5

plutos хорошо. Я же хочу только одну функцию написать, чтобы посмотреть структуру. Но написана будет для линукс. Позже посмотрю как на windows дела обстоят.

Добавлено спустя 18 минут
Пока что не понел всех локальных переменных. Вот снимок
--> Link <--
Блин написано что ptr а ptr это указатель, который занимает 8 бит вроде или 8 байт, скорее всего 8 байт, ничего себе какой длинный размер, это из-за того наверное, чтобы можно было получить адрес в размере 8 байт.

Добавлено спустя 22 минуты
А значит в ассемблере все переменные становяться указателями на память. Понятно. Блин, автор форума не может что за столько времени сделать так, чтобы изображение нормально смотрелось в браузере, а не занимало больше экрана.

Добавлено спустя 24 минуты
Ещё почему то из сегмента cs:body присваивается 7, хотя сегмент cs как сегмент кода наверное имеется ввиду что в x86_64 один сегмент. Поэтому из cs. Так то почему из сегмента кода видна переменная, которая должна быть в сегменте данных? Наверное это из-за 64 разрядности. И сегмент здесь один. вот так.

От модератора: Не юзай тег img на больших картинках

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

Создано: 3 августа 2019 12:16 New!
Цитата · Личное сообщение · #6

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


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

Создано: 3 августа 2019 15:27 New!
Цитата · Личное сообщение · #7

С такими вопросами надо не крякмисы предлагать и защиты от битхаков, а менструальные календари на басике писать. google:LARGE_INTEGER первая же ссылка срывает покровы: "Represents a 64-bit signed integer value.". Глобальные переменные адресуются всеми существующими способами кроме как по базе esp/ebp. Дефолтный сегмент ds ида указывает просто для порядка: нет префикса, переключающего на другой сегмент, но ида считает долгом сегмент таки показать. Пофигу какое значение esp на момент эпилога leave+retn, смотреть псевдокод инструкции leave. Если результат какой-то апи нигде не используется, значит либо компилер, либо программу делали яркие и талантливые личности.

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



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

Создано: 3 августа 2019 15:51 New!
Цитата · Личное сообщение · #8


Ранг: 55.6 (постоянный)
Статус: Участник

Создано: 3 августа 2019 15:53 · Поправил: BlackCode New!
Цитата · Личное сообщение · #9

f13nd пишет:
С такими вопросами надо не крякмисы предлагать и защиты от битхаков, а менструальные календари на басике писать.

Скатился от смеха под стол
Не в бровь, а в глаз!

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

Создано: 3 августа 2019 16:56 · Поправил: Clerk New!
Цитата · Личное сообщение · #10

f13nd

> календари на басике писать.

Выхлоп vb это виртуальная машина, так что это было бы норм крэкми, если бы небыло декомпилера или использованы какие то спец методы, которые его поломают. Ида кстате такое не может, да ?

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

> Так то почему из сегмента кода видна переменная, которая должна быть в сегменте данных?

Плоская модель памяти. Базы/значения сегментов одинаковы.


Ранг: 539.0 (!)
Статус: Участник
_Вечный_Студент_

Создано: 3 августа 2019 21:55 · Поправил: plutos New!
Цитата · Личное сообщение · #11

f13nd пишет:
С такими вопросами надо не крякмисы предлагать и защиты от битхаков


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

xverizex пишет:
ничего себе какой длинный размер, это из-за того наверное, чтобы можно было получить адрес в размере 8 байт.


а вообще-то ничего, даже забавно. Может чел скоро за учебник по computer science возмется. Издаст и деньги получит.
Всякое бывает.
 eXeL@B —› Вопросы новичков —› Помогите в понимании. Ассемблерный код. функция.

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

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