Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   Исследование XChat 2.6.7 (https://forum.antichat.xyz/showthread.php?t=23055)

ProTeuS 24.08.2006 10:18

Исследование XChat 2.6.7
 
Исследование XChat 2.6.7

Программа имеет ограни4ение на использование 30 дней, о 4ем после их

окон4ания нагло пишет в НАГе. Грузим ЕХЕ в ольку.
Первой мыслью было банально поставить брякки на все команды вида CMP reg,

1Eh, CMP reg, 1Dh, CMP reg, 1Fh, которые предположительно будут проверять

коли4ество дней прошедших и константно вшитых в код тридцати. Программа

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

обращения к файлом и реестру за датами. На этот раз сработало, программа

с4итывает с реестра время установки и сравнивает ее с теперешней датой.

Код:

004353F3  55              PUSH EBP
004353F4  89E5            MOV EBP,ESP
004353F6  57              PUSH EDI
004353F7  56              PUSH ESI
004353F8  53              PUSH EBX
004353F9  81EC 6C020000    SUB ESP,26C
004353FF  6A 00            PUSH 0
00435401  C785 90FDFFFF 00>MOV DWORD PTR SS:[EBP-270],0
0043540B  E8 D27F0000      CALL <JMP.&msvcrt.time>
00435410  5B              POP EBX
00435411  8985 8CFDFFFF    MOV DWORD PTR SS:[EBP-274],EAX
00435417  31D2            XOR EDX,EDX
00435419  31FF            XOR EDI,EDI
0043541B  0FB687 9C2D4400  MOVZX EAX,BYTE PTR DS:[EDI+442D9C]
00435422  47              INC EDI
00435423  C0E0 04          SHL AL,4
00435426  0A87 9C2D4400    OR AL,BYTE PTR DS:[EDI+442D9C]
0043542C  47              INC EDI
0043542D  88842A B4FDFFFF  MOV BYTE PTR DS:[EDX+EBP-24C],AL
00435434  42              INC EDX
00435435  83FF 1D          CMP EDI,1D
00435438  ^76 E1            JBE SHORT unpacked.0043541B
0043543A  8D95 B0FDFFFF    LEA EDX,DWORD PTR SS:[EBP-250]
00435440  8D85 B4FDFFFF    LEA EAX,DWORD PTR SS:[EBP-24C]
00435446  52              PUSH EDX
00435447  68 3F000F00      PUSH 0F003F
0043544C  6A 00            PUSH 0
0043544E  50              PUSH EAX
0043544F  68 01000080      PUSH 80000001
00435454  E8 6F0D0000      CALL <JMP.&ADVAPI32.RegOpenKeyExA> !!
00435459  31D2            XOR EDX,EDX
0043545B  85C0            TEST EAX,EAX
0043545D  75 10            JNZ SHORT unpacked.0043546F
0043545F  FFB5 B0FDFFFF    PUSH DWORD PTR SS:[EBP-250]
00435465  E8 640D0000      CALL <JMP.&ADVAPI32.RegCloseKey>
0043546A  BA 01000000      MOV EDX,1
0043546F  85D2            TEST EDX,EDX
00435471  8DB5 F4FEFFFF    LEA ESI,DWORD PTR SS:[EBP-10C]
00435477  8D95 B4FDFFFF    LEA EDX,DWORD PTR SS:[EBP-24C]
0043547D  0F85 0E010000    JNZ unpacked.00435591
00435483  8D85 ACFDFFFF    LEA EAX,DWORD PTR SS:[EBP-254]
00435489  50              PUSH EAX
0043548A  52              PUSH EDX
0043548B  68 01000080      PUSH 80000001
00435490  E8 3F0D0000      CALL <JMP.&ADVAPI32.RegCreateKeyA> !!
00435495  85C0            TEST EAX,EAX
00435497  0F85 D7000000    JNZ unpacked.00435574
0043549D  FFB5 ACFDFFFF    PUSH DWORD PTR SS:[EBP-254]
004354A3  E8 260D0000      CALL <JMP.&ADVAPI32.RegCloseKey>
004354A8  FFB5 8CFDFFFF    PUSH DWORD PTR SS:[EBP-274]
004354AE  8DBD F4FEFFFF    LEA EDI,DWORD PTR SS:[EBP-10C]
004354B4  31DB            XOR EBX,EBX
004354B6  68 BA2D4400      PUSH unpacked.00442DBA                  ;

ASCII "%x"
004354BB  68 00010000      PUSH 100
004354C0  57              PUSH EDI
004354C1  E8 167F0000      CALL <JMP.&msvcrt._snprintf>
004354C6  FC              CLD
004354C7  83C9 FF          OR ECX,FFFFFFFF
004354CA  31C0            XOR EAX,EAX
004354CC  F2:AE            REPNE SCAS BYTE PTR ES:[EDI]
004354CE  F7D1            NOT ECX
004354D0  31FF            XOR EDI,EDI
004354D2  49              DEC ECX
004354D3  83C4 10          ADD ESP,10
004354D6  39CB            CMP EBX,ECX
004354D8  7D 15            JGE SHORT unpacked.004354EF
004354DA  0FBE842F F4FEFFF>MOVSX EAX,BYTE PTR DS:[EDI+EBP-10C]
004354E2  83E8 30          SUB EAX,30
004354E5  0FAFC7          IMUL EAX,EDI
004354E8  47              INC EDI
004354E9  01C3            ADD EBX,EAX
004354EB  39CF            CMP EDI,ECX
004354ED  ^EB E9            JMP SHORT unpacked.004354D8
004354EF  FFB5 8CFDFFFF    PUSH DWORD PTR SS:[EBP-274]
004354F5  53              PUSH EBX
004354F6  8D9D F4FDFFFF    LEA EBX,DWORD PTR SS:[EBP-20C]
004354FC  68 BD2D4400      PUSH unpacked.00442DBD                  ;

ASCII "%06d%x"
00435501  68 00010000      PUSH 100
00435506  53              PUSH EBX
00435507  E8 D07E0000      CALL <JMP.&msvcrt._snprintf>
0043550C  83C4 14          ADD ESP,14
0043550F  8D95 A8FDFFFF    LEA EDX,DWORD PTR SS:[EBP-258]
00435515  8D85 B4FDFFFF    LEA EAX,DWORD PTR SS:[EBP-24C]
0043551B  52              PUSH EDX
0043551C  68 3F000F00      PUSH 0F003F
00435521  6A 00            PUSH 0
00435523  50              PUSH EAX
00435524  68 01000080      PUSH 80000001
00435529  E8 9A0C0000      CALL <JMP.&ADVAPI32.RegOpenKeyExA> !!
0043552E  85C0            TEST EAX,EAX
00435530  75 42            JNZ SHORT unpacked.00435574
00435532  FC              CLD
00435533  83C9 FF          OR ECX,FFFFFFFF
00435536  89DF            MOV EDI,EBX
00435538  F2:AE            REPNE SCAS BYTE PTR ES:[EDI]
0043553A  F7D1            NOT ECX
0043553C  49              DEC ECX
0043553D  51              PUSH ECX
0043553E  53              PUSH EBX
0043553F  6A 01            PUSH 1
00435541  6A 00            PUSH 0
00435543  68 C42D4400      PUSH unpacked.00442DC4                  ;

ASCII "installed"
00435548  FFB5 A8FDFFFF    PUSH DWORD PTR SS:[EBP-258]
0043554E  E8 870C0000      CALL <JMP.&ADVAPI32.RegSetValueExA> !!
00435553  85C0            TEST EAX,EAX
00435555  74 0D            JE SHORT unpacked.00435564
00435557  FFB5 A8FDFFFF    PUSH DWORD PTR SS:[EBP-258]
0043555D  E8 6C0C0000      CALL <JMP.&ADVAPI32.RegCloseKey>
00435562  EB 10            JMP SHORT unpacked.00435574
00435564  FFB5 A8FDFFFF    PUSH DWORD PTR SS:[EBP-258]
0043556A  E8 5F0C0000      CALL <JMP.&ADVAPI32.RegCloseKey>
0043556F  ^E9 A3FEFFFF      JMP unpacked.00435417
00435574  68 10000100      PUSH 10010                              ;

UNICODE "=C:=C:\Program Files\xchat"
00435579  68 CE2D4400      PUSH unpacked.00442DCE                  ;

ASCII "Error"
0043557E  68 D42D4400      PUSH unpacked.00442DD4                  ;

ASCII "Cannot access the registry."
00435583  6A 00            PUSH 0
00435585  E8 380C0000      CALL <JMP.&USER32.MessageBoxA>
0043558A  6A 01            PUSH 1
0043558C  E8 697E0000      CALL <JMP.&msvcrt.exit>
00435591  FF05 C8DD4500    INC DWORD PTR DS:[45DDC8]
00435597  8D85 A4FDFFFF    LEA EAX,DWORD PTR SS:[EBP-25C]
0043559D  50              PUSH EAX
0043559E  68 19000200      PUSH 20019
004355A3  6A 00            PUSH 0
004355A5  52              PUSH EDX
004355A6  68 01000080      PUSH 80000001
004355AB  FF0D 20D04500    DEC DWORD PTR DS:[45D020]
004355B1  C785 A0FDFFFF 00>MOV DWORD PTR SS:[EBP-260],100
004355BB  E8 080C0000      CALL <JMP.&ADVAPI32.RegOpenKeyExA>!!!
004355C0  85C0            TEST EAX,EAX
004355C2  ^0F85 E0FEFFFF    JNZ unpacked.004354A8
004355C8  8D85 A0FDFFFF    LEA EAX,DWORD PTR SS:[EBP-260]
004355CE  50              PUSH EAX
004355CF  8D85 9CFDFFFF    LEA EAX,DWORD PTR SS:[EBP-264]
004355D5  56              PUSH ESI
004355D6  50              PUSH EAX
004355D7  6A 00            PUSH 0
004355D9  68 C42D4400      PUSH unpacked.00442DC4                  ;

ASCII "installed"
004355DE  FFB5 A4FDFFFF    PUSH DWORD PTR SS:[EBP-25C]
004355E4  E8 F70B0000      CALL <JMP.&ADVAPI32.RegQueryValueExA>

стек на момент вызова с4итывание параметра клю4а:

Код:

0012FCAC  00000078  |hKey = 78
0012FCB0  00442DC4  |ValueName = "installed"
0012FCB4  00000000  |Reserved = NULL
0012FCB8  0012FCD8  |pValueType = 0012FCD8
0012FCBC  0012FE30  |Buffer = 0012FE30
0012FCC0  0012FCDC  \pBufSize = 0012FCDC


не желая замора4иваться с тонкостях алгоритма проверки даты, дотрейсим до

этого места

Код:

00435734  7E 11            JLE SHORT unpacked.00435747
00435736  B8 01000000      MOV EAX,1
0043573B  E8 5EF8FFFF      CALL unpacked.00434F9E
00435740  E8 8A86FEFF      CALL unpacked.0041DDCF
00435745  EB 07            JMP SHORT unpacked.0043574E
00435747  31C0            XOR EAX,EAX
00435749  E8 50F8FFFF      CALL unpacked.00434F9E
0043574E  8D65 F4          LEA ESP,DWORD PTR SS:[EBP-C]
00435751  5B              POP EBX
00435752  5E              POP ESI
00435753  5F              POP EDI
00435754  5D              POP EBP
00435755  C3              RETN

если "идти" обы4ном ходом алгоритма, то увидим наг, говорящий 4то у нас

закон4илось время триала. Если модифицируем флаг и пойдем на 00435736, то

увидим и наг, и главное окно программы. Стало быть в обоих слу4аях

вызывается одна и та же функция. Найти ее можно поставив бряк на вызов апи

полу4ения времени (в нашем слу4ае JMP.&msvcrt.time), либо просто

протрейсив всю функцию пошагово до выявления подфункции, вызывающей

непосредственно НАГ(который, кстате, можно обнаружить по перекрестным

ссылкам на строки "register" и т.д.).

Вот ее вызов:
0041E368 E8 AB84FEFF CALL unpacked.00406818

и ее листинг:

Код:

00406818  55              PUSH EBP
00406819  8BEC            MOV EBP,ESP
0040681B  51              PUSH ECX
0040681C  51              PUSH ECX
0040681D  833D D0DD4500 00 CMP DWORD PTR DS:[45DDD0],0  !!!
00406824  75 5F            JNZ SHORT unpacked.00406885
00406826  53              PUSH EBX
00406827  56              PUSH ESI
00406828  57              PUSH EDI
00406829  8B3D C0204400    MOV EDI,DWORD PTR DS:[<&msvcrt._open>]  ;

msvcrt._open
0040682F  68 00800000      PUSH 8000
00406834  BE 9CD24400      MOV ESI,unpacked.0044D29C                ;

ASCII "./inst.conf"
00406839  56              PUSH ESI
0040683A  FFD7            CALL EDI
0040683C  8BD8            MOV EBX,EAX
0040683E  83FB FF          CMP EBX,-1
00406841  59              POP ECX
00406842  59              POP ECX
00406843  75 5C            JNZ SHORT unpacked.004068A1
00406845  6A 00            PUSH 0
00406847  FF15 D0214400    CALL DWORD PTR DS:[<&msvcrt.time>]      ;

msvcrt.time
0040684D  C70424 01830000  MOV DWORD PTR SS:[ESP],8301
00406854  56              PUSH ESI
00406855  8945 FC          MOV DWORD PTR SS:[EBP-4],EAX
00406858  FFD7            CALL EDI
0040685A  8BF8            MOV EDI,EAX
0040685C  3BFB            CMP EDI,EBX
0040685E  59              POP ECX
0040685F  59              POP ECX
00406860  74 20            JE SHORT unpacked.00406882
00406862  6A 04            PUSH 4
00406864  8D45 FC          LEA EAX,DWORD PTR SS:[EBP-4]
00406867  50              PUSH EAX
00406868  57              PUSH EDI
00406869  FF15 B8204400    CALL DWORD PTR DS:[<&msvcrt._write>]    ;

msvcrt._write
0040686F  57              PUSH EDI
00406870  FF15 C4204400    CALL DWORD PTR DS:[<&msvcrt._close>]    ;

msvcrt._close
00406876  83C4 10          ADD ESP,10
00406879  6A 07            PUSH 7
0040687B  56              PUSH ESI
0040687C  FF15 6C204400    CALL DWORD PTR DS:[<&KERNEL32.SetFileAtt>;

kernel32.SetFileAttributesA
00406882  5F              POP EDI
00406883  5E              POP ESI
00406884  5B              POP EBX
00406885  E8 26F30200      CALL <JMP.&minigtk.#250>
0040688A  833D D4204600 00 CMP DWORD PTR DS:[4620D4],0
00406891  74 0C            JE SHORT unpacked.0040689F
00406893  68 B80B0000      PUSH 0BB8
00406898  FF15 A4214400    CALL DWORD PTR DS:[<&msvcrt._sleep>]    ;

msvcrt._sleep
0040689E  59              POP ECX
0040689F  C9              LEAVE
004068A0  C3              RETN

Нас заинтересует вот эта 4асть:

0040681D 833D D0DD4500 00 CMP DWORD PTR DS:[45DDD0],0
00406824 75 5F JNZ SHORT unpacked.00406885

В слу4ае нулевого зна4ения [45DDD0] будет вызываться НАГ, ина4е мы прыгаем

на
00406885 E8 26F30200 CALL <JMP.&minigtk.#250>,
4то есть ни4ем иным как функция вызова главного диалога программы. Для

пат4а ограни4имся изменением условного перехода (.00406824) безусловным.

Для завершения взлома, нам нужно подменить надпись "Evaluation version" в

окне "О программе" на свой ник ;) Поскольку в ресурсах и перекрестных

ссылках исполняемого ЕХЕ этой строки нет, то можно либо поискать ссылки на

строки "registered" и т.д. (в надежде, 4то выводящий их код будет рядом),

либо (4то надежнее) поставить апаратный!!! бряк на доступ к байтам

Код:

00444856  . 32 30 30 36 0A>ASCII "2006

<b>Registe"
00444866  . 72 65 64 20 74>ASCII "red to</b>:
%s

"

(поскольку они гарантирована будут с4итываться программой для вывода в

окно перед выводом строки о триальности) и протрейсив немного кода в

дополнительных либах после срабатывания то4ки останова попасть сюда:

Код:

00401102  3BC7            CMP EAX,EDI
00401104  75 03            JNZ SHORT unpacked.00401109
00401106  8D45 E8          LEA EAX,DWORD PTR SS:[EBP-18]
00401109  8945 F8          MOV DWORD PTR SS:[EBP-8],EAX
0040110C  FF15 70204400    CALL DWORD PTR DS:[<&KERNEL32.GetVersion>;

kernel32.GetVersion
00401112  3D 00000080      CMP EAX,80000000
00401117  B8 D8484400      MOV EAX,unpacked.004448D8                ;

ASCII "Yes"
0040111C  72 05            JB SHORT unpacked.00401123
0040111E  B8 D4484400      MOV EAX,unpacked.004448D4                ;

ASCII "No"
00401123  FF75 F8          PUSH DWORD PTR SS:[EBP-8]
00401126  50              PUSH EAX
00401127  FF75 FC          PUSH DWORD PTR SS:[EBP-4]
0040112A  E8 B7D50100      CALL unpacked.0041E6E6
0040112F  50              PUSH EAX
00401130  68 B8484400      PUSH unpacked.004448B8                  ;

ASCII "A multiplatform IRC Client"
00401135  E8 A4460300      CALL <JMP.&minigtk.#156>
0040113A  59              POP ECX
0040113B  50              PUSH EAX
0040113C  68 E0474400      PUSH unpacked.004447E0                  ;

ASCII 3C,"span size="x-large"><b>XChat 2.6.7</b></span>

%s

%s
<b>Cod"
00401141  8D85 E8FDFFFF    LEA EAX,DWORD PTR SS:[EBP-218]
00401147  68 00020000      PUSH 200
0040114C  50              PUSH EAX

После проверки можно с уверенностю сказать, 4то в EAX загрузится

указатель(ведь до проверки он имел нулевое зна4ени) на строку "Evaluation

version". 4тобы избавиться от этой назойливой строки, нужно до проверки в

EAX забить указатель на строку, содержащую наш ник. 4тобы лишний раз не

пат4ить бинарник и не добавлять по какому-то адресу в него ник, можно

упростить себе задание. Посмотрим в окне дампа (ECX -> Follow in dump)

содержание буфера, указатель на который находится в ECX. Тут сохранена

какая-то константа "00A42C18 43 50 31 32 35 31 CP1251". Но интересней

другое, а именно то, 4то выше (ниже по зна4ению) на 78h находится

прос4итанный программой ник(предположительно UserName на канале).
Попытаемся его заюзать. Для этого вместо операции проверки внедрим функцию

загрузки ECX(указателя на буфер) в EAX и отнимем от него 78h (сомнительно,

4то даный финт будет работать вне пределах одной машини, так 4то советую

либу повозиться с поиском "своего" смещения в буфере, либо всетаки

дописать свой ник в бинарник и при вызове вывода зарегистрированного имени

указывать его адрес ;)


пат4и:


00435734 7E 11 JLE SHORT unpacked.00435747
на
00435734 90 90 nop nop


00406824 75 5F JNZ SHORT unpacked.00406885
на
00406824 EB 5F JMP SHORT unpacked.00406885


004010FD A1 D0DD4500 MOV EAX,DWORD PTR DS:[45DDD0]
00401102 3BC7 CMP EAX,EDI
00401104 75 03 JNZ SHORT unpacked.00401109
на
004010FD 8BC1 MOV EAX,ECX
004010FF 2D C8000000 SUB EAX,078
00401104 EB 03 JMP SHORT unpacked.00401109

gl hf!

[loy] 03.09.2006 07:57

Ужос ребяда

У меня линь. И тама не какой регистраций не надо
И пользуюсь этим иксчатом уже давно

ProTeuS 03.09.2006 14:06

ты ска4ал непроверенную взломанную варезную версию, тут обсуждалась последняя с оффсайта


Время: 03:51