블로그 이미지
안녕하세요~ iolate(isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (164)
Server, Cloud (7)
끄적끄적 (9)
Linux, Ubuntu (22)
개발질 (44)
Mac (18)
iOS (23)
IoT (13)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (9)
비공개글 (0)
Total598,601
Today144
Yesterday180

'Hooking'에 해당되는 글 1건

  1. 2013.12.15 [Obj-C] 메서드 오버라이딩

%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

Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함