2013-04-03 1 views
3

Я хочу понять, как реализовать ключевой регистратор для iOS. И как я могу избежать ввода ключей в мое приложение, если на устройстве установлено iKeyMonitor (например)?iOS key logger реализация

После исследований я обнаружил, что ikeyMonitor устанавливает следующие файлы на устройстве:

Library/Caches/.keycache 
Library/MobileSubstrate/DynamicLibraries/MobileSafe.dylib 
Library/MobileSubstrate/DynamicLibraries/MobileSafe.plist 
Library/MobileSubstrate/DynamicLibraries/keychain.dylib 
Library/MobileSubstrate/DynamicLibraries/keychain.plist 

Конечно, это требует MobileSubstrate.

В ключевом кэше есть некоторые файлы HTML, которые я могу открыть в Safari с URL-адресом localhost: 8888.

В plists есть только фильтр com.apple.springboard, это означает, что MobileSafe.dylib (и все крючки) будет применяться только к трамплину.

Даже если я не использую стандартную клавиатуру в своем приложении для редактирования UITextField, кейлоггер по-прежнему работает. Это означает, что Крюки применяются на UITextField.

После использования class-dump для SpringBoard.app Не найдено способов, которые могут быть связаны с реализацией UITextField. После использования class-dump для MobileSafe.dylib я не нашел реализацию, которая может быть замещена в UITextField либо (может быть, потому, что она написана на C), я думаю, что я должен анализировать MobileSafe.dylib динамически с помощью GDB

  1. Как может SpringBoard (то есть в plist com.apple.springboard) приложение влияет на реализацию класса UITextField? Если я использую метод swizzling для UITextField в dylib для com.apple.springboard, он будет работать и в других приложениях?

  2. Какая общая разница между MobileLoader и MobileHooker? В какой момент изменения в MobileHooker будут применены к моей системе?

  3. Что нужно сделать, чтобы перехватить метод из UIKit (например, методы UITextField) и изменить его реализацию для всех приложений на моем устройстве?

  4. Какой метод анализа iKeyMonitor вы можете посоветовать мне использовать?

+1

Привет, Павел Я редактировал ваш вопрос, чтобы надеяться сделать английский более понятным. Я искренне извиняюсь, если я что-то исказил, я просто подумал, что это интересный вопрос, и хотел бы помочь вам сообщить об этом - пожалуйста, не стесняйтесь откатываться или исправлять. Удачи вам ответить на ваш вопрос. –

+0

Карл Вейзи, спасибо за изменения! – BergP

ответ

1
  1. , если он использует трамплин в фильтре, то он может влиять только на трамплин, чтобы подключить все приложения, которые вы используете UIKit в качестве фильтра (подробнее об этом в 3)

  2. Мое понимание два: MobileLoader загружает ваш код в запущенное приложение, и когда это происходит, вызываются функции с атрибутом конструктора «__attribute__((constructor))». В одном из этих конструкторов функции MobileHooker вызывают для замены ранее существовавших функций/методов в приложении. Что касается того, когда изменения применяются, поскольку они меняются в конструкторах, они должны быть изменены до того, как они будут фактически вызваны.

  3. Вы просто используете фильтр com.apple.UIKit (который, кстати, является связующим звеном.dylib в iKeyMonitor использует)

  4. класса свалка не показывает крючки классов и методы в подстройке, потому что они не являются методами Objective-C, вместо этого они являются функциями ... Наилучшим вариантом был бы дизассемблер как ида hex-rays.com/products/ida/index.shtml

+0

Спасибо! Я ошибся, глядя в keychain.plist, я не заметил, что он использует фильтр com.apple.UIKit. – BergP

+0

@PavelKatunin Нет проблем :) –