'분류 전체보기'에 해당되는 글 201건

반응형

[fridump 메모리 덤프]

frida-ps -Uai sudo -H python fridump.py -U -s -r

 

[Open SSL]

ssh netcanis@172.20.10.6

 

- 앱 설치 디랙토리 

/var/mobile/Containers/Data/Application 

 

- 앱 설치영역내 txt파일 검색 

find /var/mobile/Containers/Data/Application -name '*.txt' 

Ex) /var/mobile/Containers/Data/Application/6EB9B22F-45BA-4AF1-A540-B939713D9262/Library/ Caches/2019081909.txt

 

- text파일 읽기 

cap /var/mobile/Containers/Data/Application/6EB9B22F-45BA-4AF1-A540-B939713D9262/Library/ Caches/2019081909.txt

 

 

[tcpdump 리모트 패킷캡쳐]

주어진 UUID를 Virtual interface로 등록 

rvictl -s [UUID] 

rvictl -s 00008020-000915301AF2002E

 

등록된 virtual interface 이름 확인

rvictl -l

 

네트워크로 등록되어 있는지 확인된 이름으로 조회 

Ifconfig rvi0 

 

virtual interface를 삭제하려면 

rvictl -x [UUID] 

 

패킷캡쳐 

sudo tcpdump -n -i rvi0 

 

패킷캡쳐 (간략버전) 

sudo tcpdump -n -t -i rvi0 -q tcp 

 

패킷캡쳐 (아스키) 

sudo tcpdump -n -t -i rvi0 -q -A tcp

 

2020/05/19 - [OS/Mac OS X] - gdb 사용

2020/05/19 - [iOS/Jailbreak] - Frida 설치 및 사용법

2020/05/19 - [OS/Mac OS X] - gdb 설치

2020/05/19 - [OS/Mac OS X] - Mac에서 Node.js 설치

2020/05/19 - [iOS/Jailbreak] - Tcpdump 사용법

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [iOS/etc] - APNs

2020/05/18 - [iOS/Swift] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

 

 

반응형

'개발 > iOS' 카테고리의 다른 글

Fridump 사용법 (2/4) - Mac OS X 환경 구축  (0) 2020.05.19
Fridump 사용법 (1/4) - iOS디바이스 환경 구축  (0) 2020.05.19
Frida 설치 및 사용법  (0) 2020.05.19
Tcpdump 사용법  (0) 2020.05.19
APNs - 기능 및 유실 사례  (0) 2020.05.18
블로그 이미지

SKY STORY

,

gdb 사용

개발/Mac OS X 2020. 5. 19. 11:15
반응형

gdb 사용

 

코드 작성

vi hello.m 

i 를 누르고 코딩

 

ESC를 눌러 insert모드를 초기화하고 :wq 를 타이핑해 저장 및 종료

 

hello.m 컴파일

gcc hello.m -o hello -g -l objc

 

생성된 파일 확인

ls -l

 

gdb실행파일 실행 

gdb ./hello

 

코드보기 (0번라인부터 출력)

l0

 

브레이크 포인트 설정

b7 

b8

 

실행시작 

 

계속 실행 및 종료

 

 

명령어

명령어 

의미 

 b (breakpoint)

 실행 중 디버그를 위해 멈추는 위치 지정

 b 함수명

 함수명에서 멈춤

 b 라인번호

 라인번호에서 멈춤

 r (run)

 실행 시작

 n (next)

 현재 라인 실행 (함수의 경우 실행하고 다음 라인으로 넘어 감)

 s (step)

 현재 라인 실행 (함수의 경우 호출된 함 수 내로 들어가 실행 계속)

 c (continue)

 다음 breakpoint까지 실행

 l (list)

 현재 수행되고 있는 라인부터 10개 라인 씩 연속적으로 소스 코드를 프린트

 p (print) 변수명

 변수명으로 저장되어 있는 내용을 프린 트

 h (help)

 도움말

 q (quit)  gdb 종료

 

참고:

http://muse.incheon.ac.kr/jschae/gcc_gdb.html 

http://kldp.org/node/71806 

http://boanchanggo.tistory.com/74

 

 

2020/05/19 - [iOS/Jailbreak] - Frida 설치 및 사용법

2020/05/19 - [OS/Mac OS X] - gdb 설치

2020/05/19 - [OS/Mac OS X] - Mac에서 Node.js 설치

2020/05/19 - [iOS/Jailbreak] - Tcpdump 사용법

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [iOS/etc] - APNs

2020/05/18 - [iOS/Swift] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'개발 > Mac OS X' 카테고리의 다른 글

duplicate symbol 에러 해결  (0) 2020.06.16
iPhone SDK location on hard drive  (0) 2020.05.29
gdb 설치  (0) 2020.05.19
Mac에서 Node.js 설치  (0) 2020.05.19
Symbolic Link  (0) 2020.05.18
블로그 이미지

SKY STORY

,
반응형

폰에 Frida 설치 

https://www.frida.re/docs/ios/#with-jailbreak

 

Sources 추가 및 Frida 설치 

https://build.frida.re

 

Frida 설치 

pip install frida 

pip install frida -- upgrade

pip3 install frida

pip3 install frida -- upgrade

 

frida-ps 옵션을 확인한다. 

frida-ps -h

 

 

 

기기에서 실행중인 프로세스 목록 출력

frida-ps -U

-U : USB로 연결된 기기에 접속.

-D : Device ID로 기기에 접속.

-R : Remote Server(원격서버)에 접속

-H : Host의 Remote Server(원격서버)에 접속

 

연결되어있는 기기 목록 출력 

frida-ls-devices

 

 

 

USB에 연결된 기기의 실행중인 프로세스 목록 출력 

frida-ps -Uai

 

 

 

메모리 덤프 실행 

python fridump.py -U -s -r AppName 

 

다음과 같은 에러 출력시 관리자 권한으로 실행 

python fridump.py -U -s -r AppName 

Traceback (most recent call last):

File "fridump.py", line 2, in <module> 

import frida ImportError: No module named frida

 

관리자 권한으로 메모리 덤프 실행 

sudo -H python fridump.py -U -s -r APPNAME

 

2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (1/4) - iOS디바이스 환경 구축

2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (2/4) - Mac OS X 환경 구축

2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (3/4) - 메모리 덤프

2020/06/12 - [iOS/Jailbreak] - Fridump 사용법 (4/4) - 결과물 바이너리 검색

2020/07/11 - [Android/Rooting] - 안드로이드 Fridump 사용하기 (1/4)

2020/07/11 - [Android/Rooting] - 안드로이드 Fridump 사용하기 (2/4)

2020/07/11 - [Android/Rooting] - 안드로이드 Fridump 사용하기 (3/4)

2020/07/11 - [Android/Rooting] - 안드로이드 Fridump 사용하기 (4/4)

2020/05/19 - [OS/Mac OS X] - gdb 설치

2020/05/19 - [OS/Mac OS X] - Mac에서 Node.js 설치

2020/05/19 - [iOS/Jailbreak] - Tcpdump 사용법

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [iOS/etc] - APNs

2020/05/18 - [iOS/Swift] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

 

 

 

반응형

'개발 > iOS' 카테고리의 다른 글

Fridump 사용법 (1/4) - iOS디바이스 환경 구축  (0) 2020.05.19
Fridump, Tcpdump, OpenSSL Quick Guide  (0) 2020.05.19
Tcpdump 사용법  (0) 2020.05.19
APNs - 기능 및 유실 사례  (0) 2020.05.18
Multiple font colors in a single UILabel  (0) 2020.05.18
블로그 이미지

SKY STORY

,

gdb 설치

개발/Mac OS X 2020. 5. 19. 10:54
반응형

gdb 설치


터미널에서 다음과 같이 brew 설치 (설치되어있을 경우 패스)

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


만약 다음과 같은 에러가 발생할 경우 다음과 같이 라이센스 동의를 해준다.

You have not agreed to the Xcode license.

Before running the installer again please agree to the license by opening Xcode.app or running:

sudo xcodebuild -license


라이센스 동의

sudo xcodebuild -license



스페이스를 눌러 다음 진행하다보면 다음과같이 ‘agree’라고 타이핑하라는 문구가 뜬다. 타이핑해준다.


다음과 같은 메시지가 출력되면 완료

You can view the license agreements in Xcode's About Box, or at /Applications/Xcode.app/Contents/Resources/ English.lproj/License.rtf


brew 설치 재시도 (설치되어있을 경우 패스)

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


gdb 설치

brew install gdb 



키체인 설정

키체인 접근 - 인증서 지원 - 인증서 생성 


이름은 gdb-cert로 설정 

코드서명으로 인증서 유형을 설정하고 계속


유효기간은 설정


마지막에 키체인을 시스템으로 설정후 생성


생성되었따면,키체인 검색에서 gdb-cert를 찾아 정보 가져오기를 눌러서 신뢰 부분에 항상신뢰로 설정 


gdb 코드사인 저장을 시도하고 맥 아이디/패스워드를 입력한다.


우클릭을 한뒤 카피


odesign -s gdb-cert /usr/local/bin/gdb

계정 정보 입력창이 나타나면 맥 ID/PW를 입력해 준다. 

gdb실행하여 확인



2020/05/19 - [OS/Mac OS X] - Mac에서 Node.js 설치

2020/05/19 - [iOS/Jailbreak] - Tcpdump 사용법

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [iOS/etc] - APNs

2020/05/18 - [iOS/Swift] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로







반응형

'개발 > Mac OS X' 카테고리의 다른 글

duplicate symbol 에러 해결  (0) 2020.06.16
iPhone SDK location on hard drive  (0) 2020.05.29
gdb 사용  (0) 2020.05.19
Mac에서 Node.js 설치  (0) 2020.05.19
Symbolic Link  (0) 2020.05.18
블로그 이미지

SKY STORY

,
반응형

Node.js를 설치하기 위한 가장 쉬운 방법은 공식사이트인 http://www.nodejs.org 에서 설치 파일을 받는 것이겠지만, 이 방법은 두 가지 큰 단점을 가지고 있습니다.

첫째, 기본적으로 /usr/local에 설치가 되므로 관리자 권한이 없이는 제대로 실행되지 않습니다. 특히 -g 옵션을 줘서 global로 모듈을 설치할 때 마다 sudo를 해줘야 하는 불편함이 따릅니다. 물론 /usr/local 자체의 퍼미션을 변경하는 방법도 있지만, 보안상 권장하진 않습니다.

둘째, 노드의 여러 버전을 관리할 수가 없습니다. 프로젝트 별로 다른 버전을 써야 할 경우나, 여 러 노드 버전에 맞춰 테스트를 해야 할 때 매우 불편합니다.

Homebrew를 사용하여 설치하는 방법도 있지만, El Capitan에서 새로 추가된 SIP(System Integrity Protection) 때문에 권한 문제가 발생할 때가 종종 있어서, 이 글에서는 제외시켰습 니다.

기존에 이미 노드를 설치하셨다면,

노드는 깔끔하게 삭제하기가 매우 어렵습니다. 아래의 방법으로 삭제하시기 바랍니다. (참고 자 료: http://benznext.com/completely-uninstall-node-js-from-mac-os-x/)

1. /usr/local/lib 에 있는 node와 node_modules를 삭제

2. /usr/local/include 에 있는 node와 node_modules를 삭제

3. Homebrew로 설치하셨다면, brew uninstall node를 실행

4. ~/local 또는 ~/lib 또는 ~/include 디렉토리 밑에 존재하는 node와 node_modules 삭 제

5. /usr/local/bin 에 있는 node 관련 실행파일들 삭제 

 

추가로, 필요에 따라 아래 명령어들을 실행하시면 됩니다. (다른 파일까지 삭제하지 않도록 주 의!)

1. sudo rm /usr/local/bin/npm

2. sudo rm /usr/local/share/man/man1/node.1

3. sudo rm /usr/local/lib/dtrace/node.d

4. sudo rm -rf ~/.npm

5. sudo rm -rf ~/.node-gyp

6. sudo rm /opt/local/bin/node

7. sudo rm /opt/local/include/node

8. sudo rm -rf /opt/local/lib/node_modules

 

nvm 설치하기

그럼, nvm(Node Version Manager)을 사용하여 노드를 설치하는 방법을 알아보겠습니다. 먼저 터미널에서 아래의 명령어를 입력해 nvm을 설치합니다.

$ curl https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash 그 다음, 쉘을 재시작하거나, 아래의 명령어를 실행합니다.

$ source ~/.bash_profile 제대로 설치되었는지 확인해 볼 수 있습니다.

$ nvm --version

 

Node.js 설치하기

가장 최신의 stable 버전을 설치하려면, 다음과 같이 실행하면 됩니다. $ nvm install stable 혹은, 원하는 특정 버전을 설치하려면, $ nvm install v5.5.0 이런 식으로 실행하시면 됩니다.

설치할 수 있는 버전 목록을 보려면 다음과 같이 실행합니다.

$ nvm ls-remote 여러 버전의 노드를 설치하셨다면, 아래의 명령어로 원하는 버전으로 전환할 수 있습니다. $ nvm use v4.2.6

 

테스트

시험삼아 grunt-cli를 설치해보면 sudo 필요없이 설치가 되는 것을 볼 수 있습니다. 

$ npm install -g grunt-cli

 

2020/05/29 - [OS/Mac OS X] - iPhone SDK location on hard drive

2020/05/29 - [iOS/Objective-C] - NSString <-> CBUUID 변환

2020/05/29 - [개발노트] - HTTP Content-Type

2020/05/28 - [iOS/Swift] - SEED 블록암호 알고리즘 CBC (Cipher Block Chaining) 예제

2020/05/28 - [개발노트] - HMAC SHA256

2020/05/26 - [iOS/Swift] - Array <-> Data 변환

2020/05/25 - [분류 전체보기] - UserAgent 추가

2020/05/25 - [iOS/Swift] - RSA 암호화 / 복호화

2020/05/25 - [iOS/Swift] - Base64 인코딩/디코딩

2020/05/19 - [AI/Algorithm] - Generic algorithm

2020/05/19 - [AI/Algorithm] - neural network

2020/05/19 - [AI/Algorithm] - minimax full search example

2020/05/19 - [AI/Algorithm] - minimax, alpha-beta pruning

2020/05/19 - [iOS/Tips] - Bitbucket Carthage 사용

2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (3/3) - 메모리 덤프

반응형

'개발 > Mac OS X' 카테고리의 다른 글

duplicate symbol 에러 해결  (0) 2020.06.16
iPhone SDK location on hard drive  (0) 2020.05.29
gdb 사용  (0) 2020.05.19
gdb 설치  (0) 2020.05.19
Symbolic Link  (0) 2020.05.18
블로그 이미지

SKY STORY

,

Tcpdump 사용법

개발/iOS 2020. 5. 19. 09:50
반응형

tcpdump 리모트 패킷캡쳐

rvictl [-h][-l][-s <udid1> ... <udidN>][-x <udid1> ... <udidN>]

 

Remote Virtual Interface Tool starts and stops a remote packet capture instance for any set of attached mobile devices. It can also provide feedback on any attached devices that are currently relaying packets back to this host.

 

Options:

-l, -L List currently active devices

-s, -S Start a device or set of devices

-x, -X Stop a device or set of devices

 

주어진 UUID를 Virtual interface로 등록

rvictl -s [UUID] 

rvictl -s 00008020-000915301AF2002E

 

등록된 virtual interface 이름 확인

rvictl -l

virtual interface이름은 rvi0, rvi1, rvi2 등으로 구성된다.

 

네트워크로 등록되어 있는지 확인된 이름으로 조회

Ifconfig rvi0

 

등록이 잘 됬는지 확인

ifconfig -l

 

rvi0 등록여부 체크

 

virtual interface를 삭제하려면

rvictl -x [UUID] 

rvictl -x 00008020-000915301AF2002E

 

패킷캡쳐

sudo tcpdump -n -i rvi0

 

패킷캡쳐 (간략버전)

sudo tcpdump -n -t -i rvi0 -q tcp

 

패킷캡쳐 (아스키)

sudo tcpdump -n -t -i rvi0 -q -A tcp

 

중단은 Ctrl+C

 

WireShark 툴을 사용할 수 있다.

https://www.wireshark.org/download.html

 

[분할 저장] 

10초단위로 끈어서 시간명으로 파일생성

sudo tcpdump -nn net 115.68 -G 10 -w tcpdump_%Y%m%d_%H:%M:%S.pcap -Z root'

 

10초단위로 끈어서 시간명으로 파일생성하되 촤대 파일갯수는 5개

tcpdump -nn net 115.68 -G 5 -w tcpdump2_%Y%m%d_%H:%M:%S.pcap -Z root -W 5

 

저장된 파일 리스트 

ls -al trace_2014-09-11*

 

파일사이즈단위로 끈어서 저장 (1M 단위로 끈어서 저장)

tcpdump -nn net 115.68 -C 1 -w tcpdump3_%Y%m%d_%H:%M:%S.pcap -Z root

 

Wireshark 에서 tcpdump파일 읽기

sudo tcpdump -i any -s 0 port 80 -w test.pcap

 

콘솔에서 읽기

tcpdump -r test.pcap 

tcpdump -r test.pcap -X

 

 

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [iOS/etc] - APNs

2020/05/18 - [iOS/Swift] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

 

반응형

'개발 > iOS' 카테고리의 다른 글

Fridump, Tcpdump, OpenSSL Quick Guide  (0) 2020.05.19
Frida 설치 및 사용법  (0) 2020.05.19
APNs - 기능 및 유실 사례  (0) 2020.05.18
Multiple font colors in a single UILabel  (0) 2020.05.18
OpenSSL Mac 연동  (0) 2020.05.18
블로그 이미지

SKY STORY

,

UUID의 구성 요소

개발/Note 2020. 5. 19. 09:39
반응형

UUID 의 구성 요소

⁃ 범용 고유 번호(Universally Unique IDentifiers) 라고 불리며, 128 비트의 숫자들을 조합한다.

⁃ UUID = (time_low) - (time_mid) - (time_high_and_version) - (clock_seq_hi_and_reserved) (clock_seq_low_node) 

ex) 000011001-0000-1000-8000-00805F9B34FB

⁃ time_low : 타임 스탬프(시간표시) 의 최하위 32 비트.

⁃ 안드로이드 플랫폼의 단말기끼리는 어떤 UUID를 사용하여도 되지만 특정 프로토콜의 device에 접근하 기 위해서는 각각의 프로토콜 UUID 를 사용하여만 한다.

⁃ 범용적으로 사용할 수 있는 고유의 ID를 사용하기 위해 생성되며, 그렇기 때문에 128 비트의 HEX 조합 은 unique 하여야 한다.

⁃ 블루투스 device 끼리 통신을 하기 위해서 소켓 생성시 UUID 가 필요한데 이는 해당 프로토콜을 의미 한다.

⁃ Bluetooth 에서는 device에서 제공하는 service를 검색하여 각 service 마다 UUID 를 부여하는 등 많은 부분에서 사용된다.

 

2020/05/18 - [iOS/etc] - APNs

2020/05/18 - [분류 전체보기] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

 

반응형

'개발 > Note' 카테고리의 다른 글

Base64 encode / decode in C++  (0) 2020.05.29
HTTP Content-Type  (0) 2020.05.29
HMAC SHA256  (0) 2020.05.28
Storyboard References (스토리보드 분리)  (0) 2020.05.18
Release 모드에서 디버깅  (0) 2020.05.18
블로그 이미지

SKY STORY

,
반응형

APNs 이란?

APNs(Apple Push Notification Service)는 Apple Device에 Push를 보내줄 수 있는 서비스이다. 지원하는 방식으로는 다음과 같다.

 

Legacy Push

- TLS(SSL) 소켓 통신

- Production(gateway.push.apple.com:2195) / Development(gateway.sandbox.push.apple.com:2195) 

Push

- HTTP/2 통신

- Production(api.push.apple.com:443) / Development(api.sandbox.push.apple.com:443) HTTP/1.1 통신을 지원하지 않는다.

 

APNS 기능

기본적으로 Push Notification 은 단방향 서비스이다.

개발 서버에서 APNS 에 푸쉬 알림을 요청하면 APNS가 알아서 디바이스에 전송한다.

개발 서버는 APNS에 요청하면 할 일은 끝이다.

개발 서버는 APNS 에 푸쉬 알림을 요청할 때, 데이터 format 등에 대한 정상 여부는 리턴 받지 만 실제 도착여부에 대해서는 리턴을 받지 못한다.

사용자가 설정에서 알림을 끄더라도 알림이 출력되지 않지만 알림 수신은 된다.

사용자가 알림을 중지했는지 여부는 알 수 없다. (즉 앱에서만 알 수 있음)

 

 

APNS 유실되는 사례

디바이스 전원이 꺼져있는 경우 APNS의 QoS (Quality of Service) 컴포넌트는 디바이스 전원이 꺼져있는 경우, Notification을 잠시 저장했다가 다시 사용 가능해질 때 Notification이 전달되도록 하지만, 다 음의 경우 저장된 Notification이 폐기된다.

 

- 잠시 꺼져 있는 경우(얼마나 잠시인지 명시되지 않았음) , APNS는 Notification을 저장을

하는데 저장 가능한 Notificaiton은 하나다. 디바이스가 꺼졌있는 동안 하나의 앱에서 여러

개의 푸쉬 알림을 보낸다면, 제일 나중에 보내진 Notification만 저장되어 전달된다. 이전

에 저장된 Notification 은 폐기된다.

 - 장시간 꺼져 있는 경우 (장시간이 얼마나인지는 명시되지 않았음), 저장된 Notification은 폐기된다.

 

APNS 서버 응답 코드

- 200 성공 

- 400 잘못된 요청 

- 403 인증서 또는 공급자 인증 토큰에 오류가 발생했습니다.

- 405 요청에 bad : 메서드 값이 사용되었습니다. POST 요청 만 을 지원합니다. 

- 410 장치 토큰이 해당 항목에 대해 더 이상 활성화되지 않습니다.

- 413 알림 페이로드가 너무 큽니다.

- 429 서버가 동일한 장치 토큰에 대해 너무 많은 요청을 수신했습니다.

- 500 내부 서버 오류 503 서버가 종료되어 사용할 수 없습니다.

- 503 서버가 종료되어 사용할 수 없습니다.

 

 

Feedback Service

Feedback 서비스는 Notification 전달 실패 정보를 개발 서버에 알려주기 위한 서비스다. 푸쉬 알림이 앱이 삭제된 이유로 전달되지 못했다면 , APNS 는 이를 Feedback 서비스에 알리 고 Feedback 서비스는 실패한 디바이스의 토큰을 리스트에 저장한다.

APNS 에서 푸쉬 알림을 디바이스로 전송하기 전에 실패한 – data format error 등 – 경우에 는 Feedback 서비스의 리스트에 등록되지 않는다.(즉, 전송자체가 성공한경우 Feedback 서 비스 사용이 가능함) 개발 서버는 APNS 연결과는 별개로 Feedback 서비스에 접속해서 디바이스 토큰 리스트를 요 청해야 한다. Feedback 서비스는 리스트가 요청될 때마다 리스트를 전달한 후 리스트를 초기화 (clear) 한다.

Feedback 서비스로부터 받은 리스트의 데이터에는 timestamp 정보가 포함되어 있다. 이를 이용하여 리스트에 있는 디바이스 토큰이 Push Service에 재등록되어 있는지를 확인할 수 있 다. (푸쉬 알림을 보낸 시각과 디바이스 토큰의 timestamp 를 비교하면 디바이스 토큰의 재등록 여부를 확인할 수 있다.)

 

Feedback 서비스로의 요청을 위한 url, port 및 format 등의 내용은 아래 링크 참조.

https://developer.apple.com/library/archive/documentation/NetworkingInternet/ Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html

 

 

2020/05/19 - [개발노트] - UUID의 구성 요소

2020/05/18 - [분류 전체보기] - Multiple font colors in a single UILabel

2020/05/18 - [개발툴/Xcode] - Storyboard References (스토리보드 분리)

2020/05/18 - [iOS/Jailbreak] - OpenSSL Mac 연동

2020/05/18 - [iOS/Objective-C] - NSLog 출력 크기 제한 풀기

2020/05/18 - [OS/Mac OS X] - Symbolic Link

2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

 

반응형

'개발 > iOS' 카테고리의 다른 글

Frida 설치 및 사용법  (0) 2020.05.19
Tcpdump 사용법  (0) 2020.05.19
Multiple font colors in a single UILabel  (0) 2020.05.18
OpenSSL Mac 연동  (0) 2020.05.18
NSLog 출력 크기 제한 풀기  (0) 2020.05.18
블로그 이미지

SKY STORY

,