iOS App Hacking
- ios 앱 사용자 함수 hooking (using frida) 2017.08.16 2
- ios app 복호화 - Clutch 2.x 버전 2017.02.14
- iOS App Debugging - LLDB 2015.08.18 1
- iOS App Runtime 조작 2015.08.17
- ios app hacking - (1) ios app 의 구조 2014.02.03
ios 앱 사용자 함수 hooking (using frida)
가끔 앱해킹을 하다보면 특이한 환경 때문에(난독화 등) 사용자 일반 함수를 후킹해야 할 때가 있다.
When I analysis app, need a hook at user function sometimes in an unusual environment(obfuscation, check jailbreak, etc).
이럴때 Frida 를 이용해서 후킹이 가능하다.
In this case, frida can be used to hook.
후킹은 일반적으로 함수 주소를 구해오는데, 사용자 함수는 심볼이 없으므로 offset 을 동적으로 구해와야 한다.
Hooking is usually set to function address, the user function must obtain the offset dynamically because there are no symbols.
결론 : 앱 실행 후 base 주소를 얻고, offset 을 더해준 주소에 후킹을 걸어주면 된다.
conclusion: after running the app, obtain the base address and add the offset. then you can set a hook to the address.
var module_base = Module.findBaseAddress('testapp'); // get base addr var custom3_5fdfd4 = module_base.add(0x5fdfd4); // add function offset Interceptor.attach(custom3_5fdfd4, { // set hook onEnter: function (args) { send("[S] !!!!!!!!!!!!!! custom3() called"); // before call }, onLeave: function (retval) { //send("[W] custom3 ret: " + retval.toString() ); // after call } });
끝~
the end~
'iOS App Hacking' 카테고리의 다른 글
ios app 복호화 - Clutch 2.x 버전 (0) | 2017.02.14 |
---|---|
iOS App Debugging - LLDB (1) | 2015.08.18 |
iOS App Runtime 조작 (0) | 2015.08.17 |
ios app hacking - (1) ios app 의 구조 (0) | 2014.02.03 |
ios app 복호화 - Clutch 2.x 버전
오랫만에 ios 앱 해킹을 다시 하려다 보니 가물가물해서 간단히 다시 정리하기로 했다.
복호화 - Clutch
(https://github.com/KJCracks/Clutch/releases)
# wget https://github.com/KJCracks/Clutch/releases/download/2.0.4/Clutch-2.0.4
# chmod 755 ./Clutch-2.0.4
# Clutch -i
Installed apps:
1: *알리미 <com.*******.smartcaremgr>
2: Find My iPhone <com.apple.mobileme.fmip1>
3: Google Authenticator <com.google.Authenticator>
4: Chrome - web browser by Google <com.google.chrome.ios>
5: Hangouts <com.google.hangouts>
6: Google Drive - free online storage <com.google.Drive>
7: 신한S뱅크 <com.shinhan.sbank>
8: Google Sheets <com.google.Sheets>
# Clutch -b 1
ASLR slide: 0x3a000
Dumping <NotificationService> (armv7)
Patched cryptid (32bit segment)
ASLR slide: 0x8d000
Dumping <NotificationContent> (armv7)
Patched cryptid (32bit segment)
Writing new checksum
Writing new checksum
ASLR slide: 0x19000
Dumping <SMail> (armv7)
Patched cryptid (32bit segment)
Writing new checksum
Finished dumping com.shinhan.smartcaremgr to /var/tmp/clutch/59213352-****-4411-****-1A8D42C57BC5
Finished dumping com.shinhan.smartcaremgr in 2.6 seconds
Clutch 업데이트가 중단된걸로 알았었는데 2.0.4 버전이 작년에 나왔다. -i 로 목록을 본 후 -b 로 번호만 지정해주면 끝.
'iOS App Hacking' 카테고리의 다른 글
ios 앱 사용자 함수 hooking (using frida) (2) | 2017.08.16 |
---|---|
iOS App Debugging - LLDB (1) | 2015.08.18 |
iOS App Runtime 조작 (0) | 2015.08.17 |
ios app hacking - (1) ios app 의 구조 (0) | 2014.02.03 |
iOS App Debugging - LLDB
LLDB 를 이용한 리모트 디버깅 간략 정리
출처 원문 : http://versprite.com/og/ios-reverse-engineering-part-one-configuring-lldb/
iOS 8.4 버전으로 넘어오면서 현재 GDB가 정상 동작하지 않는다.(직접 컴파일 해보진 않았다)
실행은 되지만 디버깅 시 뭔가 오류가 발생하며 제대로 동작하지 않으므로 대안으로 LLDB 를 사용할 수 있다.
(몇몇 고수들은 LLDB가 더 좋다는 사람도 있다)
# hdiutil attach /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/
DeviceSupport/8.0\\(12A365\)/DeveloperDiskImage.dmg
# cp /Volumes/DeveloperDiskImage/usr/bin/debugserver /Users/hyunmini/
# vi entitlements.plist
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
<
plist
version
=
"1.0"
>
<
dict
>
<
key
>com.apple.springboard.debugapplications</
key
> <
true
/>
<
key
>run-unsigned-code</
key
>
<
true
/>
<
key
>get-task-allow</
key
>
<
true
/>
<
key
>task_for_pid-allow</
key
>
<
true
/>
</
dict
>
</
plist
>
# codesign -s - --entitlements entitlements.plist -f debugserver
# sftp root@x.x.x.x
#> put debugserver
# exit
여기까지 debugserver 를 업로드 하는 과정이다. 이제 iOS 디바이스에서 디버그서버를 실행하고 대기 한 뒤 디버거로 붙으면 된다.
=========================
# iOS 디바이스에서
=========================
# ps -ef | grep [process name] // pid 확인
# ./debugserer *:7777 --attach=[pid] // debugserver 실행
=========================
# MAC 에서
=========================
(lldb) platform select remote-ios // 디버깅 플랫폼 지정
(lldb) process connect connect://192.168.20.107:7777 // debugserver 에 접속
이제부터 디버깅을 시작하면 된다.
(lldb) b objc_msgSend
(lldb) c
(lldb) register read
'iOS App Hacking' 카테고리의 다른 글
ios 앱 사용자 함수 hooking (using frida) (2) | 2017.08.16 |
---|---|
ios app 복호화 - Clutch 2.x 버전 (0) | 2017.02.14 |
iOS App Runtime 조작 (0) | 2015.08.17 |
ios app hacking - (1) ios app 의 구조 (0) | 2014.02.03 |
iOS App Runtime 조작
iOS 앱을 조작하는 방법에는 여러가지가 있다. 그중 cycript 를 이용한 방법에 대해 알아보자.
먼저 앱에 어떤 클래스가 있는지 어떤 메소드가 존재하는지 확인을 해야 수월한 분석이 가능하다. 하나씩 차분히 확인해 보도록 하자.
1. 클래스 분석
바이너리 클래스 분석에는 여러가지 툴이 사용되나, 아래 세가지 정도가 주로 사용된다.
1) class-dump-z
2) class-dump
3) IDA Pro
공통적으로 위 툴들을 사용하기 위해서는 바이너리 암호화를 먼저 풀어주어야 한다. 수동으로 복호화 할 수도 있지만
여기에선 clutch 를 이용한 자동 복호화를 알아 보자.
clutch 는 복호화 과정(메모리 덤프 - cryptid 조작)을 편리하게 자동으로 모두 해 준다.
iPhone:~ root# ./Clutch 2015-08-17 16:16:10.789 Clutch[887:24896] checking localization cache You're using a Clutch development build, checking for updates.. Your version of Clutch is up to date! Clutch 1.4.7 (git-2) --------------------------------- is iOS 8 application listing method brah is iOS 8 application listing method brah DEBUG | Preferences.m:42 | preferences_location: /etc/clutch.conf DEBUG | Preferences.m:43 | { RemoveMetadata = YES; } Daum maps HyundaiAppCard kbbank-ios kbminibank MiniSmartShinhan ShcTopsClub ShinhanCard SHRNDCard SHSmartPay YelloJihachul |
옵션없이 실행하면 위와 같이 현재 설치된 앱들 목록이 출력된다. 해당 앱을 선택하면 간단히 크랙(복호화)된다.
gimmanbog-ui-iPhone:~ root# ./Clutch ****bank
Clutch 1.4.7 (git-2)
---------------------------------
is iOS 8 application listing method brah
DEBUG | Preferences.m:42 | preferences_location: /etc/clutch.conf
DEBUG | Preferences.m:43 | {
RemoveMetadata = YES;
}
DEBUG | main.m:609 | app to crack {
ApplicationBasename = "kbminibank.app";
ApplicationBundleID = "com.kbstar.minibank";
ApplicationContainer = "/var/mobile/Containers/Bundle/Application/B8D46E0B-28D6-482F-8A23-C610A127DF90/";
ApplicationDirectory = "kbminibank.app";
ApplicationDisplayName = "\Uc2a4\Ud0c0\Ubc45\Ud0b9\Ubbf8\Ub2c8";
ApplicationExecutableName = kbminibank;
ApplicationName = kbminibank;
ApplicationVersion = "1.0.5.1";
MinimumOSVersion = "5.1.1";
PlugIn = 0;
RealUniqueID = "B8D46E0B-28D6-482F-8A23-C610A127DF90";
}
...(중략)...
DEBUG | Binary.m:1291 | 32-bit Region Size: 16384 5242880
DEBUG | Binary.m:1291 | 32-bit Region Size: 5242880 5242880
dumping binary: performing dump
dumping binary: patched cryptid
[====================================================>] 100%
dumping binary: writing new checksum
...(중략)...
DEBUG | Cracker.m:326 | Saved cracked app info!
/User/Documents/Cracked/**뱅킹미니-v1.0.5.1-no-name-cracker-(Clutch-1.4.7).ipa
elapsed time: 7.26s
Applications cracked:
****bank
Total success: 1 Total failed: 0
2. Cycript 연결
cycript 연결은 단순히 PID 값만 옵션으로 주면 된다. ps -ef 를 이용하여 확인한 PID 를 넣어 주도록 하자.
# ps -ef
...
0 865 1 0 0:00.00 ?? 0:00.03 /System/Library/PrivateFrameworks/CoreSymbolication.framework/c
0 881 1 0 0:00.00 ?? 0:00.28 sshd: root@ttys001
501 892 1 0 0:00.00 ?? 0:00.97 /var/mobile/Containers/Bundle/Application/240AD9E1-8F55-4A99-9E
...
immanbog-ui-iPhone:~ root# cycript -p 892
cy#
cy# UIApp.delegate
#"<RnDCardAppDelegate: 0x17e7ee70>"
cy# var m = [[MainViewController alloc ] init ] // 변수 m 에 메인 뷰 할당
#"<MainViewController: 0x17df3530>"
cy# UIApp.keyWindow.rootViewController = m // 현재 뷰를 강제로 메인 뷰로 바꿈
#"<MainViewController: 0x17df3530>"
=> 로그인 절차 등을 우회하여 메인 뷰 강제 이동 가능. 다만 로그인이 되지 않은 상태로 강제 이동이므로 사용에 제한이 있을 수 있음
cy# var m = [[LoginViewController alloc ] init ] // 로그인 뷰 할당
#"<LoginViewController: 0x17db21b0>"
cy# UIApp.keyWindow.rootViewController = m // 현재 뷰를 로그인 뷰로 바꿈
#"<LoginViewController: 0x17db21b0>"
=> 루팅, 무결성 탐지창이 뜨고 화면이 멈춘 상태에서 cycript 를 이용하여 강제로 로그인 화면으로 전환
cy# app.keyWindow.recursiveDescription // 관련 윈도우 등 출력
'iOS App Hacking' 카테고리의 다른 글
ios 앱 사용자 함수 hooking (using frida) (2) | 2017.08.16 |
---|---|
ios app 복호화 - Clutch 2.x 버전 (0) | 2017.02.14 |
iOS App Debugging - LLDB (1) | 2015.08.18 |
ios app hacking - (1) ios app 의 구조 (0) | 2014.02.03 |
ios app hacking - (1) ios app 의 구조