앵하니의 더 나은 보안

iOS LLDB 본문

보안 기술/iOS

iOS LLDB

앵한 2024. 6. 23. 18:51

서론

안티 디버깅 항목을 진단하려면 어떻게해야하는지 슥 보다가
lldb라는 좋은 디버깅 을 발견해서 정리하려한다.

본론

Attach 및 BP 설정

  1. 먼저 cydia, sileo, zebra 등의 트윅 설치 어플리케이션에서 lldb를 검색하면 어렵지않게 찾을 수 있으니 설치부한다.


  2. attach 하고자하는 앱 이름 혹은 pid를 입력해 lldb를 실행한다.
    #lldb -p [pid] 혹은
    #lldb -n [AppName]
    attach를 했다면 그 즉시 프로세스 실행이 중단되니 c(continue)를 입력해 프로세스를 이어서 동작시켜줘야한다.
  3. image list를 입력해 메모리에 로드된 모듈들의 메모리 적재 주소를 불러온다.
    (lldb) image list
    또는 모듈 이름만 선택적으로 리스팅할 수 있다.
    (lldb) image list | grep UnityFramework

  4. Unity 게임을 대상으로 디버깅을 진행하고 있으므로 UnityFramework의 Base Address 확인
  5. 그리고 복원한 심볼릭 정보를 통해 디버깅에 사용하고자하는 함수의 RVA 값 확인
  6. Base Address + RVA 값을 계산해 메모리 내 해당 함수가 존재하는 주소 계산
  7. 계산한 주소에 break point 설정
    (lldb) b 0x10C6E4698

  8. 이후 해당 함수가 동작하면 break point에서 레지스트리 값, 함수의 인자 값 등 다양한 정보 확인 가능
    시연 중 어플리케이션을 재실행해 bp가 0x1093bc698로 수정됐으나 재실행되지 않았다면0x10c6e4698에서 멈추게 됨

유용한 lldb 명령어들

(lldb) po $arg1 형식으로 함수의 인자 값 확인 가능

 

 

(lldb) register read 형식으로 레지스터 데이터 확인 가능

 
 
 

(lldb) register write [target] [value] 명령을 사용해 특정 레지스터의 값 수정 가능

 

 

(lldb) dis -p 명령으로 현재 break point 이후의 어셈블리 코드 출력

 

 

(lldb) memory write -s [수정할 바이트 수] [수정할 메모리 주소] [해당 메모리 주소에 삽입할 데이터]
형태로 실시간으로 어셈블리 코드 패치 가능
시연에서는 mov x1, #0x0를 mov x1, #0x1로 수정

mov x1, #0x1을 기계어로 대체

 

 

(lldb) memory write -s 4 0x10d3e0698 0xd2800021로 바이트 데이터 수정 후
(lldb) dis -p 로 해당 메모리 주소 내 수정된 어셈블리어 확인

기계어를 리틀엔디언 기준으로 바이트 데이터 삽입0x210080d2 > 0xd2800021

 

결론

iOS 안티 디버깅 테스트는 lldb로 하자


참고

https://ch4njun.tistory.com/168

https://shell-storm.org/online/Online-Assembler-and-Disassembler/?inst=mov+x1%2C+%230x1&arch=arm64&as_format=inline#assembly

Comments