русифицировать программу

Тема в разделе "WASM.RESEARCH", создана пользователем aspirant, 28 ноя 2006.

  1. aspirant

    aspirant New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    22
    Здравствуйте.
    Я аспирант кафедры электроники одного из ВУЗов. Передо мной стоит задача русифицировать программу моделирования электрических цепей “Electronics Workbench v5.12” для студентов. С ассемблером никогда не работал, но знаю архитектуру и базовые инструкции на уровне теоретического институтского курса системного программирования. О реверсинге читал в статьях с вашего сайта. Этих знаний вполне достаточно, чтобы справиться с этим заданием, но у меня возникли некоторые проблемы (из-за отсутствия опыта), поэтому прошу вашей помощи.
    Мой инструментарий:
    1. Отладчик – OllyDbg;
    2. HEX-редактор – WinHex;
    3. Редактор ресурсов – Resource Hacker;

    Все названия диалогов, менюшек и элементов находятся в файле «WEWBMSG.RES», поэтому редактор ресурсов ничего по этому поводу не сказал, его я использовал только для правки меню «About» и нескольких иконок. HEX-редактором подправил название одного (для проверки) меню – программа не запустилась (Ошибка: «No env file message located»), вернул изменения обратно – все работает нормально.
    Правил файл WEWBMSG.RES:
    с 4C5C Frequency
    на 4C5C Quequency
    С помощью отладчика быстро нашел место, где вызывается эта ошибка (после строки 529FDC программа уже не работает): Picture.1
    Первое, что сделал – поменял условный переход в строке 529FD5 на безусловный, но тогда программа вылетает с другой ошибкой «Unable to locate file wewb.msg». Далее, я запустил программу два раза: первый раз с исходным файлом WEWBMSG.RES, второй раз с отредактированным и запомнил состояния регистров после процедуры по адресу 529FC3 (слева – запуск успешный, справа – с ошибкой): Picture.2
    После этого вручную изменил значения регистров на те, что были при успешном запуске, но программа опять вылетает с ошибкой.
    Единственный вариант, при котором у меня получилось запустить программу с измененным WEWBMSG.RES – это пройти процедуру по адресу 529FC3 с исходным файлом, а после нее сразу внести изменения в файл вручную, тогда программа загружается с нужным мне текстом. Я понимаю, что проблема именно в этой процедуре и что там, скорее всего, проверяется CRC этого файла (если он не запускается даже при изменении одного символа), но я никак не могу найти это место.
    Мне необходимо получить программу нечувствительную к изменениям в файле WEWBMSG.RES. Очень прошу помочь.

    Дистрибутив программы находится здесь: http://fast-help.narod.ru/Program/files/EWB.rar (установка не требуется, 3.7Мб).

    С уважением,
    Максим.
     
  2. aspirant

    aspirant New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    22
    Картинка "Picture 2".
     
  3. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    этого может не прийдётся делать и в последнюю очередь. Тебе надо изменить надписи, а не поменять логику программы. Берёшь Resourse Hacker и проходишся по все интересующим *.exe & *.dll. Тебя должны интересовать группы ресурсов Menu, String Table, Dialog

    что получилось у тебя при правке WEWBMSG.RES я не совсемь понял но для подобных тыков лучне сохраняй размер строки
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    aspirant
    Сошласен со spencer в том, что логику лучше не трогать, иначе потом могут возникнуть странные баги.

    С narod.ru качается со скоростью 100 б/с, блин :dntknw: У меня где-то должен быть этот WB 5.12. Если найду, посмотрю что там с ресурсами.
     
  5. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    WEWBMSG.RES это не файл с скомпиленными ресурсами, это файл с какимито специфичными для программы данными в её формате о чем говорит строка
    Electronics Workbench Resource File
    занимающая в файле самоё почётное место.
    попытка изменения этого файла приводит к тому что приложение не запускается, согласен - проверка крк. Если так то да, нужно реверсить.
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    aspirant
    Реверсить нужно только логику работы с ресурсами, чтобы понять структуру файла WEWBMSG.RES и написать для него компилятор. Работенка неизвестной сложности.
     
  7. aspirant

    aspirant New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    22
    Проблема в том и состоит, что редакторы ресурсов тут категорически не подходят, они просто-напросто ничего не видят, кроме курсоров и иконок (об этом я писал в первом сообщении).
    Естественно, что этот файл имеет какой-то свой определенный формат, это я понял. Поэтому редактировал его HEX-редактором (в первом моем сообщении написано по какому смещению я редактировал текст с "Frequency" на "Quequency").
    Да. В этом файле находятся ВСЕ текстовые надписи, используемые в данной программе (Меню, Диалоги, элементы и т.д.) и действительно, любая попытка отредактировать заканчивается ошибкой запуска. Та процедура, о которой я писал в первом сообщении, отвечает за некую проверку этого файла, в этом я абсолютно уверен, т.к. запуская из под отладчика программу с неотредактированным файлом (ставлю брейкпоинт на эту процедуру), после ее успешного прохода, правлю файл WEWBMSG.RES WinHex'ом и программа отлично запускается, отображая внесенные изменения. Если же исправления сделать до прохождения процедуры - ошибка запуска. Поэтому сомнений нет, что за проверку отвечает именно она и тот код, что находится после нее значения уже не имеет.
    Я уже сутки копаюсь в этой процедуре, пытаюсь понять логику программы, сравниваю при разных запусках - при измененном файле WEWBMSG.RES и исходном. Но, честно говоря, получается пока не очень хорошо. Я впервые сталкиваюсь с отладчиками/hex-редакторами, поэтому может быть не знаю каких-то методик. Сейчас просто выписываю на бумагу в какие процедуры я зашел, сколько RETов нужно, чтобы вернуться обратно в корневую процедуру и смотрю, где в качестве аргумента передается путь к файлу WEWBMSG.RES и т.д. Но, честно говоря, пока не достиг никаких результатов, кроме как нашел то место, где считывается имя этого файла из EWB.ini и переносится из регистра в регистр :) Но это можно сделать и без отладчика. Вообще, внутри нее еще десятки процедур - глаза уже пухнут.
    Надеюсь на помощь знающего человека.
     
  8. aspirant

    aspirant New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    22
    Структура файла ясна - все надписи там никак не скрыты и интуитивно понятны. Это подтверждается тем, что я редактировал их и запускал программу уже с отредактированными надписями (из под отладчика). Но запуск из под отладчика не приемлем ни в каких проявлениях. Нужен обычный, стандартный запуск программы, а для этого нужно отучить программу обращать внимание на изменения в этом файле.
    А структура файла, я думаю, что важна будет только в том случае, если размер надписи исходной не будет соответствовать размеру надписи желаемой. Но в моем случае, те надписи, которые будут длиннее исходных - будут сокращены до нужных размеров.
     
  9. aspirant

    aspirant New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    22
    Кстати, программа 1998 года. Я не думаю, что там используются средства защиты описанные на вашем сайте - упаковщики, крипторы и т.д. :) Поэтому врядли это "работенка неизвестной сложности".
     
  10. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Есть подозрение, что "Frequency" можно поменять на, скажем, "Frequenyс", т.е. поменять местами буквы. Если это так, то можно заключить, что используется очень примитивный чексум.

    ЗЫ: Подозрение возникло при прочтении этой статьи, а EWB я у себя так и не нашёл чтобы проверить.
     
  11. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Выложите файл на нормальный хостинг, хотя бы тот же rapidshare.com.
     
  12. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    в таком случае можно было бы просто изменить значение eax на выходе, чтоб программа думала что функция вернула положительный результат однако это не приводит к желаемому...
    прийдётся немного покопатся...
     
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    aspirant
    Вот как раз структура файла не ясна - он бинарный, хотя в него и вкраплены текстовые строки.
     
  14. aspirant

    aspirant New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2006
    Сообщения:
    22
    spencer
    Господин спенсер, не сочтите за хамство, но по-моему вы вообще не читали мое первое сообщение, т.к. все ваши последующие три ответа полностью содержаться в первом посте. Вот, например, ответ на ваше последнее сообщение:
    а это из моего описания проблемы:
    Я подумал, может быть внутри этой процедуры заменить несколько команд так, чтобы было все наоборот, т.е. если файл изменен - то он правильный, а если нет, то он неправильный. Мне кажется, это будет легче сделать, чем править логику каких-то процедур. Но, опять же, у меня проблема с поиском этого куска. :dntknw:

    Quantum
    Да, действительно, все именно так, как вы пишите. Поменял местами несколько знаков и программа запустилась без ошибки.

    reverser, Quantum
    Архив доступен отсюда: http://slil.ru/23484233
     
  15. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Для тех, кто подключился...
    Похоже с адреса 51E535 как-раз идет загрузка файлов wewb.res, wewbmsg.res в память.
     
  16. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Точно, последние 10 байт каждого файлов хранят информацию о ресурсах (в частности, env.msg и wewb.msg) которые в них находятся.
    Offset Size Meaning
    +0 dw количество записей о ресурсах
    +2 dd смещение первой записи
    +6 db 2 (некий признак)
    +7 db CRC
    +8 dw 0xAAAA - magic
     
  17. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Вот здесь проверка CRC:
    0051E5B6 368 push 0 ; whence
    0051E5B8 36C push dword ptr [ebx+16h] ; offset
    0051E5BB 370 push dword ptr [ebx+4] ; stream
    0051E5BE 374 call _fseek
    0051E5C3 374 add esp, 0Ch
    0051E5C6 368 push edi ; int
    0051E5C7 36C push dword ptr [ebx+4] ; stream
    0051E5CA 370 call sub_51E2C7 ;подсчет CRC
    0051E5CF 370 add esp, 8
    0051E5D2 368 cmp al, [ebx+13h]
    0051E5D5 368 jnz loc_51E6DB ;здесь мы похоже и вылетаем
    0051E5DB
    0051E5DB loc_51E5DB:

    aspirant
    Попробуй jnz loc_51E6DB заменить на nop.
     
  18. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    У меня тут тоже под рукой оказался EWB.
    loc_51E6DB - это действительно выход.
    Но вот после отключения CRC вылез месседжбокс: 'An internal error has occurred. Contact ITT. _gb_init.809'
     
  19. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Quantum
    Подсчет CRC тривиальный - обычный XOR байтов, поэтому любая перестановка символов допустима :)
     
  20. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    afybc
    Интересно, но это сообщение появляется при открытии ресурса dither в wewb.res.
    Ты просто заменил jnz на nop? Если это так, то вывод один - где-то проверяется CRC в самой программе...