Apple 개발자 페이지에서 App ID 등록 및 Push 인증서 발급까지 끝낸 이 후.


0. 개발용 인증서 등록

잘 까먹는 과정 중 하나라서..

Push 서비스를 이용하려면 개발용 인증서 새로 발급해야 한다. 와일드카드 ㄴㄴ

발급 후 다운받을 수 있는 .mobileprovision 파일을 실행 후

프로젝트 Build Settings -> Code Signing Identity 에서 해당 인증서 선택


==========


1. .cer 파일을 실행해서 키체인에 등록

2. 키체인 - 인증서 카테고리 에서 인증서 찾아서 (앱아이디로 검색)


3. 왼쪽 접힌걸 열어서 인증서와 개인키를 같이 선택, 우클릭 -> 2개 항목 보내기

ㄴ 정확한건 아니지만, sandbox 용은 개인키와 함께, production 용은 인증서만 선택해서 추출해야 작동을 하는 것 같다.

원래 잘 되던게 언제부턴가 이러던데, 정확한 원인이나 이유는 잘 모르겠음.


4. .p12 포맷으로 적당한 곳에 저장. 비밀번호는 설정안해도 된다.

5. $ openssl pkcs12 -in cert.p12 -out cert.pem -nodes

6. 위에서 비밀번호를 지정했다면 해당 비밀번호를, 아니라면 그냥 엔터

7. 완성

%hook NSString

-(NSString *)stringWithString:(NSString *)str {

//....

%orig;

}

%end


THEOS 언어를 사용해봤다면, 메서드를 위와 같이 후킹해서 사용하게 된다.

근데 저건 탈옥해서 트윅을 사용할 때의 얘기이고,,,


맥용 앱을 제작할 때 메서드 후킹이 필요할 때가 있을 수 있다.

(iOS 에서는 확인 안해봤지만,, 안되겠지?)


일반적인 경우라면 새로운 클래스를 만들고 원래 클래스를 상속받아서 사용하면 되겠지만..




주저리주저리 하고 싶은 말이 많지만 생략하고, 오버라이딩(후킹)을 위해선 아래 함수를 사용하면 된다.

더보기 클릭!




사용방법은


1. 해당 클래스에 카테고리로 대체용 함수를 만든다.

2. MethodSwizzle 함수를 사용해 필요한 때에 바꿔준다.

3. 원래 메서드를 호출하고 싶다면, 카테고리로 만든 메서드를 호출해 주면 된다.


예시:


@interface NSString (Swizzle)

-(NSString *)alt_stringWithString:(NSString *)str;

@end


@implementation NSString (Swizzle)


-(NSString *)alt_stringWithString:(NSString *)str {

    //......

    

    return [self alt_stringWithString:str];

}


@end


...


-(void)somewhereInYourMind {

MethodSwizzle([NSString class], @selector(stringWithString:), @selector(alt_stringWithString:));


[NSString stringWithString:@""];

}


이렇게 하면 원래 메서드(여기선 stringWithString:) 를 호출하면

alt_stringWithString: 을 거친 다음 원래 메서드가 호출되고, 반환된다.



출처: http://cocoadev.com/MethodSwizzling

PPTP, L2TP는 공유기 설정에 따라 사용이 불가능하거나 일부러 막아놓은 경우도 있다.


이런 저런 불편함이 있어서 OpenVPN 이란게 있는데,

자세한 내막은 모르겠지만 이 녀석을 기본 내장하는 기기는 하나도 없음.

클라이언트 설정 파일 자체가 워낙 복잡해서 그런것 같기도 하다.


여튼,

안드로이드, iOS 도 원래 OpenVPN 이 사용이 불가했다.

루팅 혹은 탈옥을 하고난 후면 사용이 됬지만.


그러다 안드로이드는 4.0 부터인가? OpenVPN 일부를 서드파티 앱의 형태로 사용가능하게 되었고

iOS 도 언제부터인지 모르겠지만 서드파티 vpn plugin 을 제공하기 시작한 것 같다.


여튼 지금 글 쓰려는건 iOS 용 OpenVPN.

(뭐 그래봤자 딱히 쓸 내용도 없고 간략한 소개 정도..)





올해(2013년) 1월달에 나왔으며 iOS 5.0 이상을 지원한다.




(443 포트로 OpenVPN 을 열면 왠만한 차단은 다 뚫을 수 있단걸 내게 가르쳐준) Private Tunnel 사의 서비스는 기본으로 지원하고,

그 외엔 클라이언트 파일을 서버로 부터 받거나,

iTunes 로 넣거나, 메일로 받으면 된다고 설명하고 있다.


web, 메일 등에서의 외부 파일 연결은 zip 등 압축은 지원하지 않고 .ovpn 만 지원한다.

iTunes 로 넣을 경우 키 파일등을 따로 넣어도 ovpn 파일 내용을 토대로 알아서 가져오는데,

web에서 가져오거나 메일로 받을때는 어떻게 되는지 모르겠다.


나 같으면 key 들을 모두 .ovpn 에 쑤셔넣었다.



Web 으로 .ovpn 설정 파일을 받을때 OpenVPN 으로 연결이 안나오고

그냥 내용물이 출력된다면 더보기 클릭!



아이튠즈로 넣든, 메일로 받든, OpenVPN 앱에서 설정 파일을 추가할건지 묻고 추가하면 이제 사용가능!





연결 잘~된다 ㅎㅎ

443 포트와 같이 원래 서드파티 앱에서 사용불가능한 포트들도 사용가능!!






앱에서 사용한 설정이 설정 앱의 VPN 메뉴에서도 볼 수 있는데,

안타깝게도 다른 설정이나 연결은 안되고 각종 설정은 앱에서 하라는 메세지가 나온다.(심지어 여기서 삭제도 안됨)

연결 중일때 해제는 가능하다.


아이튠즈에서 설정파일을 넣고, 추가하고 나면 앱의 샌드박스 내 어디에도 설정 파일을 찾아볼 수 없는 것으로 보아

VPN 설정 추가시 설정, 키들을 iOS 키체인으로 집어 넣는 듯 하다.





참고로 OpenVPN 앱 내 말고, 설정 앱 안에 OpenVPN 설정 메뉴가 생기면서 다른 설정들도 가능하다.




탈옥을 하지 않고 순정에서도 할 수 있는 작업이 점점 늘어나는건 확실히 기분좋은 일인 것 같다~

개발자용 기기는 탈옥에 맞먹는 자율성을 부여해주면 좋을텐데...ㅠㅠ

+ Recent posts