Runtime 조작 마지막 3번째 시간을 가져보도록 하겠습니다.

 

1. DVIA 앱을 통해 Runtime Manipulation 으로 접속해 줍니다.

 

 

2. 이후 위에 4자리 코드를 임의로 입력 하여 타당한 코드인지 확인해 봅니다.

 

 

3. 확인 시 에러가 뜨며 해당 에러를 확인하기 위해 기드라의 String 검색을 통해 해당 구문의 위치를 확인해 줍니다.

 

4. 검색 후 기드라에서 위치를 확인 후 해당 참조 값으로 이동 합니다.

 

5. 이동 후 해당 의 값을 보여주는 참조 값으로 이동 합니다.

 

6. 이후 해당 값의 분기를 확인하기 위해 그래프를 통해 구조를 파악 합니다.

 

7. 그래프 확인 시 Incorrect 문자열이 출력으로 분기되기 전의 구조를 확인해 봅니다.(초록색 분기점 더블클릭)

8. 해당 분기점을 통해 Congratulation 문자열 출력을 위한 8848의 번호가 존재하고 해당 번호를 입력해 봅니다.

 

 

9. 해당 번호가 맞다는 것을 알 수 있네요

 

이 방법 이외에 프리다를 이용하여 다시 문제풀이를 해보도록 하겠습니다.

 

8-2 해당 분기점을 분석을 해보도록 하겠습니다.

 

mov x8, #0x2290 : 2290 값을 x8에 저장

ldur x9, [x29, #local_28] : 사용자에 의해 입력되는 값을 x9 에 저장

cmp x9, x8 : x9 와 x8 의 값을 비교

 

해당 로직을 보면 3가지 정도의 방안을 통해 문제를 해결할 수 있습니다.

1. 0x2290 값을 16진수를 10진수로 변환하여 기존 저장된 값 확인하여 문제 해결

2. cmp x9, x8 의 값을 동일하게 만들어주어 결과를 참으로 변경

3. x9 와 x8 비교 시 bruteforcing을 통해 x9 의 값을 x8 과 맞춰주기

 

9-1. 간단하게 계산기를 통해서도 확인 가능 합니다.

 

 

9-2. x9 의 값과 x8 의 값을 동일하게 만들어 우회를 해보도록 하겠습니다.

1. Frida 사용을 위한 x9 값을 x8에 넣는 코딩 수행

2. Attach 시 DVIA에 임의의 숫자 입력

 

3. 해당 x9에 3333을 넣었지만, x8 과 x9 의 값이 동일하면 성공하는 로직이기에 crack 성공 확인

 

4. DVIA 확인 시 crack 성공 확인

 

9-3.  정답이  4자리 이기에 0 부터 9999 까지 값을 넣어 x9 가 x8 값이 만족 하도록 브루트포싱 공격 수행해보겠습니다.

 

1. 비교하는 x8, x9에 interceptor를 통해 확인할 것입니다. cmp 주소 확인(15e3e0)

 

2. 프리다 코딩 작성 후 x8 의 값과 x9 의 값에 들어가는 값을 확인해 보겠습니다.

 

3. 프리다 실행 후 Attaching 시 DVIA에 임의의 값을 입력해 봅니다.

 

4. 임의의 값을 0000 을 넣었더니 0 이 출력 되네요..

5. Frida 값 확인

 

 

6. 프리다 코딩을 통해 입력 x9 레지스터 안에 x8 의 값이 될때 까지 비교하여 값을 같아지도록 코딩,

    입력 값의 자리수가 "000값" ~ "9999" 가 될 수 있도록(4자리 숫자) 코딩

7. Frida 실행 하여 해당 코드 실행

 

 

8. Attach 시 DVIA를 통해 임의의 1111 값 입력

값 입력 시 BruteForcing 되고 있는 것을 확인

 

9. BruteForcing이 끝나면 해당 값 확인

 

10. 이후 DVIA 확인 시 코드 crack 성공 확인

 

대응방안

- 예방 기술 : 디버거가 애플리케이션에 연결되는 것을 방지

- 반응 기술 : 디버거의 존재를 확인하고 애플리케이션 종료

 

디버깅  탐지 방법

- ptrace 사용 : 프로게스 디버거 연결 방지

- sysctl 사용 : 연결된 디버거 탐지

- 프리다 아티팩트 탐지

 

복사했습니다!