🚩 [CodeEngn] MobileApp L01
키값을 찾으시오
apk를 열면 여러 파일이 있는데 뭔가 이상한 부분이 있다.
문제를 풀기 위해 apk 파일 구조를 알아야한다.
🐙 apk 파일 구조
폴더명 설명 assets 패키지 내에 포함된 비 리소스 파일 META-INF apk 배포시 서명한 내용 res 리소스 파일 AndroidManifest.xml Manifest classes.dex 달빅에서 동작하는 컴파일 된 실행 파일 resouces.arsc 컴파일 된 리소스 파일 Ref: https://namneul.tistory.com/4
하지만 파일을 보면 이름이 다르다는 걸 알 수 있다.
apk -> zip 으로 바꾼다음 압축을 푼다.
알집이 있다면 바로 압축을 해제하면 된다.
이름을 맞게 고친다음 다시 압축하고 apk로 바꿔준다.
이제 수정을 했으니 서명을 해야한다.
서명을 하기 전에 준비물이 있다.
🍖 jdk 다운로드
https://www.oracle.com/kr/java/technologies/downloads/#jdk20-windows
jdk를 다운로드 후에 환경 변수를 설정해준다.
🥩 환경 변수 설정
시스템 변수 추가
JAVA_HOME -> Java\jdk-20
환경 변수 추가
Java\jak-20\bin
다음 코드를 입력한다.
🍸 keystore 생성
keytool -genkeypair -v -keystore C:\Users[사용자명].android\debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
correct? 물어보면
마지막에 yes 입력하고 Storing ... 뜨는 곳이 keystore 경로이다.
🍉 jarsigner 서명
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore [키스토어 경로] -storepass android [apk 파일 경로] androiddebugkey
🍇 apk 파일 서명 확인
jarsigner -verify -verbose [apk 파일 경로]
jar verified 가 떠야 서명된거다.
셀프 서명했다고 경고가 뜨는데 우리는 문제만 풀거기 때문에 상관 없다.
이제 애뮬레이터에서 apk를 실행시키면 된다.
안드로이드 스튜디오에서 애뮬레이터를 실행한다.
Android Studio
빈 프로젝트를 생성한다.
Device Manger 클릭
Create 하거나 연필 버튼을 누른다.
여기서 중요한데 apk 파일이 어떤 아키텍처인지에 따라 다르다.
64비트면 x86_64를 설치하면 되고
32비트면 x86을 설치하면 된다.
문제 파일은 어떤 아키텍처인가?
lib 폴더에 들어가보면 armeabi 하나만 볼 수 있다.
원래 정상적인 apk 파일은 모든 아키텍처를 지원한다.
아키텍쳐 | 설명 |
---|---|
🌹 armeabi | 이것은 ARM 아키텍처의 이전 버전을 위한 것입니다. "armeabi"는 ARMv5TE 아키텍처를 기준으로 합니다. armeabi는 32비트 아키텍처입니다. |
🌺 armeabi-v7a | ARM 아키텍처의 좀 더 최신 버전을 위한 것입니다. 32비트입니다. Cortex-A 시리즈 (예: A8, A9, A15)를 포함하는 대부분의 현대적인 Android 디바이스에서 지원됩니다. |
🌻 arm64-v8a | ARM의 64비트 아키텍처입니다. 최신 모바일 장치의 많은 부분에서 지원됩니다. |
🌼 x86 | 인텔 아키텍처를 기반으로 한 장치에 대한 것입니다. 주로 일부 태블릿과 에뮬레이터에서 사용됩니다. 32비트입니다. |
🌷 x86_64 | x86 아키텍처의 64비트 버전입니다. 일부 최신 태블릿 및 에뮬레이터에서 지원됩니다. |
🐞 mips 및 mips64 | MIPS 아키텍처를 위한 것이지만, Android에서는 MIPS 지원이 공식적으로 중단되었기 때문에 현재는 잘 사용되지 않습니다. |
따라서 32비트 디바이스를 추가하고 실행한다.
실행이 완료됐으면,
adb install [apk 파일 경로]
여기까지 안드로이드 애뮬레이터를 통한 실행 방법이었고 코드를 분석해보자.
사실 암호학에 대해 깊게 알아볼수록 좋지만 시간 관계상 그러지 못했다.
그래도 내부적으로 어떤 동작을 하는지 알아봤다.
소스코드를 보니 key와 iv를 저장하고 이것으로 암,복호화를 해준다는 것을 알아냈다.
그럼 어떤 문장을 암,복호화 하는 것인가?
출제자가 지정한 문장이다.
평문에 HELLO의 아스키코드 값을 16진수로 넣고 암호화, 암호문을 넣고 복호화를 하면 48, 45, 4C, 4C, 4F 그대로 나오는 것을 볼 수 있다.
KISA_SEED_CBC 알고리즘이 내부적으로 어떤 행위들을 하는지 공부를 해볼 필요가 있다.
KISA_SEED_CBC의 존재를 알게 되었고 암호 알고리즘을 연구할 기회가 생겼다.
암호학은 모든 CBT 문제의 기초 교양이다. 더 많은 공부를 해야될 필요성을 느꼈다.
https://namneul.tistory.com/4
https://doolyit.tistory.com/133
https://m.blog.naver.com/desbey7/222108686908
https://seed.kisa.or.kr/kisa/Board/17/detailView.do
https://dreamhack.io/wargame/writeups/6287
https://pangate.com/838
https://iamdaeyun.tistory.com/entry/KISA-SEED-%EC%95%94%ED%98%B8%ED%99%94-JAVA-CBC%EB%AA%A8%EB%93%9C-%EC%98%88%EC%A0%9C
https://velog.io/@reedfoxy/CBC-%EB%B8%94%EB%A1%9D-%EC%95%94%ED%98%B8%ED%99%94IV-Initialization-Vector-%EC%82%AC%EC%9A%A9-%EC%A0%84%EB%9E%B5
https://eunplay.tistory.com/142
CHAT GPT