mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/manual-deobfus
This commit is contained in:
parent
aea9b518a8
commit
4e7d366974
@ -1,39 +1,109 @@
|
|||||||
|
# Manual De-obfuscation Techniques
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Manual **De-obfuscation Techniques**
|
## Manual **De-obfuscation Techniques**
|
||||||
|
|
||||||
Katika eneo la **usalama wa programu**, mchakato wa kufanya msimbo uliofichwa kueleweka, unaojulikana kama **de-obfuscation**, ni muhimu. Mwongo huu unachunguza mikakati mbalimbali ya de-obfuscation, ukizingatia mbinu za uchambuzi wa statiki na kutambua mifumo ya obfuscation. Aidha, unatoa zoezi la matumizi ya vitendo na kupendekeza rasilimali zaidi kwa wale wanaopenda kuchunguza mada za juu zaidi.
|
Katika eneo la **usalama wa programu**, mchakato wa kufanya msimbo uliofichwa kueleweka, unaojulikana kama **de-obfuscation**, ni muhimu. Mwongo huu unachunguza mikakati mbalimbali ya de-obfuscation, ukizingatia mbinu za uchambuzi wa statiki na kutambua mifumo ya obfuscation. Aidha, unatoa zoezi la matumizi ya vitendo na kupendekeza rasilimali zaidi kwa wale wanaopenda kuchunguza mada za juu zaidi.
|
||||||
|
|
||||||
### **Mikakati ya Static De-obfuscation**
|
### **Strategies for Static De-obfuscation**
|
||||||
|
|
||||||
Wakati wa kushughulika na **obfuscated code**, mikakati kadhaa inaweza kutumika kulingana na asili ya obfuscation:
|
Wakati wa kushughulika na **obfuscated code**, mikakati kadhaa inaweza kutumika kulingana na asili ya obfuscation:
|
||||||
|
|
||||||
- **DEX bytecode (Java)**: Njia moja yenye ufanisi ni kutambua mbinu za de-obfuscation za programu, kisha kuiga mbinu hizi katika faili la Java. Faili hii inatekelezwa ili kubadilisha obfuscation kwenye vipengele vilivyokusudiwa.
|
- **DEX bytecode (Java)**: Njia moja yenye ufanisi ni kutambua mbinu za de-obfuscation za programu, kisha kuiga mbinu hizi katika faili ya Java. Faili hii inatekelezwa ili kubadilisha obfuscation kwenye vipengele vilivyolengwa.
|
||||||
- **Java na Native Code**: Njia nyingine ni kutafsiri algorithimu ya de-obfuscation katika lugha ya skripti kama Python. Mikakati hii inaonyesha kwamba lengo kuu si kuelewa kikamilifu algorithimu bali kuitekeleza kwa ufanisi.
|
- **Java na Msimbo wa Asili**: Njia nyingine ni kutafsiri algorithimu ya de-obfuscation kuwa lugha ya skripti kama Python. Mikakati hii inaonyesha kwamba lengo kuu si kuelewa kikamilifu algorithimu bali kuitekeleza kwa ufanisi.
|
||||||
|
|
||||||
### **Kutambua Obfuscation**
|
### **Identifying Obfuscation**
|
||||||
|
|
||||||
Kutambua msimbo uliofichwa ni hatua ya kwanza katika mchakato wa de-obfuscation. Viashiria muhimu ni pamoja na:
|
Kutambua msimbo uliofichwa ni hatua ya kwanza katika mchakato wa de-obfuscation. Viashiria muhimu ni pamoja na:
|
||||||
|
|
||||||
- **ukosefu au kuchanganya kwa nyuzi** katika Java na Android, ambayo inaweza kuashiria obfuscation ya nyuzi.
|
- **ukosefu au kuchanganya kwa nyuzi** katika Java na Android, ambayo inaweza kuashiria obfuscation ya nyuzi.
|
||||||
- **uwepo wa faili za binary** katika saraka ya mali au wito kwa `DexClassLoader`, ukionyesha unpacking ya msimbo na upakiaji wa dynamic.
|
- **uwepo wa faili za binary** katika saraka ya mali au wito kwa `DexClassLoader`, ukionyesha unpacking ya msimbo na upakiaji wa dynamic.
|
||||||
- Matumizi ya **maktaba za asili pamoja na kazi za JNI zisizoweza kutambulika**, kuashiria uwezekano wa obfuscation ya mbinu za asili.
|
- Matumizi ya **maktaba za asili pamoja na kazi za JNI zisizotambulika**, zikionyesha uwezekano wa obfuscation ya mbinu za asili.
|
||||||
|
|
||||||
## **Dynamic Analysis in De-obfuscation**
|
## **Dynamic Analysis in De-obfuscation**
|
||||||
|
|
||||||
Kwa kutekeleza msimbo katika mazingira yaliyodhibitiwa, uchambuzi wa dynamic **unaruhusu kuangalia jinsi msimbo uliofichwa unavyofanya kazi kwa wakati halisi**. Njia hii ni bora katika kufichua kazi za ndani za mifumo tata ya obfuscation ambayo imeundwa kuficha nia halisi ya msimbo.
|
Kwa kutekeleza msimbo katika mazingira yaliyodhibitiwa, uchambuzi wa dynamic **unaruhusu kuangalia jinsi msimbo uliofichwa unavyofanya kazi kwa wakati halisi**. Njia hii ni bora katika kufichua kazi za ndani za mifumo tata ya obfuscation ambayo imeundwa kuficha nia halisi ya msimbo.
|
||||||
|
|
||||||
### **Maombi ya Dynamic Analysis**
|
### **Applications of Dynamic Analysis**
|
||||||
|
|
||||||
- **Runtime Decryption**: Mbinu nyingi za obfuscation zinahusisha kuficha nyuzi au sehemu za msimbo ambazo zinafichuliwa tu wakati wa utekelezaji. Kupitia uchambuzi wa dynamic, vipengele hivi vilivyofichwa vinaweza kukamatwa wakati wa kufichuliwa, vikifunua sura yao halisi.
|
- **Runtime Decryption**: Mbinu nyingi za obfuscation zinahusisha kuandika nyuzi au sehemu za msimbo ambazo zinafichwa tu wakati wa utekelezaji. Kupitia uchambuzi wa dynamic, vipengele hivi vilivyoandikwa vinaweza kukamatwa wakati wa ufichuzi, vikifunua sura yao halisi.
|
||||||
- **Kutambua Mbinu za Obfuscation**: Kwa kufuatilia tabia ya programu, uchambuzi wa dynamic unaweza kusaidia kutambua mbinu maalum za obfuscation zinazotumika, kama vile virtualization ya msimbo, packers, au uzalishaji wa msimbo wa dynamic.
|
- **Identifying Obfuscation Techniques**: Kwa kufuatilia tabia ya programu, uchambuzi wa dynamic unaweza kusaidia kutambua mbinu maalum za obfuscation zinazotumika, kama vile virtualization ya msimbo, packers, au uzalishaji wa msimbo wa dynamic.
|
||||||
- **Kufichua Uwezo wa Siri**: Msimbo uliofichwa unaweza kuwa na uwezo wa siri ambao hauonekani kupitia uchambuzi wa statiki pekee. Uchambuzi wa dynamic unaruhusu kuangalia njia zote za msimbo, ikiwa ni pamoja na zile zinazotekelezwa kwa masharti, ili kufichua uwezo huo wa siri.
|
- **Uncovering Hidden Functionality**: Msimbo uliofichwa unaweza kuwa na kazi zilizofichwa ambazo hazionekani kupitia uchambuzi wa statiki pekee. Uchambuzi wa dynamic unaruhusu kuangalia njia zote za msimbo, ikiwa ni pamoja na zile zinazotekelezwa kwa masharti, ili kufichua kazi hizo zilizofichwa.
|
||||||
|
|
||||||
## References and Further Reading
|
### Automated De-obfuscation with LLMs (Androidmeda)
|
||||||
|
|
||||||
|
Ingawa sehemu zilizopita zinazingatia mikakati ya kikamilifu ya mikono, mwaka wa 2025 daraja jipya la *Large-Language-Model (LLM) powered* zana lilitokea ambalo linaweza kujiendesha kazi nyingi za kuchosha za kubadilisha majina na urejeleaji wa mtiririko wa udhibiti.
|
||||||
|
Mradi mmoja unaowakilisha ni **[Androidmeda](https://github.com/In3tinct/Androidmeda)** – zana ya Python inayochukua *decompiled* vyanzo vya Java (kwa mfano, vilivyotengenezwa na `jadx`) na kurudisha toleo lililo safishwa sana, lililo na maelezo na lililo na alama za usalama.
|
||||||
|
|
||||||
|
#### Key capabilities
|
||||||
|
* Inabadilisha majina yasiyo na maana yaliyotengenezwa na ProGuard / DexGuard / DashO / Allatori / … kuwa majina ya *semantic*.
|
||||||
|
* Inatambua na kuunda upya **control-flow flattening**, ikibadilisha mashine za hali za opaque switch-case kuwa miduara ya kawaida / if-else.
|
||||||
|
* Inafichua mifumo ya kawaida ya **string encryption** inapowezekana.
|
||||||
|
* Inatia **maelezo ya ndani** yanayoelezea kusudi la vizuizi tata.
|
||||||
|
* Inafanya *lightweight static security scan* na kuandika matokeo kwenye `vuln_report.json` na viwango vya ukali (taarifa → muhimu).
|
||||||
|
|
||||||
|
#### Installation
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/In3tinct/Androidmeda
|
||||||
|
cd Androidmeda
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
```
|
||||||
|
#### Kuandaa ingizo
|
||||||
|
1. Fanya decompile APK ya lengo kwa kutumia `jadx` (au decompiler mwingine wowote) na uweke tu saraka ya *chanzo* inayoshikilia faili za `.java`:
|
||||||
|
```bash
|
||||||
|
jadx -d input_dir/ target.apk
|
||||||
|
```
|
||||||
|
2. (Hiari) Punguza `input_dir/` ili iwe na vifurushi vya programu pekee unavyotaka kuchambua – hii inaboresha kasi ya usindikaji na gharama za LLM kwa kiasi kikubwa.
|
||||||
|
|
||||||
|
#### Mifano ya matumizi
|
||||||
|
|
||||||
|
Mtoa huduma wa mbali (Gemini-1.5-flash):
|
||||||
|
```bash
|
||||||
|
export OPENAI_API_KEY=<your_key>
|
||||||
|
python3 androidmeda.py \
|
||||||
|
--llm_provider google \
|
||||||
|
--llm_model gemini-1.5-flash \
|
||||||
|
--source_dir input_dir/ \
|
||||||
|
--output_dir out/ \
|
||||||
|
--save_code true
|
||||||
|
```
|
||||||
|
Offline (local `ollama` backend with llama3.2):
|
||||||
|
```bash
|
||||||
|
python3 androidmeda.py \
|
||||||
|
--llm_provider ollama \
|
||||||
|
--llm_model llama3.2 \
|
||||||
|
--source_dir input_dir/ \
|
||||||
|
--output_dir out/ \
|
||||||
|
--save_code true
|
||||||
|
```
|
||||||
|
#### Matokeo
|
||||||
|
* `out/vuln_report.json` – JSON array yenye `file`, `line`, `issue`, `severity`.
|
||||||
|
* Mti wa pakiti ulioakisi wenye **faili za `.java` zilizotolewa** (tu ikiwa `--save_code true`).
|
||||||
|
|
||||||
|
#### Vidokezo & matatizo
|
||||||
|
* **Darasa lililokosa** ⇒ mara nyingi husababishwa na njia isiyoweza kusomeka; tengeneza pakiti au sasisha regex ya parser.
|
||||||
|
* **Muda wa kukimbia polepole / matumizi makubwa ya token** ⇒ elekeza `--source_dir` kwa *pakiti maalum* za programu badala ya decompile nzima.
|
||||||
|
* Daima *kagua kwa mikono* ripoti ya udhaifu – mawazo ya LLM yanaweza kusababisha positives / negatives za uwongo.
|
||||||
|
|
||||||
|
#### Thamani ya Kivitendo – Utafiti wa kesi ya malware ya Crocodilus
|
||||||
|
Kutoa sampuli iliyo na obfuscation kubwa kutoka kwa trojan ya benki ya *Crocodilus* ya mwaka 2025 kupitia Androidmeda ilipunguza muda wa uchambuzi kutoka *masaa* hadi *dakika*: chombo kilirejesha semantics za call-graph, kilifunua simu za APIs za upatikanaji na URLs za C2 zilizowekwa kwa nguvu, na kuzalisha ripoti fupi ambayo inaweza kuingizwa kwenye dashibodi za wachambuzi.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Marejeo na Kusoma Zaidi
|
||||||
|
|
||||||
|
- [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
||||||
|
- BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
||||||
|
- Hotuba hii inazungumzia uhandisi wa nyuma wa moja ya maktaba ngumu zaidi za anti-analysis nilizoshuhudia ikitumika na programu ya Android. Inashughulikia hasa mbinu za obfuscation katika msimbo wa asili.
|
||||||
|
- REcon 2019: “The Path to the Payload: Android Edition” [[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
||||||
|
- Hotuba hii inajadili mfululizo wa mbinu za obfuscation, pekee katika msimbo wa Java, ambazo botnet ya Android ilikuwa ikitumia kuficha tabia yake.
|
||||||
|
- Deobfuscating Android Apps with Androidmeda (blog post) – [mobile-hacker.com](https://www.mobile-hacker.com/2025/07/22/deobfuscating-android-apps-with-androidmeda-a-smarter-way-to-read-obfuscated-code/)
|
||||||
|
- Msimbo wa chanzo wa Androidmeda – [https://github.com/In3tinct/Androidmeda](https://github.com/In3tinct/Androidmeda)
|
||||||
|
|
||||||
- [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
- [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
||||||
- BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
- BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
||||||
- Hotuba hii inazungumzia uhandisi wa nyuma wa moja ya maktaba za asili za kupambana na uchambuzi ngumu zaidi ambazo nimeona zikitumika na programu ya Android. Inashughulikia hasa mbinu za obfuscation katika msimbo wa asili.
|
- Hotuba hii inazungumzia uhandisi wa nyuma wa moja ya maktaba ngumu zaidi za anti-analysis nilizoshuhudia ikitumika na programu ya Android. Inashughulikia hasa mbinu za obfuscation katika msimbo wa asili.
|
||||||
- REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
- REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
||||||
- Hotuba hii inajadili mfululizo wa mbinu za obfuscation, pekee katika msimbo wa Java, ambazo botnet ya Android ilikuwa ikitumia kuficha tabia yake.
|
- Hotuba hii inajadili mfululizo wa mbinu za obfuscation, pekee katika msimbo wa Java, ambazo botnet ya Android ilikuwa ikitumia kuficha tabia yake.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user