Авторские статьи Исследование Registry Booster v1.1

Discussion in 'Статьи' started by ProTeuS, 22 Aug 2006.

  1. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    Пациент - программа Registry Booster v1.1. Думаю, все функции понятны по названию и особого представления делать не нужно.
    В триал-версии наложено ограни4ение на удаление всего 15 ошибок в реестре. Попытавшись сразу закейгенить\подсмотреть валидный клю4 для сабжа, я обнаружил виртуальные функции, большую захламленность кода в районе проверки клю4ей и решил не тратить много времени попусту и просто пропат4ить нежалаемое ограни4ение (и был прав, ибо в дальнейшем обнаружится, 4то именно тут находится огромнейшая дырища в защите).

    При проверке реестра и попытке вы4истить все ошибки выдается окно "Thank You for your interest in Registry Booster!" с надписью об ограни4ениях. Я сразу взялся за Resource Explorer (перед этим исполняемый файл был распакован до Microsoft Visual C++ 7.0 [Debug]) и нашел вот такой броский ресурс с идентификатором 241:

    Code:
    241	<body bgcolor=WHITE><font face="MS SANS SERIF" size="8pt" color = BLUE><b>Thank You for your interest in Registry Booster!<br><br></b></Font>To Purchase Registry Booster and repair all System Errors, please click on the "Purchase Online" button below. <br><br>  <table border="0" id="table1" cellspacing="0" cellpadding="0"><tr><td height="40"> <b>Total Errors Found:</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%d Errors Found.</td></tr><tr><td height="40"><font color =  #C60F0F><b>Trial Version Removal:</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This Trial Version will remove up to 15 errors.</font></td></tr><tr><td height="40"><font color =  #C60F0F><b>Remaining Errors:</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To remove the remaining errors purchase the full version.</font></td></tr></table></font></body>
    
    Он служит для вывода HTML-нага в окне об превышении найденых ошибок 15

    Поищем обращения к ресурсу с заданым идентификатором

    Ищем в ольке "Search for -> All commands"
    push 0F1 (поскольку 241 = 0F1h)

    имеем едиственный вызов

    Code:
    004220F2  |. E8 E4AF0500    CALL Registry.0047D0DB                   ; \Registry.0047D0DB
    004220F7  |. 803D 529B4C00 >CMP BYTE PTR DS:[4C9B52],0
    004220FE  |. 8DB7 E8020000  LEA ESI,DWORD PTR DS:[EDI+2E8]
    00422104  |. 74 14          JE SHORT Registry.0042211A
    00422106  |. 6A 00          PUSH 0
    00422108  |. 8BCE           MOV ECX,ESI
    0042210A  |. E8 0AB00500    CALL Registry.0047D119
    0042210F  |. 6A 00          PUSH 0
    00422111  |. 8BCE           MOV ECX,ESI
    00422113  |. E8 3DB00500    CALL Registry.0047D155
    00422118  |. EB 20          JMP SHORT Registry.0042213A
    0042211A  |> 68 F1000000    PUSH 0F1                                 ; /Arg1 = 000000F1
    0042211F  |. E8 64A6FEFF    CALL Registry.0040C788                   ; \Registry.0040C788
    00422124  |. 53             PUSH EBX                                 ; /Arg5
    00422125  |. 6A 1D          PUSH 1D                                  ; |Arg4 = 0000001D
    00422127  |. 6A 6E          PUSH 6E                                  ; |Arg3 = 0000006E
    00422129  |. 68 64010000    PUSH 164                                 ; |Arg2 = 00000164
    0042212E  |. 68 17020000    PUSH 217                                 ; |Arg1 = 00000217
    00422133  |. 8BCE           MOV ECX,ESI                              ; |
    00422135  |. E8 A1AF0500    CALL Registry.0047D0DB                   ; \Registry.0047D0DB
    0042213A  |> 53             PUSH EBX                                 ; /Arg5
    0042213B  |. 6A 0F          PUSH 0F                                  ; |Arg4 = 0000000F
    0042213D  |. 6A 2D          PUSH 2D                                  ; |Arg3 = 0000002D
    0042213F  |. 6A 49          PUSH 49                                  ; |Arg2 = 00000049
    00422141  |. 68 90010000    PUSH 190                                 ; |Arg1 = 00000190
    00422146  |. 8D8F E4040000  LEA ECX,DWORD PTR DS:[EDI+4E4]           ; |
    0042214C  |. C787 4C050000 >MOV DWORD PTR DS:[EDI+54C],0E8A02B       ; |
    00422156  |. C787 48050000 >MOV DWORD PTR DS:[EDI+548],0FF0000       ; |
    00422160  |. E8 76AF0500    CALL Registry.0047D0DB                   ; \Registry.0047D0DB
    00422165  |. 5E             POP ESI
    00422166  |. 5D             POP EBP
    00422167  |. 5B             POP EBX
    00422168  |. 83C4 10        ADD ESP,10
    0042216B  \. C3             RETN
    
    В глаза сразу бросается проверка

    004220F7 |. 803D 529B4C00 >CMP BYTE PTR DS:[4C9B52],0
    004220FE |. 8DB7 E8020000 LEA ESI,DWORD PTR DS:[EDI+2E8]
    00422104 |. 74 14 JE SHORT Registry.0042211A

    и я4ейка памяти, которая имеет в нашем слу4ае нулевое зна4ение. Опыт подсказывает, 4то это может быть глобальная переменная BOOL is_registered, отве4ающая за статус прохождения\провала регистрации. Проверим, может она где-нибудь еще употребляется.

    Find References to -> All address constant

    Code:
    References in Registry:.text to 004C9B52
    Address    Disassembly                               Comment
    00418FA3   CMP BYTE PTR DS:[4C9B52],0                DS:[004C9B52]=00
    0041B13C   CMP BYTE PTR DS:[4C9B52],0                DS:[004C9B52]=00
    0041E05F   CMP BYTE PTR DS:[4C9B52],0                DS:[004C9B52]=00
    0041F200   CMP BYTE PTR DS:[4C9B52],0                DS:[004C9B52]=00
    00421801   MOV AL,BYTE PTR DS:[4C9B52]               [004C9B52]=00
    00421BE2   MOV AL,BYTE PTR DS:[4C9B52]               [004C9B52]=00
    00421EA2   CMP BYTE PTR DS:[4C9B52],0                DS:[004C9B52]=00
    004220F7   CMP BYTE PTR DS:[4C9B52],0                (Initial CPU selection)
    0042566B   CMP BYTE PTR DS:[4C9B52],BL
    00426C3D   CMP BYTE PTR DS:[4C9B52],BL
    0042740A   CMP BYTE PTR DS:[4C9B52],BL
    00427469   CMP BYTE PTR DS:[4C9B52],BL
    00427704   CMP BYTE PTR DS:[4C9B52],0                DS:[004C9B52]=00
    
    Стало быть, имеем 11 проверок переменной и 2 операции присваивания ей зна4ения. Это только подтверждает нашу теорию.

    По природной лени, не желая для подмены зна4ения переменной (в 1) искать место ее инициализации, добавлять код ее перезаписи, я наугад попытался сделать модификацю по адресу .004220F7 в надежде, 4то проверка флага зарегистрированности в других 4астях будет проходить позднее. И я не ошибся =)

    Правим:

    004220F7 803D 529B4C00 >CMP BYTE PTR DS:[4C9B52],0
    004220FE 8DB7 E8020000 LEA ESI,DWORD PTR DS:[EDI+2E8]
    00422104 74 14 JE SHORT Registry.0042211A


    004220F7 C605 529B4C00 >MOV BYTE PTR DS:[4C9B52],1
    004220FE 8DB7 E8020000 LEA ESI,DWORD PTR DS:[EDI+2E8]
    00422104 90 NOP
    00422105 90 NOP

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

    gl hl!
     
    2 people like this.