Доступ и использование MobileWiFi.framework - PullRequest
8 голосов
/ 07 января 2010

Для моего личного проекта я пытаюсь восстановить силу сигнала iPhone в iPhone. Я полностью осознаю, что это в стране недокументированного добра, поэтому, пожалуйста, воздержитесь от ответов "No Appstore". :)

В любом случае, я читал о предыдущих приложениях WiFi Network Scanner ( WiFi Stumbler ), но боюсь, что большинство (если не все) отражают устаревшую документацию SDK. Надеемся, что этот вопрос также предоставит некоторые централизованные / полезные материалы с последним iPhone SDK 3.1.2.

Вот мой неполный / неработающий код:

.h

 void *libHandle;
 void *airportHandle; 
 int (*open)(void *);
 int (*bind)(void *, NSString *);
 int (*close)(void *);
 int (*scan)(void *, NSArray **, void *);

.m

libHandle = dlopen("/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi",RTLD_LAZY);

open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");

open(&airportHandle);
bind(airportHandle, @"en0");

NSLog(@"Result %@",libHandle);

При запуске на устройстве он будет производить мой самый любимый ...

Тип исключения: EXC_BAD_ACCESS (SIGSEGV)

Я думаю, что вызов динамической загрузки, ничего не загружается. Каталог: / System / Library / PrivateFrameworks / содержит только файл Info.plist без двоичных файлов или псевдонимов.

Возможно, вы делаете что-то ужасно неправильное (неправильный каталог?) ... спасибо за помощь!

Также как продолжение. Чтобы извлечь информацию о WiFi, это можно сделать:

GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");

И мои вопросы: 1) Кому-нибудь повезло с этим? 2) Как получить дамп заголовка, как я использовал бы с class-dump для библиотек Objective-C (потому что MobileWifi в C)?

Ответы [ 4 ]

8 голосов
/ 13 января 2010

Для тех, кто сталкивается с этим вопросом, вот моя библиотека для доступа к сетям 802.11. Хотя Apple утверждает, что запрещает любые приложения, использующие частные платформы, в AppStore есть несколько закрытых приложений WiFi. Используйте на свой страх и риск.

Эта библиотека работает с iPhone SDK 3.1.2.

Использование:

SOLStumbler *networksManager = [[SOLStumbler alloc] init];
[networksManager scanNetworks];

Результат:

Сетевой NSDictionary информации NSDictionary.

Используйте CFShow для просмотра возвращенного указателя, содержащего информацию. Или вызовите метод описания для вывода образца.

5 голосов
/ 28 июля 2012

Обновление от июля 2012 г. (iOS 5.0)

Код, который вы пытаетесь использовать, довольно старый. Этот материал (например, WiFiManager или MobileWiFi ) находится в частной структуре. Это означает, что Apple может, и часто будет, менять или переносить ее с версии ОС на версию.

Я запустил nm на платформе MobileWifi и не увидел ни одного из этих имен функций. Итак, я думаю, именно поэтому ваш код не работает.

$ pwd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework

$ нм MobileWiFi | grep 80211

$

Полагаю, может потребоваться запустить nm на реальной платформе устройства, но я не стал тратить свое время, посмотрев на это:

Обсуждение этой основы и последующих действий.

Похоже, теперь вы можете найти эквивалентные (?) Функции в инфраструктуре IPConfiguration . Попробуйте этот код:

libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);

Я запустил его на взломанном телефоне iOS 5.0.1, и он заработал (загрузил dylib и нашел несколько функций Apple80211). Из той ветки, с которой я связан, похоже, вам может понадобиться установить ее в / Applications на взломанном телефоне, чтобы она работала полностью. Или, возможно, придется возиться с добавлением некоторых прав в ваше изолированное приложение.

4 голосов
/ 07 января 2010

Эти функции Apple80211xxx не существуют в MobileWiFi.framework (вы можете проверить с помощью инструмента «nm» для двоичных файлов SDK).

(Кроме того, невозможно выгрузить заголовок C из двоичных файлов, потому что вся информация о типах удаляется во время компиляции. Вам необходимо самостоятельно выполнить обратный инжиниринг или подождать, пока кто-нибудь сделает это).

2 голосов
/ 07 января 2010

Я не уверен, что это будет проблемой, но open / close / bind - это имена, которые уже используются (стандартная библиотека C).

Двоичный файл не существует, так как он хранится в dyld shared_cache (dlopen будет успешным, потому что библиотека технически «загружена».); Тем не менее, я отмечаю, что вы не проверяете, что любые из libHandle, open, close, bind или scan действительны, когда вы извлекаете их из функций dl *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...