ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019picoCTF] droids3
    System/CTF 2019. 10. 12. 23:27

    picoCTF - drodis3

    picoCTF droids 시리즈 중 4번째 문제다.

    화면 구성은 다음과 같다.

     

    droids3 실행모습

    이번에도 사용자의 입력을 받고, 버튼을 누르면 입력 값 처리 후 결과 값을 "i'm a flag!"위치에 출력해준다.

     

    droids3 - FlagstaffHill.getFlag( )

    우리가 입력한 값은 getFlag( )의 첫 번째 인자로 넘어가는데, 입력된 값에 상관없이 nope( )가 실행된다.

    빨간박스 nope( )는 단순히 "don't wanna"문자열을 반환하는 메소드이기 때문에 어떠한 값을 입력해도 결과는 똑같다.

     

    주황박스 yep( )은 이전 문제들에서 Flag값을 얻어올 때와 같은 행동을 하고 있다.

    하지만, yep( )는 어떠한 조건에서도 호출되지 않기 때문에 일반적인 방법으로는 yep( )의 실행값을 확인할 수 없다.

    이때 사용할 수 있는 방법이 Frida를 이용한 후킹이다.

    후킹을 통해서 실행되지 않는 yep( )을 호출할 수 있고, 반환 값도 출력할 수 있다.

    Frida 환경구성은 다음 링크를 참고하길 바란다. https://py0zz1.tistory.com/126?category=867529 

     

    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);
        }
    });
    """
    
    package_name = "com.hellocmu.picoctf"
    device = frida.get_usb_device(timeout=10)
    pid = device.spawn([package_name])
    process = device.attach(pid)
    device.resume(pid)
    print("ATTACH PROCESS - {}".format(pid))
    
    script = process.create_script(hook_code)
    script.on("message",on_messaege)
    script.load()
    sys.stdin.read()

    위 코드로 droids3어플을 후킹할 수 있다.

    실질적인 후킹은 Javascript로 짜여진 hook_code에서 진행된다.

    getFlag( )가 실행될 때 yep( )를 호출하고 반환값을 retVal에 저장한 뒤, retVal의 값을 출력하는 코드이다.

    실행 결과는 다음과 같다.

    droids3 후킹 결과

    성공적으로 후킹이 되었고, yep( )의 반환값으로 picoCTF{tis.but.a.scratch} Flag값을 얻을 수 있다.

    'System > CTF' 카테고리의 다른 글

    CTFd 설치법  (4) 2019.11.29
    [2019picoCTF] droids4  (0) 2019.10.13
    [2019picoCTF] droids2  (1) 2019.10.12
    [2019picoCTF] droids1  (0) 2019.10.12
    [2019picoCTF] droids0  (0) 2019.10.12

    댓글

Designed by Tistory.