Доступ к контролам QT.

Тема в разделе "WASM.BEGINNERS", создана пользователем CrawlUp, 18 авг 2018.

  1. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Написал приложение для загрузки отладочных символов в Ida Pro 6.8. Через пень колоду но оно всё же работает. Но эта Ida Pro стоит у меня на планшете, приехав домой обнаружил что эта программа не куда не годится для использовании на основном компьютере, на нем стоит Ida Pro 7.0 и Spy++ вообще не видит не каких контролов на этом окне, выдает только дескриптор основного окна. Загрузил Иду в Иду :) и обнаружил что она написана на QT, в отладчике можно найти функции которые открывают файл на подобе GetOpenFileName, но ума не приложу как можно получить доступ к контролам, FindWindow и EnumChildWindow естественно не чего не видят. Пока единственный видимый путь это эмуляция кликов мыши, клавиатуры и clipboarda. Но может есть еще варианты?
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Это и есть GetOpenFileNameW через QT'шную прокладку. Загрузи иду в олю и убедись :yes3:
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.788
    CrawlUp,

    Штатный метод. Пилится либа и цепляется к апп. Как импорт или используется загрузчик из памяти.

    Но такое использовать для инструментов похоже на изврат. Может следует изучить получше интерфейсы той же иды, а не использовать методы малварки для решения тривиальных задач.
     
  4. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    139
    Адрес:
    Ташлинск
    А вы и не получите доступ к контролам, потому, что их нет. Начиная с qt4 контролы рисуются и управляются самой qt. М.б, можно как-то через питонячий скрипт добиться того, чего хотите, используя ida sdk.
     
  5. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Попробывал последовать вашему совету, но скриптовый язык Ida Pro не дается не в какую, и больше всего бесит что нельзя использовать win api. Надо написать на языке idc получение путь к открытому файлу и поменять в нем расширение на .fas. Winapi функция GetModuleFileNameW, а вот аналога в языке idc я не нашел.
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    \idc\idc.idc
    Код (Text):
    1. /// Get input file name
    2. /// This function returns name of the file being disassembled
    3. string get_root_filename();             // only the file name
    4. string get_input_file_path();           // full path
     
    CrawlUp нравится это.
  7. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    хм, а я уже решил просто вставлять путь файл в скрипт в бинарном виде, этот вариант тоже пригодится если смогу поменять расширение полученного файла на языке idc.
     
  8. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Программу для автозагрузки отладочных символов fasma в Ida Pro7 создал. Не знаю есть ли смысл её выкладывать. Методы несколько топорные один из них нажатие в цикле клавиши ENTER, при загрузке скрипта Ida Pro (сам скриптовой язык так и не освоил, просто взял готовый скрипт с форума fasma) выдаеёт кучу warning если запускаешь мышкой то можно проставить галочки что-бы эти warningовые диалоговые окна не повторялись, а можно ли где нибудь в настройках Ida Pro отключить появление возможных варнингов раз и на всегда, независимо от перезапуска самой Ida Pro?
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Покажи скрипт и сообщения. Как его блин не осилить, си жеж практически, ничем не отягощенный.
     
  10. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Вот первоначальный вид скрипта, у себя я его чуть-чуть изменил чтобы он не спрашивал путь.
     

    Вложения:

  11. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Не вижу никаких варнингов. Весь скрипт про парс .fas файла и установку имен через MakeNameEx(). Предположу, что иде не нравятся длинные имена, либо служебные префиксы типа loc_ или sub_.
     
  12. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    А у меня этот скрипт толком и не работает. dwPosSymTbl это дворд по +18h в файле, это смещение на таблицу, первый дворд в каждой записи которой dwSymEA, который по логике скрипта должен быть EA, а там что угодно только не адреса. RVA может быть. Как оно у тебя работает?
     
  13. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Разобрался. Имена с EA там есть, просто глубоко спрятаны, но в иде 6.8 у меня скрипт их не проставляет. Зато варнингов тоже нет :acute:
    Код (Text):
    1. format pe console 4.0
    2. include 'win32ax.inc'
    3. include 'macro\if.inc'
    4. entry main
    5. section '.code' code data readable executable
    6. proc main
    7.             call somename
    8.             ret
    9. endp
    10. proc somename
    11.             ret
    12. endp
    Код (Text):
    1. main: 0x0000000000401000
    2. flag?TE: 0x0000000000000000
    3. loc?TJ: 0x0000000000000000
    4. localbytes?TH: 0x0000000000000000
    5. parmbytes?TG: 0x0000000000000000
    6. main%: 0x0000000000000000
    7. current?TI: 0x0000000000000000
    8. somename: 0x0000000000401006
    9. flag?TL: 0x0000000000000000
    10. loc?TQ: 0x0000000000000000
    11. localbytes?TO: 0x0000000000000000
    12. parmbytes?TN: 0x0000000000000000
    13. somename%: 0x0000000000000000
    Код (Text):
    1. .code:00401000                 public start
    2. .code:00401000 start           proc near
    3. .code:00401000                 call    sub_401006
    4. .code:00401005                 retn
    5. .code:00401005 start           endp
    6. .code:00401005
    7. .code:00401006
    8. .code:00401006 ; =============== S U B R O U T I N E =======================================
    9. .code:00401006
    10. .code:00401006
    11. .code:00401006 sub_401006      proc near               ; CODE XREF: startp
    12. .code:00401006                 retn
    13. .code:00401006 sub_401006      endp
    Код (Text):
    1. load_fas: First segment: 401000-402000
    2. load_fas: posSymTbl,sizeSymTbl,posSrcTbl,sizeSrcTbl: a13c-4ef60-5909c-4f86a9
    3. load_fas: Symbol file ...\hello.fas has been loaded successfully.
     
  14. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
  15. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Варнингов нет возможно потому, что в компилируемом файле обязательно должен быть код в конце программы
    Код (Text):
    1.  data fixups
    2. end data
    иначе не все отладочные символы загрузятся.
    Ладно, выложу то что получилось, если основной скрипт удастся поправить то это можно будет сделать и в исходнике программы.

    Во первых программа расчитана на взаимодействие с Sumlime Text. При нажатии кнопок ctrl+F9 она читает заголовок текущего окна с путём файла ASM. Ctrl + F9 - это как вы поняли быстрые клавиши для запуска программы.
    Этот путь основа для всех дальнейших манипуляций. Вообщем окно не обязательно должно быть Sublime любое с кототорого GetWindowTextW получит адекватный путь.
    Еще IdaPro очень любит сохранять всякие файлы которые для корректной работы загрузки программа удаляет.
    На этом сайте вы можете узнать как прикрутить компилятор Fasm к sublime text. http://www.manhunter.ru/assembler/781_kak_podklyuchit_kompilyator_fasm_k_sublime_text.html
    Программа активно использует Terminate(выключение) Ida Pro так что будьте аккуратные с её запуском если у вас открыт какой нибудь важный проект в Ida Pro.
    Логика программы:
    1. Чтение заголовка окна переднего плана.
    2. Создание файла отладочных символов с помощью CMD
    3. Проверка битности созданного файла.
    4. Terminate(выключение) Ida Pro нужной битности.
    5. Удаление файлов оствашихся от Ida Pro.
    6. Запуск из консоли Ida Pro нужной битности с созданным скриптом .
    7. Нажатие кнопок ENTER столько раз сколько вы установили в программе.(аккуратно с этой опцией)
    8. Удаление скрипта загружающего отладочные символы.
    Вот короткое видео с работой программы.


    А да чуть не забыл, она должна работать от имени администратора иначе кнопка ENTER не жмётся, уж не знаю с чем это связано.
     

    Вложения:

  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Это релоки. Зачем они тебе скажем в ехе? А варнинги написано же, already used in program. Собачьи метки ("@@:") надо автоматом переименовывать, либо не брать вообще, и локальные метки как локальные объявлять (SN_LOCAL).
     
  17. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    При запуске этого скрипта не происходит вообще нечего.
     
  18. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    А у меня только такой вариант и заработал, со стоковым смотри выше - тоже ничего. Удали все имена во вкладке Names и проверь.