프리다 후킹 관련 코드 질문

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

프리다 후킹 관련 코드 질문

3 50nday 10 7120
프리다로
dlopen 함수를 후킹해서 원하는 so 파일이 올라오면
**
브레이크포인트를 설정하거나
무한루프 코드를 삽입해서
**
ida를 붙이고 싶은데
관련코드를 못찾겠네요....혹시 관련 자료 아시는분...
부탁좀 드리겠습니다...
10 Comments
M LIN 2019.11.24 22:46  
Interceptor.attach(Module.findExportByName(null, "dlopen"), {
onEnter: function(args) {
    this.arg0 = Memory.readUtf8String(args[0]);
    if (this.arg0.indexOf("linengine.so") !== -1){
        Thread.sleep(10);
    }
},
onLeave: function(retval) {
    return 0;
}
});
6 Haclthesoul 2019.11.27 02:35  
슬립을해서 so를 ida로 붙이는 이유가 앱변조나 루팅때문에 바로꺼지니 그런거죠?

그리고 linker에 call function 심볼쪽 브레이크 포인트 거신다음에 init ~ init_array 부터 분석하시면 될거에요

이해가 안되서 그러는데 이부분 자세하게 설명 부탁드려요 ㅠ.ㅠ
M LIN 2019.11.28 11:08  
Q. 슬립을해서 so를 ida로 붙이는 이유가 앱변조나 루팅때문에 바로꺼지니 그런거죠?
A. 보통 안티디버깅이 걸려있는 경우 디버거(ida, gdb)로 어태치 할 때 프로세스가 바로 종료되거나 ptrace가 이미 선점되어 어태치가 안되는 경우가 많습니다.
이러한 안티디버깅 기능이 동작하기 전에 동적분석하기 위한 용도로 보시면 될것 같습니다. (ptrace를 쓰기 위한)
저는 린엔진이 있기전에 이런 용도로 썼었습니다..ㅋㅋ

Q. 그리고 linker에 call function 심볼쪽 브레이크 포인트 거신다음에 init ~ init_array 부터 분석하시면 될거에요
A. 보호솔루션 or 악성앱 마다 다르지만 보통 init_array 부분에 언패킹 하는 로직과 함께 안티디버깅이 동작하는 로직이 포함되어 있습니다.
주기적으로 디버거가 물려있는지 체크하는 스레드가 동작한다던가 ptrace 메인프로세스에게 선점하는 프로세스를 생성하는 로직등이 존재합니다. 그렇기 때문에 dlopen이 끝난뒤에 붙여버리면 안티디버깅이 이미 작동되어 어태치가 안됩니다.
6 Haclthesoul 2019.11.28 20:30  
정확한 답변 감사합니다! 엄청난 팁이였는데 그냥 놓칠뻔 했네요 ㅎㅎ
나중에 안티디버깅 앱을 만났을 땐 정리좀 해서 공유 드려야겠네요!

소중한 꿀팁 감사합니다!
M LIN 2019.11.24 22:46  
linengine.so 변경해서 사용하시면 됩니다.
실행 후  IDA로 바로 붙이시면 됩니다.
tip) linker에 call function 심볼쪽 브레이크 포인트 거신다음에 init ~ init_array 부터 분석하시면 될거에요
3 50nday 2019.11.25 08:22  
린엔진을 안쓰고 기기에 바로 붙어서 하고 있어요. 그래서 프리다 통해서 타겟 바이트 코드에 직접 브레이크포인트 관련 코드를 삽입하고 싶어서용
M LIN 2019.11.25 08:33  
적어둔 so가 로드될때 10초 동안 정지시킨는 예제코드입니다.
 linengine.so 이름을 바꿔서 사용하시면 됩니다
1 버퍼오버플로우 2019.11.25 08:42  
린엔진이랑 관련없는 코드 아닌가영
so 이름 적으라고 알려주신거 같은데
3 50nday 2019.11.25 10:08  
아아아 출근하고 본거라서 눈이 침침했네요 ㅋㅋ감사합니다!!!!!!!!!저러면 바로 딜레이 되는군요 감사감사합니다 크으으으으
M LIN 2019.11.25 13:31  
다행이네요 :)