효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

 

ios에서 대표적인 동적 디버깅 도구는 LLDB라고 할 수있다.

 

LLDB를 사용하기위해서 일단 Cydia나 Sileo에 Repo 추가가 필요하다

 

https://apt.procurs.us/

 

Index of /

 

apt.procurs.us

 

 

 

옛날에는 lldb를 설치후에 쉘에서 바로하면 됐었는데

14버전 이후에는 직접 경로로가서 실행해줘야하는 번거로움이 생겨버렸다.

이제 lldb만 치면 인식을 못함 ..

 

설치 경로를 확인해보면 아래와 같다

 

경로로 들어가서 lldb 실행하면 잘되는 것을 볼 수있다.

 

lldb는 동작하는 프로세스에 붙어서 디버깅을 할 수있는데

먼저 대상앱의 PID를 확인한 후  -p 옵션을 사용해서 붙을 수 있다.

 

프로세스에 붙게되면 인터럽트가 자동으로 동작해 앱이 멈추게되는데

c 명령어를 입력해서 Resum 할 수 있고

사실상 lldb와 같은 동적 디버거가 프로세스에 붙어서 제대로 동작하는것 만으로도 취약하다고 판단할 수 있다.

Ptrace 선점과 같은 시큐어코딩이 적용되면 디버깅 도구가 아예 Attach 할 수가 없는 것이 맞다.

 

일단 안티 디버깅 화면에서 Disable Debugging 을 누르게되면

 

앱이 종료되며 lldb도 종료되고 홈화면으로 돌아오게되는데

 

반응형

LLDB를 이용하여 이를 우회할 수 있다.

 

dvia는 ptrace 시큐어코딩으로 안티디버깅을 수행하고 있다

아래 사진처럼 br l 옵션은 현재 브레이크 포인트의 리스트를 보여주는 명령어인데

 

b 옵션으로 Break Point를 ptrace에 준 후

브레이크 포인트가 생긴것을 볼 수 있다.

 

ptrace 함수에 브레이크 포인트를 걸고 

디스에이블 디버깅 버튼을 누르게 되면

아래 사진과 같이 누르는 순간 브레이크 포인트가 걸려있던 ptrace 함수가 동작하면서

앱이 멈추게된다.

 

이 상태에서 register read 명령어로 

해당 함수의 레지스터를 살펴보면

x0 주소의 값이 1f 인 것을 볼 수있다.

이 값을 Frida 후킹처럼 변조하여 우회를 시도해볼 수 있는데

 

register write 명령어를 사용하여 x0의 값을 0으로 바꿔주었다.

 

이제 프로세스를 다시 Resume 해주면

우회가되어 앱이 종료되지않고 LLDB가 계속 Attach 상태로 붙어있게된다.

 

 

lldb는 디버거도구로 이렇게 어떤 기능들을 우회할 때도 사용되지만

주로 메소드를 추적하거나 앱의 동작 방식을 파악하기 위해서 사용한다.

 

 

반응형
  • hyotwo7658@gmail.com

복사 완료 👍