Показать сообщение отдельно
  #18  
Старый 14.02.2012, 21:45
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Самое простое и логичное решение - от lmikle: получить rect окна, вычесть фиксированное значение и получить. Но работает не всегда: при маленьком окне скайп перемещает кнопку и относительно правого нижнего угла.
Место самого извращённого делят решения, предложенные мной и Pyro. Распознавание кнопки - это не очень... гуманно. Хотя применить, конечно, можно. Дизас - ну в принципе можно пореверсить час-другой-третий-...-N-ный, восстановить, как получить переменную (грубо говоря, взять Form1 как указатель, перейти по нему, прибавить N байт, перейти по новому указателю, прибавить еще M байт, получить адрес переменной). Но можно с уверенностью сказать, что оно не будет работать со всеми версиями скайпа: если разрабы добавили в Form'у еще один компонент - всё, привет. Надо снова реверсить, искать, узнавать. А изучение как артмани - тоже не шибко круто: менять размеры формы и искать значения в памяти. Долго и неудобно для юзера.

З.Ы. А скайп 5.8.0.154 уже не поддерживает. Отображает чужое, но сам отправлять не умеет.

З.З.Ы. Появилась еще более извращённая идея: внедрить в скайп код (через WriteProcessMemory и CreateRemoteThread), который будет по команде "ручками" вызывать обработчик функции нажатия кнопки. Реверсом узнается кусок кода обработчика (в машкоде), потом оно ищется в памяти процесса как массив байт и вызывается адрес, где найден сей код. Будет работать, пока не изменят обработчик нажатия. Правда любой антивирус за такое убьёт на месте.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием