본문 바로가기

해킹-보안/모바일

앱 취약점 진단(프로그램 무결성 검증, 디버깅 탐지, 메모리 중요 정보 노출 등)

반응형

ி android

 

프로그램 무결성 검증

 

apk 추출 
> adb shell pm list packages -f | findstr "appname"
> adb pull appname .

apk 디컴파일
java -jar apktool_2.5.0.jar d -r [디컴파일할 apk 파일 경로]

smail 파일 변조
apk 빌드/서명 시 apk manager 혹은 APK Easy Tool 사용
apk easy tool: https://drive.google.com/drive/folders/10jOplY_wnT_47UneXU7use0WBFWNBYxZ

apk 빌드
> java -jar apktool_2.5.0.jar b [디컴파일한 apk 폴더] -o [리패키징할 apk 파일명.apk]
* APK Protect가 적용된 앱인 경우 apk 디컴파일 후 a.smail 혹은 a_lock.smail 파일이 생성되므로
해당 파일을 모두 삭제 후 빌드 시도 


apk 서명
> cd apk_manager_7.4_fix_softdx\other\
> java -jar signapk.jar testkey.x509.pem testkey.pk8 appname.apk appname_output.apk


디버깅 탐지 기능 적용 여부

 
pid 확인
> adb shell ps | findstr "appname"

동적 디버깅 실행
> ./gdb --pid=[프로세스 ID]
> Manifest.xml 파일에 debug 옵션이 true로 설정된 경우 JEB에서 동적디버깅 실행 가능,
frida로 no-pause 옵션 제거 후 앱 실행(adb로도 가능), JEB BP(ctrl+B) 설정 후 frida %resume


gdb 명령 실행(증적)
(gdb) info reg


메모리 내 중요정보 노출 여부

 
> adb shell pm list packages -f | findstr

메모리 덤프
> ./gdb --pid=[프로세스 ID] --batch -ex gcore

덤프 파일 가져오기
> adb pull /data/local/tmp/core.[프로세스 ID] .
hxd 확인( 비밀번호 같은 중요 정보 노출되는지 검색 )


중요정보 노출 여부

 
> SQLite Databases( /data/data/com.app.app/databases )
> External Storage( androidManifest.xml )
> Shared Preferences ( /data/data/com.app.app/shared_prefs )
 

액티비티 강제 호출

 
ex) 비밀번호 변경 액티비티를 강제 호출하여 로그인없이 jack 사용자 비밀번호 변경 가능
조건: androidManifest.xml 파일 activity 태그의 android:exported 속성이 true로 설정되어있어야 함
- 현재 액티비티 조회
> adb shell dumpsys window windows | findstr -R "mCurrentFocus mFocusedApp"
- 액티비티 강제 실행
> adb shell am start -n com.app.app/.changePassword -e [파라미터명] [value]
 

백그라운드 화면 중요 정보 노출 여부

 
백그라운드 화면 진입 시 중요정보가 노출되는 지 확인
/data/system_ce/0/snapshots 폴더 내 사진 파일 확인
 

단말기 내 중요 정보 저장 여부 

 
HTTP Cache 디렉터리 내 캐시 파일에서 이용자 식별 값(공인인증서 키, ID, 이메일, 폰번호 등) 존재 확인
 
 
 

ி IOS

 

프로그램 무결성 검증

 
ipa 앱 추출 및 복호화
> ipainstaller -b com.app.app
> scp root@192.168.0.10://private/var/mobile/Documents/abc.ipa .
> ipa 내 바이너리 파일 복호화 후 코드 패치한 뒤 다시 ipa로 묶어서 3utools로 설치 진행
 
* 기설치된 앱의 바이너리 추출
> find /var/containers/Bundle/Application/ -iname appname*
> flexdecrypt /var/containers/Bundle/Application/UUID/appname.app/appname
> cd /tmp/ && otool -l appname | grep cryptid        -- 0이면 정상복호화
> scp -P 22 root@192.168.0.10:/tmp/appname .
 
 
IDA에서 바이너리 패치
원하는 소스코드에 커서를 위치시키고 edit > patch program > Change byte
코드패치 적용하기 edit > patch program > apply paches to input file
 
HxD에서 바이너리 패치
텍스트 문자열 - 유니코드 문자로 특정 string 검색 후 임의의 ascii 값으로 변경
 

파일 해시 확인
> certutil -hashfile .\appname.ipa SHA1 혹은 아래에서 hashtab 설치하여 윈도우 속성 창에서 확인
https://webdir.tistory.com/attachment/cfile7.uf@2275C44A555F8D6432407A.exe

 

디버깅 탐지

 


실행된 앱 디버깅
ps -ef | grep appname
> lldb-10 -p app_pid
(lldb) c  ( 증적 )
 
앱 실행 후 디버깅
lldb-10
(lldb-10) process attach --name appname_binary --waitfor
앱 실행 시 바로 종료되면 다른 앱 먼저 실행 후 재실행
 
실리오로 lldb 설치한 경우 /usr/lib/llvm-14/bin/ 폴더 이동 후 ./lldb -p 11111
 
 

디버깅 시 중요정보 노출 여부

 

https://www.blackberry.com/blackberrytraining/web/KB_Resources/KB36986_iOSLogInfo_4.3.4.zip

> sdsiosloginfo.exe -d > C:\iOSLogInfo\consolelogs.log
- 3utools Realtime-log 확인 - 로그인 시 계정 정보 노출 등..
- /var/mobile/Containers/Data/Application/앱uuid 에서 중요 정보 확인
 
 

메모리 및 단말기 내 중요정보 노출 여부

 
keychain_dumper, plist 위치에 파일 확인, memscan, winhex를 통해 메모리 내 이미지 추출

 

1. Keychain_dumper을 이용한 패스워드 확인

단말기 내 해당 application에 대한 중요정보[ID, PW, ]가 저장되어 있는지 점검

https://jdh5202.tistory.com/934

 

2. /private/var/mobile/Containers/Data/Application/[app uuid]/Libaray/Cookies

- 쿠키 내부에 저장된 중요정보 검색 

- 명령어: strings Cookies.binarycookies

 

3. /private/var/mobile/Containers/Data/Application/[app uuid]/Libaray/Preterences

- plist 내부에 저장된 중요정보 검색

- plutil -show 파일이름.plist

 
4. 메모리 덤프
> (pid확인) frida-ps -H 192.168.0.71:52023 -ai 
> (Remote) python fridump3.py -H 192.168.0.71:52023 -r [pid] -s
> (usb) python fridump3.py -u -r [pid] -s
 
5. objection hook

>  objection -g PID explore

>  ios NSUserDefaults get

>  ios keychain dump

 

 

 

백그라운드 화면 중요 정보 노출 여부

 
> cd /var/mobile/Containers/Data/Application
> grep [PackageName] */.com.apple.mobile_container_manager.metadata.plist
> ls [Bundle_id]/Library/SplashBoard/Snapshots/sceneID:com.test.test-default/*.ktx
> ls [Bundle_id]/Library/SplashBoard/Snapshots/sceneID:com.test.test-default/downscaled/*.ktx

ktx 파일 추출 후 이미지뷰어에서 확인

 

 

 

반응형

'해킹-보안 > 모바일' 카테고리의 다른 글

IDA에서 IOS 동적 디버깅하기  (1) 2022.03.28
아이폰(IOS) bootrain 탈옥  (1) 2022.03.27
uncrackable level 3  (0) 2022.01.28
IDA 동적 디버깅 설정 - Uncrackable 2 동적 분석  (0) 2022.01.23
uncrackable level 2  (0) 2022.01.22