[dreamhack] [CodeEngn] MobileApp L01

chwrld·2023년 9월 7일
0

dreamhack

목록 보기
10/19

🚩 [CodeEngn] MobileApp L01

MobileApp L01

문제 설명

키값을 찾으시오


🚀 Exploit


apk를 열면 여러 파일이 있는데 뭔가 이상한 부분이 있다.
문제를 풀기 위해 apk 파일 구조를 알아야한다.

🐙 apk 파일 구조

폴더명설명
assets패키지 내에 포함된 비 리소스 파일
META-INFapk 배포시 서명한 내용
res리소스 파일
AndroidManifest.xmlManifest
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

https://developer.android.com/studio

빈 프로젝트를 생성한다.
Device Manger 클릭

Create 하거나 연필 버튼을 누른다.

여기서 중요한데 apk 파일이 어떤 아키텍처인지에 따라 다르다.
64비트면 x86_64를 설치하면 되고
32비트면 x86을 설치하면 된다.
문제 파일은 어떤 아키텍처인가?

lib 폴더에 들어가보면 armeabi 하나만 볼 수 있다.
원래 정상적인 apk 파일은 모든 아키텍처를 지원한다.


아키텍쳐설명
🌹 armeabi이것은 ARM 아키텍처의 이전 버전을 위한 것입니다. "armeabi"는 ARMv5TE 아키텍처를 기준으로 합니다. armeabi는 32비트 아키텍처입니다.
🌺 armeabi-v7aARM 아키텍처의 좀 더 최신 버전을 위한 것입니다. 32비트입니다. Cortex-A 시리즈 (예: A8, A9, A15)를 포함하는 대부분의 현대적인 Android 디바이스에서 지원됩니다.
🌻 arm64-v8aARM의 64비트 아키텍처입니다. 최신 모바일 장치의 많은 부분에서 지원됩니다.
🌼 x86인텔 아키텍처를 기반으로 한 장치에 대한 것입니다. 주로 일부 태블릿과 에뮬레이터에서 사용됩니다. 32비트입니다.
🌷 x86_64x86 아키텍처의 64비트 버전입니다. 일부 최신 태블릿 및 에뮬레이터에서 지원됩니다.
🐞 mips 및 mips64MIPS 아키텍처를 위한 것이지만, Android에서는 MIPS 지원이 공식적으로 중단되었기 때문에 현재는 잘 사용되지 않습니다.
ref : CHATGPT


따라서 32비트 디바이스를 추가하고 실행한다.
실행이 완료됐으면,

adb install [apk 파일 경로]


🔥 KISA_SEED_CBC

여기까지 안드로이드 애뮬레이터를 통한 실행 방법이었고 코드를 분석해보자.
사실 암호학에 대해 깊게 알아볼수록 좋지만 시간 관계상 그러지 못했다.
그래도 내부적으로 어떤 동작을 하는지 알아봤다.

소스코드를 보니 key와 iv를 저장하고 이것으로 암,복호화를 해준다는 것을 알아냈다.
그럼 어떤 문장을 암,복호화 하는 것인가?
출제자가 지정한 문장이다.

평문에 HELLO의 아스키코드 값을 16진수로 넣고 암호화, 암호문을 넣고 복호화를 하면 48, 45, 4C, 4C, 4F 그대로 나오는 것을 볼 수 있다.
KISA_SEED_CBC 알고리즘이 내부적으로 어떤 행위들을 하는지 공부를 해볼 필요가 있다.


💬 Comment

KISA_SEED_CBC의 존재를 알게 되었고 암호 알고리즘을 연구할 기회가 생겼다.
암호학은 모든 CBT 문제의 기초 교양이다. 더 많은 공부를 해야될 필요성을 느꼈다.

REF

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

profile
BoB 13th 최강포린이👮

0개의 댓글