name: re-hermes-v3 title: "RE-Hermes v3 — Reverse Engineering Triage Agent" description: "Python stdlib ile APK/PE/ELF/ham ikili dosyalardan PASIF statik analiz. Hash, entropy, PE/ELF header, APK izin+dex, IOC, suspicious token, 5N1K eğitim katmanı, opsiyonel DeepSeek AI yorumu." tags: [reverse-engineering, malware-analysis, apk, pe, elf, static-analysis, triage] category: software-development audience: contributor
RE-Hermes v3 — Reverse Engineering Triage Agent
Konum
- Script:
C:\Users\marko\re-hermes\re-hermes.py - Batch:
C:\Users\marko\re-hermes\re-hermes.bat - Config:
C:\Users\marko\re-hermes\config.json
Kullanım
cd C:\Users\marko\re-hermes
python re-hermes.py <hedef_dosya>
# veya:
re-hermes.bat <hedef_dosya>
Desteklenen dosya türleri
| Tür | Format | Analiz |
|---|---|---|
| APK (.apk) | ZIP | izinler, classes.dex string/IOC, lib/*.so ELF header |
| PE (.exe/.dll/.sys) | MZ | header, mimari, section'lar, import DLL'leri |
| ELF | \x7fELF | tip, endian, bits, mimari |
| Ham/bilinmeyen | magic | hash, entropy, strings, IOC |
Yaptığı analiz (pasif — dosya çalıştırılmaz)
- Hash — MD5 / SHA1 / SHA256 (1MB chunk streaming)
- Entropy — Shannon + packed/şifreli yorumu
- Format — magic + PE/ELF header parse
- Strings — ASCII + UTF-16LE streaming
- IOC — URL / IPv4 / domain / e-posta / registry regex + defang
- Suspicious — 70+ yüksek-sinyalli API/davranış token taraması
- 5N1K — Her dosya türü için "ne/nerede/ne zaman/nasıl/neden/kim" eğitim katmanı
- DeepSeek AI (opsiyonel) — API anahtarı varsa bulgular LLM'e yorumlatılır
Çıktı
workspace_<dosya>/report.md— tüm statik bulgular + 5N1K + AI yorumuworkspace_<dosya>/static_analysis/extracted_strings.txt— ham string dökümüworkspace_<dosya>/static_analysis/iocs.json— IOC yapısal JSON
Batch Karşılaştırma (Çoklu APK)
Bu skill altındaki references/apk-comparison-methodology.md dosyasında belgelenmiştir.
Kullanıcı birden çok APK'yı analiz edip karşılaştırmak istediğinde:
- Tüm APK'ları arka planda paralel çalıştır
- Raporlardan token/metrik verilerini çıkar
- Token footprint'lerine göre grupla (aynı token × sayı = aynı familya)
- Risk skorlama kriterlerine göre sırala
- En tehlikeli grubu belirt
Derin Analiz — Jadx ile Decompile
RE-Hermes triyajı tamamlandıktan sonra şüpheli APK'lar için:
# jadx kurulum (bir kere)
curl -sL "https://github.com/skylot/jadx/releases/download/v1.5.1/jadx-1.5.1.zip" -o /tmp/jadx.zip
unzip -qo /tmp/jadx.zip -d /c/Users/marko/jadx
# Decompile
/c/Users/marko/jadx/bin/jadx.bat -d output_dir hedef.apk
# Java kodunda token ara
find output_dir -name "*.java" | xargs grep -l "getDeviceId\|Runtime.exec\|AccessibilityService" 2>/dev/null
BİLİNEN HATALAR — SuspiciousScanner False Positive
SuspiciousScanner substring eşleştirme kullanır ("curl" in "left-curly-bracket" -> True). Bu şu token'larda yanlış alarm üretir:
| Token | False Positive Kaynağı | Açıklama |
|---|---|---|
curl |
left-curly-bracket, right-curly-bracket |
"curl" substring "curly" içinde |
ptrace |
perftools7tracing... |
"trace" içeren C++ sembol adları |
GetProcAddress |
eglGetProcAddress |
OpenGL ES standard API |
getDeviceId |
getDeviceIds (çoğul) |
TensorFlow/NNAPI diagnostic logging |
Doğrulama yöntemi: Şüpheli token bulunca, APK byte seviyesinde kontrol et:
with open("hedef.apk", "rb") as f:
data = f.read()
count = data.count(b"curl") # substring degil, tam byte
Düzeltme planı: SuspiciousScanner.KEYWORDS iki kategoriye ayrılmalı:
EXACT_WORDS= word boundary regex (\bcurl\b,\bptrace\b)SUBSTRINGS= mevcutinmantığı (chmod,AccessibilityServicegibi kısa kelimeler)
Notlar
- SIFIR HARİCİ BAĞIMLILIK — sadece Python stdlib (zipfile, hashlib, urllib, struct, re)
- OFFLINE çalışır; AI katmanı sadece API anahtarı varsa aktiftir
- APK içindeki .so dosyaları ELF olarak parse edilir (mimari tespiti)
- 5N1K katmanı bulunan her dosya türünü sıfırdan açıklar — eğitim amaçlı
SuspiciousScanner — False Positive Koruması
SuspiciousScanner iki katmanlı eşleştirme kullanır:
- WORD_KEYWORDS:
\bword boundary regex ile eşleşir (harf/rakam/altçizgi sonunda sınır) - PATH_KEYWORDS: Slash/nokta/backslash içeren keyword'ler için path-aware regex (
(?<![a-zA-Z0-9_/\\])...)
Bu sayede:
curl→left-curly-bracketile karışmazptrace→ C++ symboltracing...ile karışmazGetProcAddress→eglGetProcAddress(OpenGL) ile karışmazgetDeviceId→getDeviceIds(TensorFlow NNAPI diagnostic) ile karışmaz
Yeni keyword eklerken dikkat:
- Normal kelime ise →
WORD_KEYWORDSlistesine /veya\veya.içeriyorsa →PATH_KEYWORDSlistesine- API adları (CamelCase)
\biçin sorunsuzdur - Jadx hatalı decompile (12+ error) obfuscated APK'larda normaldir — native .so için Ghidra/IDA gerekir