Как существующие приложения VPN создают новые профили в Android 2.0 - 2.3?

Самое близкое, что я пришел к решению, это SendSignal стороннее приложение. Автор перечисляет исходный код и исполняемый файл. Я проверил, что он работает под 64-битными окнами (работает как 32-разрядная программа, убивая еще одну 32-разрядную программу), но я не понял, как вставлять код в программу Windows (либо 32-разрядную или 64-бит).

Как это работает:

После многократного поиска в отладчике я обнаружил, что точка входа, которая фактически выполняет поведение, связанное с сигналом, как ctrl-break - это kernel32! CtrlRoutine. Функция имела тот же прототип, что и ThreadProc, поэтому его можно использовать непосредственно с CreateRemoteThread, без необходимости вводить код. Однако это не экспортированный символ! Он находится на разных адресах (и даже имеет разные имена) в разных версиях Windows. Что делать?

Вот решение, которое я, наконец, придумал. Я устанавливаю консольный обработчик ctrl для своего приложения, а затем генерирую сигнал ctrl-break для моего приложения. Когда мой обработчик вызван, я оглядываюсь наверху стека, чтобы узнать параметры, переданные в kernel32! BaseThreadStart. Я беру первый параметр, который является желаемым начальным адресом потока, который является адресом kernel32! CtrlRoutine. Затем я возвращаюсь из своего обработчика, указывая, что я обработал сигнал, и мое приложение не должно быть прекращено. Вернемся в основной поток, я жду, пока не будет найден адрес ядра32! CtrlRoutine. Как только у меня получится, я создаю удаленный поток в целевом процессе с открытым начальным адресом. Это приводит к тому, что обработчики ctrl в целевом процессе оцениваются так, как если бы был нажат ctrl-break!

Приятно, что затрагивается только целевой процесс, и любой процесс (даже оконный процесс) может быть целенаправленным. Один недостаток заключается в том, что мое маленькое приложение не может использоваться в пакетном файле, так как оно убьет его, когда он отправит событие ctrl-break, чтобы обнаружить адрес kernel32! CtrlRoutine.

blockquote>

(запустите его с помощью start, если он запущен в пакетном файле.)

21
задан Oh Danny Boy 13 July 2012 в 15:20
поделиться