Авторские статьи Взлом программы Pdf2txt 2.9

Discussion in 'Статьи' started by KindEcstasy, 31 Oct 2006.

  1. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Взлом программы 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
     
    #1 KindEcstasy, 31 Oct 2006
    Last edited: 1 Nov 2006
    4 people like this.
  2. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    А если написать вместо sub add? :)
     
  3. Koller

    Koller Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    Последняя версия этой программы 3.2, если не ошибаюсь...
    И довольно-таки не просто было найти 2.9...
    Нашел...залил - http://filefactory.ru/1162322295/pdf2txt.exe
    Будем пробывать )
     
  4. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Хмм... Тоже вариант!

    З.Ы. Красава!
     
  5. TaNkist

    TaNkist Elder - Старейшина

    Joined:
    6 Apr 2006
    Messages:
    147
    Likes Received:
    47
    Reputations:
    19
    Когда-то все равно прога выдаст сообщение об ошибке.
     
  6. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Ну да, тоже верно...
     
  7. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Я вот не понимаю, какой прикол взламывать старые версии программы? Мне например понадабилась прога, я пошел скачал последнюю версию, крякнул, написал как и теперь пользуюсь.
    Темболее сам то ты пользуешся теперь этой прогай? Она ИМХО безполезна.

    А про это забыл?:
    ЗЫ Давай если крякаем какую-нить прогу, выкладывать эту версию, в чистом виде, например не репиде. т.к. после появления кряка, эта версия проги кудато исчезает и найти её давольно сложно.
     
  8. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54

    Да просто есть у меня старые диски, ну а на них софт я вот и беру оттуда проги. Просто качать прогу новой версии у меня нет ни времени, ни денег (итак траффик экономлю как могу). А новичкам потренироваться и старые проги подойдут, но это моё мнение.

    Насчёт того, что я забыл:
    Я честно говоря этого и не видел даже, так что помидорами не кидайся =). Заинсталю заново - посмотрю.

    Насчёт выкладывания на рапиде:
    Да я обморозился, но я же говорил, что каждый байтик траффика экономлю. А вообще конечно я поддерживаю твою мысль про то, чтобы выкладывать прогу в чистом виде. Со следующего раза так и буду делать.

    Спасибо вам за критику Hidden.
    C уважением, KindEcstasy.
     
  9. Koller

    Koller Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    to hidden

    Какой прикол взламывать старые программы? Вопрос не по адресу, потому как эту тему создавал не я...
    Выложил 2.9 версию, потому как на ней тут показывали взлом программы...
    И я не уверен, что в 3.2 такая же система...
    Поэтому хотелось бы четко попробывать на той версии, которую описывают..
    На счет использования этой программы вовсе...По правде говоря впервые о ней услышал :)...
    Решил просто-напросто так сказать "проверить на работоспособность" статью...именно на примере той самой версии, о которой тут и написано...
    На счет того нужна ли она или нет...мне бы она была нужна, если бы она нормально понимала русский язык, а то достает одни каракули вместо русских букв...

    Согласен с тобой на тему, что надо было последнюю версию рассматривать, но извини, притензия явно не по адресу...
     
    1 person likes this.
  10. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    2Koller Может я недостаточно понятно выразился, твой пост я привёл в поддержку к моему. ;)
     
  11. Koller

    Koller Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    Да только когда второй раз прочитал твой пост, лишь тогда только понял )...
    Почему именно так...не знаю...видимо переучился сегодня )...
    По теме...

    to KindEcstasy
    Изучал ли ты последнюю версию? Которая именно 3.2?
    Если да, то прошу тебя об этом тут рассказать...
     
  12. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    насчёт 3.2 - нет не изучал, если даш ссылку то посмотрю. Начсёт ограничения на 10 страниц ( про замечание hidden'a ), статью дополнил!!!
     
  13. Koller

    Koller Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    Версия 3.2 тут - http://filearchiv.ru/368315
     
  14. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    2 Koller:

    Ты писал:
    Изучал ли ты последнюю версию? Которая именно 3.2?
    Если да, то прошу тебя об этом тут рассказать...

    Да я скачал и посмотрел. Защита там не изменилась, просто теперь они запаковали всё UPX'ом. Твои действия:

    1) Распаковываешь библиотеку verypdf.dll (upx.exe verypdf.dll -d)
    2) Патчишь вот так:

    10001170 33C0 XOR EAX,EAX
    10001172 40 INC EAX
    10001173 C3 RETN

    3) Запускаешь, высвечивается предложение ввести серийник, ты жмёшь ОК (или чё там я уже не помню). Прога радуется-соответственно радуешься и ты.

    4)Всё. Можно нормально работать с прогой.

    Конечно не принципиально как ты будешь крякать, можно и так, как я описывал в версии 2.9.

    з.Ы. Про конструкцию вида:

    10001170 33C0 XOR EAX,EAX
    10001172 40 INC EAX
    10001173 C3 RETN

    Я уже писал в своих статьях. Читай их. Если не разберёшся, напиши. Я напишу статью и кину те на мыло.

    зз.ы Только оставь мыло =)
    бб
     
    1 person likes this.
  15. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    не вижу смысла в обсеждении "за4ем крякать старый софт". туторы тут выложены для образовательских целей и в целях поднятия "экспы" их исследователя. кому нужен варез - идем на варез.ру или на сайт TSRh. другое дело, коне4но, когда кто-то бы "культурно" попросил поисследовать более новую версию какого-либо софта, а не возмущенно вздыхал...

    ЗЫ: в своих суждениях я предположил, 4то старые версии не слишком отли4аются во внутренней защите и их выбор большей простотой крекинга не обоснован
     
    1 person likes this.