'40./42. iOS'에 해당되는 글 25건

  1. 2016.04.20 iOS Memory 문자열 변조(String Edit in iOS Memory)
  2. 2015.01.26 [DVIA] 11. Sensitive Information in memory
  3. 2015.01.20 iOS GNU Debugger 설치
  4. 2014.11.23 iRET, Snoop-it 동시 설치
  5. 2014.11.23 iNalyzer5
  6. 2014.11.12 [DVIA] 10. Binary Patching
  7. 2014.09.11 [DVIA] 03. Runtime Manipulation
  8. 2014.09.11 [DVIA] 02. Jailbreak Detection (5)
  9. 2014.09.10 [DVIA] 01. Insecure Data Storage
  10. 2014.07.24 [iOS] Logify
  11. 2014.07.21 [DVIA] Damn Vulnerable iOS Application
  12. 2014.07.17 GikDBG iOS assembly-level debugger iOS 디버거 (3)
  13. 2014.07.16 iRET
  14. 2014.07.16 [Cydia App] iDevice VNC용 Veency
  15. 2014.07.15 iOS App 정적 분석용 Class-dump-z
  16. 2014.06.14 iOS Application Security Part 1-Setting Up a Mobile Pentesting Platform (1)
  17. 2014.06.14 Damn Vulnerable iOS Application(DVIA) (1)
  18. 2014.05.02 iOS App 크랙방지 (3)
  19. 2014.04.29 Introducing the iOS Reverse Engineering Toolkit
  20. 2014.04.29 dumpdecrypted
  21. 2014.04.29 iOS Jailbreak [계속 수정 예정]
  22. 2013.10.25 [iOS] TinyUmbrella shsh 백업
  23. 2013.09.13 iOS 루트 비밀번호를 잊어버렸을때 복구법 (5)
  24. 2013.09.13 시디아 툴 목록
  25. 2013.09.13 Cydia Source 목록
메모리 변조하는 방법에 대해서 일부 개발자만 동작원리와 개발하는 방법을 알고있다. 오늘 메모리 변조에 대한 기본 지식, 메모리 함수, 변조 방법까지 정리 할 예정이다.

Part 1. 기본 개념
1. Process 프로세스
우리는 HelloWorld.c 컴파일을 하면 HelloWorld.exe을 실행 파일을 생성 수 있다. iOS/OSX는 실행 가능한 파일들이 모두  실행에 필요한 데이터와 명령어가 포함된 March-O 포맷으로 되어있다. 운영체제에서 해당 실행파일을 실행하면 우리는 그걸 프로세스라고 불른다. 사실 실행파일과 프로세스는 데이터와 명령어의 집합이 다른 상태의 같은 오브젝트(객체)이다. 실행 파일은 정적, 프로세스는 동적이라고 볼 수있다. 실행 파일은 하드 디스크에 저장되어있고 프로세스는 메모리 내 저장된다.
 
2. Vitual memory, memory page and memory region 영역
운영체제에서 실행파일을 실행할경우, 운영체제는 실행파일을 디스크에서 메모리로 로드한다. 이 프로세스는 메모리 어디에 위치할까?  ATM은 매우 복잡한 절차이며,  만일 꼭 알아야할 개념은 모든 프로세스는 별도의 메모리 공간을 차지한다는 것이다. 메모리 가상화를 통하여 프로세스 A와 프로세스 B는 다른 메모리 공간에 있다. 대부분의 메모리 작동은 가상 메모리를 기반한다. 그리고 ARMv7과 같은 32bit 프로세서의 경우 각 프로세스의 가상 메모리 사이즈는 2^32 = 4G바이트이다. 하지만 대부분의 프로세스는 실행 시 4GB를 사용하지 않고 4GB 보다 작은 부분을 소비한다. 프로세스 사용시 메모리의 실제 사이즈는 프로세스의 가상 메모리 공간이라고 불린다, 그리고 4GB 가상 메모리 공간은 많은 다양한 페이지 분할로 분할되어있다. 가상 메모리의 contiguous 블록은 고정(4096byte on iOS/OSX)되어있다. 메모리 동작의 최소한의 단위이다. 프로세스 가상 메모리 주소 공간은 다수의 메모리 영역으로 구성되어있다. 각각의 메모리 영역은 가상 메모리 페이지의 수를 포함하고, pay attention, 메모리 영역은 연속하지 않을 수 있다. 따라서 위의 개념은 다음  scrawls에 의해 설명 될 수 있다.



Part 2 Modeling 모델링
기본 개념을 정확하게 이해하고 난 다음에 메모리 변조에 대한  프로그래밍 모델을 구현하여 실제 코드를 작성해 본다.

메모리 변조란 무엇인가? 메모리에 있는 데이터를 수정하는 것이다.  어떻게 해야하는걸까? 메모리에는 주소가 존재하며, 시스템 APIs를 이용하여 우리가 찾을 값을 가지고 있는 주소를 읽고 쓸수가 있다. 하지만 우리가 찾을 주소는 어디있을까? 그 위치를 어떻게 찾을 수 있을까? 우리가 알고 있듯이 기계 코드는 쉽게 읽을 수가 없는 로우 레벨 코드로 작성되어있다. 하지만 기계가 읽을 수 있는 언어이다. 그리고 모든 기계 코드는 0과 1로 작성된 바이너리 포맷으로 되어있다. 즉, 궁극적으로 명령어와 데이타 모두 0과 1로 작성되어 있으며, 가상 메모리 상의 주소 공간은 모두 0과 1로 채워진다. 만일 찾을 값이 “010101”이면 가상 메모리 상의 주소 공간은 "00000111110101010110011000…”라고 작성되어지며 가상 메모리상의 주소 공간에서 우리가 목표한 값을 찾는건은 단락 내 문자열 패턴을 검색하는 것 만큼 쉽니다.
 
ARM은 little-endian형식으로 되어 있다.


메모리 수정 모델은 3개지로 나눈다
1) 모든 가상 메모리 영역을 나열 하여 대상 프로세스에서 가상 메모리 주소 공간을 얻는다.
2) 주소 공간에서 찾고자 하는 데이터를 찾는다. 그리고  찾고자하는 데이터의 주소를 얻는다.
3) 찾고자하는 데이터가 존재하는 주소의 데이터를 변경한다.


Part 3 functions 함수
코딩하기 전에, 빈번하게 접할 함수를 빠르게 살펴보자. 모두 mach_vm 함수들이다.
http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/osfmk/vm/vm_user.c

kern_return_t
mach_vm_read(
      vm_map_t       map,
      mach_vm_address_t       addr,
      mach_vm_size_t      size,
      pointer_t      *data,
      mach_msg_type_number_t      *data_size);
Description: Read/copy a range from one address space and return it to the caller. $map$ is the port for the task whose memory is to be read; $addr$ is the address at which to start the read; $size$ is the number of bytes to read; $data$ is a buffer to store the read bytes; $data_size$ on input, is a pointer to the maximum size of the buffer; on output, points to the size read.

kern_return_t
mach_vm_write)
     vm_map_t     map,
     mach_vm_address_t     address,
     pointer_t     data,
     __unused mach_msg_type_number_t size);
Description: Write data to the specified address in the target task's address space. $map$ is the port for the task whose memory is to be written; $address$ is the address at which to start the write; $data$ is a buffer to be written; $size$ is the size of $data$.

kern_retrun_t
mach_vm_region(
     vm_map_t     map,
     mach_vm_offset_t     *address,
     mach_vm_size_t     *size
     vm_region_flavor_t     flavor,
     vm_region_info_t     info
     mach_msg_type_number_t     *count,
     mach_port_t     *object_name);

Description: Return description of a virtual memory region. $map$ is the port for the task whose address space contains the region; $addr$ on input, is the address at which to start looking for a region; on output, returns the starting address actually used; $size$ on output is the number of bytes in the located region; $flavor$ is the type of information to be returned, should be VM_REGION_BASIC_INFO$info$ returns region information, should be of type vm_region_basic_info_data_64_t on both 32-bit and 64-bit OSes; $count$ on input, should be VM_REGION_BASIC_INFO_COUNT_64; on output, the size of the region.

void *
memmem(const void *big, size_t big_len, const void *little, size_t little_len);
Description: Locates the first occurrence of the byte string $little$ in the byte string $big$. If it matches, a pointer to the first character of the first occurrence of $little$ is returned; else it returns NULL.

Part 4 코딩
https://github.com/iosre/HippocampHairSalon

Part 5 테스트

약간 소스코드를 수정하여 String을 인식할 수 있도록 변경하였다.

memory_iOS_v.0.6.zip


DVIA라는 앱의 Binary Patching의 로그인 프로세스를 이용하여 메모리 변조가 잘 되는지 확인하려고 한다.
Login Method 1의 계정과 비밀번호는 Admin/This!sA5Ecret 이다.
이때 로그인 비밀번호에 qqqqqqqqqqqqq를 입력하면 로그인이 틀리게 된다.



./memory_char_iOS -> 실행하면 아래와 같이 PID를 읽어온다.
변경하고 싶은 프로세스 PID를 입력하고 문자열을 검색한다.
이전에 qqqqqqqqqqqqq를 입력 했으므로 해당 문자열을 검색한다.
Please choose your next action 1 -> Modify search results; 선택
0x메모리 주소 -> 입력
This!sA5Ecret -> 입력


Admin/qqqqqqqqqqqqq를 입력한 상태에서 memory_char_iOS를 이용하여 문자열을 This!sA5Ecret를 입력한다.
메모리 내에서는 입력패드로 입력한 비밀번호가 qqqqqqqqqqqqq에서 This!sA5Ecret로 변경된 상태이므로 로그인이 성공하게 된다.







 
  
저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS Memory 문자열 변조(String Edit in iOS Memory)  (0) 2016.04.20
[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12

[DVIA] 11. Sensitive Information in memory


메모리에 중요 정보 노출


111. Sensitive Information in memory




Q1. A couple of properties with the name "Password" & "Username"

몇몇 속성의 이름은 "Password""Username" 


Q2. An instance variable named "passwd" 

인스턴트 변수 명은 passwd이다.


# pe -ef | grep Damn


# gdb -p 1200


(gdb) b malloc

(gdb) c

(gdb) finish - > 사용하지 말 것!!


(gdb) i r r0

(gdb) i mach-region 0x00000000 0xFFFFFFFF

(gdb) dump memory [메모리 덤프 명] 0x00000000 0xFFFFFFFF

+ (gdb) info mach-regions : 메모리 맵 및 구역 속성 확인

+ (gdb) info mach-regions 0x00000000[address] : 특정 address가 속해있는 구역의 특성

+ (gdb) info mach-tasks : attach 할 프로세스 정보 확인

+ (gdb) info mach-task [PID] : 하나의 프로세스[PID]에 대한 정보 확인



(gdb) q


덤프 생성 확인


Hex Editor를 이용하여 덤프를 확인하였으나, 메모리 내 "Password" & "Username"확인하지 못했지만 인스턴트 변수는 확인(DVIA 를 사용한 후 메모리 덤프 추천 ex, Runtime Maniulation에 Login Method 등)


패스워드가 안나오는걸 보니 이건 아니듯한데..


[추가] 메모르 덤프 쉘 스크립트


메모리 덤프 소스를 약간 수정해서 만든 쉘 스크립트



dump.sh


일단은 DVIA 애플리케이션에서 Appication Patching 파트 내 Login Method 1 기능을 이용하여 로그인 시도한다. 메모리 내 Heap 영역은 사용자가 애플리케이션을 실행한 후 사용된 정보들이 동적으로 기록되는 영역이다.


이제 위에서 다운받은 쉘 스크립트를 iDevice에 삽입한다. 

처음 삽입한 쉘 스크립트에 실행 권한이 없으므로 권한을 부여하며, 힙 덤프를 추출할 애플리케이션 바이너리 명칭을 획득한다. 


# chmod 777 dump.sh

# ps -ef | grep Damn

# ./dump.sh DamnVulnerableIOSApp


해당 폴더 하위에 애플리케이션 이름으로 생성된 폴더가 보이며, 하위에는 heap 덤프를 한 파일들이 존재한다. 해당 파일 내 이전에 로그인 시도한 패스워드 기록이 남아있는 것을 확인 가능하다.


원본 다운로드 : https://github.com/NetSPI/heapdump-ios

저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS Memory 문자열 변조(String Edit in iOS Memory)  (0) 2016.04.20
[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12

iOS GNU Debugger 설치


설치 환경 : iOS 8.1.2 (iPhone 5)

추가 소스 : http://cydia.radare.org/





저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS Memory 문자열 변조(String Edit in iOS Memory)  (0) 2016.04.20
[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12

iRET, Snoop-it 동시 설치


iRET과 Snoop-it을 설치 시 "trying to overwrite '/Applications/._.DS_Store'" 에러 메시지 출력


#dpkg-deb -x iRET.deb iRET_tmp/                            #패키지 내용 추출

#dpkg-deb -e iRET.deb iRET_tmp/DEBIAN/               #컨트롤 파일 추출

#find iRET_tmp/ -name "*DS_Store" -type f -delete    #모든 DS_Store 파일 삭제

#vi iRET_tmp/DEBIAN/control                                    #버전 태그 더블쿼터(")

#dpkg-deb -b iRET_tmp/ updated_iRET.deb             # 새로운 deb 파일 생성


iRET과 Snoop-it 두개의 패키지는 모두 ._.DS_Store을 포함하고 있어 충돌 다는 것으로 추측한다. iRET을 언팩하고 다시 패키징하여 충돌 이슈를 제거했다.



Snoop-it 설치 된 iDevice에서 에러 없이 updated_iRET.deb 파일 설치 가능합니다.


※ 참조 : http://oldmanlab.blogspot.kr/2014/11/trying-to-overwrite-applicationsdsstore.html

저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11

iNalyzer5

40./42. iOS 2014.11.23 17:55

iNalyzer5




 iNalyzer - AppSec : https://appsec-labs.com/inalyzer/

 Doxygen : http://www.stack.nl/~dimitri/doxygen/download.html

 Graphviz : http://www.graphviz.org/Download_windows.php












# cd /Application/iNalyzer5.app/

# ./iNalyzer5











iNalyzer5.7z



저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11

[DVIA] 10. Binary Patching


모바일 애플리케이션의 실행 파일을 패치함으로써 애플리케이션의 기능을 영구적으로 변경 가능하다. 



101. Login Method 1


DVIA 모바일 애플리케이션에서 바이너리 패치 문제 중 첫번째 "Login Method 1"는 계정과 비밀번호로 인증하는 기능이다. 계정과 비밀번호가 틀려도 로그인 가능하면 성공이다.


계정과 비밀번호에 aa로 인증 시도하였으나, Oops 경고창을 확인했다.


# 진행 단계 #

1. 테스트 실행 (로그인 불가능)

2. Snoop-it을 이용하여 동적 Object-C Class/Object-C Method 호출 확인

3. IDA(Disassembler)를 이용하여 Object-C Method 동작 확인

4. Hex Editor를 이용하여 바이너리 패치

5. 실행권한 및 소유자 변경

6. 동작확인



iDevice에서 Snoop-it 실행하고, DVIA를 선택한다.


DVIA를 실행하고 메뉴에서 Binary Patching을 선택한다. Snoop-it에서 DVIA내 Object-C Class 호출을 트레킹하여 아래와 같이 초록색 동그라미로 표시해 준다. Binary Patching 메뉴를 선택하면 호출되는 Object-C Class는 UIViewController 내 ApplicationPatchingVC, ApplicationPatchingDetailsVC임을 확인 가능하다. 


ApplicationPatchingDetailsVC Object-C Class에서 -(void)loginMethod1Tapped:(id)arg0;라는 Object-C Method가 로그인 버튼(Login Method 1) 클릭시 동작하는 기능임을 추측한다. 


이제 DVIA를 실행파일을 추츨하러 iDevice에서 터미널로 접근하다.

실행 파일의 위치는 ps를 이용하여 확인 가능하다.


# ps -ef | grep Damn


실행 파일 추출 전, otool 명령어를 이용하여 암호화 여부를 확인한다.

#otool -l /Application/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp | grep crypt

만일 cryptid가 1이면 AppStore에 올릴때 Apple에서 암호화한것이므로 Clutch와 같은 툴을 이용하여 암호를 해독한 후 추출해야한다.


WinSCP를 이용하여 추출하였으나 다른 방법도 무방하다.


이제 디스어셈블러를 이용하여 분석을 할 것이다.

일단 IDA를 실행하여 이전에 추출한 실행파일을 올린다. (사용한 IDA버전은 6.5)


IDA 좌측에 Functions Windows에서 Function name을 검색한다. 이전에 확인한 ApplicationPatchingDetailsVC내 loginMethod1Tapped를 검색한다.


loginMethod1Tapped 메소드는 아래 이미지와 같이 동작한다.

(열심히 이미지 수정을 하였으나, 업로드 이미지가 똥이다.ㅡㅡ)

일단 상단에서 계정이 Admin인지 확인을 하고 분기문(BEQ)를 이용하여 나눠진다.

만일 Admin이 맞다면 그다음 비밀번호가 This!sA5Ecret인지 확인한다.

비밀번호 또한 맞다면 로그인 성공 페이지를 보며주고, 둘다 틀리다면 로그인 실패 페이지를 보여준다.


첫번째 분기문에서 스페이스를 누르면 아래와 같이 주소 정보를 확인 가능하다
__text:0001F3C6    BEQ    loc_1F42C


Hex Editor를 이용하여 해당 주소 값을 변경한다. (BEQ -> BNQ)

BEQ loc_1F42C == 31D0

BNQ loc_1F42C == 31D1


두번째 분기문에서 스페이스를 눌러서 아래와 같이 주소 정보를 확인한다.

__text:0001F41E    BEQ    loc_1F438


Hex Editor에 주소 검색을 이용하여 쉽게 주소 위치 검색 가능하다.


Hex Editor를 이용하여 해당 주소 값을 변경한다. (BEQ -> BNQ)

BEQ loc_1F42C == 31D0

BNQ loc_1F42C == 31D1


이제 변경한 실행파일을 다시 iDevice에서 넣는다.


실행 권한과 사용자를 변경한다.

# chmod 755 DamnVulnerableIOSApp

# chown mobile.staff DamnVulnerableIOSApp


이제 로그인 시 계정과 비밀번호에 aa만 넣어도 로그인 인증이 성공한다.




102. Check For Jailbreak



Login Method 1과 동일


103. Show alert


Show alert문제는 I love Google이라고 출력되는 경고창을 I Love Apple로 변경하라는 문제이다. 


# 진행 단계 #

1. 테스트 실행 (I love Google)

2. 실행 파일 추출 Hex Editor를 이용하여 바이너리 패치

3. 실행권한 및 소유자 변경

4. 동작확인


실행 파일 위치 확인 및 추출한다.

# ps -ef | grep Damn


Hex editor에서 I love Google을 검색(Text String)하여 I love apple!로 변경한다. Google과 Apple의 문자열 길이다 다르기 때문에 친절하게 느낌표(!)를 넣었다. 


실행 권한을 부여한다.

# chmod 755 


Show alert을 이용하여 I love Apple! 문자열을 확인한다.


014. kill Application



Login Method 1과 동일








저작자 표시 비영리 변경 금지
신고

'40. > 42. iOS' 카테고리의 다른 글

iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10

[DVIA] 03. Runtime Manipulation


Runtime Manipulation은 모바일 애플리케이션이 실행 중에 GDB, Cycript 등을 이용하여 동적으로 기능을 변경하는 방법이다. 


GDB나 Cycript는 이전 [DVIA] 02. Jailbreak Detection에서 사용하였으므로 이번에는 Snoop-it과 Theos/MobileSubstrate(Tweak)을 이용할 것이다.


031. Login Method 1


Theos는 Xcode를 사용하지 않고 iDevice의 소프트웨어를 관리, 개발 및 배포 가능한 크로스 플랫폼 개발 도구이다. ThoOS는 탈옥한 iOS에서 Tweak을 개발하기 위한 중요한 도구이다.


DVIA 모바일 애플리케이션에서 Login Method 1을 클릭하면 "Oops"라는 경고창을 확인 가능하다.


# 진행단계 #

1. 테스트 실행(로그인 불가능)

2. Theos 트윅 개발

3. 트윅 설치

4. 실행 확인


# /private/var/theos/bin/nic.pl

Choose a Template (required): 5

theos를 실행하고 [5.] iphone/tweak을 선택한다. 

Project Name (required): DVIBypass

Package Name [com.yourcompany.dviabypass]:

Author/maintainer Name [System Administrator]:

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.highaltitudehacks.dvia

[iphone/tweak] List of application to terminate upon installation (space-separated, '-' for non) [SpringBoard]: -

MobileSubstrate Bundle filter에서 입력할 정보는 우리가 Tweak을 적용할 모배일 애플리케이션 명을 선택하며 DVIA의 전체 명칭를 적어준다.


현재 디렉토리에 DVIABypass.plist, Makefile, Tweak.xm, control, theos@가 생성된다. 그중 Tweak.xm이라는 파일에 후킹할 Object-C Class와 Object-C Method를 적어주면 된다.


후킹할 Object-C Class는 RuntimeManipulationDetaileVC 내 isLoginValidated이며, 해당 return 정보가 YES이면 로그인 인증이 성공하고, NO이면 로그인 인증이 실패한다.

해당 정보는 Class-dump-z를 이용하여 Object-C Class/Method를 확인 가능하다.

%hook RuntimeManipulationDetailsVC

- (BOOL)isLoginValidated {

return YES;

}

%end


export THEOS_DEVICE_IP=192.168.10.105 : 현재 iDevice의 IP주소

export SDKVERSION=8.1 : iOS 버전(8.1.2) 및 SDK 버전

export THEOS=/private/var/theos/ : theos 설치 경로


# make package install


com.yourcompany.dviabypass_0.0.1-1_iphoneos-arm.deb가 생성됨을 확인 가능하다.


또한, install명령어로 해당 패키지가 자동으로 설치 되어있다.


이전과 차이점은 /Libary/MobileSubstrate/DynamicLibraries 아래 DVIABypass.dylib와 DVIABypass.plist가 생성되어 있다.

MobileSubstrate는 기본적으로 모바일 후킹(Mobile Hooker), 모바일 로더(MobileLoader), 안전모드(Safe mode) 3가지 기능을 지원해준다.


Cydia 패키지를 확인하면 아래와 같이 설치됨을 확인 가능하다.



DVIA으로 돌아가서 로그인을 시도하면 계정과 비밀번호를 몰라도 로그인이 가능하다.





032. Login Method 2


Snoop-it은 동적으로 모바일 앱을 분석하기 위한 툴이다. 다양한 기능을 제공하나 Analysis/Objective-C Classes에서 Setup and Invoke라는 기능을 이용하여 로그인 우회를 할 것이다. 


Runtime Manipulation에서 계정과 비밀번호를 이용하여 로그인을 해야한다.


Snoop-it을 실행하고 DVIA을 선택한다.


DVIA를 실행한 후 웹 브라우저로 iDevice의 IP주소로 접근하면 아래와 같이 Snoop-it이 정상 실행되는 것을 확인 가능하다. DVIA에서 Runtime Manipulation 화면을 호출하면 Object-C Classes에서 RuntimeManipulationDetailsVC가 호출됨을 트레킹 가능하다.


RuntimeManipulationDetailsVC/-(void)pushSuccessPage;(Object-C Class/Object-C Method)를 선택한 후 우측 상단에 setup and invoke 기능을 실행한다.


invoke Method 메소드 호출한다.


DVIA 애플리케이션을 확인하면 로그인 성공 페이지가 강제로 호출됨을 확인가능하다.







저작자 표시 비영리 변경 금지
신고

'40. > 42. iOS' 카테고리의 다른 글

iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24

[DVIA] 02. Jailbreak Detection


iOS 탈옥(iOS jailbreaking)은 iOS의 제한을 풀어 사용자의 루트에 접근할 수 있게 함으로써 서명되지 않은 코드를 실행할 수 있게 하는 과정을 말한다. 보안 상으 문제로 탈옥을 탐지하도록 되어있으며 DVIA를 이용하여 탈옥 탐지 우회를 시도 할 것이다.

※ 탈옥을 하는 이유 중 하나는 앱플과 앱 스토어가 막아 놓은 컨텐츠에 접근성 때문에 탈옥합니다. 



021. Jailbreak Test 1 (GDB)


DVIA 모바일 앱에서 Jailbreak Detection을 메뉴를 선택한 후 "Jailbreak Test 1"을 확인하면 탈옥 탐지를 확인하는 "Device is Jailbreken" 경고 메시지를 확인 할 수 있다.


# 진행단계 #

1. 테스트 실행(탐지)

2. Class 정보 획득

3. GDB 사용 (Break Point 설정)

4. Jailbreak Test 클릭

5. Break Point로 인하여 일시 정지

6. 탈옥 탐지 후 리턴 정보 수정

7. RUN


Class-dump-z를 이용하여 실행 중인 DVIA의 Class 정보를 획득한다.

~ # ps -ef | grep "Damn"

~ # class-dump-z /var/mobile/Application/[DVIA 설치 ]/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp > DVIA.classdum.txt


텍스트 파일로 저장한 DVIA class 정보를 분석하여 - (void) jailbreakTest1Tapped: (id) tapped; 변수에서 탈옥 탐지 여부에 대한 정보를 저장하는 것을 확인 가능하다.


GNU 소프트웨어 시스템을 위한 기본 디버거인 GDB를 이용하여 실행 중인 DVIA에 attach 한다. 

~ # gdb

(gdb) attach [DVIA 앱 이름].PID



이전에 Class-dump-z에서 확인한 jailbreakTest1Tapped에 중단점을 걸어둡니다.

(gdb) b jailbreakTest1Tapped:


(gdb) c


(gdb) c

계속 진행하다보면 BreakPoint에 걸린 주소 위치가 출력이 됩니다.


disassemble 명령어를 이용하여 어셈블리 코드를 확인합니다.

(gdb) disassemble

blx는 링크 포함 분기 및 교환 명령어 세트 정보를 담고 있으며, 이전에 경고 메시지를 출력한 Object_msgSend를 호출할 때도 이용하기 때문에 모든 blx 주소를 저장하여 중단점을 걸어둡니다.


 참조 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ik/Cihfddaf.html


(gdb) b *주소


(gdb) c

(gdb) x/s $r1

레지스트리 $r1에 저장된 변수를 확인하며, Class-dump-z에서 분석한 "showAlertForJilbreakTestIsJailbroken:"이 발견 될 때까지 진행합니다.


"showAlertForJilbreakTestIsJailbroken:"을 확인합니다.


(gdb) set $r2 = 0

(gdb) c

레지스트리 $r2에는 함수에서 탈옥 탐지를 수행하고 return 될 정보가 담겨있으며, 해당 정보를 0으로 세팅합니다.


DVIA 앱으로 돌아가면 탈옥 탐지가 우회한 "Device is Not Jailbroken" 메시지를 확인 가능합니다.


022. Jailbreak Test 2 (Cycript)


DVIA 모바일 앱에서 Jailbreak Detection을 메뉴를 선택한 후 "Jailbreak Test 2"을 확인하면 탈옥 탐지를 확인하는 "Device is Jailbreken" 경고 메시지를 확인 할 수 있다.


# 진행단계 #

1. 테스트 실행(탐지)

2. Class 정보 획득

3. Cycript 실행하여 변수 변경

4. RUN



Class-dump-z를 이용하여 실행 중인 DVIA의 Class 정보를 획득한다.

~ # ps -ef | grep "Damn"

~ # class-dump-z /var/mobile/Application/[DVIA 설치 ]/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp > DVIA.classdum.txt

UIViewController Object 내 JailbreakDetectionVC 함수에서 탈옥 탐지하는 변수(- (BOOL) isJailbreaken;)을 확인합니다.


# cycript -p [PID]

cy# UIApp [UIViewController 접근]

cy# JailbreakDetectionVC.messages [JailbreakDetectionVC에서 사용하는 변수 주소 출력]


 참조 : http://www.cycript.org/


cy# JailbreakDetectionVC.messages['isJailbreaken'] = function () { return NO };


DVIA 앱으로 돌아가면 탈옥 탐지가 우회한 "Device is Not Jailbroken" 메시지를 확인 가능합니다.


 Cycript 단점 : GDB처럼 실행 시 동적으로 변수이 불가능합니다. 모바일 앱은 실행하되 메모리에 저장된 변수 정보를 변경하는 메모리 변조와 동일합니다




저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21

[DVIA] 01. Insecure Data Storage


Insecure Data Storage는 중요한 데이터를 적절한 보호없이 장치 내에 저장할때 발생하는 취약점입니다.


011. Plist


/var/mobile/Application 디렉토리는 iOS 모바일 앱이 설치되는 샌드박스 저장 공간으로 iDevice에서 사용자가 설치한 모든 모바일 앱에 대한 정보 및 실행 파일이 존재한다.

프로퍼티 리스트 (property list) 는 Mac OS X, iOS, NeXTSTEP, GNUstep 프로그래밍 소프트웨어 프레임워크 등에 이용되는 객체 직렬화 를위한 파일 이다. 또한 . plist 라는 확장자 를 가지므로, 보통 plist 파일이라고 하는 경우가 많다. 프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, 번들과 애플리케이션 소프트웨어 정보를 저장하기 위해서도 사용되고, 이전 맥 OS 에서는 리소스 포크 정보를 저장하는데에 사용되었다.

- 위키백과


username/passwd 입력후 "Save in Plist file"을 누른다.


해당 정보는 앱 샌드박스(application sandbox) 디렉토리 내 plist 확장자를 가진 파일에 저장된다.

간단하게 plist를 보는 프로그램은 다양하지만 iRET을 통하여도 plist 정보를 확인 가능하다.



012. NSUerDefaults


NSUserDefaults을 사용하여 저장하는 모든 정보는 암호화되지 않은 형태로 저장된다.


해당 정보는 하위 경로에 저장된다.

Library -> Preferences -> $AppBundleld.plist

중요 정보를 저장할때 NSUserDefaults를 사용하는건 좋은 방법이 아닌걸 확인 가능하다.



013. Keychain


Apple devices는 비밀번호 관리 기능으로 유용하게 사용하는 키체인(KeyChain)을 이용한다. 키체인은 dump를 이용하여 획득이 가능하며, 해당 정보는 웹 사이트 로그인정보, 신용카드 정보, 무선네트워크 정보 및 모바일 앱 설정에 따라서 앱 계정 정보가 저장 가능하다.


※ 다운로드 : https://github.com/ptoomey3/Keychain-Dumper


keychainDumper 실행한다.


keychain에 저장된 모든 정보 확인 가능하다.



014. Core Data


iDevice에서 사용하는 데이터베이스인 sqlite는 sqlite 또는 db라는 확장자를 가지고 있다. 경우에 따라서 확장자가 없는 경우도 있으며, PE구조를 확인하면 SQL 문구를 확인 가능하다. iOS 모바일 앱에서 데이터를 데이터베이스 형태로 저장 가능하다.






find ./ -name *sql*

sqlite3 ./Documents/CoreData.sqlite

sqlite> .tables

sqlite> .heaaders on

sqlite> select * from ZUSER;








저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17

[iOS] Logify

40./42. iOS 2014.07.24 15:01

Logify.pl


Logify is a utility that accepts a class header (.h file) as input and generates a MobileSubstrate extension (.xm file) which hooks all of that class's methods, printing log messages when they are called. This helps a hook developer see when certain methods are invoked during use. Comes with Theos.


사용법


실행은 bash 명령어 입력란에 다음과 같이 사용하면 된다.

 logify.pl SomeClassHeader.h > tweak.xm


This will create a new tweak source file (tweak.xm) using the methods defined in the header file `SomeClassHeader.h`. You can then use tweak.xm as the basis for a new tweak project, or integrate the generated code into your own project.


이슈


Doesn't generate any output if the interface line doesn't have a subclass, e.g. @interface MyClass, replace with @interface MyClass : NSObject


※ 참조 : http://iphonedevwiki.net/index.php/Logify



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17
iRET  (0) 2014.07.16

DVIA Solution



01. Insecure Data Storage

011. Plist

012. NSUserDefaults

013. Keychain

014. Core Data


02. Jailbreak Detection

021. Jailbreak Test 1

022. Jailbreak Test 2


03. Runtime Manipulation

031. Login Method 1

032. Login Method 2


04. Piracy Detection

041. Check for Piracy

042. Check for Piracy


05. Security Decision via Untrusted input

051. call


06. Side Channel Data Leakage

061. Device Logs

062. App Screenshot

063. Pasteboard

064. Keystroke logging


07. Transport Layer Protection

071. Send Over HTTP

072. Send Over HTTPS


08. Client Side Injection

081. what is your name ?


09. Broken Cryptography

091. Set a password here


10. Binary Patching

011. Login Method 1

012. Check For Jailbreak

013. Show alert

014. Kill Application


저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17
iRET  (0) 2014.07.16
[Cydia App] iDevice VNC용 Veency  (0) 2014.07.16

GikDBG iOS assembly-level debugger


GikDBG는 모바일 플레폼에서 실행 가능한 응용 프로그램(모바일 앱)을 위한 어셈블리 디버거이다. 32bit Microsoft Windows기반의 OllyDBG, GNU Project debugger의 GDB, collection of modular and reusable compiler and tool-chain technologies의 LLVM


URL : http://gikir.com


iOS 디버거와 Android 디버거를 지원하고 있지만, Android의 경우 원격 디버거가 많기 때문에 희소성 있는 iOS 디버거를 테스트를 시도했다.


gikir은 처음 다운로드 받아 압축을 해제하면 디버깅을 많이 해보신 분들을 ollydbg를 가장 먼저 눈에 보이지만, 이번엔 iOS 디버깅이니 Ollydbg보다 gikdbg.exe와 gikshl.exe에 익숙해지는 것이 좋을 것 같다.




iDevice에 설치할 GDB원격 서버는 gikdbg\iserver 폴더에 gikir_iserver.deb 패키지를 확인 가능하다. 



이 패키지를 i-funbox와 같은 툴을 이용하여 iDevice에 옮긴다.


설치

# dpkg -i gikir_iserver.deb



iDevice에 gikir_iserver 앱을 확인 가능하다.


gikdbg iphone server를 실행하면 아래와 같은 화면을 확인 가능하다.

USB 디버깅 mode를 사용한다면 user와 pype이 필요 없지만 wi-fi 디버깅 mode를 사용한다면 user가 인증 시 필요하다.



gikdbg.exe를 실행하면 gikshl.exe가 자동으로 실행되면서 접근 가능하도록 해줘야하는데 이상하게 테스트 시 접근이 불가능하거나 gikdbg.exe 프로세스가 종료된다. 그래서 먼저 gikshl.exe을 먼저 실행하고 진행하였다.

※ 주의 ifunbox와 itunes를 먼저 설치된 PC에서 진행해야합니다.


ollydbg를 사용할때는 File-Attach를 이용하여 프로세스에 접근하지만 iOS App에 접근할 때는 iDebug-Attach를 이용하여 접근한다.


Attach 가능한 프로세스(iOS app) 목록을 확인 가능하다.



그중 디버깅하고싶은 프로세스를 선택하면 아래와 같은 메시지 창을 확인 가능하다.


확인 - 확인



아래와 같이 정상적으로 실행한 모습을 확인가능하다.



아직까지는 동적 디버깅이 가능하지 않은 것 같다. 아니면 내가 못하는거..

iOS에 직접 붙어서 디버깅을 하는 것이 아니라 해당 프로세스를 덤프떠서 Windows에서 디버깅 하는 것같아 좀 아쉬웠다. IDA도 Mach-O 파일을 분석해주기 때문에 체감은 처음 이 툴을 발견했을때 기대치가 반감되었다.


참고로 중국인이 만든 툴이다. 영어와 중국어를 번역하며 사용법을 익혔지만 아직 완벽하지 않습니다. F&A와 Q&A가 모두 중국어라 구글 번역을 사용했지만 한글도 해석해야하는 수준의 번역이 나와서... 


저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17
iRET  (0) 2014.07.16
[Cydia App] iDevice VNC용 Veency  (0) 2014.07.16
iOS App 정적 분석용 Class-dump-z  (0) 2014.07.15

iRET

40./42. iOS 2014.07.16 09:56


iRET


iOS에서 실행가능한 APP을 모의해킹 시 반복되는 작업을 줄이기 위한 툴



iRET을 설치하기 전에 의존성의 문제로 필요한 작업이 존재한다. 아래 툴들이 iRET을 설치 할 디바이스에 필수 로 설치되어야 한다. 해당 툴은 Cydia를 이용하여 쉽게 설치 가능하다. Cydia에서 설치 불가능하다면 apt-get을 이용하여 다운로드 및 설치 가능하다.

 - Python (2.5.1 or 2.7) (Need to be Cydia ‘Developer’)

 - coreutils

 - Erica Utilities

 - file

 - adv-cmds

 - Bourne-Again Shell

 - iOS Toolchain (coolstar version)

 - Darwin CC Tools (coolstar version)

 - An iOS SDK (presumably iOS 6.1 or 7.x) installed to /theos/sdks













iRET의 경우 소스코드가 공개되어있으며, python으로 작성되어있다.

python 소스를 분석하면 iRET을 구동 시 필요한 툴을 find를 이용하여 검색하고 해당 PATH을 변수에 저장하여 사용한다. 특정 툴이 (Not install)이 표시되는 경우는 해당 라이브러리나 프로그램이 설치가 되지 않아서 찾을 수 없기 때문이다. 해당 툴을 직접 설치하고 재시작하면된다.




저작자 표시
신고

Veency


If your device has ever been just out of reach, this package is for you: you'll never need to touch your iPhone, iPad, or iPod Touch again! Instead, sit back and enjoy the comfort of remotely logging into your phone via VNC. You can view the screen, touch controls, and even push the lock and menu buttons all from the comfort of your desk- or laptop.


To activate, install it and then go to Settings and set a password. When connections come in you will get a notification dialog asking if you want to accept. You can tell whether there are any active clients by way of an icon on the status bar. Just remember: VNC is not a very fast protocol ;P.


The default Mac OS X Screen Sharing VNC client is compatible, among many others. The App Store also includes some VNC clients.


(I recommend turning off the cursor in your client, since it causes some graphical artifacts. If you want a cursor, you can use the one that Veency provides. I also recommend using 8-bit color depth as it is much more usable.)


VNC(Virtual Network Computing, 가상 네트워크 컴퓨팅)는 컴퓨터 환경에서 RFB 프로토콜을 이용하여 원격으로 다른 컴퓨터를 제어하는 그래픽 데스크톱 공유 시스템이다. 자판과 마우스 이벤트를 한 컴퓨터에서 다른 컴퓨터로 전송시켜서 네트워크를 거쳐 그래픽 화면을 갱신하는 방식을 제공한다.

- 위키백과




























저작자 표시
신고

iOS App 정적 분석용 Class-dump-z


Why a yet another class-dump?


Class-dump는 17년전 Steve Nygard가 작성한 Objective-C Class 추출용 Command-line 도구이다. 이 개발은 2007년 쯤에 중지되었으며 최근 ABI를 지원하지 않는다. 2008년에 Holly Lee가 class-dump-x을 개발하였으나, 잘못된 Offset계산이나 속성등을 제공하지 않는 등 상속(inherited) 문제를 가지고 있었다. 이후 KennyTM이 상속 문제와같은 문제를 해결해가면서 class-dump-z를 만들었다.


class-dump-z는 class-dump 재 개발하고 있다.  현제 최신버전 3.2는 2.0 ABI를 지원해주지만 class-dump보다는 ivar offect 계산은 여전이 나쁘다.  



- 64-bit 지원 (iPhone RAM이 4GiB 이하)

- Objective-C 1.0 ABI.


※ 다운로드 : https://code.google.com/p/networkpx/wiki/class_dump_z


해당 블로그는 Class-dump-z의 설치까지만 작성합니다.


설치 디바이스 : iPad mini 2 (64-bit) 탈옥















저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

iRET  (0) 2014.07.16
[Cydia App] iDevice VNC용 Veency  (0) 2014.07.16
iOS App 정적 분석용 Class-dump-z  (0) 2014.07.15
iOS Application Security Part 1-Setting Up a Mobile Pentesting Platform  (1) 2014.06.14
Damn Vulnerable iOS Application(DVIA)  (1) 2014.06.14
iOS App 크랙방지  (3) 2014.05.02

iOS Application Security Part 1-Setting Up a Mobile Pentesting Platform


모바일 모의해킹 플래폼 환경 설정


※ 참조 : http://highaltitudehacks.com/2013/06/16/ios-application-security-part-1-setting-up-a-mobile-pentesting-platform/


Jailbreaking your device (탈옥)


디바이스를 탈옥하면 많은 이득이 있다. nmap, metasploit과 같은 툴을 설치하거나 파이선 코드를 실행 가능하다.


iOS 디바이스를 탈옥가능한  디바이스 버전이 iOS 5.x. 이전이면 redsn0w를 이용하며, 버전이 iOS 6.x 이상이라면 evasi0n을 이용하여 탈옥을 권고한다.


 evasiOn : http://evasi0n.com

 redsn0w : http://www.redsn0w.us





1





Selling up a mobile audiling platfom




- OpenSSH

- BigBoss Recommended tools - APT 0.6 Transitional, Git, GNU Debugger, less, make, unzip, wget and SQLite 3.x 

- MobileTerminal





# ssh root@localhost

# apt-get update

# apt-get upgrade




class-dump-z

iOS 어플리케이션의 dump class 정보를 사용하기 위해서 class-dump-z를 설치한다.

 https://code.google.com/p/networkpx/wiki/class_dump_z


해당 사이트에서 class-dump-z_0.2a.tar.gz의 링크주소를 복사하여 wget을 이용하여 다운받는다.

# wget http://networkpx.googlecode.com/files/class-dump-z_0.2a.tar.gz


# tar -xvfz class-dump-z_0.2a.tar.gz


# cd iphone_armv6/

# cp class-dmp-z /usr/bin

# class-dump-z



※ 참고 자료

 SecurityTube : http://www.securitytube.net

 Security Learn : http://www.securitylearn.net/

 Hacking and Securing iOS applications : http://www.amazon.com/Hacking-Securing-iOS-Applications-Hijacking/dp/1449318746

 Lookout's : https://blog.lookout.com/









저작자 표시
신고

Damn Vulnerable iOS Application(DVIA)


iOS 모의해킹 스킬을 테스트  가능한 취약한 앱


 name

 Damn Vulnerable iOS Application (DVIA)

 Author

 prateekg147

 Site

 http://damnvulnerableiosapp.com/

 License type

 - 

 Download

 - 



About


Damn Vulnerable iOS Application was born from the need to have a tool where a user can test their iOS penetration testing skills in a safe and legal environment. Also, this application can be used by mobile security enthusiasts and students to learn or review the basics of mobile application security.


Damn Vulnerable iOS Application은 

- Insecure Data Storage 불안전한 암호 저장

- Jailbreak Detection 탈옥 탐지

- Runtime Manipulation 런타임 조작

- Piracy Detection 침해 탐지

- Transport Layer Security 안전한 전송 구간

- Client Side Injection 사용자 측면 인젝션

- Information Disclosure 정보 노출

- Broken Cryptography 암호화 취약점

- Security Decisions via Untrusted input 신뢰하지 않은 입력정보를 통한 

- Side channel data leakage 주변 채널에 의한 데이터 누수

- Application Patching : 어플리케이션 패치


해당 취약점과 해결책은 iOS 버전 7.0.6에서 테스트하였습니다.


The app also contains a section on iOS Application Security Tutorials for those who want to learn iOS Application Pentesting. Every challenge/vulnerability has a link for a tutorial that users can read to learn more on that topic.


This app will only run on devices running iOS 7 or later. Users can download the source code and run the application on previous versions of iOS as well.





 

저작자 표시 비영리 동일 조건 변경 허락
신고

크랙 방지 (Crack prevention)


크랙 작동 원리


재배포


크래커들은 재배포 할 파일들을 얻는다. 대표적인 DRMs(DRM : 디지털 권리 관리)을 무력화하는 대표적인 툴은 Crackulous와 AppCrack이 존재한다. 해당 툴을 이용하여 인증받지 않은 기기에 재 배포한 IPAs을 설치 가능하다.

※ Crackulous와 AppCrack는 Cydia에서 다운 및 설치 가능하다.

AppStore
앱스토어의 모든 앱들은 역분석(reverse engineering)을 방지하기 위해 암호화되어 다운로드된다. 

또한 인증받은 계정을 이용하면 자신의 다른 기기에도 다운로드 및 설치가 가능하다. 하지만 CPU에서는 암호화된 명령어(CPU instructions)들은 작동할 수 없다. 모든 앱을 실행되면 복호화가되어 램에 로딩된다. 크래커들은 이러한 사실을 공격(exploit)하게되며, 해당 앱을 실행시 GDB를 이용하여 복호화된 데이터를 덤프하게된다.


암호화된 앱들은 LC_ENCRYPTION_INFO 명령어를 로드하며, 명령어는 다음과 같다.

#define LC_ENCRYPTION_INFO 0x21
struct encryption_info_command {
  uint32_t cmd;
  uint32_t cmdsize;
  uint32_t cryptoff;   // file offset of first encrypted byte
  uint32_t cryptsize;  // file size of encrypted data
  uint32_t cryptid;    // method of encryption
};

바이너리 파일이 암호화 되었을때 load command는 반드시 존재하며, 아래 crypt으로 시작하는 3개의 필드 값은 0이 아니다. deCrypt, xCrack과 같이 GDB명령어를 이용하여 덤프를 얻는다.

GDB를 이용한 메모리 덤프 작성





CydiaStore와 RockApp

CydiaStore와 RockApp은 간단히 말해 흔히 사용하고 있는 APT/DPKG 시스템므로 인증된 보안 레포지토리(repositories)를 연결하여 사용합니다. AppStore와 같은 암호화/DRM이 없습니다. 그러므로 

모든 크랙커들은 .deb 다운로드 및 획득을 위해서 사용합니다.


크랙방지


일반적인 기술


모든 불법복제 크래킹을 100% 막을 수 없습니다. 왜냐하면 배포되는 모든 앱의 모든 코드에 접근 가능하기 때문이다. 하지만 합법적인 판매 절차를 걸치거나 분석 시 초기 지연을 가능하게 할 수 있습니다.


Multi-pass check

위치를 변경한 다양한 체크방식과 같은 간단한 방법을 이용하여 크래커들의 분석을 복잡하게 만들 수 있다. 편리한 방법으로는 인라인 함수를 정의하는 것이다.

__attribute__((always_inline)) void check_crack(symbol, length, result) {
  if (checksum(symbol, length) != result)
    exit(0);
}
...
check_crack(my_inline_uuid_check, 0x200, 0x12345678);
register int res = my_inline_uuid_check();
...
check_crack(my_inline_serial_number_check, 0x200, 0x87654321);
...

여기서 중요한 점은 항상 _inline을 사용하는 것이다. 크래커는 check_crack() 함수를 바로 패치할 것이며 안티 크랙은 바로 실패 될 수있다. 하지만 너무 CPU 코드 사용을 아끼려하지 말아라.


※ 인라인 함수 vs 일반함수

1. 일반함수 수행방법

프로그램이 함소 호출 명령에 도달하면 다음과 같은 흐름을 갖는다.

함수 호출 후 다음으로 사용할 명령어의 주소를 메모리에 저장 -> 스택에 전달인자를 복사 -> 해당 함수의 시작의 메모리 위치로 점프 -> 함수 수행 -> 함수 리터값을 레지스트리에 저장 


2. 인라인 함수 수행방법

인라인 함수는 프로그램 코드들 가운데 컴파일된 함수 코드가 삽입된다. 이는 컴파일러에 의해 해당 인라인 함수가 함수 코드로 대체된다. 인라인 함수를 사용하면, 프로그램은 해당 코드를 수행하기 위해 위의 일반 함수 수행처럼 메모리에 있는 함수 주소를 찾아 점프할 필요가 없어지게 되어, 일반 함수보다 약간이나마 빠른 수행 속도를 갖을 수 있다. 하지만 크기가 큰 코드를 가진 함수를 인라인 함수로 사용하고, 10번을 호출하게 된다면, 해당 프로그램 코드 사이에 10개의 복사본을 가지게 되어 메모리 효율성면에서 따지면 좋지 않을 수 있다.



Anti-redistribution


카피본이 재배포되는 것을 막을 수 있다.



Anti-analysis


분석되기 전에 바이너리를 피한다.


Malformed Mach-O binaries

otool, gdb, class-dump 등 많은 리버스 엔지니어링 툴은 Mach-O 파일의 형식(format)의 신뢰 아래 작동하게 된다. 잘못된 Mach-O 파일의 형식인 경우 해당 툴들은 작동하지 않는다. 한편 실행할 수 있도록 만들기 위해선 제한적인 커널의 충돌을 막을 수 없다.

세그먼터 명령어 안에 잘못된 세션값을 세팅하기 위한 한가지 방법이 존재하지만, 바이너리끼리 연결하거나 실행하게 만든다해도 Idid나 dyId 모두 이러한 에러에 복구가 불가능하거나 어렵다.  

하지만 dylib/executable working: Idid -S

But you can do the following to get your dylib/executable working: ldid -S the binary, modify nsects and then recreate the SHA with ldid -s. After that the binary is fully usable on the iDevice.

크래커는 앱의 분석하고 수행방식을 계삭하여 간단하게 고칠 수 있다.


PT_DENY_ATTACH

PT_DENY_ATTACH는 커널 레벨에서 바이너리를 디버깅할때 해당 디버거(GDB, DTrace, etc)들을 방지 할 수있는 애플의 특수한 상수입니다.

ptrace(PT_DENY_ATTACH, 0, 0, 0);

부모 트레킹에게 SEGFAULT를 보낼 것이다. 그럼에도 불구하고, ptrace는 잘 정의된 주소를 가지고 있어서, 간단한 GDB 메크로도 ptrace를 충분히 깰 수있다.

break ptrace
commands 1
   return
   continue
end

다음과 같은 어셈블리와 유사한 코드로 syscall 26이 수행될 때만 ptrace는 사용자공간(userspace) 인터페이스가 커널 안에서 구현된다.

mov r0, #31
mov r1, #0
mov r2, #0
mov r3, #0
mov ip, #26
svc #0x80

PT_DENY_ATTACH가 설치되어도 GDB를 해결할 방법은 없습니다. 크래커는 여전히 SVC 번호 0x80으로 명령어를 NOP하는 패치 기술을 사용할 있지만, 체크섬이 이 방법을 조금이나마 도와줄 수 있다. 또한 바이너리를 thumb에서 컴파일 하지말아라, thumb 모드가 레지스트리의 가용성을 제한하여 컴파일 실패의 원인이 된다.



Obfuscation


Strip symbols

Stripping symbols은 루틴의 목적을 추축하니 어렵게 만든다.


Minimize use of Objective-C

To support the runtime features, Objective-C-based binaries need to retain a lot of class information, which is enough to rebuild the class interface. These information cannot be stripped away. Therefore, all essential stuff should be done using C or C++.


Generate strings dynamically

Even if you have stripped the binary, there is must still be a constant string pool. If you use some visual technique to inform the user they're using a cracked version, the crackers can quickly track down where the view is generated with strings and disable your check.



Legitimacy check


Check if encryption is intact

이 방법은 오직 스토어 앱에 대해서만 의미가 있다. 바이너리가 복호화가 되지 않은경우, LC_ENCRYPTION_INFO 로드 명령어 존재하고 모든 필드가 0이 아니여야한다.

해당 코드는 아래와 같다.

#import <mach-o/dyld.h>

#import <TargetConditionals.h>

 

/* The encryption info struct and constants are missing from the iPhoneSimulator SDK, but not from the iPhoneOS or

 * Mac OS X SDKs. Since one doesn't ever ship a Simulator binary, we'll just provide the definitions here. */

#if TARGET_IPHONE_SIMULATOR && !defined(LC_ENCRYPTION_INFO)

#define LC_ENCRYPTION_INFO 0x21

struct encryption_info_command {

    uint32_t cmd;

    uint32_t cmdsize;

    uint32_t cryptoff;

    uint32_t cryptsize;

    uint32_t cryptid;

};

#endif

  

int main (int argc, char *argv[]);

  

static BOOL is_encrypted () {

    const struct mach_header *header;

    Dl_info dlinfo;

      

    /* Fetch the dlinfo for main() */

    if (dladdr(main, &dlinfo) == 0 || dlinfo.dli_fbase == NULL) {

        NSLog(@"Could not find main() symbol (very odd)");

        return NO;

    }

    header = dlinfo.dli_fbase;

 

    /* Compute the image size and search for a UUID */

    struct load_command *cmd = (struct load_command *) (header+1);

     

    for (uint32_t i = 0; cmd != NULL && i < header->ncmds; i++) {

        /* Encryption info segment */

        if (cmd->cmd == LC_ENCRYPTION_INFO) {

            struct encryption_info_command *crypt_cmd = (struct encryption_info_command *) cmd;

            /* Check if binary encryption is enabled */

            if (crypt_cmd->cryptid < 1) {

                /* Disabled, probably pirated */

                return NO;

            }

             

            /* Probably not pirated? */

            return YES;

        }

         

        cmd = (struct load_command *) ((uint8_t *) cmd + cmd->cmdsize);

    }

     

    /* Encryption info not found */

    return NO;

}

http://landonf.bikemonkey.org/2009/02/index.html


Deprecated or not working methods


Kali Anti-Riracy는 RIP 개발자에 의해 개발된 칼리 불법 복제 방지이다. 첫 발표는 일반 앱 스토어의 크랙 방지 매커니즘을 발표하였다.  이후 RiP-Dev는 닫았다. 칼리는 혀내 폐기 된것으로 간주한다.

http://kaliap.com/

칼리는 3레벨의 방어를 한다

- Anti-debugging

- Anti-dumping

- Integrity check and dynamic code generation


※ 참조 http://iphonedevwiki.net/index.php/Crack_prevention


결론은 크랙은 못막음.

저작자 표시
신고

Introducing the iOS Reverse Engineering Toolkit


It should be the goal of every worker to expend less time and energy to achieve a task, while still maintaining, or even increasing, productivity. As an iOS penetration tester, I find myself repeating the same manual tasks for each test. Typing out the same commands to run various tools that are required to help me do my job. And to be honest, it’s completely monotonous. Every time I fat-finger a key, I lose productivity, forcing me to expend more time and energy to achieve the task. I’m a fan of automation. I’m a fan of streamlined innovation that saves me time and still accomplishes, for the most part, the same results. It was this desire to save time, and reduce my likelihood of suffering from carpal tunnel, that I created the iOS Reverse Engineering Toolkit.

=> 아이폰 OS 침투 테스트 시 반복되는 작업을 줄이기 위해 만든 툴



 Tool name

 iRET 

 Author

 

 Website

 https://blog.veracode.com

 License type

 -

 Download

 

iRETTool.zip



https://blog.veracode.com/2014/03/introducing-the-ios-reverse-engineering-toolkit/


iRET Features


What exactly does iRET do that can help you, an iOS penetration tester, perform your job more efficiently? Below, in Figure #1, is a screenshot of the main landing page of the application. This page lets you know what tools need to be installed, and even tells you if they aren’t. This is also the page where you select the installed application you would like to being analyzing/reverse engineering.



# iRET 실행



# iRET Start

iRET을 실행하면 IP/PORT가 표시된다.



# 특징 1 - 메인 페이지

- oTool

- dumpDecryted

- Sqlite

- Theos

- Keychain_dumper

- file

- plutil

- class-dump-z



# 특징 2 - 바이너리 분석

Binary Analysis : 바이너리 파일을 otool을 이용하여 정보를 추출 및 분석


※ otool란? 실행파일(or obj, lib 등)의 정보를 보여주거나 오브젝트 파일을 디컴파일하여 어셈블리 코드를 추출해주는 툴


iRET의 경우는

실행파일의 Header를 추출하며, 인크립션 정보, 스텍스매쉬 정보, ARC정보를 추출해준다.

인크립션 정보의 경우 GDB를 이용하여 메모리 덤프할때 사용되는 정보이다.

해당 바이너리 파일이 메모리에 얼마나 적제되는지, 암호화가 되었는지 등.



# 특징 3 - 키체인 분석

Keychain Analysis : iOS 자동 로그인을 위해 계정정보와 비밀번호를 저장하는 파일 분석




# 특징 4 - 데이타베이스 분석

Database Analysis : APP이 설치된 디렉토리 하위에 존재하는 모든 DB파일을 검색하여 해당 DB를 선택하면 데이터를 확인 가능함.



# 특징 5 - 로그 뷰어

log viwer : 




# 특징 6 - Plist 뷰어

plist viewer : Plist 확인 가능


※plist 란? 프로퍼티 리스트(property list)는 Mac OS X, iOS, NeXTSTEP, GNUstep 프로그래밍 소프트웨어 프레임워크 등에 이용되는 객제 직렬화를 위한 파일이다. 또한 .plist라는 확장자를 가지므로, 보통 plist 파일이라고 하는 경우가 많다. 프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, 번들과 애플리케이션 소프트웨어 정보를 저장하기 위해서도 사용되고, 이전 맥 OS에서 리소스 포크 정보를 저장하는데에 사용되었다.

- 위키백과







# 특징 7 - 헤더 파일

Header Files : 

After the user has made their changes to the tweak and is ready to build it, all they need to do is click the “Build” button, at which point the tweak will be compiled and automatically copied to the /Library/MobileSubstrate/DynamicLibraries directory, as seen in Figure #13 below.




# 특징 8 - Theos

Theos : 

After the tweak has been installed, the user simply resprings their device and launches the application they have targeted by the theos tweak.
The final tab, and piece of functionality in the iRET toolkit is the screenshot tab.


# 특징 9 - 스크린샷

Screenshot : 응용 프로그램의 캐쉬에 저장된 스크린샷을 확인 가능

해당 스크린샷은 운영 iOS에서 hold 버튼을 눌렀을 때 저장되는 정보이다.




iOS 앱 분석 도구



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

Damn Vulnerable iOS Application(DVIA)  (1) 2014.06.14
iOS App 크랙방지  (3) 2014.05.02
Introducing the iOS Reverse Engineering Toolkit  (0) 2014.04.29
dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25

dumpdecrypted

40./42. iOS 2014.04.29 21:39

dumpdecrypted


Dumps decrypted mach-o files from encrypted iPhone applications from memory to disk. This tool is necessary for security researchers to be able to look under the hood of encryption.

 Tool name

 dumpdecrypted

 Author

 stefanesser

 Website

 https://github.com/stefanesser/dumpdecrypted

 License type

 

 Download

 

dumpdecrypted.zip




Dumps decrypted iPhone Applications to a file - better solution than those GDB scripts for non working GDB versions

(C) Copyright 2011-2014 Stefan Esser



Compile:


First adjust the Makefile if you have a different iOS SDK installed.


And then just: make



Usage:


iPod:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan

mach-o decryption dumper


DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.


[+] Found encrypted data at address 00002000 of length 1826816 bytes - type 1.

[+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan for reading.

[+] Reading header

[+] Detecting header type

[+] Executable is a FAT image - searching for right architecture

[+] Correct arch is at offset 2408224 in the file

[+] Opening Scan.decrypted for writing.

[-] Failed opening. Most probably a sandbox issue. Trying something different.

[+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tmp/Scan.decrypted for writing.

[+] Copying the not encrypted start of the file

[+] Dumping the decrypted data into the file

[+] Copying the not encrypted remainder of the file

[+] Closing original file

[+] Closing dump file



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS App 크랙방지  (3) 2014.05.02
Introducing the iOS Reverse Engineering Toolkit  (0) 2014.04.29
dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13

iOS Jailbreak


  • iOS 6.1.[3-4-5]    :    http://p0sixspwn.com

- 모든 디바이스 가능

iTunes 11.1.4.62 이전 버전


  • iOS 7.[0-0.6]       :     http://evasi0n.com

- 모든 디바이스 가능




Old Version of iTunes


http://www.oldapps.com/itunes.phpe

저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

Introducing the iOS Reverse Engineering Toolkit  (0) 2014.04.29
dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13
시디아 툴 목록  (0) 2013.09.13

TinyUmbrella


http://blog.firmwareumbrella.com/


tinyumbrella-7.02.01a.exe











.shsh.zip


저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13
시디아 툴 목록  (0) 2013.09.13
Cydia Source 목록  (0) 2013.09.13





아이폰을 Jailbreak(탈옥) 후 나름 보안(?)을 위해서 아이폰 터미널의 루트 패스워드를 변경합니다.

초기 아이폰 패스워드는 alpine입니다.




아이폰의 패스워드는 /private/etc/master.passwd에서 관리합니다.






#

# User Database

# This file is the authoritative user database.

##

nobody:*:-2:-2::0:0:Unprivileged User:/var/empty:/usr/bin/false

root:/smx7MYTQIi2M:0:0::0:0:System Administrator:/var/root:/bin/sh

mobile:/smx7MYTQIi2M:501:501::0:0:Mobile User:/var/mobile:/bin/sh

daemon:*:1:1::0:0:System Services:/var/root:/usr/bin/false

_ftp:*:98:-2::0:0:FTP Daemon:/var/empty:/usr/bin/false

_networkd:*:24:24::0:0:Network Services:/var/empty:/usr/bin/false

_wireless:*:25:25::0:0:Wireless Services:/var/wireless:/usr/bin/false

_securityd:*:64:64::0:0:securityd:/var/empty:/usr/bin/false

_mdnsresponder:*:65:65::0:0:mDNSResponder:/var/empty:/usr/bin/false

_sshd:*:75:75::0:0:sshd Privilege separation:/var/empty:/usr/bin/false

_unknown:*:99:99::0:0:Unknown User:/var/empty:/usr/bin/false





/smx7MYTQIi2M는 초기 기본 비밀번호인 alpine과 디바이스 정보를 salt 추가하여 암호화한 것입니다. 



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13
시디아 툴 목록  (0) 2013.09.13
Cydia Source 목록  (0) 2013.09.13

사용 시디아 툴 목록
















저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13
시디아 툴 목록  (0) 2013.09.13
Cydia Source 목록  (0) 2013.09.13

Cydia Source 목록

40./42. iOS 2013.09.13 09:41

13년 9월 13일

iOS 6.1.3


사용 시디아 소스 목록

- BiteYourApple

http://repo.biteyourapple.net/

- Duowan

http://yuan.duowan.com/

중국 Cydia app Source 다량의 app을 무료로 사용할 수 있다.

- insanelyi Repository

http://repo.insanelyi.com/

최신 Cydia app이 업데이트되어 사용할 수 있다.

- koreacyida

http://cydia.myrepospace.com/koreacydia/

- xSellize

http://cydia.xellize.com/

탈옥 감지 우회 어플 tsProtector P를 다운 받기 위해 추가

- Cydia back site

http://leejoshua.tistory.com/44

Source에서 받지 못하는 Cydia app 백업 장소




저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13
시디아 툴 목록  (0) 2013.09.13
Cydia Source 목록  (0) 2013.09.13
1 

카운터

Total : 85,369 / Today : 1 / Yesterday : 31
get rsstistory!