Translated ['src/generic-methodologies-and-resources/basic-forensic-meth

This commit is contained in:
Translator 2025-09-30 09:12:14 +00:00
parent fd56ef8f89
commit 2e4b16a7ec
3 changed files with 292 additions and 39 deletions

View File

@ -37,6 +37,7 @@
- [Mobile Phishing Malicious Apps](generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md)
- [Phishing Files & Documents](generic-methodologies-and-resources/phishing-methodology/phishing-documents.md)
- [Basic Forensic Methodology](generic-methodologies-and-resources/basic-forensic-methodology/README.md)
- [Adaptixc2 Config Extraction And Ttps](generic-methodologies-and-resources/basic-forensic-methodology/adaptixc2-config-extraction-and-ttps.md)
- [Baseline Monitoring](generic-methodologies-and-resources/basic-forensic-methodology/file-integrity-monitoring.md)
- [Anti-Forensic Techniques](generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md)
- [Docker Forensics](generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md)
@ -130,6 +131,7 @@
- [Seccomp](linux-hardening/privilege-escalation/docker-security/seccomp.md)
- [Weaponizing Distroless](linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md)
- [Escaping from Jails](linux-hardening/privilege-escalation/escaping-from-limited-bash.md)
- [Posix Cpu Timers Toctou Cve 2025 38352](linux-hardening/privilege-escalation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [euid, ruid, suid](linux-hardening/privilege-escalation/euid-ruid-suid.md)
- [Interesting Groups - Linux Privesc](linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md)
- [lxd/lxc Group - Privilege escalation](linux-hardening/privilege-escalation/interesting-groups-linux-pe/lxd-privilege-escalation.md)
@ -771,7 +773,7 @@
- [Stack Shellcode - arm64](binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md)
- [Stack Pivoting - EBP2Ret - EBP chaining](binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
- [Uninitialized Variables](binary-exploitation/stack-overflow/uninitialized-variables.md)
- [ROP and JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [ROP & JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [BROP - Blind Return Oriented Programming](binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md)
- [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md)
- [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md)
@ -840,6 +842,7 @@
- [WWW2Exec - GOT/PLT](binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md)
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
- [ios CVE-2020-27950-mach_msg_trailer_t](binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md)
@ -937,6 +940,4 @@
- [Stealing Sensitive Information Disclosure from a Web](todo/stealing-sensitive-information-disclosure-from-a-web.md)
- [Post Exploitation](todo/post-exploitation.md)
- [Investment Terms](todo/investment-terms.md)
- [Cookies Policy](todo/cookies-policy.md)
- [Posix Cpu Timers Toctou Cve 2025 38352](linux-hardening/privilege-escalation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [Cookies Policy](todo/cookies-policy.md)

View File

@ -0,0 +1,243 @@
# AdaptixC2 Витяг конфігурації та TTPs
{{#include ../../banners/hacktricks-training.md}}
AdaptixC2 — модульний, opensource postexploitation/C2 framework з Windows x86/x64 beacons (EXE/DLL/service EXE/raw shellcode) та підтримкою BOF. Ця сторінка документує:
- Як його RC4упакована конфігурація вбудована і як витягти її з beacons
- Мережеві та профільні індикатори для HTTP/SMB/TCP listeners
- Поширені loader та persistence TTPs, зафіксовані в реальних кампаніях, з посиланнями на відповідні сторінки технік Windows
## Beacon профілі та поля
AdaptixC2 підтримує три основні типи beacon:
- BEACON_HTTP: web C2 з налаштовуваними servers/ports/SSL, method, URI, headers, useragent та власною назвою параметра
- BEACON_SMB: namedpipe peertopeer C2 (intranet)
- BEACON_TCP: direct sockets, опційно з prepended marker для обфускації початку протоколу
Типові поля профілю, спостережувані в HTTP конфігураціях beacon (після дешифрування):
- agent_type (u32)
- use_ssl (bool)
- servers_count (u32), servers (array of strings), ports (array of u32)
- http_method, uri, parameter, user_agent, http_headers (lengthprefixed strings)
- ans_pre_size (u32), ans_size (u32) used to parse response sizes
- kill_date (u32), working_time (u32)
- sleep_delay (u32), jitter_delay (u32)
- listener_type (u32)
- download_chunk_size (u32)
Example default HTTP profile (from a beacon build):
```json
{
"agent_type": 3192652105,
"use_ssl": true,
"servers_count": 1,
"servers": ["172.16.196.1"],
"ports": [4443],
"http_method": "POST",
"uri": "/uri.php",
"parameter": "X-Beacon-Id",
"user_agent": "Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0",
"http_headers": "\r\n",
"ans_pre_size": 26,
"ans_size": 47,
"kill_date": 0,
"working_time": 0,
"sleep_delay": 2,
"jitter_delay": 0,
"listener_type": 0,
"download_chunk_size": 102400
}
```
Спостережено зловмисний HTTP-профіль (реальна атака):
```json
{
"agent_type": 3192652105,
"use_ssl": true,
"servers_count": 1,
"servers": ["tech-system[.]online"],
"ports": [443],
"http_method": "POST",
"uri": "/endpoint/api",
"parameter": "X-App-Id",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.160 Safari/537.36",
"http_headers": "\r\n",
"ans_pre_size": 26,
"ans_size": 47,
"kill_date": 0,
"working_time": 0,
"sleep_delay": 4,
"jitter_delay": 0,
"listener_type": 0,
"download_chunk_size": 102400
}
```
## Упакування зашифрованої конфігурації та шлях завантаження
Коли оператор натискає Create у builder, AdaptixC2 вбудовує зашифрований профіль як tail blob у beacon. Формат такий:
- 4 bytes: configuration size (uint32, littleendian)
- N bytes: RC4encrypted configuration data
- 16 bytes: RC4 key
Завантажувач beacon копіює 16byte ключ із кінця та RC4розшифровує Nbyte блок на місці:
```c
ULONG profileSize = packer->Unpack32();
this->encrypt_key = (PBYTE) MemAllocLocal(16);
memcpy(this->encrypt_key, packer->data() + 4 + profileSize, 16);
DecryptRC4(packer->data()+4, profileSize, this->encrypt_key, 16);
```
Practical implications:
- The entire structure often lives inside the PE .rdata section.
- Extraction is deterministic: read size, read ciphertext of that size, read the 16byte key placed immediately after, then RC4decrypt.
## Configuration extraction workflow (захисники)
Напишіть extractor, який імітує логіку beacon:
1) Знайдіть blob всередині PE (зазвичай .rdata). Практичний підхід — просканувати .rdata на наявність правдоподібного макету [size|ciphertext|16byte key] і спробувати RC4.
2) Прочитайте перші 4 байти → size (uint32 LE).
3) Прочитайте наступні N=size байтів → ciphertext.
4) Прочитайте фінальні 16 байтів → RC4 key.
5) RC4decrypt ciphertext. Потім розпарсіть plain profile як:
- u32/boolean scalars як зазначено вище
- lengthprefixed strings (u32 length followed by bytes; trailing NUL can be present)
- масиви: servers_count followed by that many [string, u32 port] pairs
Мінімальний Python proofofconcept (standalone, no external deps), який працює з попередньо витягнутим blob:
```python
import struct
from typing import List, Tuple
def rc4(key: bytes, data: bytes) -> bytes:
S = list(range(256))
j = 0
for i in range(256):
j = (j + S[i] + key[i % len(key)]) & 0xFF
S[i], S[j] = S[j], S[i]
i = j = 0
out = bytearray()
for b in data:
i = (i + 1) & 0xFF
j = (j + S[i]) & 0xFF
S[i], S[j] = S[j], S[i]
K = S[(S[i] + S[j]) & 0xFF]
out.append(b ^ K)
return bytes(out)
class P:
def __init__(self, buf: bytes):
self.b = buf; self.o = 0
def u32(self) -> int:
v = struct.unpack_from('<I', self.b, self.o)[0]; self.o += 4; return v
def u8(self) -> int:
v = self.b[self.o]; self.o += 1; return v
def s(self) -> str:
L = self.u32(); s = self.b[self.o:self.o+L]; self.o += L
return s[:-1].decode('utf-8','replace') if L and s[-1] == 0 else s.decode('utf-8','replace')
def parse_http_cfg(plain: bytes) -> dict:
p = P(plain)
cfg = {}
cfg['agent_type'] = p.u32()
cfg['use_ssl'] = bool(p.u8())
n = p.u32()
cfg['servers'] = []
cfg['ports'] = []
for _ in range(n):
cfg['servers'].append(p.s())
cfg['ports'].append(p.u32())
cfg['http_method'] = p.s()
cfg['uri'] = p.s()
cfg['parameter'] = p.s()
cfg['user_agent'] = p.s()
cfg['http_headers'] = p.s()
cfg['ans_pre_size'] = p.u32()
cfg['ans_size'] = p.u32() + cfg['ans_pre_size']
cfg['kill_date'] = p.u32()
cfg['working_time'] = p.u32()
cfg['sleep_delay'] = p.u32()
cfg['jitter_delay'] = p.u32()
cfg['listener_type'] = 0
cfg['download_chunk_size'] = 0x19000
return cfg
# Usage (when you have [size|ciphertext|key] bytes):
# blob = open('blob.bin','rb').read()
# size = struct.unpack_from('<I', blob, 0)[0]
# ct = blob[4:4+size]
# key = blob[4+size:4+size+16]
# pt = rc4(key, ct)
# cfg = parse_http_cfg(pt)
```
Поради:
- When automating, use a PE parser to read .rdata then apply a sliding window: for each offset o, try size = u32(.rdata[o:o+4]), ct = .rdata[o+4:o+4+size], candidate key = next 16 bytes; RC4decrypt and check that string fields decode as UTF8 and lengths are sane.
- Parse SMB/TCP profiles by following the same lengthprefixed conventions.
## Network fingerprinting and hunting
HTTP
- Поширене: POST to operatorselected URIs (e.g., /uri.php, /endpoint/api)
- Користувацький заголовок, що використовується для beacon ID (e.g., XBeaconId, XAppId)
- Useragents, що імітують Firefox 20 або contemporary Chrome builds
- Частота опитування видно через sleep_delay/jitter_delay
SMB/TCP
- SMB namedpipe listeners для intranet C2 в середовищах, де web egress обмежений
- TCP beacons можуть додавати кілька байтів перед трафіком, щоб заобфускувати початок протоколу
## Loader and persistence TTPs seen in incidents
Inmemory PowerShell loaders
- Download Base64/XOR payloads (InvokeRestMethod / WebClient)
- Виділяють unmanaged memory, копіюють shellcode, змінюють захист на 0x40 (PAGE_EXECUTE_READWRITE) через VirtualProtect
- Виконують через .NET dynamic invocation: Marshal.GetDelegateForFunctionPointer + delegate.Invoke()
Check these pages for inmemory execution and AMSI/ETW considerations:
{{#ref}}
../../windows-hardening/av-bypass.md
{{#endref}}
Виявлені механізми персистенції
- Ярлик у Startup folder (.lnk) для повторного запуску loader при вході користувача
- Registry Run keys (HKCU/HKLM ...\CurrentVersion\Run), часто з benignsounding іменами на кшталт "Updater" для запуску loader.ps1
- DLL searchorder hijack шляхом розміщення msimg32.dll у %APPDATA%\Microsoft\Windows\Templates для вразливих процесів
Technique deepdives and checks:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md
{{#endref}}
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md
{{#endref}}
Ідеї для hunting
- PowerShell, що створює переходи RW→RX: VirtualProtect до PAGE_EXECUTE_READWRITE всередині powershell.exe
- Патерни dynamic invocation (GetDelegateForFunctionPointer)
- Startup .lnk у папках user або common Startup
- Підозрілі Run keys (e.g., "Updater") і імена loader типу update.ps1/loader.ps1
- Шляхи до DLL, доступні для запису користувачем, під %APPDATA%\Microsoft\Windows\Templates, що містять msimg32.dll
## Notes on OpSec fields
- KillDate: timestamp після якого агент selfexpires
- WorkingTime: години, коли агент має бути активним, щоб злитися з бізнес‑активністю
Ці поля можна використовувати для кластеризації і пояснення спостережуваних періодів тиші.
## YARA and static leads
Unit 42 published basic YARA for beacons (C/C++ and Go) and loader APIhashing constants. Consider complementing with rules that look for the [size|ciphertext|16bytekey] layout near PE .rdata end and the default HTTP profile strings.
## References
- [AdaptixC2: A New Open-Source Framework Leveraged in Real-World Attacks (Unit 42)](https://unit42.paloaltonetworks.com/adaptixc2-post-exploitation-framework/)
- [AdaptixC2 GitHub](https://github.com/Adaptix-Framework/AdaptixC2)
- [Adaptix Framework Docs](https://adaptix-framework.gitbook.io/adaptix-framework)
- [Marshal.GetDelegateForFunctionPointer Microsoft Docs](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getdelegateforfunctionpointer)
- [VirtualProtect Microsoft Docs](https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect)
- [Memory protection constants Microsoft Docs](https://learn.microsoft.com/en-us/windows/win32/memory/memory-protection-constants)
- [Invoke-RestMethod PowerShell](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod)
- [MITRE ATT&CK T1547.001 Registry Run Keys/Startup Folder](https://attack.mitre.org/techniques/T1547/001/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
[https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/)
## Онлайн-сервіси
## Онлайн сервіси
- [VirusTotal](https://www.virustotal.com/gui/home/upload)
- [HybridAnalysis](https://www.hybrid-analysis.com)
@ -14,7 +14,7 @@
- [Intezer](https://analyze.intezer.com)
- [Any.Run](https://any.run/)
## Офлайн антивірусні та інструменти виявлення
## Офлайн антивірусні та засоби виявлення
### Yara
@ -22,10 +22,10 @@
```bash
sudo apt-get install -y yara
```
#### Підготуйте правила
#### Підготовка правил
Використайте цей скрипт, щоб завантажити та об'єднати всі yara malware rules з github: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\
Створіть директорію _**rules**_ і запустіть скрипт. Це створить файл під назвою _**malware_rules.yar**_, який містить усі yara rules для malware.
Створіть директорію _**rules**_ та виконайте скрипт. Це створить файл _**malware_rules.yar**_, який містить усі yara rules для malware.
```bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
@ -36,7 +36,7 @@ python malware_yara_rules.py
yara -w malware_rules.yar image #Scan 1 file
yara -w malware_rules.yar folder #Scan the whole folder
```
#### YaraGen: Перевірка на malware та створення правил
#### YaraGen: Перевірка на malware та створення rules
Ви можете використати інструмент [**YaraGen**](https://github.com/Neo23x0/yarGen) для генерації yara rules з бінарного файлу. Перегляньте ці підручники: [**Part 1**](https://www.nextron-systems.com/2015/02/16/write-simple-sound-yara-rules/), [**Part 2**](https://www.nextron-systems.com/2015/10/17/how-to-write-simple-but-sound-yara-rules-part-2/), [**Part 3**](https://www.nextron-systems.com/2016/04/15/how-to-write-simple-but-sound-yara-rules-part-3/)
```bash
@ -57,7 +57,7 @@ clamscan folderpath #Scan the whole folder
```
### [Capa](https://github.com/mandiant/capa)
**Capa** виявляє потенційно шкідливі **capabilities** у виконуваних файлах: PE, ELF, .NET. Тому воно знаходить такі речі, як Att\&ck tactics, або підозрілі можливості, наприклад:
**Capa** виявляє потенційно шкідливі **можливості** в виконуваних файлах: PE, ELF, .NET. Тому воно знайде такі речі, як Att\&ck tactics, або підозрілі можливості, наприклад:
- check for OutputDebugString error
- run as a service
@ -67,11 +67,11 @@ clamscan folderpath #Scan the whole folder
### IOCs
IOC означає Indicator Of Compromise. IOC — це набір **conditions that identify** деякого потенційно небажаного програмного забезпечення або підтвердженого **malware**. Blue Teams використовують такі визначення, щоб **пошукати подібні шкідливі файли** у своїх **systems** і **networks**.\
Обмін цими визначеннями дуже корисний: коли malware виявлено на комп'ютері і для нього створено IOC, інші Blue Teams можуть використати його, щоб швидше ідентифікувати malware.
IOC означає Indicator Of Compromise. IOC — це набір **умов, які ідентифікують** деяке потенційно небажане програмне забезпечення або підтверджене **malware**. Blue Teams використовують такі визначення, щоб **шукати цього роду шкідливі файли** у своїх **системах** та **мережах**.\
Обмін цими визначеннями дуже корисний: коли malware виявлено на комп'ютері і створено IOC для цього malware, інші Blue Teams можуть швидше його ідентифікувати.
Інструмент для створення або редагування IOCs — [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\
Ви можете використовувати інструменти, такі як [**Redline**](https://www.fireeye.com/services/freeware/redline.html), щоб **search for defined IOCs in a device**.
Інструмент для створення або редагування IOC — [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\
Ви можете використовувати інструменти, такі як [**Redline**](https://www.fireeye.com/services/freeware/redline.html), щоб **шукати визначені IOC на пристрої**.
### Loki
@ -92,41 +92,41 @@ Compares process connection endpoints with C2 IOCs (new since version v.10)
```
### Linux Malware Detect
[**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/) — це сканер malware для Linux, випущений під ліцензією GNU GPLv2, який розроблений з урахуванням загроз, характерних для shared hosted environments. Він використовує дані про загрози з network edge intrusion detection systems для виявлення malware, що активно використовується в атаках, та генерує сигнатури для їхнього виявлення. Крім того, дані про загрози також надходять від користувацьких надсилань через LMD checkout feature та ресурсів спільноти malware.
[**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/) — це сканер malware для Linux, випущений під ліцензією GNU GPLv2, розроблений з урахуванням загроз, характерних для середовищ зі спільним хостингом. Він використовує дані про загрози з периферійних мережевих систем виявлення вторгнень для вилучення malware, яке активно використовується в атаках, та генерує сигнатури для виявлення. Крім того, дані про загрози також надходять від відправлень користувачів за допомогою LMD checkout feature та ресурсів спільноти malware.
### rkhunter
Інструменти на кшталт [**rkhunter**](http://rkhunter.sourceforge.net) можна використовувати для перевірки файлової системи на наявність можливих **rootkits** і malware.
Інструменти на кшталт [**rkhunter**](http://rkhunter.sourceforge.net) можна використовувати для перевірки файлової системи на наявність можливих **rootkits** та malware.
```bash
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
```
### FLOSS
[**FLOSS**](https://github.com/mandiant/flare-floss) — інструмент, який намагається знайти **obfuscated strings** всередині **executables**, використовуючи різні методи.
[**FLOSS**](https://github.com/mandiant/flare-floss) — інструмент, який намагається знайти обфусковані рядки всередині виконуваних файлів, використовуючи різні техніки.
### PEpper
[PEpper ](https://github.com/Th3Hurrican3/PEpper) перевіряє деякі базові речі всередині **executable** (binary data, entropy, URLs and IPs, some yara rules).
[PEpper ](https://github.com/Th3Hurrican3/PEpper)перевіряє деякі базові речі всередині виконуваного файлу (бінарні дані, ентропія, URLs та IP-адреси, деякі yara правила).
### PEstudio
[PEstudio](https://www.winitor.com/download) — інструмент, який дозволяє отримати інформацію про **Windows executables**, такі як imports, exports, headers, а також перевіряє **virus total** і виявляє потенційні **Att\&ck techniques**.
[PEstudio](https://www.winitor.com/download) — інструмент, який дозволяє отримати інформацію про Windows виконувані файли, такі як імпорти, експорти, заголовки, а також перевіряє VirusTotal і знаходить потенційні Att\&ck techniques.
### Detect It Easy(DiE)
[**DiE**](https://github.com/horsicq/Detect-It-Easy/) — інструмент для визначення, чи файл є **encrypted**, а також для пошуку **packers**.
[**DiE**](https://github.com/horsicq/Detect-It-Easy/) — інструмент для визначення, чи файл **зашифрований**, а також для знаходження **packers**.
### NeoPI
[**NeoPI** ](https://github.com/CiscoCXSecurity/NeoPI) — Python script, який використовує різні **statistical methods** для виявлення **obfuscated** та **encrypted** вмісту в текстових/скриптових файлах. Основна мета NeoPI — допомагати у **detection of hidden web shell code**.
[**NeoPI** ](https://github.com/CiscoCXSecurity/NeoPI) — Python-скрипт, який використовує різні **статистичні методи** для виявлення **обфускованого** та **зашифрованого** вмісту в текстових/скриптових файлах. Метою NeoPI є допомога у **виявленні прихованого web shell коду**.
### **php-malware-finder**
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) робить усе можливе, щоб виявити **obfuscated**/**dodgy code**, а також файли, що використовують **PHP** functions, часто використовувані в **malwares**/webshells.
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) робить усе можливе, щоб виявити **обфускований**/**підозрілий код**, а також файли, що використовують **PHP** функції, які часто застосовуються в **malwares**/webshells.
### Apple Binary Signatures
При перевірці зразка **malware sample** завжди слід **check the signature** бінарного файлу, оскільки **developer**, який його підписав, може бути вже **related** з **malware.**
When checking some **malware sample** you should always **check the signature** of the binary as the **developer** that signed it may be already **related** with **malware.**
```bash
#Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -141,21 +141,21 @@ spctl --assess --verbose /Applications/Safari.app
### File Stacking
If you know that some folder containing the **файли** of a web server was **last updated on some date**. **Check** the **date** all the **файли** in the **web server were created and modified** and if any date is **suspicious**, check that file.
Якщо ви знаєте, що якась папка, яка містить **files** веб-сервера, була **last updated on some date**. **Check** **date** створення та модифікації всіх **files** у **web server**, і якщо якась дата виглядає **suspicious**, перевірте відповідний файл.
### Baselines
If the files of a folder **shouldn't have been modified**, you can calculate the **hash** of the **original files** of the folder and **compare** them with the **current** ones. Anything modified will be **suspicious**.
Якщо **files** у папці **shouldn't have been modified**, ви можете обчислити **hash** від **original files** папки і **compare** їх із **current**. Усе, що змінено, буде **suspicious**.
### Statistical Analysis
When the information is saved in logs you can **check statistics like how many times each file of a web server was accessed as a web shell might be one of the most**.
Якщо інформація збережена в logs, ви можете **check statistics** — наприклад, скільки разів кожен **file** веб-сервера був доступний; web shell може бути одним із найчастіше accessed.
---
### Android in-app native telemetry (no root)
On Android, you can instrument native code inside the target app process by preloading a tiny logger library before other JNI libs initialize. This gives early visibility into native behavior without system-wide hooks or root. A popular approach is SoTap: drop libsotap.so for the right ABI into the APK and inject a System.loadLibrary("sotap") call early (e.g., static initializer or Application.onCreate), then collect logs from internal/external paths or Logcat fallback.
На Android ви можете інструментувати native code всередині процесу цільового додатка, підвантаживши невелику бібліотеку-логер перед ініціалізацією інших JNI libs. Це дає ранню видимість native behavior без system-wide hooks або root. Популярний підхід — SoTap: покладіть libsotap.so для потрібного ABI у APK і інжектуйте виклик System.loadLibrary("sotap") на ранньому етапі (наприклад, static initializer або Application.onCreate), потім збирайте логи з internal/external шляхів або використовуйте Logcat як fallback.
See the Android native reversing page for setup details and log paths:
@ -167,11 +167,11 @@ See the Android native reversing page for setup details and log paths:
## Deobfuscating Dynamic Control-Flow (JMP/CALL RAX Dispatchers)
Modern malware families heavily abuse Control-Flow Graph (CFG) obfuscation: instead of a direct jump/call they compute the destination at run-time and execute a `jmp rax` or `call rax`. A small *dispatcher* (typically nine instructions) sets the final target depending on the CPU `ZF`/`CF` flags, completely breaking static CFG recovery.
Сучасні malware родини інтенсивно зловживають Control-Flow Graph (CFG) obfuscation: замість прямого jump/call вони обчислюють адресу призначення під час виконання і виконують `jmp rax` або `call rax`. Малий *dispatcher* (звичайно дев'ять інструкцій) встановлює фінальну ціль залежно від CPU `ZF`/`CF` flags, що повністю руйнує статичне відновлення CFG.
The technique showcased by the SLOW#TEMPEST loader can be defeated with a three-step workflow that only relies on IDAPython and the Unicorn CPU emulator.
Техніку — продемонстровану SLOW#TEMPEST loader — можна обійти трьома кроками, які покладаються лише на IDAPython і Unicorn CPU emulator.
### 1. Знайдіть кожний indirect jump / call
### 1. Locate every indirect jump / call
```python
import idautils, idc
@ -211,9 +211,9 @@ mu.reg_write(UC_X86_REG_RAX, 0)
mu.emu_start(BASE, BASE+len(code))
return mu.reg_read(UC_X86_REG_RAX)
```
Запустіть `run(code,0,0)` і `run(code,1,1)`, щоб отримати цілі гілок для *false* та *true*.
Запустіть `run(code,0,0)` та `run(code,1,1)`, щоб отримати *false* та *true* цілі гілок.
### 4. Patch back a direct jump / call
### 4. Відновити direct jump / call
```python
import struct, ida_bytes
@ -222,28 +222,37 @@ op = 0xE8 if is_call else 0xE9 # CALL rel32 or JMP rel32
disp = target - (ea + 5) & 0xFFFFFFFF
ida_bytes.patch_bytes(ea, bytes([op]) + struct.pack('<I', disp))
```
Після застосування патчу, змусьте IDA повторно проаналізувати функцію, щоб відновити повний CFG і вивід Hex-Rays:
Після patching, змусьте IDA повторно проаналізувати функцію, щоб повний CFG і вивід Hex-Rays були відновлені:
```python
import ida_auto, idaapi
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))
```
### 5. Позначте непрямі виклики API
### 5. Позначення непрямих API викликів
Як тільки справжнє призначення кожного `call rax` буде відоме, ви можете повідомити IDA, що це за виклик, щоб типи параметрів та імена змінних були відновлені автоматично:
Після того, як відоме реальне місце призначення кожного `call rax`, ви можете вказати це в IDA, щоб типи параметрів та імена змінних відновлювалися автоматично:
```python
idc.set_callee_name(call_ea, resolved_addr, 0) # IDA 8.3+
```
### Практичні переваги
* Відновлює реальний CFG → декомпіляція переходить з *10* рядків до тисяч.
* Відновлює реальний CFG → decompilation goes from *10* lines to thousands.
* Дозволяє string-cross-reference & xrefs, що робить реконструкцію поведінки тривіальною.
* Scripts повторно використовувані: помістіть їх у будь-який loader, захищений тим самим трюком.
* Scripts are reusable: drop them into any loader protected by the same trick.
---
## Посилання
## AdaptixC2: Configuration Extraction and TTPs
Див. присвячену сторінку:
{{#ref}}
adaptixc2-config-extraction-and-ttps.md
{{#endref}}
## Джерела
- [Unit42 Evolving Tactics of SLOW#TEMPEST: A Deep Dive Into Advanced Malware Techniques](https://unit42.paloaltonetworks.com/slow-tempest-malware-obfuscation/)
- SoTap: Легкий in-app JNI (.so) логер поведінки [github.com/RezaArbabBot/SoTap](https://github.com/RezaArbabBot/SoTap)
- SoTap: Lightweight in-app JNI (.so) behavior logger [github.com/RezaArbabBot/SoTap](https://github.com/RezaArbabBot/SoTap)
- [Unit42 AdaptixC2: A New Open-Source Framework Leveraged in Real-World Attacks](https://unit42.paloaltonetworks.com/adaptixc2-post-exploitation-framework/)
{{#include ../../banners/hacktricks-training.md}}