Авторские статьи Исследование iRadioLite 1.0.0.18 (build 18)

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

  1. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    Исследование iRadioLite 1.0.0.18 (build 18)

    Сабж ничем не пакован, поэтому сразу же загружаем его в ольку и думаем с чего начать...
    Поскольку программа имеет триал-ограничении 30 дней и при загрузке пишет строки о нашей незарегистрированности, то начнем исследовании с поиска часто встречающихся в триалах строк ("Search for -> All referenced text strings") "register" и поставим на их обращения бряки (F2). Вот что дожно выйти после проведенных манипуляций в окне бряков:


    Code:
    Address Module  Active                  Disassembly
    004067D31       Always                  PUSH 1.00456A88
    0043DA581       Always                  PUSH 1.0045AD60
    0043EA771       Always                  PUSH 1.0045AF38
    Немного обкатав программу, замечаем, что последние 2 бряка срабатывают при самой загрузке выполняемого файла и открытии окна сведений "О программе".

    Содержание окна дизассемблированного кода на момент срабатывания 2 бряков таково:

    Code:
    0043EA48  \. C2 0400        RETN 4
    0043EA4B  /. 55             PUSH EBP
    0043EA4C  |. 8BEC           MOV EBP,ESP
    0043EA4E  |. 6A FF          PUSH -1
    0043EA50  |. 68 CD454400    PUSH 1.004445CD                          ;  SE handler installation
    0043EA55  |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
    0043EA5B  |. 50             PUSH EAX
    0043EA5C  |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
    0043EA63  |. 83EC 08        SUB ESP,8
    0043EA66  |. 894D EC        MOV DWORD PTR SS:[EBP-14],ECX
    0043EA69  |. B9 44C94500    MOV ECX,1.0045C944
    0043EA6E  |. E8 E67CFCFF    CALL 1.00406759   //!!!
    0043EA73  |. 85C0           TEST EAX,EAX
    0043EA75  |. 74 0F          JE SHORT 1.0043EA86
    0043EA77  |. 68 38AF4500    PUSH 1.0045AF38                          ;  ASCII "Unregistered"

    Code:
    0043DA20  /. 55             PUSH EBP
    0043DA21  |. 8BEC           MOV EBP,ESP
    0043DA23  |. 6A FF          PUSH -1
    0043DA25  |. 68 E4434400    PUSH 1.004443E4                          ;  SE handler installation
    0043DA2A  |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
    0043DA30  |. 50             PUSH EAX
    0043DA31  |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
    0043DA38  |. 83EC 2C        SUB ESP,2C
    0043DA3B  |. 894D E0        MOV DWORD PTR SS:[EBP-20],ECX
    0043DA3E  |. 8B4D E0        MOV ECX,DWORD PTR SS:[EBP-20]
    0043DA41  |. E8 F21E0000    CALL <JMP.&MFC42.#4710>
    0043DA46  |. B9 44C94500    MOV ECX,1.0045C944
    0043DA4B  |. E8 098DFCFF    CALL 1.00406759     //!!!
    0043DA50  |. 85C0           TEST EAX,EAX
    0043DA52  |. 0F84 AC000000  JE 1.0043DB04
    0043DA58  |. 68 60AD4500    PUSH 1.0045AD60                          ;  ASCII "**** UNREGISTERED VERSION ****"
    Сразу замечаем, что наги выдаются в результате сравнений результатов отработанной функции по адресу .00406759 :

    Code:
    00406759  /$ 55             PUSH EBP
    0040675A  |. 8BEC           MOV EBP,ESP
    0040675C  |. 51             PUSH ECX
    0040675D  |. 894D FC        MOV DWORD PTR SS:[EBP-4],ECX
    00406760  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
    00406763  |. 05 24030000    ADD EAX,324
    00406768  |. 50             PUSH EAX
    00406769  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
    0040676C  |. E8 43FBFFFF    CALL 1.004062B4
    00406771     F7D8           NEG EAX     //!!!
    00406773     1BC0           SBB EAX,EAX
    00406775     40             INC EAX
    00406776  |. 8BE5           MOV ESP,EBP
    00406778  |. 5D             POP EBP
    00406779  \. C3             RETN
    Подфункция .004062B4 и отвечает за генерация валидного регномера и сравнение его с нами введенным\сохраненным в реестре. Чтобы функция всегда возвращала "верное" значение, нужно перед RETом просто очистить содержание регистра EAX (XOR EAX, EAX и 3 нопа) и в вызоваемой подфункции перепрыгнуть допонительную проверку и предотвратить очистку лицензии с реестра:


    Code:
    0040677A  /$ 55             PUSH EBP
    0040677B  |. 8BEC           MOV EBP,ESP
    0040677D  |. 51             PUSH ECX
    0040677E  |. 894D FC        MOV DWORD PTR SS:[EBP-4],ECX
    00406781  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
    00406784  |. 05 24030000    ADD EAX,324
    00406789  |. 50             PUSH EAX
    0040678A  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
    0040678D  |. E8 22FBFFFF    CALL 1.004062B4
    00406792  |. 85C0           TEST EAX,EAX
    00406794     74 04          JE SHORT 1.0040679A
    00406796  |. 33C0           XOR EAX,EAX
    00406798  |. EB 0D          JMP SHORT 1.004067A7
    0040679A  |> 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
    0040679D  |. E8 90F5FFFF    CALL 1.00405D32 //обнуление регистрации
    004067A2  |. 25 FF000000    AND EAX,0FF
    004067A7  |> 8BE5           MOV ESP,EBP
    004067A9  |. 5D             POP EBP
    004067AA  \. C3             RETN
    00406794 74 04 JE SHORT 1.0040679A
    на
    00406794 90 90 NOP NOP


    программа теперь полностью функционально, если только не 1 подводный камень - модуль проверки CRC, не дающий пропатченной проге загружаться. Его адресс можно просмотреть в окне стека вызовов (ALt+K) на момент ошибки, либо по поиску подстроки "CRC Error"


    Code:
    0043D719     0F85 83000000  JNZ 1.0043D7A2                           ;  CRC ERROR
    0043D71F     B9 01000000    MOV ECX,1
    0043D724  |. 85C9           TEST ECX,ECX
    0043D726  |. 74 0C          JE SHORT 1.0043D734
    0043D728  |. C785 D4FEFFFF >MOV DWORD PTR SS:[EBP-12C],0
    0043D732  |. EB 13          JMP SHORT 1.0043D747
    0043D734  |> 68 2CAD4500    PUSH 1.0045AD2C                          ; /Arg1 = 0045AD2C ASCII "     ERROR: <CRadioGrabApp::isCrcValid> CRC error
    "
    0043D739  |. E8 E2F2FEFF    CALL 1.0042CA20                          ; \1.0042CA20
    Условный переход в нашем случае необходимо заменить на безусловный.

    И последним штрихом исследования будет красочная замена пустого вывода строки "Licensed to: " при загрузке на свой ник.

    0043661A 68 28A24500 PUSH 1.0045A228 ; ASCII "Licensed to "

    Для этого вместо PUSH 0045A228 введем указатель на любую пустую ячейку памяти, которую после заполним своим ником. Я сделал так: PUSH 0045B908, а по адресу .0045B908 ввел (Binary->Edit) побайтово строку "Licensed to: ProTeuS"

    [BeginCRK]-------------------------------------
    Difference(s) between original.exe & cracked.exe
    original.exe
    00006771: F7 33
    00006772: D8 C0
    00006773: 1B 90
    00006774: C0 90
    00006775: 40 90
    00006794: 74 90
    00006795: 04 90
    0003661B: 28 08
    0003661C: A2 B9
    0003D719: 0F E9
    0003D71A: 85 84
    0003D71B: 83 00
    0005B908: 00 4C
    0005B909: 00 69
    0005B90A: 00 63
    0005B90B: 00 65
    0005B90C: 00 6E
    0005B90D: 00 73
    0005B90E: 00 65
    0005B90F: 00 64
    0005B910: 00 20
    0005B911: 00 74
    0005B912: 00 6F
    0005B913: 00 20
    0005B914: 00 50
    0005B915: 00 72
    0005B916: 00 6F
    0005B917: 00 54
    0005B918: 00 65
    0005B919: 00 75
    0005B91A: 00 53
    [EndCRK]-------------------------------------

    gl hf!
     
    6 people like this.
  2. †Romi4†

    †Romi4† Elder - Старейшина

    Joined:
    6 Feb 2006
    Messages:
    342
    Likes Received:
    205
    Reputations:
    26
    ыыы меня улыбнуло )) пошёл искать iRadioLite , и античат на первом месте )))

    http://www.yandex.ru/yandsearch?rpt=rad&text=iRadioLite
     
    1 person likes this.