Сейчас на форуме: _MBK_, Adler, asfa, bartolomeo (+9 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Реверсинг программы, управляющей включением WI-Fi |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 01 октября 2012 10:24 · Личное сообщение · #1 Имеется ноутбук, RoverBook Voyager B514. В нем есть вай-фай, оный врубается кнопкой, расположенной отдельно. вторая кнопка управляет питанием процессора (включает выключает тротлинг). Для того чтоб эти кнопки работали есть утилита Power manager and wireless lan RF OnOff. Грубо говоря утилитка управляет известной в мире Линух штукой под названием RF_Kill (аппаратно включает выключает вай фай). Вот уже 5 ый год, как я не могу победить этот RF_kill под Линуксом. Пытался выйти на авторов утилиты дабы исходники дали или портировали на Линух - почили авторы видать уже. Вот и пришла мне в голову идея провести реверсинг этой утилиты, с целью узнать каким макаром включается вай-фай. А потом под линух свою утилитку забацать. Что выяснил? Дизассемблер Qllydbg. Программа написана на Visual C++, для определения нажатия кнопки включения используется хук. Скан-код нужной кнопки 0x6D. У меня дальше затык. Что дальше искать? Какие-то специфические API функции? На аппаратном уровне как работает RF_kill не представляю. То ли это это отдельный ключ в шине питания адаптера на материнке, то ли это фишка самого адаптера (intel 2200bg). В программном представлении это должно быть как запись определенного значения по какому то адресу. Хе-хе это то и ежу понятно. Так вот я и хочу выцепить эту запись определенного значения по какому то адресу. Путешествия по F7 пока ничего не дали, стараюсь смотреть повнимательнее. Да и еще иметтся библиотека для этой проги. Назначение ее пока не выяснил. Опыта маловато. ![]() ![]() |
|
Создано: 01 октября 2012 10:41 · Личное сообщение · #2 |
|
Создано: 01 октября 2012 11:00 · Поправил: KingSise · Личное сообщение · #3 reversecode, так он вроде все нашел. Нужно нажать 0x6D, если я правильно понял? Тогда так: Code:
не? ----- -=истина где-то рядом=- ![]() |
|
Создано: 01 октября 2012 11:08 · Личное сообщение · #4 |
|
Создано: 01 октября 2012 11:18 · Личное сообщение · #5 |
|
Создано: 01 октября 2012 11:19 · Личное сообщение · #6 |
|
Создано: 01 октября 2012 11:34 · Поправил: Veliant · Личное сообщение · #7 |
|
Создано: 01 октября 2012 11:57 · Личное сообщение · #8 Хех, надыбал участок кода включающий светодиод))). Code:
Значится где то рядом и включение питания))). Остается разобраться со всеми этими регситрами, адресацией, смещениями и прочим. Такс отойти надо. Ближе к вечеру еще подойду за советом. Спасибо Veliant. ![]() |
|
Создано: 01 октября 2012 13:46 · Личное сообщение · #9 KingSise пишет: reversecode, так он вроде все нашел. Нужно нажать 0x6D, если я правильно понял? Тогда так: Code: Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Call keybd_event(0x6D, 0, 0, 0) 'Hажимаем 0x6D Call keybd_event(0x6D, 0, KEYEVENTF_KEYUP, 0) отпускаем 0x6D не? нет. В линухе от сканкода толка нет. ему по барабану. Надо привязать этот сканкод к записи какого то числа по какому то адресу. как то так. ![]() |
|
Создано: 01 октября 2012 13:52 · Поправил: reversecode · Личное сообщение · #10 |
|
Создано: 01 октября 2012 13:55 · Поправил: Veliant · Личное сообщение · #11 |
|
Создано: 01 октября 2012 14:30 · Личное сообщение · #12 |
|
Создано: 02 октября 2012 19:55 · Поправил: mdscorp · Личное сообщение · #13 reversecode софт кнопки подключены напрямую к порту IO, вайфай подключен к югу ![]() uhuhuh пишет: В линухе от сканкода толка нет. ему по барабану. сканкод нужен для определения факта нажатия, в обратную сторону не работает uhuhuh в дллке есть импорт "DeviceIoControl" подцепись и посмотри что он шлёт вообще управление идёт по SMB шине туда записывается массив в память выделенное твоей карте как сказал reversecode пишет: и доступ там по смешению в память как к массиву. ![]() ![]() |
|
Создано: 02 октября 2012 21:09 · Личное сообщение · #14 mdscorp у вас плохое представление какие бывают IO outb нельзя делать для IO отмапленых девайсов, к ним идет обращение через отмапленую память, и насколько мне неизменяет память нельзя обращатся к этой памяти через сторонние драйвера, поскольку в топике прозвучал обычный драйвер для доступа к портам через outb, то скорее всего есть участи памяти карты которые возможно отмаплены ниже для доступка из биоса нужно смотреть ресурсы используемые картой в винде, итд итп, долго и нудно обьяснять, но думаю разберетесь когда вникните сами ![]() |
|
Создано: 03 октября 2012 13:29 · Личное сообщение · #15 Таааак-с. Спасибо за предоставленную информацию к размышлению. Я пока еще не совсем понимаю как из виртуальностей операционки достучаться до реальной железяки. Но активно работаю над этим. Завтра на ночное дежурство, буду сам вкуривать всю эту бодягу. Для начала попробую в среде ХР утилитку создать. А то в Линухе еще ни разу не кодил. Так что завтра буду вопросы задавать, если гуру не против))) ![]() |
|
Создано: 04 октября 2012 00:35 · Личное сообщение · #16 reversecode пишет: outb нельзя делать для IO отмапленых девайсов,к ним идет обращение через отмапленую память, и насколько мне неизменяет память нельзя обращатся к этой памяти через сторонние драйвера, Нашел такую штуку как giveio.sys, которая как раз маппит для приложения адреса портов ввода вывода. Уж больно похоже название моего драйвера - winio.sys. Хехе, роем дальше. ![]() |
|
Создано: 04 октября 2012 01:07 · Поправил: reversecode · Личное сообщение · #17 вам для реверса только PM.exe нужен+спецификация работы PCI+порты IO PCI+порты IO BIOS+ я хз чьи это порты 0x68 в драйвер и dll, лезть без нет нужды там доступ к портам итд железке представлен через доступ к PCI портам(как это обычно делается в OS) вам нужно только спецификацию PCI перечитать, или найти и посмотреть как это сделано в др OS ![]() |
|
Создано: 04 октября 2012 01:11 · Личное сообщение · #18 а кто мешает найти uhuhuh пишет: winio.sys ![]() ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 07 октября 2012 12:12 · Личное сообщение · #19 Так и не удалось позаниматься этим вопросом ![]() Code:
Единственное сейчас выяснил, что этими командами включается и выключается вай-фай и светодиод. Содержание регистров. Вафля вкл. Code:
Светик вкл Code:
Вафля выкл\ Code:
Светик выкл Code:
Драйвер WINIO.SYS на включение выключение не влияет. Я его в диспетчере устройств отключаю и все фурычит. Хотя при повторном запуске программы он снова загружается. Блина, туплю не по детски. Прошу придать нужное направление. ![]() |
|
Создано: 07 октября 2012 12:27 · Личное сообщение · #20 |
|
Создано: 07 октября 2012 12:59 · Личное сообщение · #21 |
|
Создано: 07 октября 2012 13:16 · Личное сообщение · #22 |
|
Создано: 07 октября 2012 13:53 · Личное сообщение · #23 Code:
Code:
Вот тут происходит непросредственное включение вафли Code:
А тут Светодиода. Code:
Code:
Code:
Code:
Code:
![]() |
|
Создано: 07 октября 2012 14:01 · Личное сообщение · #24 Code:
Code:
Выключение вафли Code:
выключение светодиода Code:
Code:
Code:
![]() |
|
Создано: 07 октября 2012 14:01 · Поправил: reversecode · Личное сообщение · #25 пять части стеков, четыре коментария, какой к какому? коментарий как заголовок или как подпись под действиями? вы бы уже тогда и значения Set/Get Port залогировали и тогда и без меня сами бы справились ![]() |
|
Создано: 07 октября 2012 14:11 · Личное сообщение · #26 |
|
Создано: 07 октября 2012 14:21 · Личное сообщение · #27 |
|
Создано: 07 октября 2012 14:33 · Личное сообщение · #28 Set и Get по таймеру работают, постоянно. Поэтому то не с первого раза получается в паузах между бряками успеть нажать кнопку пуска вафли. Да и я не совсем понял нафига я выложил столько колл-стэков. Регистры выложенные выше: EAX и EDX. В ЕАХ передается параметр вкл выкл. Мну беспокоит как вычислить физический адрес. Чтоб я мог его в Линухе использовать. Здеся непосредственное управление вафлей Code:
Здеся значения регистров при включении вафли Code:
Здеся регистры при выключении вафли Code:
![]() |
|
Создано: 07 октября 2012 14:37 · Поправил: reversecode · Личное сообщение · #29 ннда, причем здесь значение регистров? моментальный снимок регистров не интересует вообще, значение переданые в Set/Get порт скорее всего идут через стек. есть понятие стека вызовов, если вы не понимаете в чем разница... пойду погуляю в олли дебагере есть логирования вызовов, давече помоему обсуждали а если там по одному Set/Get для вкл и выкл, то сами глянте какие значение передаются в Set/Get Port если там IO порты биоса то значит wifi через биос вкл-выкл и нужно биос реверсить, если порты IO PCI, значит разбиратся где там pci_config read/write потому что они составные там по несколько обращений идет к апертуре PCI прежде чем достучится до самого wifi ![]() |
|
Создано: 07 октября 2012 14:52 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Реверсинг программы, управляющей включением WI-Fi |