Дизасемблювання консольних програм, знаходження пароля

Основним завданням, яке призводить до дизассемблирования додатків є необхідність змінити структуру і поведінку готового виконуваного файлу. Найяскравішим прикладом дизассемблирования є злом захисту програм, вбудованої розробниками. Розглянемо рішення цієї задачі на практичному прикладі.

Увага! Даний посібник призначено тільки для закріплення знань асемблера людям, які програмують електроніку на даній мові. Ні в якому разі не слід виконувати дії, наведені в цьому посібнику на будь-яких програмах крім тієї, що показана на прикладі.

Лістинг тестової програми для знаходження пароля 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 хвилин.