Дизасемблювання консольних програм, знаходження пароля
Основним завданням, яке призводить до дизассемблирования додатків є необхідність змінити структуру і поведінку готового виконуваного файлу. Найяскравішим прикладом дизассемблирования є злом захисту програм, вбудованої розробниками. Розглянемо рішення цієї задачі на практичному прикладі.
Увага! Даний посібник призначено тільки для закріплення знань асемблера людям, які програмують електроніку на даній мові. Ні в якому разі не слід виконувати дії, наведені в цьому посібнику на будь-яких програмах крім тієї, що показана на прикладі.
Лістинг тестової програми для знаходження пароля labDasm.cpp:
Кроки алгоритму знаходження пароля:
1. Відкрити в отладчике Turbo debugger (TD.exe) виконуваний файл labDasm.exe;
2. Виконати послідовну трасування програми (на вимогу введення пароля ввести будь-який рядок. Наприклад В «12345В») до знаходження точки виклику процедури порівняння strcmp (рис. 1);
В даному випадку:
Як видно з рис.3, щодо зміщення 5845h знаходиться введена з клавіатури раніше рядок В «12345В» з кодом кінця рядка 0, а по зсуву 00AAh перебувати пароль В «password В».
Алгоритм зміни виконуваного файлу для його позитивної реакції на неправильно введений пароль:
1. Відкрити в отладчике Turbo debugger (TD. Exe) виконуваний файл labDasm. exe;
2. Виконати послідовну трасування програми до знаходження операції умовного переходу після виклику процедури порівняння strcmp (рис. 4). Знайдена операція умовного переходу jne має машинний код 7505h;
5. Знайти операцію з машинним кодом 7505 h (F 7 для пошуку -> Hex для введення шеснадцатерічних символів);
6. Змінити операцію з jne на je (F 3 для входу в режим редагування потім F 2 для зміни поточної команди) (Рис. 5);
7. Зберегти і з трансформаційних змін (F9).
Тепер, коли виконуваний файл змінений, при введенні неправильного пароля, програма буде сприймати його як правильний (Рис. 6).
На виконання вимог даного керівництва пішло 30 хвилин.