Исследование: Канцелярия. Учет товаров 3.60 PRO Site: http://www.tradesoft.ru Lang: Delphi 7 Инструменты: DeDe 3.50, DeIDA Package, Windasm, IDA, Hiew, Delphi 7.0 EXE: sclad.exe Итак, сие есмь программа позволяющая учитывать товары и выполнять всякую другую бухгалтерию. Имеются ограничения на количество товаров на складе, на количество накладных и на создание отчетов. Только оно какое-то странное. Еле добился его проявления. Итак, как оно ломается. Первое, что мы видим, запустив программу окно 'Регистрация'. Попытаемся ввести название фирмы и какой-нибудь код, увидим .... Обратитесь к разработчикам. Загружаем программу в DeDe и пролистываем процедуру TfrmRegister@btnRegisterClick (по адресу 00674C00) Ближе к ее концу видим следующий код: CODE:00674F20 call sub_40310C ; System$@Assign(TTextRe CODE:00674F25 mov edx, 140h CODE:00674F2A lea eax, [ebp-494h] CODE:00674F30 call sub_4037D0 ; CommCtrl$TreeView_GetC CODE:00674F35 call sub_402988 CODE:00674F3A push 0 CODE:00674F3C lea edx, [ebp-348h] CODE:00674F42 mov ecx, 1 CODE:00674F47 lea eax, [ebp-494h] CODE:00674F4D call sub_403290 CODE:00674F52 call sub_402988 CODE:00674F57 lea eax, [ebp-494h] CODE:00674F5D call sub_4032B0 ; System$@Close(TTextRec CODE:00674F62 call sub_402988 CODE:00674F67 mov eax, offset unk_6750BC CODE:00674F6C call sub_43CBAC ; Dialogs$ShowMessage(An CODE:00674F71 mov eax, ds:dword_6814C4 Из комментариев понятно, что происходят какие-то операции с файлом Вызываются System.Assign и System.Close А потом еще и ShowMessage Это ЖЖЖ неспроста. Поднимаемся выше до первых джампов: CODE:00674DB4 mov al, [ebp-108h] CODE:00674DBA xor edx, edx CODE:00674DBC mov dl, al CODE:00674DBE cmp edx, [ebp-8] CODE:00674DC1 jnz loc_674F87 - (!) CODE:00674DC7 cmp al, [ebp-208h] CODE:00674DCD jnz loc_674F87 - (!) Ставим на них breakpoint's в отладчике и видим, что после ввода произвольного серийника мы по ним переходим и раздается мат об обращении к разработчикам. Переходы длинные - за nop'иваем их. Вводим произвольный серийник и название фирмы. Видим, что вылезла надпись Спасибо за сотрудничество. Есть правда еще одна бага - при каждом перезапуске название фирмы приходится вводить заново - исправляем: 1. Смотрим, где прога хранит серийник и название фирмы: X:\<папка программы>\data\<код запроса>.tsu Где - X и папка программы - диск и папка куда вы установили программу а код запроса - код запроса в окне Регистрация. 2. В IDA ищем .tsu Если не нашли открываем прогу в Hiew переключаемся в Hex-mode и ищем .tsu потом смотрим адрес в котором нашли это первый раз переходим по нему в IDA видим что-то типа dword_000123445 dd 232335467 становимся чуть повыше, нажимаем U, находим .tsu, становимся где точка, нажимаем Alt+A, C и получаем константу a_tsu. Переходим по data xref на нее 3. Опускаемся ниже до первого перехода - это jmp по адресу 0062D59A 4. Переходим по нему, и опускаемся ниже опять до первого перехода это короткий jnz 0062D65E. Если проверить отладкой, то после перехода по нему появляется окно Регистрация 5. Для предотвращения перехода заменяем байт по адресу 0062D65F на 00h Окно Регистрация исчезло. Правда завелася еще одна бага - при необходимости заменить название фирмы сделать это не удается - ведь программа считает себя зарегистрированной. Исправляем: 1. Открываем Delphi, создаем новый проект. 2. На форме размещаем 2 текстовых поля для ввода названия фирмы и кода запроса, а также кнопку. 3. Обработчик события нажатия на кнопку: procedure TForm1.Button1Click(Sender: TObject); var F:File of ShortString; X:ShortString; begin СЮДА ДОБАВЬТЕ КОД, ЗАПИСЫВАЮЩИЙ 2 СТРОКИ В ФАЙЛ .TSU ПЕРВАЯ СТРОКА ДОЛЖНА БЫТЬ НАЗВАНИЕ ФИРМЫ. end; 4. Откомпилируйте проект и поместите экзешник в папку программы. Запустив его Вы можете легко поменять название зарегистрированной организации. Werwolf kochuma@list.ru