· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.RESEARCH —› Помогите разобраться с прогой.

Посл.отвђт Сообщенiе


Дата: Сен 9, 2003 08:53:18 · Поправил: Fenix

Решил тут уговорить жадную прогу Atropos-SB ver.2003.07.16
(URL http://www.cyteg.com) - без проблем нашел нужную процедуру поставил в SIce
на нее бряк ... и нифига. SIce отказывается реагировать на выполнение этой процедуры.
Подскажите, в чем грабли.
ЗЫ SIce v.4.05 в Win98SE.
ЗЗЫ Адресок процедурки, если кто заинтерисовался - 0x00519FB4.


Дата: Сен 9, 2003 22:11:29

На другие адреса бряки нормально?


Дата: Сен 10, 2003 01:24:15

На другие, вне этой процедуры, вроде все ОК. Может там как-то до выполнения этой процедуры чего-то проверяющее стоит?


Дата: Сен 14, 2003 12:14:15

Fenix

Ну, конечно сосулька не будет брякаться, т.к. 00519FB4 не выполняется!... и вообще там кажись какой-то мусор валяется, чего тебя туда занесло :)... Значится, тут картина следующая: процедура проверки начинается здесь
017F:00521B3E  8BC0           MOV       EAX,EAX
017F:00521B40  E8E3FCFFFF     CALL      00521828
017F:00521B45  C3             RET

в ней тебя интересует
017F:00521828  55             PUSH      EBP
017F:00521829  8BEC           MOV       EBP,ESP
017F:0052182B  81C4E0FDFFFF   ADD       ESP,FFFFFDE0
017F:00521831  53             PUSH      EBX
017F:00521832  56             PUSH      ESI
017F:00521833  33D2           XOR       EDX,EDX
017F:00521835  8995ECFDFFFF   MOV       [EBP-0214],EDX
017F:0052183B  8995E8FDFFFF   MOV       [EBP-0218],EDX
017F:00521841  8995E4FDFFFF   MOV       [EBP-021C],EDX
017F:00521847  8995E0FDFFFF   MOV       [EBP-0220],EDX
017F:0052184D  8995FCFEFFFF   MOV       [EBP-0104],EDX
017F:00521853  8995F8FDFFFF   MOV       [EBP-0208],EDX
017F:00521859  8995F4FDFFFF   MOV       [EBP-020C],EDX
017F:0052185F  8995F0FDFFFF   MOV       [EBP-0210],EDX
017F:00521865  8BF0           MOV       ESI,EAX
017F:00521867  33C0           XOR       EAX,EAX
017F:00521869  55             PUSH      EBP
017F:0052186A  68581A5200     PUSH      00521A58
017F:0052186F  64FF30         PUSH      DWORD PTR FS:[EAX]
017F:00521872  648920         MOV       FS:[EAX],ESP
017F:00521875  33DB           XOR       EBX,EBX
017F:00521877  8B4604         MOV       EAX,[ESI+04]
017F:0052187A  8B15B8584C00   MOV       EDX,[004C58B8]
017F:00521880  E8C327EEFF     CALL      00404048
017F:00521885  0540070000     ADD       EAX,00000740
017F:0052188A  8D9628080000   LEA       EDX,[ESI+00000828]
017F:00521890  E88F19EEFF     CALL      00403224
017F:00521895  8B4604         MOV       EAX,[ESI+04]
017F:00521898  8B15B8584C00   MOV       EDX,[004C58B8]
017F:0052189E  E8A527EEFF     CALL      00404048
017F:005218A3  E82430FAFF     CALL      004C48CC <- вот этот вызов
017F:005218A8  83C0FE         ADD       EAX,-02
017F:005218AB  83E802         SUB       EAX,02
017F:005218AE  0F83A2000000   JAE       00521956
017F:005218B4  68681A5200     PUSH      00521A68

это я к тому привел, что может ты захочеш повтыкать в алгоритм генерации ключей, так уже будеш ориентироваться в последовательности вызовов. По себе знаю, как трудно бывает ковырять что-нить, когда не знаеш где одна процедура расположена относительно другой, тк.скз. не ориентироваться на местности. Чуствуеш себя как в темном лесу и ни одного проблеска вокруг... Короче, далее - в этом вызове самое интересное
017F:004C4995  8B45F8         MOV       EAX,[EBP-08]
017F:004C4998  E81B07F4FF     CALL      004050B8 <- здесь !!!
017F:004C499D  0F94C0         SETZ      AL
017F:004C49A0  84C0           TEST      AL,AL
017F:004C49A2  741A           JZ        004C49BE <- здесь !!!
017F:004C49A4  8B55F8         MOV       EDX,[EBP-08]
017F:004C49A7  8BC3           MOV       EAX,EBX
017F:004C49A9  E80AFEFFFF     CALL      004C47B8
017F:004C49AE  89B3640B0000   MOV       [EBX+00000B64],ESI
017F:004C49B4  33C0           XOR       EAX,EAX
017F:004C49B6  8945FC         MOV       [EBP-04],EAX
017F:004C49B9  E926010000     JMP       004C4AE4
017F:004C49BE  46             INC       ESI 
017F:004C49BF  83FE21         CMP       ESI,21 <- и здесь !!!
017F:004C49C2  0F8552FFFFFF   JNZ       004C491A 

CALL 004050B8 непосредственное сравнение введенного ключа с настоящим с возвращением установленного флага ZF, если ключ правильный. На входе в процедуру в edx содержится адресс введенного ключа, а в eax истинного. Проверка выполняется 32 раза (cmp esi,21) c генерацией нового проверочного ключа в каждом цикле (JNZ 004C491A ^), если введенный не совпадает в предыдущем. Ну тут понятно. Прога ведь имеет 6 отдельных лицензий, 1 канал/ 2 канала/ 4 канала/ 16 каналов/ LAN-монитор/ WEB-монитор соответственно 25/50/100/200 баксов... поэтому среди 32-х проверок эти 6 лицензий (в смысле ключей) и пробегают ;)... А именно, в следующих циклах:
0Bh - 1 канал
0Сh - 2 канала
0Dh - 4 канала
0Eh - 16 канала
0Fh - LAN-монитор
10h - WEB-монитор

Кстати похоже, что выше лежащие процедуры и отвечают за создание проверочных ключей, поэтому начинай с них если что... Ну и все. Остается во время проверки перезаписать введенный ключ настоящим. Заменяеш этот
017F:004C4998  E81B07F4FF     CALL      004050B8

на
017F:004C4998  E963A30F00     JMP       005BED00

Это секция ресурсов, cмещение в файле - 0x001B6D00 (смещение в файле CALL 004050B8 - 0x000C3D98). А там херячиш следующее
017F:005BED00  83FE10         CMP       ESI,0Сh <- любая лицензия, на выбор :)
017F:005BED03  0F85945CF0FF   JNZ       004C499D
017F:005BED09  96             XCHG      EAX,ESI
017F:005BED0A  87FA           XCHG      EDI,EDX
017F:005BED0C  83C904         OR        ECX,04
017F:005BED0F  F3A5           REPZ MOVSD <- заменяем введенный ключ настоящим
017F:005BED11  96             XCHG      EAX,ESI
017F:005BED12  87FA           XCHG      EDI,EDX
017F:005BED14  E98B5CF0FF     JMP       004C49A4

Получается авторегистрация (гы-гы). Заходиш в последнюю, набираеш ник и любые 16(!) символов в качестве ключа. Шо нЭ ясн0! :)


Дата: Сен 14, 2003 12:16:38

А прошка симпатичная. Я кстати себе без всяких выё скромно поставил на 2 канала, ну типа 25 баксов :)... Защита так себе, фонарненькая. Самое трудное было добраться до процедуры 004050B8, а там уже по накатаному (точнее не трудно, а муторно). Вообще, насколько я вижу, все современные проги, давным давно перестали напрямую использовать GetWindowTextA и GetDlgItemTextA, а hmemcpy в 2k вроде нету ?! Вот и в данном случае это наблюдается и во многих других прогах... приходится перегружатся под 98x, чтобы юзать спасительное hmemcpy, либо идти долго долго в обход. Наверняка есть альтернатива?


Дата: Сен 15, 2003 01:15:29

2 Godness
ГРОМАДНОЕ СПАСИБО!!!
С меня причитается пиво :-)
Когда сел и разобрался как вся защитка пашет, то аж обалдел от простоты :-)
Всем спасибо, тему можно считать закрытой!


Дата: Сен 15, 2003 14:53:33

Небольшое продолжение - весь мой пост относится к последней версии Atropos-SB ver.2003.09.09, просто сразу не заметил :)...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071