[질문] JNI hooking에 관해서

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

[질문] JNI hooking에 관해서

6 Haclthesoul 4 4386
안녕하세요. 요즘 JNI보다가 보니 문득 궁금한게 생겼네요.

Xxx.so에서 aaa라는 함수가 어떠한 동작을 하는지 보려면

동적분석이나 JNI env에서 사용하는 함수를 후킹해서 어떠한 함수들이 호출되는지를 보고 aaa 함수를 파악하는걸로 보이는데요.

만약에 Xxx.so에 안티디버깅과 같은 모듈이 있을 시
Ida로 붙여서 디버깅하는거랑 JNI env 모든 함수를 후킹해서 보는거랑 각각의 어떤 장단점이 있을까요?

자료를 보다보니 동적으로 Dex를 로딩하는게 xxx.so에 있고 그안의 함수(심볼)을 후킹 후 JNI env에 있는 모든 함수를 후킹을 걸어서 보더라구요....

아직도 JNI hooking게 왜 필요한지, 그리고 어떠한 함수들이 실제 안티디버깅에 쓰이는질 잘 모르겠네요.... ㅠ.ㅠ
4 Comments
M LIN 2019.12.05 09:49  
Ida로 붙여서 디버깅하는거랑 JNI env 모든 함수를 후킹해서 보는거랑 각각의 어떤 장단점이 있을까요?
후킹 - 위에 말씀하신 대로 빠르게 동작 흐름 파악 및 우회 포인트 파악
저는 후킹해서 동작 흐름을 파악한 뒤, IDA로 디버깅하여 분석하고 있습니다.
간단한 so면 바로 동적 분석해도 괜찮겠지만, SO에 난독화가 걸려있거나 중간 중간 디버깅을 체크하는 로직 등이 포함되어 있으면 동적 분석하기 참 까다롭거든요.. 그렇기 때문에 어떤 포인트에 브레이크 포인트를 걸어야 하는지 등의 사전 조사 용도로 사용하고 있습니다.
실제 안티디버깅 함수는 JNI 후킹말고 ptrace,TracerPid 인자값 체크 등의 후킹 방법으로 찾을 수 있습니다.( 유니콘 가상화 or LKM 시스콜 추적하는 방법도 있습니다.)
6 Haclthesoul 2019.12.06 01:00  
일반적으로 흐름을 트레이스로 확인 후 포인트 잡아서 디버깅을 하는군요

"ptrace,TracerPid 인자값 체크 등의 후킹 방법으로 찾을 수 있습니다.( 유니콘 가상화 or LKM 시스콜 추적하는 방법도 있습니다.)"

이건 어떤건지 자세하게 설명 좀 부탁드려도 될까요? 궁금한게 많네요 ㅠ.ㅠ
M LIN 2019.12.06 14:26  
추후에 안티디버깅 관련 글 한번 작성해보도록 하겠습니다.
6 Haclthesoul 2019.12.06 23:56  
좋아요~! :)