# Κοινές API που χρησιμοποιούνται σε κακόβουλο λογισμικό
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με τοhtARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
**Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Γενικά
### Δικτύωση
| Raw Sockets | WinAPI Sockets |
| ------------- | -------------- |
| socket() | WSAStratup() |
| bind() | bind() |
| listen() | listen() |
| accept() | accept() |
| connect() | connect() |
| read()/recv() | recv() |
| write() | send() |
| shutdown() | WSACleanup() |
### Διατήρηση
| Registry | File | Service |
| ---------------- | ------------- | ---------------------------- |
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() | |
### Κρυπτογράφηση
| Όνομα |
| --------------------- |
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
### Αντι-Ανάλυση/Εικονική Μηχανή
| Όνομα Συνάρτησης | Οδηγίες Συναρτήσεων Συναρμολόγησης |
| --------------------------------------------------------- | --------------------- |
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot \[Έλεγχος εάν ένα πρόγραμμα εκτελείται] | |
| CreateFileW/A \[Έλεγχος εάν υπάρχει ένα αρχείο] | |
### Αόρατος Λογισμικός
| Όνομα | |
| ------------------------ | -------------------------------------------------------------------------- |
| VirtualAlloc | Εκχώρηση μνήμης (packers) |
| VirtualProtect | Αλλαγή δικαιωμάτων μνήμης (packer που δίνει άδεια εκτέλεσης σε μια ενότητα) |
| ReadProcessMemory | Ενσωμάτωση σε εξωτερικές διεργασίες |
| WriteProcessMemoryA/W | Ενσωμάτωση σε εξωτερικές διεργασίες |
| NtWriteVirtualMemory | |
| CreateRemoteThread | Ενσωμάτωση DLL/Διεργασίας... |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W | |
### Εκτέλεση
| Όνομα Συνάρτησης |
| ---------------- |
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
### Διάφορα
* GetAsyncKeyState() -- Καταγραφή πλήκτρων
* SetWindowsHookEx -- Καταγραφή πλήκτρων
* GetForeGroundWindow -- Λήψη ονόματος τρέχοντος παραθύρου (ή της ιστοσελίδας από ένα πρόγραμμα περιήγησης)
* LoadLibrary() -- Εισαγωγή βιβλιοθήκης
* GetProcAddress() -- Εισαγωγή βιβλιοθήκης
* CreateToolhelp32Snapshot() -- Κατάλογος τρέχοντων διεργασιών
* GetDC() -- Στιγμιότυπο οθόνης
* BitBlt() -- Στιγμιότυπο οθόνης
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Πρόσβαση στο Internet
* FindResource(), LoadResource(), LockResource() -- Πρόσβαση σε πόρους του εκτελέσιμου
## Τεχνικές Κακόβουλου Λογισμικού
### Ενσωμάτωση DLL
Εκτέλεση ενός αυθαίρετου DLL μέσα σε άλλη διεργασία
1. Εντοπισμός της διεργασίας για την ενσωμάτωση του κακόβουλου DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
2. Άνοιγμα της διεργασίας: GetModuleHandle, GetProcAddress, OpenProcess
3. Εγγραφή του διαδρόμου προς το DLL μέσα στη διεργασία: VirtualAllocEx, WriteProcessMemory
4. Δημιουργία ενός νήματος στη διεργασία που θα φορτώσει το κακόβουλο DLL: CreateRemoteThread, LoadLibrary
Άλλες συναρτήσεις που μπορούν να χρησιμοποιηθούν: NTCreateThreadEx, RtlCreateUserThread
### Αντανάκλαστη Ενσωμάτωση DLL
Φόρτωση ενός κακόβουλου DLL χωρίς να καλούνται κανονικές κλήσεις API των Windows.\
Το DLL αντιστοιχίζεται μέσα σε μια διεργασία, θα επιλύσει τις διευθύνσεις εισαγωγής, θα διορθώσει τις ανακατασκευές και θα καλέσει τη λειτουργία DllMain.
### Απαγωγή Νήματος
Εύρεση ενός νήματος από μια διεργασία και κάντε το να φορτώσει ένα κακόβουλο DLL
1. Εύρεση ενός στόχου νήματος: CreateToolhelp32Snapshot, Thread32First, Thread32Next
2. Άνοιγμα του νήματος: OpenThread
3. Αναστολή του νήματος: SuspendThread
4. Εγγραφή του διαδρόμου προς το κακόβουλο DLL μέσα στη διεργασία-θύμα: VirtualAllocEx, WriteProcessMemory
5. Επανέναρξη του νήματος που φορτώνει τη βιβλιοθήκη: ResumeThread
### Ενσωμάτωση PE
Ενσωμάτωση Φορητής Εκτέλεσης: Το εκτελέσιμο θα γραφτεί στη μνήμη της διεργασίας-θύματος και θα εκτελεστεί από εκεί.
### Άδεια Διαδικασίας
Το κακόβουλο λογισμικό θα αποσυνδέσει το νόμιμο κώδικα από τη μνήμη της διεργασίας και θα φορτώσει ένα κακόβουλο δυαδικό
1. Δημιουργία νέας διεργασίας: CreateProcess
2. Αποσύνδεση της μνήμης: ZwUnmapViewOfSection, NtUnmapViewOfSection
3. Εγγραφή του κακόβουλου δυαδικού στη μνήμη της διεργασίας: VirtualAllocEc, WriteProcessMemory
4. Ορισμός του σημείου εισόδου και εκτέλεση: SetThreadContext, ResumeThread
## Αγκάλη
* Το **SSDT** (**Πίνακας Περιγραφής Υπηρεσιών Συστήματος**) δείχνει σε λειτουργίες πυρήνα (ntoskrnl.exe) ή οδηγού GUI (win32k.sys) ώστε οι διεργασίες χρήστη να μπορούν να καλέσουν αυτές τις λειτουργίες.
* Ένα rootkit μπορεί να τροποποιήσει αυτούς τους δείκτες σε διευθύνσεις που ελέγχει
* Τα **IRP** (**Πακέτα Αιτημάτων I/O**) μεταφέρουν κομμάτια δεδομένων από ένα στοιχείο σε ένα άλλο. Σχεδόν όλα στον πυρήνα χρησιμοποιούν IRPs και κάθε αντικείμενο συσκευής έχει τον δικό του πίνακα λειτουργιών που μπορεί να αγκιλωθεί: DKOM (Άμεση Παραβίαση Αντικειμένου Πυρήνα)
* Ο **IAT** (**Πίνακας Διεύθυνσης Εισαγωγής**) είναι χρήσιμος για την επίλυση εξαρτήσεων. Είναι δυνατό να αγκιλωθεί αυτός ο πίνακας για να απαγάγει τον κώδικα που θα κληθεί.
* **EAT** (**Πίνακας Διεύθυνσης Εξαγωγής**) Hooks. Αυτά τα hooks μπορούν να γίνουν από το **userland**. Ο στόχος είναι να γίνει αγκίλωση εξαγόμενων λειτουργιών από DLLs.
* **Inline Hooks**: Αυτού του τύπου είναι δύσκολο να επιτευχθούν. Αυτό περιλαμβάνει την τροποποίηση του
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.