운영중인 하이브리드App에 대해서 보안업체서 모의해킹을 했는데 메모리에 비밀번호가 평문으로 남아 있다는 결과를 받았습니다.

수정을 위해선 테스트를 해야하는데 그래서 이번 기회에 나도 메모리 덤프라는걸 해보기로 했습니다.

아무 환경도 설정 되어 있지 않은 상태에서 쓴 글이기 때문에 이미 세팅되어 있는 환경이라면 단계를 패스해도 무관합니다.

저는 가지고 있는 개인 갤럭시북2를 메모리덤프 머신으로 만드려고 처음부터 세팅을 했어요.
안드로이드 메모리 덤프에 앞서 안드로이드 디바이스가 루팅이 되어 있어야 합니다.





1. ADB 설치

ADB란 Android Debug Bridge의 약자로, 안드로이드의 디버깅 툴입니다.
안드로이드 메모리덤프를 하기 위해 꼭 필요한 환경이죠.






사이트에 들어가서 기종에 맞는 플랫폼을 선택해 다운로드 받으면 됩니다.
압축파일이니 다운로드 받고 원하는 위치에 압축을 풀면 되며 앞으로 명령프롬프트에서 사용 할 adb 명령어를 편하게 사용하기 위해서 해당 루트를 환경변수에 등록해주는게 좋습니다.
그게 아니라면 매번 adb 루트로 가서 명령어를 쳐야하는 번거로움이 생기닌까요.





2. Python 설치
Frida를 사용하려면 Python이 PC에 설치 돼 있어야 합니다.




사이트에서 Python을 다운로드 받고



설치를 진행합니다.
Add Python x.x to PATH를 체크하면 자동으로 환경변수에 등록되어 사용하기 편해집니다.






3. Frida 설치

Python을 설치하면 Frida를 설치 할 수 있는데요. 
명령프롬프트에서 pip install frida 명령어로 설치 할 수 있습니다.




명령어를 입력하니 뭔가 경고문이 뜨고 설치가 안되네요.
대략 pip가 버전이 안맞는다고 python -m pip install --upgrade pip을 명령어를 입력하라고 그러는거 같습니다.



python -m pip install --upgrade pip 명령어 실행 후 pip가 19.2.3으로 업데이트 되었습니다.
마지막에 Successfully가 뜬걸 보니 잘 설치된 모양입니다.

pip install frida 명령어로 계속 Frida를 설치합시다.

pip install frida==10.0.0 처럼 Frida의 버전을 설정하여 설치 할 수도 있습니다.
간혹 https통신때문에 사내 네트워크에서 설치 할 경우 SSL 오류가 날 수 있습니다만
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org frida
명령어를 입력하면 정상적인 설치가 가능합니다.





4. 디바이스에 frida-server 실행하기

Frida를 정상적으로 설치 했다면  메모리덤프를 하기 위해선 안드로이드 디바이스의 백그라운드에서 frida-server가 실행되고 있어야합니다.




사이트에 들어가면 무슨 파일들이 여러가지 무수히 많은데



안드로이드 기반으로 작성하는거니 얘네들을 보면 됩니다.
4개 파일 다 받을 필요는 없고 자신의 디바이스에 맞는거 하나만 받으면 됩니다.
제 디바이스는 노트4닌까 android-arm.xz를 다운로드 받았습니다



다운로드 후 압축을 풀면 압축명과 동일한 파일이 하나 있는데 파일명을 frida-server로 변경해주세요.
파일명을 변경하면 확장자 변경으로 인하여 파일을 못쓴다니 뭐 이런 팝업창 뜨는데 무시합니다.

그 후 명령프롬프트를 실행하고 안드로이드 
디바이스에 이 frida-server 파일을 밀어넣어줄겁니다.

안드로이드 디바이스 백그라운드에 이 파일이 실행되고 있어야 메모리 덤프가 가능하닌까요.



adb push frida-server data/local/tmp
adb push [frida-server경로와 파일] [밀어넣어줄 디바이스경로] 입니다.
adb push 명령어는 pc에 있는 파일을 디바이스에 밀어 넣어준다는 명령어이고 그 반대로
adb pull 명령어는 디바이스에서 pc로 파일을 땡겨 온다는 명령어죠.

자 그럼 안드로이드 디바이스에 밀어 넣어준 우리 이쁜 파일이 디바이스에 잘 들어가 있는지 확인해 봅시다.




su 명령어로 슈퍼계정 접근권한이 반드시 있어야 합니다. (그래서 루팅 필수)
슈퍼계정 접근 후 frida-server 파일을 넣어준 디렉토리로 이동합니다.



/data/local/tmp 경로에 ls 명령어로 파일 확인 해보니 frida-server 파일이 이쁘게 잘 있네요.
이젠 이 놈을 백그라운드에 실행시켜줄 명령어를 입력해 봅니다.
명령어는 ./frida-server &



실행 권한이 없다네요.



chmod 755 frida-server
chmod 명령어로 파일권한을 755로 변경합니다



파일권한을 변경 후 다시 frida-server를 실행하니 이상없이 실행되네요.



ps 명령어로 현재 돌고 있는 프로세스를 확인해보니 frida-server가 잘 돌고 있는걸 확인 할 수 있습니다.
shell 화면에서 나와 명령프롬프트에서도 현재 디바이스에서 돌고 있는 프로세스를 확인 할 수 있습니다.
명령프롬프트에서 확인 할 수 있는 방법으론 바로....



frida-ps -U
만약 명령어를 치는데
'frida'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
라는 메세지가 나오면
pip install frida-tools를 실행해서 frida-tools도 설치해 주세요. 설치후엔 명령어가 먹힙니다 :)






5. fridump 설치 및 메모리덤프

안드로이드 디바이스 백그라운드에 frida-server도 실행시켜 주었으므로 이제 메모리 덤프를 시작하면 됩니다.
fridump는 frida를 사용하여 메모리 영역을 덤프 해주는 툴입니다.






이 사이트에서 다운로드 받으면 됩니다.
압축파일이고 다운로드 완료 후엔 압축을 원하는 위치에 풀어주면 됩니다.



압축을 풀면 이렇게 4가지 파일이 들어있습니다.



python fridump.py -h
명령프롬프트에서 fridump를 압축 푼 루트로 들어가 위 명령어를 쳐준 뒤 위 화면이 나오면 정상적으로 fridump를 사용 할 수 있습니다.

이제 대장정의 끝을 향해서 가고있네요.



fridump.py -U -s -o [덤프파일저장경로] [App패키지명] 
fridump 압축 푼 루트로 가서 위 명령어를 치면 화면과 같이 메모리덤프가 실행됩니다.





처음엔 0xXXXXXXX.dump.data의 파일들이 생성되고 마지막엔 메모리에 String들을 쫘아아악 정리해서 string.txt파일을 만들어주는 모습을 볼 수 있습니다.





string.txt파일의 결과물입니다.
메모리에 적재된 문자열들을 확인 할 수 있네요.

이제 이걸 가지고 모의해킹에서 지적나온걸 수정해 봐야겠습니다.

꽤 많은 과정이 있었습니다.

메모리 덤프를 도전 하시는 분들에게 도움이 있길 바랍니다 :)





3 댓글

  1. 정말 도움이 많이 되었어요.

    답글삭제
  2. 감사합니다. 큰 도움이 됐습니다. ^___^

    답글삭제
  3. string.txt 파일이 생성되지 않으면 해결 방법이 있나요?

    답글삭제

댓글 쓰기

다음 이전