-
[์๋๋ก์ด๋ ๋ฆฌ๋ฒ์ฑ] Firda, Frida-Server ๋ฅผ ์๋๋ก์ด๋์ ์ค์นํ๊ธฐSECURITY/Android Reversing 2022. 2. 24. 20:21
Frida ๋ python ๊ธฐ๋ฐ์, JS Injection์ ์ด์ฉํ์ฌ Windows, macOS, Linux, iOS, Android, and QNX ๊ธฐ๋ฐ์ ๋ค์ดํฐ์ฑ์ ๋ํด ํํน์ด ๊ฐ๋ฅํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Frida ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Frida (ํํน ์ฝ๋ ์์ฑ) ์ Frida-Server (Android ์์ ์คํ) ๋ฅผ ์ค์นํด์ผ ํ๋ค.
1) ๋๋ฐ์ด์ค์์ frida-server ์คํ 2) python ์ผ๋ก ์์ฑํ hooking ์ฝ๋ ์คํ ์ ๊ฐ๋จํ ๊ณผ์ ์ผ๋ก Frida ๋ก ํํน์ ํด๋ณผ ์ ์๋ค.
๊ทธ๋ผ ์ด ๋์ ์ด๋ป๊ฒ ์ค์นํ๋์ง๋ฅผ ์์๋ณด๊ฒ ๋ค.
Frida ์ค์น
ํํน์ ํ๋ ค๋ PC ์์ Frida ๋ฅผ ์ค์นํ๊ณ python ์ผ๋ก ํํน ์ฝ๋๋ฅผ ์์ฑํด์ ์คํ์ํค๋ฉด ๋๋ค.
Frida ๋ pip ๋ก ๊ฐ๋จํ๊ฒ ์ค์นํ ์ ์๋ค.
$ pip install frida
Frida-Server ๋ฅผ emulator ์ ์ค์น
frida-server ๋ฅผ ์ค์นํ๋ ๊ฒ์ ๊ฝค๋ ๊ณผ์ ์ด ๋ณต์กํ๋ค. ๊ทธ๋ฌ๋ ์์ ์ ํ๊ฒฝ์ ํ์ํ ์์ ๋ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
1. frida-server ํ์ผ ๋ค์ด
Frida server ๋, Frida Release ์ ๊ฐ์ ๋์ Android ์ ๋ง๋ ํ์ผ์ ๋ค์ด๋ฐ์ผ๋ฉด ๋๋ค.
Frida Release: github.com/frida/frida/releases
์ด ํ์ผ์ ๋ค์ด๋ฐ์์ ์๋ฎฌ๋ ์ดํฐ์ ์ฎ๊ฒจ์ค ๊ฒ์ด๋ค.
๋ค์ด๊ฐ๋ณด๋ฉด release ์ ๋ง์ ํ์ผ์ด ์๋ค. ๊ทธ ์ค android ์์ ์์ ์ ์๋ฎฌ๋ ์ดํฐ์ ๋ง๋ ์น๊ตฌ๋ฅผ ์ฐพ์์ผ ํ๋ค.
Android ์ ๋ณด๋ adb ๋ก ์ฝ๊ฒ ํ์ธํ ์ ์๋ค.
$ adb shell getprop | find "cpu" // windows $ adb shell getprop | grep cpu // unix
๋์ ๊ฒฝ์ฐ, x86 ์ ์ฌ์ฉํ๊ณ ์์๋ค.
๊ทธ๋์ frida-server ์ค android-x86 ํ์ผ์ ๋ค์ด๋ฐ์๋ค.
2. frida-server ํ์ผ ์์ถ ํ๊ธฐ
frida-server ๋ ๋๋ฐ์ด์ค์์ ์คํํด์ผ ํ๋ฏ๋ก, adb ๋ฅผ ์ฌ์ฉํด์ frida server ๋ฅผ emulator ์ ์ฌ๋ ค์ฃผ์ด์ผ ํ๋ค.
.xz ๋ก ์์ถ๋ ํ์ผ์ ํด์ ํ๊ณ (๋ณธ์ธ ์์ง ์ฌ์ฉ) ์ฎ๊ธธ ๋ ํธํ๊ฒ frida-server ๋ก ์ด๋ฆ์ ๋ฐ๊ฟ์ฃผ์๋ค.
3. adb ๋ก frida-server ๋ฅผ emulator ๋ก ์ฎ๊ธฐ๊ณ ์คํํ๊ธฐ
์ด์ adb ๋ฅผ ์ฌ์ฉํด๋ณด์.
์ด๋, emulator ๋ ์คํ์ค์ด์ด์ผ ํ๋ค. (์๋๋ฉด adb ๊ฐ ์ด๋ค ๋๋ฐ์ด์ค์ ํด์ผํ ์ง ๋ชจ๋ฅธ๋ค.)
๊ทผ๋ฐ ํ์ผ ์ฎ๊ธฐ๊ณ system ์ ๋ฃ์ผ๋ ค๋ฉด su, ์ฆ ๋ฃจํธ ๊ถํ์ด ํ์ํ๋ค.
ํ์ง๋ง ๋ณ๋๋ก ๋ฃจํ ์ ํ์ง ์์๋, adb ๋ฅผ root ๋ก ์คํ์์ผ์ฃผ๋ฉด ๋๋ค.
๋์ ๊ฒฝ์ฐ, emulator ๊ฐ root ๊ถํ์ ์ง์ํ์ง ์๋ ๊ฑฐ๋ผ์ ์๋ก ๊น์์ฃผ์๋ค. ๋ค์ ์ฐธ์กฐ
๋๋ ๊ทธ๋ฅ adb shell ์์ su ๋ฅผ ํ๋ฉด root ๊ถํ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒฝ์ฐ๋ ์๋ ๊ฒ ๊ฐ๋๋ฐ, ๋์ ๊ฒฝ์ฐ ๋ง์ ์ฝ์ง ๋์ ์์ ๊ฐ์ ์ฌ์ค์ ์๊ฒ ๋์๊ณ ์๋ก์ด ๋๋ฐ์ด์ค๋ฅผ ์ค์นํด์ root ๊ถํ์ ์ป์ ์ ์์๋ค.
adb ๋ฅผ root ๊ถํ์ผ๋ก ๋ค์ ์คํ์์ผ๋ณด๊ฒ ๋ค.
$ adb root $ adb remount # ์ ๋ช ๋ น์ด ํ restarting adbd as root ๊ฐ์ log ๊ฐ ๋จ์ง ์์ ๊ฒฝ์ฐ $ adb shell :/ #
(๋ณดํต์ adb root ๋ฅผ ํ๋ฉด ์๋์ผ๋ก remount ๊ฐ ๋๋๋ฐ, ๋์ ๊ฒฝ์ฐ ์๋ฌด๋ฐ ๋ก๊ทธ๊ฐ ์๋ ์ ์ง์ remount ๋ฅผ ํด์ฃผ์๋ค..)
์ฑ๊ณต!
adb shell ์ ํ์ ๋ # ๋ก ๋๋ฉด ์ฑ๊ณต์ด๋ค. ($ ๋ ์ผ๋ฐ ์ฌ์ฉ์, # ๋ ๋ฃจํธ)
๊ทธ๋ฆฌ๊ณ adb ๋ก frida-server ํ์ผ์ ์ฎ๊ฒจ์ค๋ค.
adb push ๋ก frida-server ํ์ผ์ /data/local/tmp ํด๋๋ก ์ฎ๊ฒจ์ฃผ๋ ๊ฒ์ ์คํํด์ฃผ๋ฉด ๋๋ค.
์ด๋ tmp ํด๋๋ง ์์ด์ temp ๋ผ๊ณ ํ๋ฉด ์๋ ์๋ ์๋ค. ์ด๊ฒ ์ญ์ ๊ฐ์ธ๋ณ๋ก ํ์ธ์ด ํ์ํ๋ค.
(์๋๋ฉด adb shell ์์ ์ํ๋ ํด๋๋ฅผ ๋ง๋ค์ด๋ ๋๋ค)
> adb push frida-server /data/local/tmp > adb shell # cd data/local/tmp # chmod 755 frida-server # // frida-server ํ์ผ์ ์คํ ๊ถํ ๋ถ์ฌ # ./frida-server & // background ๋ก ์คํ
frida-server ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ์ํค๊ณ , ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๋ ์ ๋์ํ๊ณ ์์์ ํ์ธํ๋ค!
Frida ๋ฅผ ์ด์ฉํด์ ํํน ์ค์ต์ ํด๋ณผ ์ ์๋ ์์ ๋ค์ด ์๋ค.
- UnCrackable: OWASP ์์ ๋ง๋ ์๋๋ก์ด๋ ๋ฆฌ๋ฒ์ฑ์ ์ํ ์ฑ
github.com/OWASP/owasp-mstg/tree/master/Crackmes/Android - HousePlant2020 CTF ์๋๋ก์ด๋ ๋ฆฌ๋ฒ์ฑ ๋ฌธ์
ctftime.org/task/11358
๊ธฐํ๊ฐ ๋๋ฉด ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
'SECURITY > Android Reversing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- UnCrackable: OWASP ์์ ๋ง๋ ์๋๋ก์ด๋ ๋ฆฌ๋ฒ์ฑ์ ์ํ ์ฑ