ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Взлом программы Pdf2txt 2.9
  #1  
Старый 31.10.2006, 23:01
Аватар для KindEcstasy
KindEcstasy
Участник форума
Регистрация: 30.09.2006
Сообщений: 134
Провел на форуме:
352963

Репутация: 197
Отправить сообщение для KindEcstasy с помощью ICQ
Post Взлом программы Pdf2txt 2.9

Взлом программы PDF2TXT 2.9


[ Инструменты ]

+ OllyDebuger
+ ResHacker
+ HackersView

[ О программе ]


Ку, люди античата!
Программа PDF2TXT, предназначенна для переконвертирования файлов из формата pdf в txt, соответственно. Ограничения по работе в незарегенной версии, 100 раз использования. Сегодня мы взломаем её не как всегда, а сделаем так чтобы она работала вечно, не вводя серийник. Поехали:

[ Взлом - Отключение счётчика числа запусков]

Вся эта приблуда, то-есть счётчик, содержиться в библиотеке verypdf.dll, её то мы и будем мучить в отладчике, благо библиотека не пакованная, как впрочем и сама программа. Итак начинаем:

Загружаем программу, не в отладчик а просто так. Появиться окошко с просьбой ввести серийник, мы же его не вводим, а нажимаем кнопку Try. Видим окошко со следующей информацией:

You have 99 times to try, please register... -тра-та-та (у вас число может быть другим, в зависимости от того, сколько раз вы запускали программу)

Эту строку мы запоминаем и грузим в отладчик нашу библиотеку verypdf.dll. Сканируем её на ascii-строки и ищем часть этой строки (например: times to try) которую мы только-что запомнили. Находим, щёлкаем по ней 2 раза и попадаем в окно кода. Вы должны видеть следующее:

PHP код:
10001B5C   A1 D8730110    MOV EAX,DWORD PTR DS:[100173D8]
10001B61   894424 0C      MOV DWORD PTR SS:[ESP+C],EAX
10001B65     B9 64000000    MOV ECX
,64
10001B6A   
68 88720110    PUSH verypdf.10017288                    ;  ASCII "PDF2TXT v2.9"
10001B6F     2BCE           SUB ECX,ESI
10001B71   
8D5424 10      LEA EDX,DWORD PTR SS:[ESP+10]
10001B75   51             PUSH ECX
10001B76   
68 40720110    PUSH verypdf.10017240      ;  ASCII "Your have %d times - МЫ СДЕСЬ! 
10001B7B   . 52             PUSH EDX
10001B7C   . C78424 F000000>MOV DWORD PTR SS:[ESP+F0],2
10001B87   . E8 1DA40000    CALL verypdf.1000BFA9
10001B8C   . 8B4424 1C      MOV EAX,DWORD PTR SS:[ESP+1C]
10001B90   . 83C4 10        ADD ESP,10
10001B93   . 6A 30          PUSH 30                                  ; /Style = 
10001B95   . 68 88730110    PUSH verypdf.10017388                    ; |Title = "
Software 
10001B9A   
50             PUSH EAX                                 ; |Text
10001B9B   
57             PUSH EDI                                 ; |hOwner
10001B9C   
FF15 3C330110  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 
Теперь прикинем, по идее прога должна запускаться только 100 раз, так? Значит где-то это должно быть явно видно. Теперь внимание:

По смещению 10001B65, регистр ECX, принемает значение 64! И тут вы скажете: Ну и что? Причём тут значение 64? А я вам скажу, что 100 в хексе (в шестнадцатиричной системе), как раз равняется 64! И значит это то, что нам нужно!

Далее дело за малым, меняем 64 на значение побольше, например 2710 - 10 000 в десятичной системе. Затем править файл в Hiew, а именно :

10001B65 B9 10 27 00 00

Этими действиями, мы заставляем программу запускаться не 100 раз как обычно, а 10 000 раз! Но тем неменее, по истечении 10 000 раз, прога перестанет работать. "Почему?" - спросите вы. А потому что! Посмотрим ещё раз на код:

PHP код:
10001B65     B9 10270000    MOV ECX,2710                             ;  Изменённое значение!
10001B6A   68 88720110    PUSH verypdf.10017288                    ;  ASCII "PDF2TXT v2.9"
10001B6F     2BCE           SUB ECX,ESI                              ;  !!!!!!!!!!!!!!!!!!!!
10001B71   8D5424 10      LEA EDX,DWORD PTR SS:[ESP+10]
10001B75   51             PUSH ECX
10001B76   
68 40720110    PUSH verypdf.10017240                    ;  ASCII "Your have %d times 
10001B7B   . 52             PUSH EDX
10001B7C   . C78424 F000000>MOV DWORD PTR SS:[ESP+F0],2
10001B87   . E8 1DA40000    CALL verypdf.1000BFA9
10001B8C   . 8B4424 1C      MOV EAX,DWORD PTR SS:[ESP+1C]
10001B90   . 83C4 10        ADD ESP,10
10001B93   . 6A 30          PUSH 30                                  ; /Style = 
10001B95   . 68 88730110    PUSH verypdf.10017388                    ; |Title = "
Software 
10001B9A   
50             PUSH EAX                                 ; |Text
10001B9B   
57             PUSH EDI                                 ; |hOwner
10001B9C   
FF15 3C330110  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 
Смотрите на строку по адресу 10001B6F, там из ECX вычитается ESI. А как вы помните в ECX - находиться наше новое значение, в то время как в ESI - число настоящих запусков программы, то есть, например мы запустили программу 10 раз, тогда ESI, содержит значение A - 10 в хексе. Тут как бы счётчик:

1) Из ECX вычитается ESI
2) Выводиться сообщение с числом оставшихся запусков, то есть выводиться новое значение ECX!


Как бы это исправить? Конечно можно сделать так, чтобы в ESI, всегда было значение 0 (нуль), но это не дзенский метод, мы просто занопим сам счётчик, делаем:

PHP код:
---БЫЛО---

10001B6F     2BCE           SUB ECX,ESI

---СТАЛО---

10001B6F     90             NOP
10001B70     90             NOP 
Затем просто правим это в Hiew и наша прога работает ВЕЧНО! Потом можно с помощью ResHacker'а на этом окне, где просят ввести серийник, удалить все кнопки, кроме кнопки Try, удалить все поля ввода и написать чё-нить вроде:

Cracked by: Vasya-Cracker, special 4 CCCP, а кнопку Try, переименовать в OK!

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

+ Число открытых файлов
+ Число сохранений изменений
+ Число нажатий на кнопку


И таких программ, с такими защитами очень много!
Вот и всё! Все кто слушал - молодец!

Спасибо за внимание. Всем бб!

Но в этой проге есть косяк, его заметил hidden:
В незарегистренной версии стоит ограничение на 10 страниц, и вот как это исправить:

PHP код:
00410E9C     75 39          JNZ SHORT pdf2txt.00410ED7
00410E9E  
|. 83FF 0A        CMP EDI,0A
00410EA1  
|. 7C 08          JL SHORT pdf2txt.00410EAB
00410EA3     C74424 10 0A00
>MOV DWORD PTR SS:[ESP+10],0A
00410EAB  
|> 8B15 FCB24200  MOV EDX,DWORD PTR DS:[42B2FC]
00410EB1  |. 6A 24          PUSH 24
00410EB3  
|. 68 AC6C4200    PUSH pdf2txt.00426CAC                    ;  ASCII "Purchase prompt"
00410EB8  |. 68 286C4200    PUSH pdf2txt.00426C28                    ;  ASCII "This is a trial version. It will can only extract the first ten pages from the pdf file. Would you like to purchase PDF2TXT online?"
00410EBD  |. 52             PUSH EDX
00410EBE  
|. E8 6DE4FFFF    CALL pdf2txt.0040F330
00410EC3  
|. 83C4 10        ADD ESP,10
00410EC6  
|. 83F8 06        CMP EAX,6
00410EC9  
|. 75 0C          JNZ SHORT pdf2txt.00410ED7
00410ECB  
|. 6A 01          PUSH 1
00410ECD  
|. 68 FC6B4200    PUSH pdf2txt.00426BFC                    ;  ASCII "http://www.verypdf.com/pdf2txt/pdf2txt.htm"
00410ED2  |. E8 D9590000    CALL <JMP.&verypdf.#5>
00410ED7  |> 8B4424 10      MOV EAX,DWORD PTR SS:[ESP+10
Функция проверки колва страниц находиться в главном модуле, то есть в файле pdf2txt.exe. Открываем его отладчиком, ищём строку:

This is a trial version. It will can only extract the first ten pages from the pdf file. Would you like to purchase PDF2TXT online?

И по адресу 00410E9C, вместо JNZ лепим JMP! Догадались что произойдёт? Прога просто проскочит проверку на 10 страниц и будет работать нормально.
Вот и всё!

Всё это актуально и для версии 3.2, только в 3.2 файлы запакованны UPX'ом! Распаковывайте:

upx.exe <filename.nn> -d

И Вперёд!


(ц) KindEcstasy

Последний раз редактировалось KindEcstasy; 01.11.2006 в 23:58..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хакер и закон! SladerNon Болталка 17 12.11.2009 09:42
Обзор бесплатных Cms em00s7 PHP, PERL, MySQL, JavaScript 16 03.07.2009 13:13
О законе. _-[A.M.D]HiM@S-_ Статьи 28 01.11.2007 12:25



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ