R e d A l i e n Click

엄청난 기술을 접하면, 마치 외계인의 기술을 훔친 것과 같다고 말합니다

붉은외계인은 그러한 놀라운 기술을 탐구하고, 기술적인 도전에 맞서는 것을 의미하는 저의 또 다른 이름입니다

서로가 성장할 수 있는 건설적인 토론을 좋아합니다.

article_thumbnail

[붉은외계인] Mobile - Diva Hardcoding Issues - Part 2

2024. 2. 7.
클릭 시, 이동!

 

Nox 에뮬레이터에, 취약한 모바일 앱인 diva를 통하여 공부를 하던 도중 상당히 재미있었던 부분을 정리할려고 한다
시작해보자

 


 

Hardcoding Issues - Part 2

 

Part 1은 정말 쉬웠으나, Part 2는 jadx를 통해 디컴파일한 소스를 들여다보는 과정 + 추가 작업이 필요하다

Hardcode2Activity 클래스에서는 DivaJni 클래스의 access 함수를 사용한다
이러한 access 함수는 native 키워드가 사용되었기 때문에, JNI를 통해서 라이브러리를 호출 할 때 구현될 것이다

어떤 라이브러리를 호출하는지 살펴보면 divajni 라이브러리를 호출하고 있다

 


 

라이브러리

jadx를 통해 컴파일 한 후, lib 디렉토리를 살펴보면
각 아키텍쳐마다 사용할 수 있게끔, 동적 라이브러리가 정의되어 있음을 알 수 있다

그렇다면 Nox 에뮬레이터가 구현한 OS는 어떤 아키텍쳐를 사용하고 있고,
이로 인해 어떠한 라이브러리를 사용하고 있는지를 확인하여야 할 것이다 

확인방법으로는 동적 라이브러리는 메모리에 로드 되니, 해당 프로세스의 메모리를 확인하면 될 것이다

 

ps를 통해 diva의 PID를 알아 낸 후, 시스템/프로세스의 정보가 저장되는 proc의 디렉토리로 이동한다
그 다음, diva PID에 해당하는 디렉토리로 이동을한다

그리고 현재 프로세스가 사용하고 있는 메모리 영역에 대한 정보를 저장하는 maps 파일을 열람한다
이 때, 많은 내용이 나오기 때문에, 라이브러리 이름으로 필터를 해준다

그 결과, x86_64 디렉토리의 libdivajni.so 사용을 확인할 수 있다

 


 

해결 방법 1 - 무작정 대입

이번 쳅터의 목적은 하드코딩 코드를 찾아서, 특정 문자열을 입력하는 것이다
구글 검색을 통하여 해결 과정을 찾아보았는데, 상당히 많은 사람들이 각자만의 방식으로 풀어나가서,
보는 재미도 쏠쏠하였다

나는 그 중에서, 2가지 방법으로 해결해보고자 한다

 

첫 번째는 무작정 대입이다
무식한 방법이기도 하지만 strings 유틸을 이용하여, so 파일 중 ASCII 문자만 뽑은 후, 전부 대입해 보는 것이다

단순함이 복잡함을 이긴다는 말이 떠오르게 하는 방식이다

 


 

해결 방법 2 - dump

 

objdump 유틸을 이용하여, so 파일을 덤프해 보는 것이다

ELF 포멧에서, 상수/문자열이 저장되는 섹션인 .rodata 섹션을 덤프해본 결과,
위와 같은 문자열이 저장되어 있음을 확인하였다

 


 

결론

 

olsdfgad;lh 를 입력하면 성공 ~