• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

static 메소드 후킹후 콜...문제

20.04.09 19:00 작성 조회수 324

0

uncrackable 1번을 풀면서 복호화 하는 과정중 static 함수를 후킹하여 작성하여 실행했지만 코드로 부를때는 hookMethod

라는 글이 안나옵니다 그러나 후킹은 제대로 된건지 success  This is the correct secret 문구는 뜹니다.

함수 부르는 구문이 문제가 있는건지 후킹하기전 메소드가 불러지는건지 잘 모르겠습니다.

import frida, sys


def on_message(message, data):
if message['type'] == 'send':
print(message['payload'])
else:
print(message)


jsCode = """
setImmediate(function()
{
Java.perform(function()
{
var aClass = Java.use("sg.vantagepoint.uncrackable1.a");
aClass.a.overload("java.lang.String").implementation = function(arg)
{
send("hookMethod");
return true;
}

Java.choose("sg.vantagepoint.uncrackable1.MainActivity",
{
onMatch :function (instance)
{
var string = Java.use("java.lang.String");

var result = aClass.a(string.$new("aaa"));

send("result = ");

},
onComplete : function ()
{
send("End");
}
})
})
});
"""

process = frida.get_usb_device().attach("owasp.mstg.uncrackable1")
script = process.create_script(jsCode)
script.on('message', on_message)
script.load()
sys.stdin.read()

답변 2

·

답변을 작성해보세요.

0

이응주님의 프로필

이응주

질문자

2020.04.10

음... 원래 result 값도 같이 출력해봤는데 false 로 반환 되더라구요.. 작동에는 문제 없지만 onMatch 안에서 

var result =  aClass.a(string.$new("aaa")); 

aClass.a(string.$new("aaa")); 이구문에서 함수가 실행되는데 제가 후킹한 함수가 아니라 원래 함수가 불려져서  false를 반환하는것 같습니다...

C:\Users\leeeungjoo\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/leeeungjoo/PycharmProjects/untitled/Hook.py

[*] Exit Bypass

result = false

End

hookMethod

이런식으로 값이 나오네요 ㅠㅠ

0

김태영님의 프로필

김태영

2020.04.09

안녕하세요. 보안프로젝트 김태영입니다.

올려주신 코드에 루팅 탐지 우회 로직만 추가하여 테스트해보니 저는 잘 출력이 됩니다. 한번 컴퓨터를 재부팅하신 다음에 해보시겠어요?

코드에는 문제가 없습니다. 후킹은 제대로 되어 Success! 가 출력된 것입니다.

import frida, sys


def on_message(message, data):
    if message['type'] == 'send':
        print(message['payload'])
    else:
        print(message)


jsCode = """
setImmediate(function()
{
    Java.perform(function()
    {
    
        var exit_bypass = Java.use("java.lang.System");
		exit_bypass.exit.implementation = function(arg){
            send("[*] Exit Bypass");
		}
        
        var aClass = Java.use("sg.vantagepoint.uncrackable1.a");
        aClass.a.overload("java.lang.String").implementation = function(arg)
        {
            send("hookMethod");
            return true;
        }

        Java.choose("sg.vantagepoint.uncrackable1.MainActivity",
        {
            onMatch :function (instance)
            {
                var string = Java.use("java.lang.String");

                var result =  aClass.a(string.$new("aaa"));

                send("result = ");

            },
            onComplete : function ()
            {
                send("End");
            }
        })
    })
});
"""

process = frida.get_usb_device().attach("owasp.mstg.uncrackable1")
script = process.create_script(jsCode)
script.on('message', on_message)
script.load()
sys.stdin.read()