Subject: Tutorials
Date: Sat, 19 May 2001 01:37:22 +0400

Hi!

18.05.01 0.45 You wrote:

 > ..Поэтому просьба к тем, кто в этом действительно заинтересован,
 > напишите _дайректом_...

На что отвечаю:
Заитересован по следующим причинам (это не дифрамбы, а реальная оценка
желания человека владеющего определенными знаниями помочь другим):

а) В рассылки направляется информация в основном не по заказу (дайте то...,
   дайте это... в отличие от ....), а информация которая может заитересовать
   других;

б) Замечание по поводу отсутствия мануалов на ru языке полностью приемлю (не
   раз пытался найти что то вразумительное, но неудачно...), поэтому по всем
   ссылкам, представленным Вами незамедлительно прохожусь, и все что Вами
   предлагается оказыватся довольно итересным;

в) Понятно или не понятно изложено..., на мой взгляд, учебник информатики
   можно купить на каждом углу :)), все зависит от желания понять, хотя у
   меня лично сложности есть (с учетом того, что первый раз нажал на "клаву"
   три года назад потными и трясущимися пальцами, в возрасте 37 лет :(( );

г) Что интересно..., практически все (об этом было сказано выше..);

д) Повторяте ли Вы шаги..., в данный момент Ваши ссылки в письме - ...Hi All!
   Очень приятно... , пришли вовремя (по поводу SW авторов и реестра, т.к.
   находился на полпути к лечению одного сабжа сделанного в этом стиле, но не
   нашел другого решения, как сделать reg файл обнуляющий количество запусков
   в реестре...;

е) ...я не нашел в них главного - нужны ли Вам сами Tutorials ? Лично мне
   нужны, при получении почты в первую очередь смотрю нет ли чего за Вашей
   подписью, т.к. в большинстве случаев там  находится больше нужной
   информации, чем во всей почте.

Удачи Вам, в Вашем желании помочь другим...

С уважением, Mic!

P.S. Согласен на получение информации директом...

P.P.S. Запросы по поводу лечения Expression исходили от меня...

Subject: Re: Tutorials
Date: Sat, 19 May 2001 18:13:29 +0300

MIC wrote:

> находился на полпути к лечению одного сабжа сделанного в этом стиле, но не
> нашел другого решения, как сделать reg файл обнуляющий количество запусков в
> реестре...;

Когда Вы уже точно знаете ключ реестра, где хранится (не)нужная информация,
то не вдаваясь в детали защиты и запутанные проверки, часто удается обойти
проверку просто "испортив" имя ключа.

Для этого, конечно, необходимо, чтобы для записи и чтения использовались
_разные_ строковые литералы, но, как правило, оптимизация по этому параметру в
компиляторе дефолтно не включена (и SW-авторы про нее не знают) и фокус
удается.

Например, старый (1.95) 30-дневный Jammer хранил дату в ключе

   [HKEY_LOCAL_MACHINE\SOFTWARE]
   "ProfileString180"="990282522"

-    Jammer.exe    FRO   PE.00430240     --------   245760 | Hiew 6.55 (c)SEN
-.004300E0:  4C 69 73 74-44 6C 67 00-33 33 31 32-39 39 32 31  ListDlg 33129921
-.004300F0:  39 00 00 00-53 6F 66 74-77 61 72 65-00 00 00 00  9   Software
-.00430100:  50 72 6F 66-69 6C 65 53-74 72 69 6E-67 25 64 00  ProfileString%d
-.00430110:  4F 70 74 69-6F 6E 73 00-F8 99 42 00-00 00 00 00  Options °ЩB
-.00430120:  2E 50 41 56-43 45 78 63-65 70 74 69-6F 6E 40 40  .PAVCException@@

Замена одной буквы в слове "Software" - мне показалось забавным поменять S на
$ - приводила к ошибке считывания ключа [HKEY_LOCAL_MACHINE\SOFTWARE] и, тем
самым, каждый свой запуск Jammer считал самым первым :-)

Точно также, в System Mechanic 3.6c, взамен

   00102966:   74 EB ; Remove SIce Check
   001029A2:   74 EB ; Remove NTIce Check

можно было бы просто поменять буквы в литералах "SICE" и "NTICE".

-    sysmech.exe  .FRO   PE.00502AD8     --------  1972224 ¦ Hiew 6.55 (c)SEN
-.00502970:  8B C3 5B C3-5C 5C 2E 5C-53 49 43 45-00 00 00 00  Л+[+\\.\SICE
-.00502980:  53 33 DB 6A-00 68 80 00-00 00 6A 03-6A 00 6A 03  S3-j hА   j.j j.
-.00502990:  68 00 00 00-C0 68 B0 29-50 00 E8 01-3C F0 FF 83  h   Lh-)P ш.<Ё Г
-.005029A0:  F8 FF EB 08-50 E8 C6 3B-F0 FF B3 01-8B C3 5B C3  ° ы.Pш¦;Ё ¦.Л+[+
-.005029B0:  5C 5C 2E 5C-4E 54 49 43-45 00 00 00-E8 07 FF FF  \\.\NTICE   ш.

   Ну, и "раз зашла такая пьянка" :-)

Поскольку архивы листа не хранятся, обширная цитата из моего прошлогоднего
tutorial:

Subject: Re: VF WinVideo
Date: Tue, 02 May 2000 18:01:43 +0300

                                Ах, сколько недоели мы,
                                Сколько недопили мы ...
                                Это только семечки, друзья !
                                В дом любой входили мы
                                Только через форточку -
                                Корешок мой, Сенечка, и я ...

                                        из к/ф "Возвращение Серого Волка"

Url:    http://www.caravan.ru/~mclaren/winvideo.zip
size:   402365

Программа VF WinVideo, подобно всем остальным продуктам этой фирмы,
отличается на редкость скверным характером: если Вы ошиблись при
вводе ключа (или просто нажали ОК), работа программы блокируется
до ввода правильного (Вы его знаете?) значения.

Как пофиксить этот баг ?

----------------------------------------------------------
¦  FileName    ¦  Size  ¦    Date     ¦ Time  ¦  CRC-32  ¦
+--------------+--------+-------------+-------+----------+
¦ WINVIDEO.EXE ¦ 349696 ¦ 16-Dec-1999 ¦ 00:39 ¦ 779611B5 ¦
----------------------------------------------------------

Compiled with Borland Delphi 3.0
Packed by ASPack 1.06.01b

Прежде всего, необходимо распаковать программу.

Рекомендую UnASPack 1.0.9.0 - Лучший на сегодня UnASPacker.

Url:    http://kontum.vietmedia.com/protools/files/unpackers/2unaspack.zip
size:   73732

После распаковки:

----------------------------------------------------------
¦  FileName    ¦  Size  ¦    Date     ¦ Time  ¦  CRC-32  ¦
+--------------+--------+-------------+-------+----------+
¦ WINVIDEO.EXE ¦ 772608 ¦ 02-May-2000 ¦ 11:11 ¦ 9E94D409 ¦
----------------------------------------------------------

Если теперь открыть файл в каком-нибудь PE Viewer'е
и посмотреть на секцию CODE, то мы увидим следующее:

VirtualAddress:         0x00001000
SizeOfRawData:          0x0008A200
PointerToRawData:       0x00000400
SectionCharacteristics: 0xC0000040      // Incorrect !
PointerToRelocations:   0x00000000
NumberOfRelocations:    0
PointerToLinenumbers:   0x00000000
NumberOfLinenumbers:    0

я использовал

        Url:    http://www.spywindows.com/ARC01/PEBROWSE.ZIP
        size:   750215

но годится любой другой, включая ProcDump.

Как это обычно случается, упаковщик (ASPack), из собственных соображений,
установил для секции CODE неправильное значение SectionCharacteristics.

0xC0000040   -   Contains Initialized Data | Readable | Writeable

Если Вы попытаетесь использовать Loader32 из комплекта SoftIce, то
Вам не удастся загрузить программу в отладчик.

Используйте ProcDump, чтобы установить корректное значение:

0x60000020   -   Contains Code | Executable | Readable

BTW, ACiD BuRN ( http://acidburn.forez.com/ )
рекомендует немного другое значение:

> u will use the loader of Sice to unpack, so Run it (loader32.exe) and
> choose the exe u want to run!  for us, it is : Konix.exe.  ok, run it
> with the loader, but the prob is, this fucking app won't break in
> Sice :( hehe, np, run Proc Dump and use PE editor !  Edit the Code's
> section of the exe.  (pe editor, choose the file, sections, click on
> CODE and right click, edit section)
>
> ok, you see in sections caracteristic : C0000040
> ok, change it to : E0000020
>
> Don't nag me for ask me why, only trust me, this work all the time!
> do it, that's all!

E0000020   -   Contains Code | Executable | Readable | Writeable

TIP:

   Может случиться, что и это не помогает, тогда используйте стандартную
   технику: найдите EntryPoint (в Hiew: F8, тогда F5) и замените первый
   байт кода на CC (INT 3). Вызовите SoftIce: CTRL-D, тогда BPINT 3 и F5.

   Запустите программу, исправьте в окне SoftIce CC на верное значение.
   (в нашем случае: 55 - PUSH EBP)

   Аналогично, Вы можете выставить таким образом Breakpoint в любом
   другом месте, "исправив" первый байт команды на INT 3. Не забудьте
   только потом вернуть все назад.

Well, теперь нет никаких препятствий для исследования программы в отладчике.

Как я уже писал, я потратил достаточное время для изучения кода, но
не увидел простого способа зарегистрировать программу: коды ошибок
(или что-то производное от них) передаются дальше, в качестве параметров,
так что примитивный обход проверок приводит к краху программы или завершению
с собщением об ошибке.

С другой стороны, ничего не стоит обойти проверку количества запусков
(с сохранением полной функциональности).

Так что, если Вам лень регулярно чистить реестр, но все же не лень
перепаковать и пропатчить программу, читайте дальше :-)

                        -=  *  =-

Well.

Рад видеть Вас здесь :-)

Закройте SoftIce - для такой простой работы он нам не потребуется.
(Как и знание Ассемблера). И IDA тоже. А вот Hiew должен быть под рукой.
И программа мониторинга реестра. Поищите на http://www.quarta.ru/ или
возьмите здесь:

Url:    http://kontum.vietmedia.com/protools/files/utilities/regmon.zip
size:   67638

Для начала вычищаем из реестра все следы WinVideo и снова проводим
мониторинг реестра. На это раз нас интересуют не просто имена
создаваемых ключей (их мы уже знаем), а точная последовательность
действий.

Итак, нас интересуют только 2 "регистрационных" ключа:

   -  MODdata
   -  DispDrv

Вот фрагменты лога.

; --- On Open

136   Winvideo OpenKey     HKCU\MODdata                  NOTFOUND
137   Winvideo CreateKey   HKCU\MODdata                  SUCCESS hKey: 0xC1184834
138   Winvideo OpenKey     HKCU\DispDrv                  NOTFOUND
139   Winvideo CreateKey   HKCU\DispDrv                  SUCCESS hKey: 0xC1173BC8

141   Winvideo OpenKey     HKCU\MODdata\frequency        NOTFOUND
142   Winvideo OpenKey     HKCU\DispDrv\CodePage         NOTFOUND

; --- On Close

188   Winvideo OpenKey     HKCU\MODdata\frequency        NOTFOUND
189   Winvideo CreateKey   HKCU\MODdata\frequency        SUCCESS hKey: 0xC1173A9C
190   Winvideo CloseKey    HKCU\MODdata\frequency        SUCCESS
191   Winvideo OpenKey     HKCU\MODdata\frequency        SUCCESS hKey: 0xC1173A9C
192   Winvideo SetValueEx  HKCU\MODdata\frequency\UID    SUCCESS "863"
193   Winvideo CloseKey    HKCU\MODdata\frequency        SUCCESS
194   Winvideo OpenKey     HKCU\DispDrv\CodePage         NOTFOUND
195   Winvideo CreateKey   HKCU\DispDrv\CodePage         SUCCESS hKey: 0xC1173A9C
196   Winvideo CloseKey    HKCU\DispDrv\CodePage         SUCCESS
197   Winvideo OpenKey     HKCU\DispDrv\CodePage         SUCCESS hKey: 0xC1173A9C
198   Winvideo SetValueEx  HKCU\DispDrv\CodePage\Top     SUCCESS "91"
199   Winvideo CloseKey    HKCU\DispDrv\CodePage         SUCCESS
200   Winvideo OpenKey     HKCU\DispDrv\CodePage         SUCCESS hKey: 0xC1173A9C
201   Winvideo CloseKey    HKCU\DispDrv\CodePage         SUCCESS
202   Winvideo OpenKey     HKCU\DispDrv\CodePage         SUCCESS hKey: 0xC1173A9C
203   Winvideo SetValueEx  HKCU\DispDrv\CodePage\Down    SUCCESS "24"
204   Winvideo CloseKey    HKCU\DispDrv\CodePage         SUCCESS
205   Winvideo OpenKey     HKCU\MODdata\frequency        SUCCESS hKey: 0xC1173A9C
206   Winvideo CloseKey    HKCU\MODdata\frequency        SUCCESS
207   Winvideo OpenKey     HKCU\MODdata\frequency        SUCCESS hKey: 0xC1173A9C
208   Winvideo SetValueEx  HKCU\MODdata\frequency\UIDs   SUCCESS "h_keyto"
209   Winvideo CloseKey    HKCU\MODdata\frequency        SUCCESS
210   Winvideo OpenKey     HKCU\MODdata\frequency        SUCCESS hKey: 0xC1173A9C
211   Winvideo CloseKey    HKCU\MODdata\frequency        SUCCESS
212   Winvideo OpenKey     HKCU\MODdata\frequency        SUCCESS hKey: 0xC1173A9C
213   Winvideo SetValueEx  HKCU\MODdata\frequency\bios   SUCCESS "1"
214   Winvideo CloseKey    HKCU\MODdata\frequency        SUCCESS

Гм. При запуске программа только и делает, что проверяет _наличие_ ключей
"frequency" и "CodePage". Если их нет - значит, это первый запуск.

ОК. Открываем файл в Hiew и отыскиваем слова "frequency" и "CodePage".

Отыскиваются они здесь:

frequency:      0048224С и 004832С8

CodePage:       00482260 и 004832ВС

Пока все идет по плану: оба слова встречаются ровно два раза.
Я предполагаю, что один раз при *чтении* и другой - при *записи*.

Если теперь сделать эти слова хоть немного _разными_,
то программе больше не удастся прочесть записанный ключ,
а это как раз то, чего мы и добиваемся.

Well.

Исправлем слово по смещению 0048224С на frequenc_

        и

Исправлем слово по смещению 00482260 на CodePag_

Вот фрагмент дампа:

     Winvideo.exe  FR    PE.004823AC     --------   772608 ¦ Hiew 6.16 (c)SEN
_.00482240:  55 49 44 00-FF FF FF FF-09 00 00 00-66 72 65 71  UID ____freq
_.00482250:  75 65 6E 63-5F 00 00 00-FF FF FF FF-08 00 00 00  uenc_   ____
_.00482260:  43 6F 64 65-50 61 67 5F-00 00 00 00-FF FF FF FF  CodePag_ ____

Снова вычищаем из реестра все следы WinVideo и снова проводим мониторинг
реестра.

Вот фрагменты лога.

; --- On Open

141   Winvideo OpenKey     HKCU\MODdata\frequency        NOTFOUND
142   Winvideo OpenKey     HKCU\DispDrv\CodePage         NOTFOUND

; --- On Close

188   Winvideo OpenKey     HKCU\MODdata\frequenc_        NOTFOUND
189   Winvideo CreateKey   HKCU\MODdata\frequenc_        SUCCESS hKey: 0xC9201294
190   Winvideo CloseKey    HKCU\MODdata\frequenc_        SUCCESS
191   Winvideo OpenKey     HKCU\MODdata\frequenc_        SUCCESS hKey: 0xC9201294
192   Winvideo SetValueEx  HKCU\MODdata\frequenc_\UID    SUCCESS "863"
193   Winvideo CloseKey    HKCU\MODdata\frequenc_        SUCCESS
194   Winvideo OpenKey     HKCU\DispDrv\CodePag_         NOTFOUND
195   Winvideo CreateKey   HKCU\DispDrv\CodePag_         SUCCESS hKey: 0xC9201294
196   Winvideo CloseKey    HKCU\DispDrv\CodePag_         SUCCESS
197   Winvideo OpenKey     HKCU\DispDrv\CodePag_         SUCCESS hKey: 0xC9201294
198   Winvideo SetValueEx  HKCU\DispDrv\CodePag_\Top     SUCCESS "91"
199   Winvideo CloseKey    HKCU\DispDrv\CodePag_         SUCCESS
200   Winvideo OpenKey     HKCU\DispDrv\CodePag_         SUCCESS hKey: 0xC9201294
201   Winvideo CloseKey    HKCU\DispDrv\CodePag_         SUCCESS
202   Winvideo OpenKey     HKCU\DispDrv\CodePag_         SUCCESS hKey: 0xC9201294
203   Winvideo SetValueEx  HKCU\DispDrv\CodePag_\Down    SUCCESS "19"
204   Winvideo CloseKey    HKCU\DispDrv\CodePag_         SUCCESS
205   Winvideo OpenKey     HKCU\MODdata\frequenc_        SUCCESS hKey: 0xC9201294
206   Winvideo CloseKey    HKCU\MODdata\frequenc_        SUCCESS
207   Winvideo OpenKey     HKCU\MODdata\frequenc_        SUCCESS hKey: 0xC9201294
208   Winvideo SetValueEx  HKCU\MODdata\frequenc_\UIDs   SUCCESS "h_keyto"
209   Winvideo CloseKey    HKCU\MODdata\frequenc_        SUCCESS
210   Winvideo OpenKey     HKCU\MODdata\frequenc_        SUCCESS hKey: 0xC9201294
211   Winvideo CloseKey    HKCU\MODdata\frequenc_        SUCCESS
212   Winvideo OpenKey     HKCU\MODdata\frequenc_        SUCCESS hKey: 0xC9201294
213   Winvideo SetValueEx  HKCU\MODdata\frequenc_\bios   SUCCESS "1"
214   Winvideo CloseKey    HKCU\MODdata\frequenc_        SUCCESS

Wow !   Предел желаний !

Отныне программа читает и записывает *_разные_* ключи.
Ваши "40 запусков" больше никогда не кончатся :-)

Итак, что изменилось:

Comparing files Winvideo.ex_ and Winvideo.exe

0000021C:   40 20 ; Set Correct "CODE" SectionCharacteristics
0000021F:   C0 60
00081654:   79 5F ; 'y' --> '_'
00081667:   65 5F ; 'e' --> '_'

На самом деле, при редактировании SectionCharacteristics,
ProcDump поменял еще 4 байта заголовка (не знаю с какой целью,
подозреваю, что это просто "подпись" Lorian & Stone).
Но я их снова обнулил - как не относящиеся к делу.

Запускаем программу и придирчиво ее осматриваем.

Гм. В окошке "О Программе" мы обнаруживаем отвратительную
красную надпись: "!!! Программа не зарегистрирована !!!"

Well. Добавим еще 1 байт к нашему патчу:

Comparing files Winvideo.ex_ and Winvideo.exe

0000021C:   40 20 ; Set Correct "CODE" SectionCharacteristics
0000021F:   C0 60
00081654:   79 5F ; 'y' --> '_'
00081667:   65 5F ; 'e' --> '_'
0009F666:   21 00 ; Remove Unwanted Junk

Противная надпись навсегда исчезла.

Осталась только одна проблема: в меню "Справка"
сохранился пункт "Регистрация ...".

О, конечно, Вы можете сейчас вводить туда что угодно - блокировки
не произойдет, но как-то это м..м..м ... неэлегантно ...

К сожалению, мне неизвестен простой (без перекомпиляции ресурса)
способ удаления объектов из Delphi форм.

Так что я воспользовался Restorator'ом для оставшейся работы
и удалил никому не нужный пункт меню "Регистрация ...".

К несчастью, за счет сдвига оставшихся объектов, разница между
двумя файлами составила около 60 Kb! - слишком много для отсылки
в лист.

Так что Вам придется либо смириться с этим "архитектурным излишеством",
либо скачать Restorator и проделать это самостоятельно.

Url:    http://www.bome.com/Restorator/Restorator25.zip
size:   1065212

Я, кстати, подумывал было (используя Restorator) перевести все менюшки
на английский, но за неимением Video и видеокассет, оставил эту затею.

Ну и последнее, упакуйте файл UPX, чтобы сэкономить место на диске.

У меня это выглядело так:

        File size        Ratio      Format      Name
   -------------------   ------   -----------   -----------
    772608 ->   323584   41.88%    win32/pe     Winvideo.exe

P.S.

Я не разбирался с другими программами этой фирмы - они все мне так же
мало нужны и столь же неинтересны, как и первая, но подозреваю, что
защита во всех устроена одинаково и обходится с той же легкостью.

Оставляю проверку этого Вам - в качестве домашнего задания.

И дополнение к нему:

Subject: Re: VF WinVideo and so on - Solutions
Date: Tue, 02 May 2000 21:24:21 +0300

> P.S.
>
> Я не разбирался с другими программами этой фирмы - они все мне так же
> мало нужны и столь же неинтересны, как и первая, но подозреваю, что
> защита во всех устроена одинаково и обходится с той же легкостью.
>
> Оставляю проверку этого Вам - в качестве домашнего задания.

Потратил еще несколько минут на проверку этой гипотезы.
Предположения подтвердились :-)

Единственное, замеченное мною различие - в программе PG Address Book
(авт. Григорий Петров), вместо обычных трех восклицательных знаков
во фразе "!!! Программа не зарегистрирована !!!" скромно использовано
всего по одному :-)

Solutions
---------

1. VF DiscCollection, версия 1.1 от 11 ноября 1998 года

Comparing files Disc.ex_ and Disc.exe

0006B8E8:   53 24
0006B904:   73 24
0008C7AD:   21 00

2. GameLand, версия 1.0 от 15 июля 1998 года

Comparing files gameland.ex_ and gameland.exe

0004D09D:   78 7A
0004D0BC:   53 24
0004D0E4:   53 00
0004D0F8:   2D 00

3. PG Address Book, версия 2.1 от 18 июня 1999 года

Comparing files address.ex_ and address.exe

000A010A:   6F 30
000A0126:   6F 30
000B6E9E:   21 00

Финишинг Вы можете сделать в Restorator'e - убрать лишнее из меню
и перевести его с русского на английский :-)

© Gazlan 2009 * gazlan@yandex.ru

Hit Counter