(4주차)
+) 지난주에 마무리 못한 리패키징, 키 생성
[1] 키 생성
keytool (cmd)
안드로이드 스튜디오 - sdk ; sofware delvop kit (안드로이드 도구들이 같이 설치됨)
=> 기본적으로 android studio -> File -> Project Structure -> SDK Location (SDK 경로!)
build-tools + ~tools 라고 되어있는 것들
-> APK 버전별 폴더 있음 -> 각 도구들 있음!
AVD manager - 에뮬레이터 생성 부분
[키 생성 명령어]
$keytool -genkey -alias [별칭입력] -keyalg RSA -validity 20000 -keystore [keystore 이름].keystore
[2] 리패키징
##서명 - 안드로이드에서는 앱의 무결성 검증을 위해 앱 빌드할 때 서명 필요!
변조된 앱에 신뢰된 서명 없을 경우 -> 설치 실패 문구 발생시켜 설치 못하게 함
변조된 앱을 디컴파일하는 순간 무결성 깨짐 -> 서명 깨짐 => 이를 다시 설치 가능한 apk로 만들기 위해서, 서명 파일 생성 + 리패키징한 앱에 재서명 작업 필요
##apksigner vs jarsigner
1. apksigner <-!! targetSDKVersion 30 이상 & Signature Version v2 옵션
2. jarsigner
-> targetSDKVersion ; AndroidManifest
빌드 관련 정보 - Gragle Scripts - bulid.gradle
project(전반적인) / module (소스코드 관련) <-!! 주로 여기서!!
##zipalign
★ apksigner로 서명할 때는 - 이전에 zipalign 먼저 진행!
(apksigner를 사용하여 apk 서명한 뒤에 apk 파일에 변경 사항 생기면 서명 무효화)
[zipalign 명령어]
zipalign -f -v 4 [zipalign이 필요한 apk 파일 Path] [zipalign 후 저장될 apk 파일 Path]
[apksigner 명령어 - windows]
java -jar [APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]
오류 발생시 아래 명령어로 (java -jar 옵션 생략)
[APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]
[jarsigner 명령어]
jarsigner -verbose -keystore [KEYSTORE_PATH] [SAVED_APK_PATH] [ALIAS_NAME]
ADB(Android Debugger)로 앱 디버깅하기
-
C:\Users\yoon2\AppData\Local\Android\Sdk\platform-tools>adb devices
List of devices attached
3300356694b333a1 device
connect 안 하고 바로 쉘 연결
C:\Users\yoon2\AppData\Local\Android\Sdk\platform-tools>adb shell
a7xeltektt:/ $
a7xeltektt:/ $ cd /sy
sys/ system/
a7xeltektt:/ $ cd /system/bin/
-
##정적분석 vs 동적분석
#정적 분석 - 실행 안 하고 분석하기 (실행 안 하기 때문에 빠름)
# 동적분석 - apk 디컴파일하고 분석
# 동적 분석 - 직접 실행하면서 얻은 정보로 분석(파일 크면 오래 걸림,
메모리에 어떤 문자열을 올려서 연산을 하는 프로그램 - 정확히 어떤 데이터가 올라가는지 보기 위해서는 동적 분석)
=> adb 디버깅으로 실시간으로 실행하면서 동적분석 !!
##android 디버그 브리지(adb)
-기기와 통신할 수 있는 다목적 명령줄 도구 & adb 명령어 - 앱 설치, 디버깅과 같은 다양한 기기 작업에 사용됨
- sdk에 포함됨 ; 안드로이드 SDK 설치 시 기본적으로 설치됨 (path : /sdk/platform-tools/)
- 클라이언트, 데몬, 서버로 구성
[작동방식]
<개발서버> <애뮬레이터 or 기기> adb clinet - adbserver - adbd(데몬) |
클라이언트(나, 실행 주체)
개발서버(서버, 클라이언트) = 우리 pc
데몬 = 우리 기기
1) (clinet) adb 서버 확인하기 (소켓 통신으로 서로 통신하기 때문에 이미 실행 중인 adb 서버 있는지 확인)
=> 없음! - 서버 프로세스 실행
2) (server) server ps 시작 -> tcp 5037에 binding -> 클라이언트로부터 명령어 수신대기
3) (server) 실행중인 모든 기기 연결 설정 - 5555~5585 홀수 포트 스캔
-> adbd(adb 데몬) 찾으면 해당 포트와 연결.
!! 각 애뮬레이터는 한 쌍의 포트로 이루어짐
홀수 포트 - adb 연결용
짝수 포트 - 콘솔 연결용
-> pair로 연결
서버가 중간다리 역할!
##기기에서 adb 디버깅 사용 설정하기
준비물 : 어댑터
Android 4.2 이상 버전의 경우 : 설정 > 휴대전화 정보 > 빌드번호 일곱 번 탭! > 이전 화면으로 돌아가기 > 개발자 옵션 > USB 디버깅
+) tcp 연결 - 데몬에서 tcp 포트를 열어서 ip랑 포트로 새로 연결을 만듦 (usb는 필요 X)
adb connect -> tcp 연결할 때만!
##adb 명령어 사용하기
https://developer.android.com/studio/command-line/adb?hl=ko#shellcommands
Android 디버그 브리지(adb) | Android 개발자 | Android Developers
기기와 통신할 수 있는 다목적 명령줄 도구인 Android 디버그 브리지를 알아보세요.
developer.android.com
https://blog.naver.com/gyurse/220911727781
[TIP] Android Shell (adb.exe) - 안드로이드 여러가지 명령어들
안드로이드의 '안'자도 모르는 초보이지만 보안공부를 하면서 자주 사용했던 안드로이드 명령어들을 한 번 ...
blog.naver.com
* adb명령어 - adb [-d(디바이스 지칭) | -e(에뮬레이터지칭) | -s <serialNumber>] <command> # 명령어 기본형태 - adb shell <command> # 쉘 실행하는것 - adb device # 현재 돌아가고있는 디바이스 목록 출력 - adb pull # device -> pc 파일 복사 - adb push # pc -> device 파일 복사 - adb logcat [<filter-spec>] # 장치 로그보기 - adb install [-l] (Lock을 의미)[-r](reinstall)[-s](처음부터 새로 설치) # 장치에 파일(apk) 설치 - adb uninstall [-k](자료는 놔두고 App만 삭제) <package> # 장치에서 package 삭제 - adb logcat [<filter-spec>] # 장치로그 보기 (여러 정보를 확인할수 있다.) |
기기에 파일이나 디렉터리 및 하위 디렉터리를 복사하기 : push
> adb push foo.txt /sdcard/foo.txt
sdcard/ 대신?
/system/vendor
/data
push - 그냥 밀어 넣음
install - 압축까지 풀어서 설치
※etc
@구체적으로 언제 사용?
앱을 동적으로 실행시키면서 로그를 보거나 동적 분석하고 싶을 때
apk 말고 안드로이드 이미지 덤프를 던져줄 때(핸드폰 os에 대한 이미지) - 무슨 앱들이 설치되어 있었는지, 데이터가 있었는지 확인 <- (포렌식을 위해) 그 순간을 덤프한 거니까!
악성 앱은 어떤 앱이고 어떻게 돌아가니~?
이미지를 모바일에 올리기 - 디스크 이미지 쓰기 해서 올림
가상 머신 띄우는 것처럼
@autopsy (vmware 같은)
악성코드 앱
repacking 앱을 찾자! - 기존 앱과 비교(class diff)
http://hisjournal.net/blog/361
I wannabe FALCON :: HDCON 2011 예선 Stage 4 - 안드로이드 악성코드 분석
hisjournal.net
@androidAuto
(5주차)
과제 보충의 보충(정답 공개)
참고 : https://y0on-it.tistory.com/25
MainActivity 하나 띄우고 코드 복붙 해서 하면 더 빨리 할 수 있음!
R$string.class
ㄴ getString() - strings.xml에서 가져올 수 있음
https://developer.android.com/guide/topics/resources/string-resource?hl=ko#String
문자열 리소스 | Android 개발자 | Android Developers
문자열 리소스 문자열 리소스는 옵션 사항인 텍스트 스타일 지정 및 서식 지정 기능과 함께 애플리케이션에 사용할 수 있는 텍스트 문자열을 제공합니다. 애플리케이션에 문자열을 제공할 수
developer.android.com
시간 동기화 OTP 유추 가능
-> TOTP 키워드 검색
: getGoogleAuthenticatorBarCode
GoogleAuthenticator 검색 -> 앱이 따로 있음! 여기에 키를 입력하고 정답 pw 받으면 됨...! (헐)
gettotp
동기화하는 버튼!!
수동으로 해놔도 됨(base 32 Decode)
+)jar intellij import 하는 방법
https://atoz-develop.tistory.com/entry/JAVA-IntelliJ-IDEA-jar-%ED%8C%8C%EC%9D%BC-export-import-%EB%B0%A9%EB%B2%95
[JAVA] IntelliJ IDEA - jar 파일 export, import 방법
1. JAR 파일 Export 위 예시 프로젝트의 JarExample 모듈을 jar 파일로 export 하려한다. IntelliJ는 한 프로젝트 안에 다수의 모듈을 가질 수 있다. 지금은 하나의 모듈만을 갖고있는 상태이다. 1 2 3 4 5 6 7 8..
atoz-develop.tistory.com
'보안 > android' 카테고리의 다른 글
[앱][리버싱] 앱 후킹 도구 frida 설치 (0) | 2021.10.28 |
---|---|
[앱][리버싱] 6주차 정리 ; drozer로 앱 분석 (0) | 2021.10.28 |
[앱][리버싱] 과제보충 (0) | 2021.09.17 |
[앱][리버싱] 2,3주차 정리+과제 ; 안드로이드 파일시스템 & 데이터 구조 / 디컴파일 (0) | 2021.09.10 |
[앱] 1주차 정리+과제 ; 안드로이드 앱 만들기 (0) | 2021.08.27 |