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 값을 이용하여야 한다.