Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ïÂÝÉÊ ÐÒÉÎÃÉÐ ÉÓÐÒÁ×ÌÅÎÉÑ

4 views
Skip to first unread message

Vadim Hoduhin

unread,
Jun 23, 2004, 1:29:34 PM6/23/04
to
Hello All!

Общий принцип исправления ME при копировании с "я" в буфер.
-----------------------------------------------------------------------------
- Какой файл исправлять.

Функция Window_Copy отвечает за копирование в буфер. Она находится в библиотеке
функций:

MEWLIB32.dll - для МЕ 8.0j;
MeLib.dll - для МЕ 9.10.02.

Для остальных версий МЕ необходимо самим определить соответствующую библиотеку.
Думаю, интуитивно - понятно.

- Чем исправлять и технология исправления.

Об этом я уже писал ранее.

- Как найти нужные байты для исправления.

Версия 8.0j ломалась SoftIce.
По коду было видно, что идет сравнение с FF (буква я), если да, то замена на 20
(пробел). Такая замена происходить дважды в почти рядом расположенном куске
кода. Дважды, так как вначале заменяются ведущие "я" блока, затем конечные.
Чтобы не портить код программы, достаточно заменить в нем 20 на FF. В
результате в программе будет идти сравнение на FF, и если да, то FF заменится
на FF, то есть на саму себя. Исходя из этого можно, вывести общий принцип
исправления. Hаходим следующую последовательность байт:

80 38 FF 75 07 C6 00 20

Такая последовательность должна быть единственной в этой библиотеке. Здесь FF -
это та самая "я", а последняя 20 и есть первый байт, который вам нужно заменить
на FF.

К сожалению, аналогично найти второй заменяемый байт не получается из-за
несовпадения двух байт последующего кода. Я имею в виду версии 8 и 9. Других
версий у меня нет. Hо в обеих библиотеках второй заменяемый байт отстоит от
первого вниз на 30 (в десятичном) байт. Говоря проще, отсчитайте курсором 30
байт от первой 20 и вы должны попасть на вторую 20, которую и надо заменить на
FF.

Поэтому, версию 9 мне даже не пришлось гонять через отладчик. Hайдя первую
последовательность байт, убедившись, что такая последовательность в библиотеке
единственная, поискав чуть ниже (это я для вас сейчас только подсчитал, что
надо опуститься на 30 байт) 20, я нашел искомое.

Естественно, будьте осторожны. Имейте исходную копию длл, проверьте начальную
искомую последовательность на единственность и на присутствие ниже на 30 байт
второй 20. Если через 30 байт не попали на 20, поищите ее рядом, но это уже
опаснее, сами тогда тестируйте результат. Если вообще не нашли искомую
последовательность, попробуйте выкинуть из нее последовательно при поисках
крайние байты. Здесь может возникнуть вероятность множественности нахождения
таких последовательностей. В данном случае, методом проб и ошибок можно найти
нужную.


LUMEN

PS. Грандиозные последующие планы по "я" пока уперлись в адский труд :)

0 new messages