Привіт і ласкаво просимо назад.
У цьому розділі ми познайомимося з Windows API.
Ми почнемо зі знайомства з Windows API.
Що таке Windows API?
Зліва ви бачите діаграму.
У центрі знаходиться операційна система, або Windows.
А далі йде апаратний рівень, який складається, наприклад, з центрального процесора,
монітора, миші, клавіатури тощо. а далі між операційною системою та апаратним забезпеченням знаходиться набір драйверів
пристроїв.
Тепер, над рівнем операційної системи знаходяться ваші процеси - програми, які виконуються в пам'яті,
наприклад, Microsoft Word, браузер Chrome та інші програми.
А між процесами та операційною системою є те, що ми називаємо API.
API - це отвори або функції, які надаються операційною системою будь-яким процесам.
Щоразу, коли ви встановлюєте нове обладнання, вам потрібно встановити драйвер пристрою.
Драйвер пристрою стає частиною операційної системи.
Отже, операційна система - це віртуальна машина, яка інкапсулює різноманітність і складність базового
обладнання.
Він розкриває апаратне забезпечення за допомогою стандартизованих функцій.
Сукупність цих функцій називається API.
API розшифровується як інтерфейс прикладного програмування, і існує два види API.
Існують виклики stdcall та cdecl.
Виклики Cdecl використовуються у програмуванні на C.
Вони також відомі як конвенція виклику C.
Аргументи передаються у стек.
Викликувач очищає стек, наприклад, за допомогою інструкції add -, 4.
Це стандартний спосіб виклику програм на C на багатьох платформах.
З іншого боку, Windows API використовує угоду stdcall.
Вони також відомі як стандартна угода про виклик, де аргументи також передаються у стек.
Але тепер різниця в тому, що викликана функція очищає стек.
Тобто, перед поверненням він видаляє власні аргументи зі стеку.
Тому вам не потрібно додавати -, а потім num байт.
І це зазвичай використовується Windows API.
API походять від DLL. Зліва ви бачите приклад,
де у нас є три процеси, які виконуються в пам'яті.
І всі вони повинні використовувати щось з ядра32. dll-файл.
Отже, DLL розшифровується як бібліотека динамічних посилань.
Він не має точки входу.
Тому він не може працювати самостійно, але містить експортовані API-функції.
Kernel32. dll є одним із прикладів цього.
DLL завантажуються у фізичну оперативну пам'ять лише один раз, але використовуються усіма процесами.
Кожен процес матиме доступ до своїх експортованих функцій API.
Майже кожен запущений процес використовує Windows API на найнижчому рівні.
Типи бібліотек DLL.
Бібліотеки DLL можуть бути створені користувачем, а можуть бути бібліотеками Windows API DLL.
Отже, DLL можуть бути створені користувачем або надані операційною системою, наприклад, Windows API.
Отже, не кожна DLL надає Windows API.
Ви також можете написати власну DLL.
Приклади бібліотек Windows DLL.
Kernel32. dll.
Експортуються функції доступу до файлових систем, керування пам'яттю, потоками процесів тощо.
User32. dll.
Експортуються функції для керування графічним інтерфейсом Windows, наприклад, кнопками, формами тощо.
Миша і клавіатура.
GDI32.
dll.
Це експортує функції для керування виводом на монітори тощо.
Тепер давайте розглянемо приклад Windows API, ExitProcess.
Ось посилання, за яким ви можете звернутися до документації MSDN для цієї функції.
Якщо ви хочете дізнатися подробиці про будь-яку DLL або будь-яку функцію, будь-яку функцію
Windows API, просто відкрийте браузер і введіть MSDN, а потім ім'я API, яке ви хочете знайти.
Наприклад, ExitProcess, а потім клацніть перший результат "Microsoft Learn", і ви потрапите
на сайт MSDN.
І тут ви можете побачити синтаксис, який написано тут.
Він показує вам параметр,
а також тип повернення.
У цьому випадку тип повернення буде void.
Отже, ця функція нічого не повертає.
А з іншого боку, він приймає один параметр, який є беззнаковим цілим числом
- код виходу.
Отже, цілі числа без знаку - це додатні числа: нуль, один, два, три і так далі.
Деталі можна знайти тут.
Цей код завершення роботи призначено для процесу та всіх потоків.
Значення, що повертається - none.
Якщо ви прокрутите далі вниз, то побачите, що вона походить з ядра DLL32. dll.
Отже, давайте подивимося на це зсередини вашого x64dbg.
Я написав програму під назвою 76-exit-process. exe.
Це тут.
Натиснути 0 - це параметр.
Якщо ви хочете вийти з процесу без помилок, ви натискаєте push 0.
Якщо у вас від'ємне значення, то це буде помилкою.
Тож ви самі вирішуєте, який параметр ви хочете йому надіслати.
Як дізнатися адресу цього місця?
Просто перейдіть у розділ "Символи".
Перейдіть до Kernel32. dll.
А потім тут, у вікні пошуку, введіть ExitProcess.
Ось ваша адреса.
Тож просто клацніть правою кнопкою миші та скопіюйте адресу сюди.
Скопіюй адресу.
Перейдіть до подання процесора.
А тут все, що вам потрібно зробити, це просто вставити свою адресу.
Так я отримав цю адресу.
Тож тепер ми готові бігти.
Клацніть правою кнопкою миші і поставте точку зупинки, а потім натисніть кнопку "Виконати".
Влучає в брейк-пойнт.
Тоді ми переступаємо.
Тепер ви надішлете нуль на сервер стека. Потім він викличе функцію.
Отже, це параметр для дзвінка.
Ви бачите нуль на стеку.
Отже, коли ви переступите через нього, програма завершить роботу.
Отже, це простий приклад API для Windows, який також демонструє, де можна знайти ваші
API.
API знаходяться на вкладці "Символи", а тут ви бачите всі завантажені DLL.
Тож ви просто натискаєте на будь-яку з них, якщо вас це зацікавило.
А далі ви зможете знайти адреси.
Тут їх так багато.
На цьому відео все.
Дякуємо за перегляд.