1. Python Binding
1.1 ๊ฐ์
Frida๋ JS API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๊ณ , ํํนํ ์ ์์์ต๋๋ค. ์ด ๊ณผ์ ์์ ์ฌ์ฉ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํฐ๋ฏธ๋์์ ํ๋ก์ธ์ค์ Attach ํ์ฌ ๋ช ๋ น์ด ์ํ
- ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํด์ ํํน
์ด๋ฐ ์์
๋ค์ python์ ์ด์ฉํ์ฌ ์๋ํ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
ย
ย
1.2 ์ด์
๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค.
- ์๋ํ ๊ฐ๋ฅ
- python์์ ์ง์ํ๋ Frida ์ด์ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ ๊ฐ๋ฅ
- Frida process๊ฐ ๋์ํ ๋ ์ด์ธ์ ๊ฒ๋ ์ปจํธ๋กค ํ ์ ์์ต๋๋ค.
ย
ย
ย
2. ์ฌ์ฉ ๋ฐฉ๋ฒ
2.1 ๊ธฐ๋ณธ ํ์
โก๏ธ import
๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด
import
ํฉ๋๋ค.import frida, sys
- sys ๋ชจ๋์ script๊ฐ ๋์ํ๊ธฐ ์ ์ ์ข ๋ฃ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
ย
ย
โก๏ธ ๊ธฐ๋ณธ ํ
# jscode ์น์ jsCode = """ ๋์ํ js script ์์ฑ """ # USB ์ฅ์น์ ์ฐ๊ฒฐ๋์ด ์๋ ๋๋ฐ์ด์ค์ ์ค์น๋ ํจํค์ง๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. session = frida.get_usb_device(timeout=5).attach("com.package.name") # jsCode์ ์๋ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ frida์์ ์ฌ์ฉํ ์ ์๋๋ก ํฌ๋ฉงํ ํฉ๋๋ค script = session.create_script(jscode) # ์์ฑํ script๋ฅผ ๋ก๋ํฉ๋๋ค. script.load() # script๊ฐ ๋์ํ๊ธฐ ์ ์ ์ข ๋ฃ๋๋ ๋ฌธ์ ์๋ฐฉ sys.stdin.read()
ย
ย
โก๏ธ Spawn์ ์ด์ฉํ ํ
device = frida.get_usb_device(timeout=5) # ์ฐ๊ฒฐ๋ ์ฅ์น์์ spwanํ ํจํค์ง ์์ฑ p = device.spawn(["pakagename"]) # ํ๋ก์ธ์ ์ฐ๊ฒฐ session = device.attach(p) #์คํฌ๋ฆฝํธ ์์ฑ, ๋ก๋ ๋์ผ . . . # ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค ๋ฉ์ธ ์ค๋ ๋ ์คํ device.resume(p) sys.stdin.read()
ย
ย
2.2 ์์
import frida, sys jscode = """ setImmediate(function() { Java.perform(function() { Java.enumerateLoadedClasses({ onMatch : function(className) { send(`[+] find ${className}`) }, onComplete : function() { } }) }) }) """ def on_message(message, data): print(message) # USB ์ฅ์น์ ์ฐ๊ฒฐ๋์ด ์๋ ๋๋ฐ์ด์ค์ ์ค์น๋ ํจํค์ง๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. session = frida.get_usb_device(timeout=5).attach("InsecureBankv2") # jsCode์ ์๋ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ frida์์ ์ฌ์ฉํ ์ ์๋๋ก ํฌ๋ฉงํ ํฉ๋๋ค script = session.create_script(jscode) # ์์ฑํ script๋ฅผ ๋ก๋ํฉ๋๋ค. script.on('message', on_message) script.load() # script๊ฐ ๋์ํ๊ธฐ ์ ์ ์ข ๋ฃ๋๋ ๋ฌธ์ ์๋ฐฉ sys.stdin.read()
- โ ๏ธ ์ถ๋ ฅ ๊ฐ์ ์ ๋ฌ ๋ฐ์ผ๋ ค๋ฉด js code๋ถ๋ถ์
console.log โ send
๋ก ์์ ํ์ฌ์ผ ํฉ๋๋ค.
- ์ดํ
script.on('message', messageFunction)
์ ์ฌ์ฉํ์ฌ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.
- messageFunction์ ์ปค์คํฐ๋ง์ด์ง ํ์ฌ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. (callback ๋งค๊ฐ๋ณ์๋ 2๊ฐ)