ν°μ€ν 리 λ·°
κ°μ
Rootingμ΄λ μλλ‘μ΄λμμ μ νλμ΄ μλ νμ μμ€ν μ λν΄ μ‘μΈμ€ ν μ μλλ‘ νλ κ²μ μλ―Ένλ©° μ΄λ₯Ό ν΅ν΄ μ¬μ©μ λλ°μ΄μ€ λ΄λΆμμ μ¬μ©ν μ μλ λ€μν μμ€ν λͺ λ Ήμ λ΄λ € μμ λλ μμ κ° κ°λ₯νλ©° λ£¨νΈ κΆνμΌλ‘ μ κ·Όμ΄ κ°λ₯ν μ±μ μ¬μ©ν μλ μκ² λ©λλ€.
루ν μ νκ²λλ©΄ μμ μ μμ€ν νμΌμ μ κ·Όμ΄ κ°λ₯ν΄ μ§κΈ° λλ¬Έμ μλ²½νκ² μ μ΄κ° κ°λ₯ν΄μ Έ 보μμ λ¬Έμ κ° λ°μν μ μμ΄ μ€μ κΈμ΅, 곡곡 κΈ°κ΄μμλ 루ν λ λ¨λ§μμ μ ν리μΌμ΄μ μ΄ μ€νλμ§ μλλ‘ μ μ΄νκ³ μμ΅λλ€.
Rooting νμ§ λ°©λ²
1. μ ν리μΌμ΄μ μ€ν μ νΉμ λͺ λ Ήμ΄ μ€ν λ° νμΈ(SU λͺ λ Ή μ€ννμΈ)
2. 루ν λ λ¨λ§μ μ‘΄μ¬νλ νμΌ νμΈ(/system/su, /system/app/Superuse.apk λ±)
3. μ£Όλ‘ μ¬μ©λλ 루ν κ΄λ ¨ μ΄ν 체ν¬(Kingo Root, FramaRoot, One Click Root, TowelRoot λ±)
루ν νμ§λ₯Ό μ°νν μ μλ λ°©λ²μ λͺ κ°μ§κ° μ‘΄μ¬νμ§λ§ μ€λμ κ·Έμ€ "objection"μ΄λΌλ λꡬλ₯Ό ν΅ν΄ 루ν νμ§λ₯Ό μ°νν΄λ³΄λλ‘ νκ² μ΅λλ€.
Objection μ΄λ
Frida κΈ°λ°μΌλ‘ λμνλ Run-Time ExplorationμΌλ‘ λ§ κ·Έλλ‘ λ°νμμ μ‘°μνμ¬ νΉμ νμλ₯Ό ν μ μλλ‘ νλ‘μΈμ€μ μ£Όμ λμ΄ λλ²κΉ μ μννκ±°λ λμ μΌλ‘ λΆμνλλ° μ£Όλ‘ μ¬μ©λλ λꡬμ λλ€. κ³Όκ±°μλ iOS κΈ°λ°μΌλ‘λ§ λμνλλ‘ λμ΄μμ§λ§ νμ¬λ Android νκ²½μμλ λμνλλ‘ λ¦΄λ¦¬μ¦ λμμ΅λλ€.(iOS νκ²½μ΄ λ μμ μ μ΄κ³ νΈνμ±μ΄ λμ)
<python3 νκ²½>
# pip install objection -> μ€μΉ
# objection -> μ€ν
Options:
-N, --network Connect using a network connection instead of USB.
[default: False]
-h, --host TEXT [default: 127.0.0.1]
-p, --port INTEGER [default: 27042]
-ah, --api-host TEXT [default: 127.0.0.1]
-ap, --api-port INTEGER [default: 8888]
-g, --gadget TEXT Name of the Frida Gadget/Process to connect to.
[default: Gadget]
-S, --serial TEXT A device serial to connect to.
-d, --debug Enable debug mode with verbose output. (Includes
agent source map in stack traces)
--help Show this message and exit.
Commands:
api Start the objection API server in headless mode.
device-type Get information about an attached device.
explore Start the objection exploration REPL.
patchapk Patch an APK with the frida-gadget.so.
patchipa Patch an IPA with the FridaGadget dylib.
run Run a single objection command.
version Prints the current version and exists.
nox_adb shell
cd /data/local/tmp/
/data/local/tmp # ./<ν리λ€μλ²νμΌ> &
objectionμ "frida" κΈ°λ°μΌλ‘ λμνκΈ° λλ¬Έμ μμ μ λλ°μ΄μ€ λ΄λΆλ‘ μ μ κ·Όμ νμ¬ νλ¦¬λ€ μλ²λ₯Ό μ€ννλλ‘ νκ² μ΅λλ€.
*νλ¦¬λ€ μλ² μ€μΉλ°©λ²μ νλ¨ ν¬μ€ν μ°Έκ³
νλ¦¬λ€ μλ²λ₯Ό μ€νν΄μ£Όμ ¨μΌλ "frida-ps -U" λͺ λ Ήμ΄λ₯Ό ν΅ν΄ νλ‘μΈμ€ κ° ν΅μ μ΄ κ°λ₯νμ§ νμΈν΄ μ£Όμλ©΄ λ©λλ€. 루ν νμ§λ₯Ό μ°νν μ±μ insecurebankλ‘ νκ² μ΅λλ€.
frida-ps -Ua -> μ± ν¨ν€μ§λͺ νμΈ(com.android.insecurebankv2)
objection -g <ν¨ν€μ§λͺ > explore
νλ¦¬λ€ μλ² ν΅μ μ΄ κ°λ₯νλ©΄ μ’ μ μ μ€μΉν΄μ£Όμ ¨λ objectionμ ν΅ν΄ insecurebankμ attach ν΄μ£Όμλ©΄ λ©λλ€.
νμ₯μ μ°ννκΈ° μν΄μ insecurebankμ μμ€μ½λλ₯Ό μ볡 ννλ‘ λλ¦° ν μ μ λΆμμ μ§ννμ¬ νμ§ ν¬μΈνΈλ₯Ό μ°Ύμμ£Όμ μΌ λ©λλ€. μ λ insecurebank μ±μ. apkννλ‘ μΆμΆ -> jadxλ₯Ό μ¬μ©νμ¬ μ볡 νν μ½λ νμΈνλλ‘ νκ² μ΅λλ€.
Text Search νμμ rootλ₯Ό κ²μνμ¬ rooting νμ§ κ΄λ ¨ μ½λκ° μ΄λ μμΉμ μ‘΄μ¬νλμ§ νμΈν΄μΌ λ©λλ€.
PostLogin.root_status νμΌμ λ΄μ© μ€ "SU" κ΄λ ¨ν νμ§λ₯Ό μ§ννμ¬ μ€νλ λ¨λ§ νκ²½μ΄ λ£¨ν λ¨λ§μΈμ§ νμ§λ₯Ό νκ³ μμ΅λλ€. "doesSUexist"λ₯Ό ν΄λ¦νμ¬ μ°κ΄ λ‘μ§μ μ°Ύμλ³΄κ² μ΅λλ€.
λ°λ‘ νλ¨μ Runtime.getRuntime(). execλ₯Ό ν΅ν΄ SUκ° μ€νλλμ§ μλμ§ μ¬λΆλ₯Ό νλ¨νκ³ μμΌλ©° νμ μ Boolean λ°©μμΌλ‘ True λλ Falseλ°νμ ν΅ν΄ νλ¬κ°κ³ μλ κ²μ λ³΄μ€ μ μμ΅λλ€.
μΌλ°μ μΌλ‘ 루ν λ λ¨λ§ λ΄λΆμλ "su" λ°μ΄λ리 νμΌμ΄ μ‘΄μ¬νκΈ° λλ¬Έμ νμ§μ κ±Έλ¦¬κ² λ©λλ€.
# android hooking list class_methods <νμ§ μ½λ κ²½λ‘>
첫 λ²μ§Έλ‘ objectionμ μ¬μ©νμ¬ λ£¨ν νμ§ λ‘μ§μ΄ μ‘΄μ¬νλ νμΌμ ν μ κ±Έμ΄ μ‘΄μ¬νλ λ©μλ리μ€νΈλ₯Ό μΆλ ₯ν΄λ³΄λ©΄ μμμ νμΈνλ "doesSUexist" λ©μλκ° λ³΄μ λλ€.
νμ§ μ½λ κ²½λ‘λ μμ²λΌ νμΌλͺ μ Copy νμ¬ κ·Έλλ‘ λΆμ¬ λ£μ΄ μ£Όμλ©΄ λ©λλ€.
# android hooking watch class_method <ν¨ν€μ§λͺ .ν΄λμ€.λ©μλ> --dump-args
루ν λ λ¨λ§μ΄ μ ν리μΌμ΄μ μ μ€νν κ²½μ° "doesSUexist"μ λ°ν κ°μ΄ True μΈμ§ FalseμΈμ§ μ¬λΆλ₯Ό νλ¨ν μ μλ€λ©΄ μ΄λ₯Ό μ‘°μνμ¬ λΉ λ£¨ν λ¨λ§μΈ κ²μ²λΌ ν μ μμ΅λλ€.
insecurebankμ μ±μ λ€μ μ¬ μμνμ¬ λ°ν κ°μ μΆμ ν΄μΌ λ©λλ€.
μ±μ μ¬μ€νν΄λ³Έ κ²°κ³Ό 루ν λ λ¨λ§μΌ κ²½μ° λ°ν κ°μ΄ TrueμΌκ±°λΌλ μΆμΈ‘μ΄ κ°λ₯ν©λλ€. μ΄μ μ΄ λ°ν κ° μ 보λ₯Ό μ΄μ©ν΄ μ‘°μν΄λ³΄κ² μ΅λλ€.
# android hooking set return_value <ν¨ν€μ§λͺ .ν΄λμ€.λ©μλ> false
루ν λ¨λ§ μΌμ false λ°ν κ°μ μΆλ ₯νλ "deosSUexit" λ©μλμ True κ°μΌλ‘ 리ν΄λλλ‘ μ‘°μμ νκ³ μ±μ ν λ² λ μ¬μμνλλ‘ νκ² μ΅λλ€.
λ°ν κ°μ 리ν΄νμ¬ μ±κ³΅μ μΌλ‘ λΉ λ£¨ν λ¨λ§λ‘ μΈμνκ²λ μ°νκ° κ°λ₯ν΄μ§ κ²μ λ³Ό μ μμ΅λλ€.
'MOBILE' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Android] Broadcast Receiver μ·¨μ½μ (0) | 2021.02.09 |
---|---|
[Android] Activity Component μ·¨μ½μ (0) | 2021.02.08 |
[Android] SSL Pinning μ°ν (0) | 2021.02.06 |
[Android] Burp Suite μ°λ(NOX) (0) | 2021.02.05 |
[Android] λλ‘μ (Drozer) νκ²½ κ΅¬μΆ (0) | 2021.02.04 |