0

몇 가지 이유 때문에 Backboardd에 일부 기능을 주입하려고합니다. plist를 사용하여이를 제한 할 수 없으므로 "if"를 사용하여 Backboardd에 있는지 여부를 확인하고 싶습니다. 'Logos'에서 사용할 수있는 기능은 다음과 같습니다. 그 :iOS를 사용하여 Backboardd 내부에 있는지 확인하는 방법은 무엇입니까?

 
%ctor{ 
    if (%c(SpringBoard)) { 
    } 
} 

로고가 없으면 아래처럼 할 수 있습니까? 작동하지 않습니다.

 
MSInitialize { 
    if (objc_getClass("Backboardd")) { 
     CFMessagePortRef local = CFMessagePortCreateLocal(NULL, CFSTR(MACH_PORT_NAME), messageCallBack, NULL, NULL); 
     CFRunLoopSourceRef source = CFMessagePortCreateRunLoopSource(NULL, local, 0); 
     CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); 
    } 
} 

답변

3

일반적으로 사용자가 걸고있는 내용에 고유 한 obj-c 클래스를 찾아야합니다. 이상적으로는 프레임 워크에서 가져온 것이 아니라 해당 바이너리 내에 정의 된 클래스 여야합니다. 예를 들어, SpringBoard에서는 SpringBoard의 이진 내에서만 찾을 수있는 SpringBoard 클래스가 있습니다. objc_getClass("SpringBoard")이 NULL이 아닌 값을 반환하면 스프링 보드 안에 있습니다.

지금, backboardd. 그런 경우에 내가하고있는 일은 PC에서 바이너리를 복사하고 클래스 덤프 나 IDA를 사용하여 그 바이너리 내부의 모든 클래스 목록을 얻는 것입니다. backboardd의 경우, 좋은 후보자는 BKApplication입니다. 따라서

if (objc_getClass("BKApplication")) { 
    ... 
} 

이 작업을 수행합니다. backboardd에는 Backboardd 클래스가 없습니다.

앞으로는 더 많은 인기 태그를 사용하십시오. jailbreak 또는 iphone-privateapi 태그를 사용하면 더 좋은 답을 얻을 수 있습니다.

+0

귀하의 답변에 매우 감사 드리며, 도움이됩니다. 귀하의 설명과 조언에 대해 대단히 감사드립니다. – Suge