Pull to refresh

Comments 16

void *provider = *(void**)(app + providerOffset);

Это имхо хуже, чем приватные апи
Я ожидал такого комментария, да. Вы правы конечно.
Что я могу сказать: цель оправдывает средства. Но если вам нужно сделать такое приложение, как, например Charge Alert, которое имеет конкурентное преимущество (отображает реальные данные о батерее), то вам приходится взвешивать риски.
И еще, технически, адресная арифметика — это единственный возможный момент вытянуть структуру из Objective-C объекта, насколько мне известно.

См. руководство
UFO landed and left these words here
Всё так и есть :)
Оба «магических числа» (52 и 116) получены при помощи ivar_getOffset.

Позже напишу почему.
Меня одного смущает то что арифметика происходит с указателем типа void? Размер которого неизвестен? Какой компилятор смог такое собрать?
UFO landed and left these words here
Хочу написать дополнение к посту, в которой написал бы всю подноготную этих 5 строчек, но пока не хватает времени.

1) Apple Review Team проанализирует программу статическим анализатором (nm/strings/otool/grep), найдут строчки "_statusBar" и ''_currentRawData", и поймут что программист обращаются к приватным переменным. С моим подходом такого не произойдет. В каком-то смысле это обфускация.
2) Хотелось создать интригу, чтобы хабралюди сами попытались разобраться, что происходит.
можно разбить строку "_statusBar" на несколько строк, а потом собрать вместе
Т.е. это нестандартная особенность GCC. Буду знать. Но все же лучше пользоваться конкретными типами.
Спасибо что исправили.
UFO landed and left these words here
UFO landed and left these words here
ну использование приватных API довольно элементарно обнаруживается поиском в бинарниках строк-селекторов этих приватных методов.
А как Вы такое обнаружите без реверс-инжиниринга приложения?
какой-то добрый разработчик может настучать на вас в эпл и приложение уберут с продаж.
Sign up to leave a comment.

Articles