Ghidra on MacOS(2)

김환수·2023년 10월 8일

Ghidra on MacOS

목록 보기
2/3

Using LLDB on Ghidra

MacOS에서 Ghidra를 사용할 때, lldb를 이용한 디버깅을 할 수 없는 문제를 분석 중입니다.

지금까지 분석한 것을 바탕으로 Ghidra에서 lldb를 사용할 수 없는 것은 lldb 및 lldb-java(ghidra에서 빌드한 lldb의 JNI 라이브러리) 라이브러리를 로드할 때, java.library.path가 제대로 설정되어 있지 않기 때문임을 확인했습니다.

이 java.library.path의 경우 Ghidra의 실행 스크립트(support/launch.sh)에서 설정하지만, 원인 미상의 이유로 lldb 및 lldb-java를 로드할 때 기본값으로 변경되어 있습니다.

어떻게 해결할 것인가?

사실 Ghidra에서 lldb를 쓰는 것은 더 쉬운 해결 방법이 있습니다. lldb, lldb-java를 java.library.path에서 체크하는 기본 경로에 추가해두는 것입니다. 이렇게 하면 당장 해결은 할 수 있지만, 이후 작업에서 유지보수에 더 많은 비용을 쓰게 될 것으로 생각합니다. 그래서 Ghidra를 수정하여 이런 문제가 생기지 않도록 분석 중인데, 진행 방향을 어떻게 잡아야할지 결정하기 어려운 상태입니다.

방법1

분석 결과 Ghidra에서는 Ghidra를 실행한 JVM이 아닌 다른 JVM에서 lldb를 실행하는 것으로 보입니다. lldb를 실행하기 위한 다른 JVM을 service라고 부르겠습니다. 이렇게 service를 실행하는 방식을 ghidra 소스 코드를 바탕으로 분석하면 문제를 해결할 수 있을 것으로 생각합니다.
하지만, 빠르게 훑어본 결과 Ghidra에서 이런 serivce을 실행하는 로직은 꽤 복잡한 편인 것 같습니다.

방법2

JDB 등 디버거를 이용해서 Ghidra에서 service를 실행할 때 argument를 설정하는 곳을 체크하고, 그 부분만 수정해보면 더 빠르게 문제에 접근할 수 있지 않을까 기대하고 있습니다.

결론

Ghidra를 전부 분석하는 것은 마지막 방법이라 생각합니다. 디버거를 이용해서 service 실행 시점에 argument를 전달하는 곳을 찾아보도록 하겠습니다.

profile
ㅇㅋㅇㅋ

0개의 댓글