Итак, ранее я немного поломал библиотеки datamanagers.dll для Step-7 Microwin и Step-7 Microwin Smart, позволяющие снимать пароль с функциональных блоков и блоков данных. Но в линейке продуктов Step-7 Microwin есть ещё одна программа, сделанная на той же основе, называется она PLC Programming Tool, и предназначена она для программирования контроллеров SINUMERIK, применяемых в ЧПУ. В частности Sinumerik 828D, пароль для функциональных блоков которого мне надо было взломать, используется для токарных и фрезерных станков.
Итак, пошаговая инструкция:
1. PLC Programming Tool. Я использовал версию 3.3.4.2
2. OllyDBG. Я использовал 1.10, но можно любую версию.
1. Запускаем PLC Programming Tool
Правой кнопкой мыши по запороленному блоку, Properties..., откроется окно свойств блока, переходим на вкладку Protection
Галочку Protection remains active for this POU лучше снять, иначе после выхода из программы блоки потом снова будут запоролены.
2. Запускаем OllyDBG
Выбираем в меню File->Attach
3. В появившемся окне "Select process to attach" ищем нашу программу progtool.exe. Нажимаем кнопку Attach.
4. В появившемся окне щёлкаем правой кнопкой кнопкой мыши и выбираем Search for->Name in all modules.
Кстати, почему-то этой функции я не нашёл в OllyDBG 2. Но, может быть, просто плохо искал. Ну, в любом случае, можно обойтись и без поиска во всех модулях, поскольку название модуля известно. Т.е. можно сделать так: в верхнем меню выбрать View->Executable modules, в появившемся окне выбрать USER32.dll и открыть его, а далее уже в нем правой кнопкой мыши и Search for->Names (так оно называется в OllyDBG 2.01).
5. В появившемся окне All names ищем MessageBoxA. Там всё расположено по алфавиту, но название модуля, предшествующее имени, в алфавитном упорядочивании не участвует, поэтому может показаться, что перечень идёт вразнобой, хотя это не так. В итоге MessageBoxA соседствует с именами USER32.MessageBoxA. Надо не перепутать, потому что нужен просто MessageBoxA.
Выбираем его и нажимаем Enter (или в выпадающем меню - Follow in Disassembler)
6. Откроется дизассемблированный модуль USER32 и в нём будет выделена строчка MOV EDI, EDI. На этой строчке нужно сделать точку останова при выполнении программы. Для этого нажимаем F2 (или в выпадающем меню - Breakpoint->Toggle)
7. Когда мы вначале сделали Attach, то программа PLC Programming Tool автоматически встала на паузу. Нажимаем в OllyDBG кнопку Run (F9)
8. В открытом ранее в PLC Programming Tool окне для ввода пароля вводим любой пароль, нажимаем OK. После этого у нас автоматически переключат на OllyDBG, а PLC Programming Tool окажется остановленной на выполнении строки, где мы поставили точку останова.
9. Обращаем внимание на окно справа внизу
В это окне колёсиком мыши крутим вниз.
Вскоре я натыкаюсь вот на такую строку:
"4444" - это неправильный пароль, который я только что ввёл. Но мы крутим дальше и ещё несколько раз встречаем этот же самый неправильный пароль, но мы крутим еще дальше и видим это:
Т.е. тут опять уже знакомое "4444", но над ним есть и другая комбинация - "1234". В данном случае 1234 - это и был правильный пароль.
Всё!
Итак, пошаговая инструкция:
Что нам понадобится?
1. PLC Programming Tool. Я использовал версию 3.3.4.2
2. OllyDBG. Я использовал 1.10, но можно любую версию.
Порядок действий
1. Запускаем PLC Programming Tool
Правой кнопкой мыши по запороленному блоку, Properties..., откроется окно свойств блока, переходим на вкладку Protection
Галочку Protection remains active for this POU лучше снять, иначе после выхода из программы блоки потом снова будут запоролены.
2. Запускаем OllyDBG
Выбираем в меню File->Attach
3. В появившемся окне "Select process to attach" ищем нашу программу progtool.exe. Нажимаем кнопку Attach.
4. В появившемся окне щёлкаем правой кнопкой кнопкой мыши и выбираем Search for->Name in all modules.
Кстати, почему-то этой функции я не нашёл в OllyDBG 2. Но, может быть, просто плохо искал. Ну, в любом случае, можно обойтись и без поиска во всех модулях, поскольку название модуля известно. Т.е. можно сделать так: в верхнем меню выбрать View->Executable modules, в появившемся окне выбрать USER32.dll и открыть его, а далее уже в нем правой кнопкой мыши и Search for->Names (так оно называется в OllyDBG 2.01).
5. В появившемся окне All names ищем MessageBoxA. Там всё расположено по алфавиту, но название модуля, предшествующее имени, в алфавитном упорядочивании не участвует, поэтому может показаться, что перечень идёт вразнобой, хотя это не так. В итоге MessageBoxA соседствует с именами USER32.MessageBoxA. Надо не перепутать, потому что нужен просто MessageBoxA.
Выбираем его и нажимаем Enter (или в выпадающем меню - Follow in Disassembler)
6. Откроется дизассемблированный модуль USER32 и в нём будет выделена строчка MOV EDI, EDI. На этой строчке нужно сделать точку останова при выполнении программы. Для этого нажимаем F2 (или в выпадающем меню - Breakpoint->Toggle)
7. Когда мы вначале сделали Attach, то программа PLC Programming Tool автоматически встала на паузу. Нажимаем в OllyDBG кнопку Run (F9)
8. В открытом ранее в PLC Programming Tool окне для ввода пароля вводим любой пароль, нажимаем OK. После этого у нас автоматически переключат на OllyDBG, а PLC Programming Tool окажется остановленной на выполнении строки, где мы поставили точку останова.
9. Обращаем внимание на окно справа внизу
В это окне колёсиком мыши крутим вниз.
Вскоре я натыкаюсь вот на такую строку:
"4444" - это неправильный пароль, который я только что ввёл. Но мы крутим дальше и ещё несколько раз встречаем этот же самый неправильный пароль, но мы крутим еще дальше и видим это:
Всё!