Unity App 후킹 질문입니다.

홈 > 커뮤니티 > 질문 게시판
질문 게시판

Unity App 후킹 질문입니다.

4 py0zz1 9 5643
평소에 Frida분석을 하다가 게임쪽 후킹에 관심이 생겨서 요 근래 혼자서 해보고 있는데요..
mono나 il2형식의 App을 후킹할 때, 다음과 같이 후킹코드를 작성하고 있습니다.

var base = Module.findBaseAddress("libmono.so");
console.log("[*] BASE: "+base);

var Target_offset = 0x00017D40
var Target = base.add(Target_offset);
console.log("[*] Target: "+ Target);


Interceptor.attach(Target,
{
    onEnter: function(args)
    {
        console.log("[*] Target IN");
    },
    onLeave: function(retVal)
    {
        console.log("[*] Target OUT");
    }
});

위와 같이 mono일 경우에는 libmono.so, il2일경우에는 libil2cpp.so의 Base주소를 가져옵니다.
그리고 Assembly-CSharp.dll에서 알아낸 타겟메소드의 RVA를 Base주소에 더해서 후킹포인트를 잡습니다.

근데 후킹이 안되더라구요.. 원하는 후킹포인트를 제대로 잡은 것 같긴한데 후킹이 제대로 안됩니다..
예를 들어, Touch를 하면 실행되는 메소드를 후킹하면 터치를 할때 진입구문이 실행되어야 하는데 후킹스크립트에서 어떤 반응도 없습니다.


질문은 다음과 같습니다.

1. Frida Trace로 Native코드를 쭉 뽑아낼 수 있을까요? (린엔진 도움없이 제가 한번 짜보고 싶습니다.)
2. 후킹할 라이브러리가 mono에서는 libmono.so , il2에서는 libil2cpp.so가 맞나요?

이 외에도 고수님들의 조언 부탁드립니다. 또한, unity 후킹 쪽 레퍼런스 자료가 있다면 공유 부탁드립니다!
9 Comments
1 버퍼오버플로우 2019.12.05 22:10  
저도궁금하네요
1 쥬스2 2019.12.06 12:32  
0. 혹시 spawn 시키셨나요? spawn으로 저코드를 사용하시려면 아마 Module.findExportByName (null, 'dlopen')를 후킹해서 libmono.so나 libil2cpp.so가 로드됐을때 onLeave안에 후킹 코드를 짜셔야될거같네요. spawn시키면서 바로 스크립트를 로드시키면 baseAddress가 null이여서 add 부분에서 에러가 날겁니...다..?

추가적으로 되는지 않되는지 해보진 않았지만 저는 offset 더해줄때 add(ptr("0x1234")) 형태로 코드를 짭니다.
4 py0zz1 2019.12.06 18:55  
우선 spawn하고 Module.getBaseAddress( )해도 잘 찾아지긴 하네요.
답변 감사합니다!
1 쥬스2 2019.12.06 12:34  
1. 됩니당 특정 라이브러리가 로드됐다면 Module.enumerateExportsSync("libc.so")와 같은 형태로 라이브러리 안에 모든 함수명과 offset을 가져와서 가져온 리스트를 foreach를 통해 반복분 내 interceptor.attach 해주시면 실시간으로 해당 라이브러리에서 호출되는 함수를 알수있습니당
4 py0zz1 2019.12.06 18:55  
오! 감사합니다ㅎㅎ
1 쥬스2 2019.12.06 12:34  
2. 맞을거에염
M LIN 2019.12.06 14:40  
Touch를 하면 실행되는 메소드를 후킹하면 터치를 할때 진입구문이 실행되어야 하는데 후킹스크립트에서 어떤 반응
--> 해당 위치가 브랜치 분기하는 어셈블리어로 변경했는지 동적으로 확인해보세요.
4 py0zz1 2019.12.07 23:18  
답변 감사합니다.
2 리리 2019.12.10 00:07  
답변감사합니다~
Category