문제
해결
이번문제를 봤을때 든 풀이 방법은 "코드 패치 , 후킹" 두가지 였습니다.
코드 패치를 해봤는데 코드 패치후 서명까지 했는데도 제가 뭐가 실수가 있었는지 설치가 안되었습니다.
다음에 공부하고 다시 블로그에 쓰던가 해야 할것 같습니다.
그래서 이번에는 후킹으로 진행 하겠습니다.
import frida,sys
def on_messaege(message,data):
print("{} -> {}".format(message,data))
#제일 중요한 후킹 코드
hook_code = """
Java.perform(function()
{
console.log("[*] HOOK START");
var Target = Java.use("com.hellocmu.picoctf.FlagstaffHill");
Target.getFlag.overload("java.lang.String","android.content.Context").implementation = function(a,b)
{
console.log("[*] getFlag() Hook IN");
var retVal = this.yep(a);
console.log("retVal: "+retVal);
return this.getFlag(a,b);
}
});
"""
#java.perform() == 불러오는 값에 함수를 정의해서 javaMethod를 후킹할 수 있다.
#java.use()로 후킹할 class에 대한 객체를 받아 올수 있다.
#implementation을 이용해서 exit() 대신에
#console.log == 파이썬 콘솔창에 값을 출력 가능
package_name = "com.hellocmu.picoctf" #후킹할 app의 패키지명
device = frida.get_usb_device(timeout=10) #연결된 Device Attach
pid = device.spawn([package_name]) #App실행 후 , PID 저장
process = device.attach(pid) #APP Attach
device.resume(pid)#APP 재실행
print("ATTACH PROCESS - {}".format(pid))
#java로 실행 되던걸 hook_code로 변환 시키는 과정
script = process.create_script(hook_code) #java -> hook_code
script.on("message",on_messaege) # script 디버깅 함수 지정
script.load() #script load
sys.stdin.read() #표준 입력 사용
코드에 대한 설명을 써놓았으므로 다른 설명은 생략하겠습니다. 위 코드를 응용하면 거의 대부분의 후킹을 진행 할 수 있습니다. 이걸 실행하면
이제 마지막 droid4 만 남았습니다...0.<
'안드로이드에 관하여 > 안드로이드 CTF' 카테고리의 다른 글
PicoCTF [droids 2] (0) | 2021.01.04 |
---|---|
pico CTF [droid 1] (0) | 2021.01.04 |
pico CTF [droid 0] (0) | 2021.01.04 |