• XSS.stack #1 – первый литературный журнал от юзеров форума

Исследование iRadioLite 1.0.0.18 (build 18)

ProTeuS

RAID-массив
Пользователь
Регистрация
22.07.2006
Сообщения
54
Реакции
1
Исследование iRadioLite 1.0.0.18 (build 18)

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


Код:
Address Module  Active                  Disassembly
004067D31       Always                  PUSH 1.00456A88
0043DA581       Always                  PUSH 1.0045AD60
0043EA771       Always                  PUSH 1.0045AF38

Немного обкатав программу, замечаем, что последние 2 бряка срабатывают при самой загрузке выполняемого файла и открытии окна сведений "О программе".

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

Код:
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"


Код:
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 :

Код:
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 нопа) и в вызоваемой подфункции перепрыгнуть допонительную проверку и предотвратить очистку лицензии с реестра:


Код:
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"


Код:
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!
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх