Перехват данных в java приложениях

Тема в разделе "WASM.RESEARCH", создана пользователем Selah, 13 июл 2011.

  1. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    вообщем запусти apimonitor там все апи хорошо расписано ( представленно ), если не чего из него не найдешь то придется брать отладчик и дебажить, другого варианта я не вижу.
     
  2. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    Вот в качестве простейшего примера код:
    Код (Text):
    1. Local Cur:POINT
    2.     invoke GetDesktopWindow
    3.     invoke GetWindowDC, Eax
    4.     invoke TextOutA, Eax, 0, 0, addr $Text, sizeof $Text
    5.     invoke GetCursorPos, addr Cur
    TextOut() не отрисовывает текст на десктопе, он отрисовывается функцией GetCursorPos(). Это частный случай, в общем это отложенная обработка. Вывод текста инициируется любым теневым сервисом, тоесть вместо GetCursorPos() может быть KillTimer().
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    klzlk
    Вызов же функци есть? Основная проблема куда текст был отрисован , что бы рефлектировать для анализа и модификации .. .

    klzlk
    на счет комерса: а вы предлогаете мне сделать всю эту работу? от скуки ? сидеть и делать рутийный анализ? ))
     
  4. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    shchetinin
    Текст передаётся вместе с контекстом и прочими необходимыми деталями в TEB(транзитный буфер это GdiTebBatch). Менеджер сисколов хэндлит пакет, если он присутствует, вызывая один из колбеков шадова(KeGdiFlushUserBatch etc, вплоть до Gre* функций ядра).

    Я про то, что нефиг туда людей посылать, а то и вас отправят.
     
  5. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    klzlk
    Не имеет значения когда текст начнет отрисовыватся , имеет куда ... То и есть он мог отрисоватся на битмап а после чего битмап будет залит битами, и текст не будет ... или же отрисовать на битмап оставить его где , а через Х времени вылить битмап на устройство ... тогда и вызова функций на отрисовку не будет ...

    klzlk
    Если вопросы не косаются , хочу написать вот такую программу (переставить текст на Java) как мне это сделать? -> вопрос слишком абстрактный, и больше похоже на ТЗ, чем на вопрос для обсуждения ...
     
  6. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    klzlk понял, буду иметь ввиду
     
  7. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Решил хукать функции вида _Java_sun_awt_windows_... в экспорте awt.dll Например _Java_sun_awt_windows_WPrinterJob_textOut@32
    Или я ошибаюсь? Где прототип искать?
     
  8. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    Поставить брейк на буфер TebBatch(либо на соответствующие сервисы) и при срабатывании останова с нужным текстом выполнить колстек, после чего посмотреть в символах(если есть) нужные интерфейсы. Это обычно за пару минут всё раскручивается.
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Selah
    Прототип чего? Это как раз и есть native ф-ия. В package java.sun.awt.windows есть объект WPrinterJob, у него метод textOut. Это т.н. JNI -- Java Native Interface. Короче, как я уже сказал -- декомпилировать целевую программу (Java декомпилируется довольно неплохо) и посмотреть, что именно вызывается из AWT, а затем в исходниках AWT посмотреть, какие native ф-ии вызываются. Их и перехватывать.
     
  10. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Декомпилил. Ищу. В исходниках тут можно потерятся не ява кодеру))) Вопрос , а можно попрравить исходник, скомпилить и сделать новый .jar ?

    Обьясни еще пожалуйста как именно делать переват JNI, с учетом всех нюансов , может пример кода есть?
     
  11. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    модель вызова какая в JNI ?
     
  12. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Да, собрать обратно в .jar файл можно, но могут понадобиться используемые библиотеки. Я когда-то давно нечто подобное делал, сейчас всех деталей не помню.

    Если есть возможность модифицировать .jar файл (собрать новый), то перехват JNI не потребуется. JNI по сути конвенция вызова native кода из JVM. Я сам деталей не знаю кроме именования методов в бинарном коде. Но, думаю, перехват бинарного кода не вопрос.