Как поменять действия кнопок в простейшей программе?

Тема в разделе "WASM.BEGINNERS", создана пользователем extrimal, 9 апр 2006.

  1. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    Дали задание на проге поменять выполняемые действия кнопок ENTER и EXIT (и сказали не менять их названия). Чтобы при нажатии на ENTER выходило из программы, а на EXIT входило! ПОмогите плиз!





    Как найти в тексте программы где создаются эти кнопки и на какие ссылки они указывают??



    Вот прога:

    [​IMG] 1606697208__reg.exe
     
  2. ARMICRON

    ARMICRON New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    41
    extrimal

    Открываем в Restorator'е. Слева выбираем "диалог". Включаем режим правки и меняем местами ID кнопок.

    [​IMG] 1372157700__reg23.rar
     
  3. Denis__

    Denis__ New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    56
    Самый простой вариант:

    Открываешь файл в любом редакторе ресурсов, благо ничем неупакован, например Reshhack. Там выбираешь DIALOG и смотришь. У тебя :

    {

    CONTROL "Exit", 1, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 234, 21, 50, 12

    CONTROL "Your name:", -1, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE | WS_GROUP, 34, 8, 39, 12

    CONTROL "", 1000, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 77, 6, 152, 12

    CONTROL "Registration number:", -1, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE | WS_GROUP, 8, 22, 65, 12

    CONTROL "", 1001, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 77, 21, 152, 12

    CONTROL "Enter", 1002, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 234, 6, 50, 12

    }



    Т.е.

    Exit equ 1

    Enter equ 1002

    Меняешь на:



    {

    CONTROL "Exit", 1002, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 234, 21, 50, 12

    CONTROL "Your name:", -1, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE | WS_GROUP, 34, 8, 39, 12

    CONTROL "", 1000, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 77, 6, 152, 12

    CONTROL "Registration number:", -1, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE | WS_GROUP, 8, 22, 65, 12

    CONTROL "", 1001, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 77, 21, 152, 12

    CONTROL "Enter", 1, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 234, 6, 50, 12

    }



    Собственно все.
     
  4. Denis__

    Denis__ New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    56
    Блин не успел уже написали
     
  5. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    А через дизассемблер как-нибудь можно сделать???

    А то у меня препад говорит, что доп. программками пользоваться нельзя, и говорит чтоб я ему так на коде показал как сделать.
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    extrimal

    Шаблон диалога в ресурсах хранится в определённом формате, который можно изучить тут. На самом деле, там описан формат шаблона в памяти и в ресурсах он слегка отличается, в основном из-за выравнивания. Тем не менее, этого достаточно чтобы найти шаблон нужного диалога в ресурсах через хекс-редактор (WinHex, hiew) и исправить ручками, т.е. без использования сторонних утилит, кроме самого хекс-редактора.



    ЗЫ: Забыл добавить, что это редкостный изврат и пустая трата времени, но, возможно, именно этого требует преподаватель из каких-то чисто педагогических соображений...
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Преподаватель по реверсингу?
     
  8. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    IceStudent

    Препод по информационной безопасности компьютерных систем.
     
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    как вариант:



    подредактировать функцию окна
     
  10. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    rmn Ну да, как раз эту функцию окна надо найти через дизассемблер. Но как???



    Quantum Как вот этот код найт через HEX редактор?

    typedef struct {

    DWORD style;

    DWORD dwExtendedStyle;

    WORD cdit;

    short x;

    short y;

    short cx;

    short cy;

    } DLGTEMPLATE, *LPDLGTEMPLATE;
     
  11. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    так в чем проблема? ищи DialogBoxParam/CreateDialogParam/CreateDialogIndirectParam и смотри какой адрес функции им передается
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    extrimal



    Это не код, а структура и найти её очень просто, т.к. за ней идут описания контролов, а в них прошиты текстовые строчки в юникоде, вроде "Exit", "Your name" и т.д. Форма регистрации в том экзешнике хранится по смещению 0x4560.
     
  13. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    Парни! Ну я что-то не понимаю!

    Вот вошел я например в HIEW.EXE и что мне именно искать? Там ведб никаких "DialogBoxParam/CreateDialogParam/CreateDialogIndirectParam" нету. И что за смещение 0x4560?

    Может подскажте адрес по которому лежат эти описания контролов в дизассемблере?!
     
  14. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    extrimal



    Это и есть адрес структуры внутри файла!
     
  15. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    А если программа переустанавливает ID контролов ? :)
     
  16. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    Вот это что ли? А где Exit?



    00404566: C8900600 enter 00690,000



    А с помощью какой проги можно конвертировать слова Enter, Exit и т.д. в код?
     
  17. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Пропатч и не парься :)



    0040244c : C0

    0040244d : 14

    0040244e : 40

    0040244f : 00



    00402524 : C0

    00402525 : 14

    00402526 : 40

    00402527 : 00



    00402364 : 64

    00402365 : 17

    00402366 : 40

    00402367 : 00
     
  18. extrimal

    extrimal New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    11
    !! Как ты это нашел??? Мне же надо преподу объяснить будет!

    И когда я нажимаю на exit выдается ошибка! А на enter - все нормально выходит.
     
  19. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    стучи в icq
     
  20. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    extrimal

    Повторяю в последний раз: шаблон диалога - это структура! КАКОЙ ТАМ МОЖЕТ БЫТЬ КОД?! Допустим, объявляешь ты в своей программе строковую константу "ASM rulez!". Потом открываешь экзешник в хекс-редакторе и видишь совершенно читаемый набор ascii символов ...ASM rulez!... прямо в экзешнике. А всё потому, что строки хранятся в формате ASCIIZ или в формате unicode. И всё это обычные данные, набор байтов. Шаблоны диалогов, ровно как и иконки, картинки и прочие ресурсы - это тоже данные. Хранится всё это добро в секции ресурсов (.rsrc). У этой секции нет даже атрибута executable. Никакого кода там даже близко нет. А если кода нет, то зачем пытаться дизассемблировать тот участок, а?



    Набор байтов, который начинается по адресу, который можно было самому найти, но я его уже выдал выше, надо сопоставить с форматом структуры в MSDN. К примеру, первое поле в той структуре, кажется - стиль диалога. Стиль в MSDN обявлен типом DWORD, который, как известно, занимает 4 байта. Что это значит? Это значит, что 4 байта, которые располагаются по начальному адресу структуры хранят стиль диалога. Чтобы удостовериться, меняем значение этих байтов и получаем диалоговое окно с изменённым стилем. Едем дальше. Есть там где-то поле, которое задаёт ID контрола. Простым поиском можно найти, т.к. оригинальное значение мы уже подсмотрели в ResHacker или через Spy. Преподавателю же говорим, что нашли адрес по формату шаблона ручками.