Android Keystore Extract

Hunjison·2021년 8월 13일
0

Android

목록 보기
4/5

Android Keystore에서 Key를 뽑아줄 수 있는 오픈소스이다.

Github 주소 : https://github.com/nelenkov/keystore-decryptor

학문적인 내용이 궁금하다면 여기를 참고.
https://scholar.google.com/scholar?hl=ko&as_sdt=0%2C5&q=Analysis+of+Secure+Key+Storage+Solutions+on+Android&btnG=


다운로드 해 준 후에, gradle로 빌드하면 된다.
gradle을 처음 써봐서 (민망...) 그 부분도 포스팅한다.

gradle을 공식 홈페이지에서 다운로드한다.
build.gradle 파일은 gradle에 사용되는 모든 빌드 관련 설정을 담고 있다.

만약 gradlew 파일이 존재한다면, 이 파일은 gradle에 대한 wrapper로, 이걸로 빌드하면 된다는 뜻이다.
./gradlew build를 입력하여 빌드해준다.

가끔 wrapper 파일이 빠져 있는 경우가 있는데, gradle wrap 명령어를 통해 이를 실행해준다.
https://androidhuman.tistory.com/537

소스코드를 변경한 후에는 cache를 지우고 다시 이렇게 빌드해준다.
gradlew build --refresh-dependencies


빌드를 마치면 build/libs/ 폴더에 ksdecryptor-all.jar라는 파일이 생성된다.
사용 방법은 java -jar ksdecryptor-all.jar <master key file> <key file> <password>

이 파일이 생성되지 않고, ksdecryptor-all.jar 파일이 생성되는 경우에는, build.gradle에서 소스를 일부 수정해 주어야 한다.
dependencies들을 모두 안고 있는 뚱뚱한 JAR 파일을 만들어주는 build 설정이다.

jar {
    finalizedBy shadowJar
    manifest {
        attributes 'Main-Class': 'my.package.MyMain'
    }
}

현재 뭐가 바뀌었는지 빌드에러로 안된다. 일단 후퇴


keystore 관련 꿀 자료.
위 오픈소스와 비슷한 내용인데, 잘 정리해두었다.
https://cozyu.tistory.com/329

위 github도 실행이 안되고, 바로 위 티스토리 블로그도 올바른 정보가 아니었는데,
그 이유는 여기다. (하... 머리 지끈)

Android 버전에 따른 Keymaster을 연구해보자,,


"SECURITY EVALUATION OF ANDROID KEYSTORE" 논문에 따르면,
rogue app(도둑앱)을 통해서 android keystore 값을 빼내는 방법에 대해 서술하고 있다.

루트 권한이 있는 사용자가, keystore 폴더에서 복사 작업을 통해 keystore 파일을 다른 앱에서 접근 가능하도록 만들고, 다른 앱에서 정상적인 코드 실행을 통해 keystore 값을 빼내는 것이다.

여기에는 또다른 문제가 하나 있는데, keystore 값 자체를 출력해낼 수는 없다는 것이다.

따라서 keystore 값을 활용한 복호화 작업을 구현하는 앱을 하나 개발하여
keystore 값을 이용하여야 한다.

profile
비전공자 출신 화이트햇 해커

0개의 댓글