вообщем запусти apimonitor там все апи хорошо расписано ( представленно ), если не чего из него не найдешь то придется брать отладчик и дебажить, другого варианта я не вижу.
Вот в качестве простейшего примера код: Код (Text): Local Cur:POINT invoke GetDesktopWindow invoke GetWindowDC, Eax invoke TextOutA, Eax, 0, 0, addr $Text, sizeof $Text invoke GetCursorPos, addr Cur TextOut() не отрисовывает текст на десктопе, он отрисовывается функцией GetCursorPos(). Это частный случай, в общем это отложенная обработка. Вывод текста инициируется любым теневым сервисом, тоесть вместо GetCursorPos() может быть KillTimer().
klzlk Вызов же функци есть? Основная проблема куда текст был отрисован , что бы рефлектировать для анализа и модификации .. . klzlk на счет комерса: а вы предлогаете мне сделать всю эту работу? от скуки ? сидеть и делать рутийный анализ? ))
shchetinin Текст передаётся вместе с контекстом и прочими необходимыми деталями в TEB(транзитный буфер это GdiTebBatch). Менеджер сисколов хэндлит пакет, если он присутствует, вызывая один из колбеков шадова(KeGdiFlushUserBatch etc, вплоть до Gre* функций ядра). Я про то, что нефиг туда людей посылать, а то и вас отправят.
klzlk Не имеет значения когда текст начнет отрисовыватся , имеет куда ... То и есть он мог отрисоватся на битмап а после чего битмап будет залит битами, и текст не будет ... или же отрисовать на битмап оставить его где , а через Х времени вылить битмап на устройство ... тогда и вызова функций на отрисовку не будет ... klzlk Если вопросы не косаются , хочу написать вот такую программу (переставить текст на Java) как мне это сделать? -> вопрос слишком абстрактный, и больше похоже на ТЗ, чем на вопрос для обсуждения ...
Решил хукать функции вида _Java_sun_awt_windows_... в экспорте awt.dll Например _Java_sun_awt_windows_WPrinterJob_textOut@32 Или я ошибаюсь? Где прототип искать?
Поставить брейк на буфер TebBatch(либо на соответствующие сервисы) и при срабатывании останова с нужным текстом выполнить колстек, после чего посмотреть в символах(если есть) нужные интерфейсы. Это обычно за пару минут всё раскручивается.
Selah Прототип чего? Это как раз и есть native ф-ия. В package java.sun.awt.windows есть объект WPrinterJob, у него метод textOut. Это т.н. JNI -- Java Native Interface. Короче, как я уже сказал -- декомпилировать целевую программу (Java декомпилируется довольно неплохо) и посмотреть, что именно вызывается из AWT, а затем в исходниках AWT посмотреть, какие native ф-ии вызываются. Их и перехватывать.
Декомпилил. Ищу. В исходниках тут можно потерятся не ява кодеру))) Вопрос , а можно попрравить исходник, скомпилить и сделать новый .jar ? Обьясни еще пожалуйста как именно делать переват JNI, с учетом всех нюансов , может пример кода есть?
Да, собрать обратно в .jar файл можно, но могут понадобиться используемые библиотеки. Я когда-то давно нечто подобное делал, сейчас всех деталей не помню. Если есть возможность модифицировать .jar файл (собрать новый), то перехват JNI не потребуется. JNI по сути конвенция вызова native кода из JVM. Я сам деталей не знаю кроме именования методов в бинарном коде. Но, думаю, перехват бинарного кода не вопрос.