7.5 KiB
Reversing Native Libraries
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
For further information check: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
рдПрдВрдбреНрд░реЙрдЗрдб рдРрдкреНрд╕ рдкреНрд░рджрд░реНрд╢рди-рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ C рдпрд╛ C++ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдиреИрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрд▓рд╡реЗрдпрд░ рдирд┐рд░реНрдорд╛рддрд╛ рднреА рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдиреНрд╣реЗрдВ DEX рдмрд╛рдЗрдЯрдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрднрд╛рдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреМрд╢рд▓ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ, рди рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рд┐рдЦрд╛рдиреЗ рдкрд░ред рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП ARM рдФрд░ x86 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВред
Key Points:
- Native Libraries in Android Apps:
- рдкреНрд░рджрд░реНрд╢рди-рдЧрд╣рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- C рдпрд╛ C++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред
.so
(рд╢реЗрдпрд░ рдХреА рдЧрдИ рд╡рд╕реНрддреБ) рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓рд┐рдирдХреНрд╕ рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рдорд╛рди рд╣реИред- рдореИрд▓рд╡реЗрдпрд░ рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреИрдЯрд┐рд╡ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реИрдВред
- Java Native Interface (JNI) & Android NDK:
- JNI рдЬрд╛рд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдиреИрдЯрд┐рд╡ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- NDK рдиреИрдЯрд┐рд╡ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред
- JNI рдФрд░ NDK рдЬрд╛рд╡рд╛ (рдпрд╛ рдХреЛрдЯрд▓рд┐рди) рдХреЛрдб рдХреЛ рдиреИрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
- Library Loading & Execution:
- рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ
System.loadLibrary
рдпрд╛System.load
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред - рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ JNI_OnLoad рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред
- рдЬрд╛рд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдиреИрдЯрд┐рд╡ рд╡рд┐рдзрд┐рдпрд╛рдБ рдиреИрдЯрд┐рд╡ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред
- Linking Java Methods to Native Functions:
- Dynamic Linking: рдиреИрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
- Static Linking: рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП
RegisterNatives
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред - Reverse Engineering Tools and Techniques:
- Ghidra рдФрд░ IDA Pro рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдиреИрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
JNIEnv
JNI рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред- рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдФрд░ рдиреИрдЯрд┐рд╡ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдпрд╛рдо рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
Resources:
- Learning ARM Assembly:
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рдЧрд╣рд░реА рд╕рдордЭ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡рд┐рддред
- ARM Assembly Basics Azeria Labs рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред
- JNI & NDK Documentation:
- Oracle's JNI Specification
- Android's JNI Tips
- Getting Started with the NDK
- Debugging Native Libraries:
- Debug Android Native Libraries Using JEB Decompiler
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.