![]() |
eXeL@B —› Вопросы новичков —› На что поставить bpx...? |
Посл.ответ | Сообщение |
|
Создано: 25 апреля 2007 15:53 · Личное сообщение · #1 Здравствуйте! Есть программа, написанная на Delphi. Она привязана к CD, причем защита скорее всего не серийная, а написанная специально для программы. При попытке запуска программы с эмалированного / скопированного CD программа выдает что-то типа MessageBox в котором написано "This program cannot run without the original CD in the drive.". Загрузил программу в OllyDBG и пробовал ставить bpx на MessageBox, MessageBoxA, ShowMessage, ShowWindow. Не один bpx не срабатывает, а окно все равно появляется. После этого я открыл программу в IDA и после анализа прямо под функцией Start обнаружил следующее: ... CODE:00017CD8 dd 0 CODE:00017CDC off_17CDC dd 0 ; DATA XREF: DATA:off_D5514o CODE:00017CE0 dd 0 CODE:00017CE4 off_17CE4 dd 0 ; DATA XREF: DATA:off_D5288o CODE:00017CE8 dd 0 CODE:00017CEC off_17CEC dd 0 ; DATA XREF: DATA:off_D5294o CODE:00017CF0 db 75h CODE:00017CF1 db 73h ; s CODE:00017CF2 db 65h ; e CODE:00017CF3 db 72h ; r CODE:00017CF4 off_17CF4 db 33h ; DATA XREF: DATA:off_D5524o CODE:00017CF5 db 32h ; 2 CODE:00017CF6 db 0 CODE:00017CF7 db 4Dh ; M CODE:00017CF8 db 65h CODE:00017CF9 db 73h ; s CODE:00017CFA db 73h ; s CODE:00017CFB db 61h ; a CODE:00017CFC off_17CFC db 67h ; DATA XREF: DATA:off_D5304o CODE:00017CFD db 65h ; e CODE:00017CFE db 42h ; B CODE:00017CFF db 6Fh ; o CODE:00017D00 db 78h CODE:00017D01 db 41h ; A CODE:00017D02 db 0 CODE:00017D03 db 45h ; E CODE:00017D04 off_17D04 db 72h ; DATA XREF: DATA:off_D55A0o CODE:00017D05 db 72h ; r CODE:00017D06 db 6Fh ; o CODE:00017D07 db 72h ; r CODE:00017D08 db 0 CODE:00017D09 db 54h ; T CODE:00017D0A db 68h ; h CODE:00017D0B db 69h ; i CODE:00017D0C off_17D0C db 73h ; DATA XREF: DATA:off_D519Co CODE:00017D0D db 20h CODE:00017D0E db 70h ; p CODE:00017D0F db 72h ; r CODE:00017D10 db 6Fh CODE:00017D11 db 67h ; g CODE:00017D12 db 72h ; r CODE:00017D13 db 61h ; a CODE:00017D14 off_17D14 db 6Dh ; DATA XREF: DATA:off_D31BCo CODE:00017D14 ; DATA:off_D51B0o CODE:00017D15 db 20h CODE:00017D16 db 63h ; c CODE:00017D17 db 61h ; a CODE:00017D18 db 6Eh CODE:00017D19 db 6Eh ; n CODE:00017D1A db 6Fh ; o CODE:00017D1B db 74h ; t CODE:00017D1C off_17D1C db 20h ; DATA XREF: DATA:off_D31C0o CODE:00017D1C ; DATA:off_D52B8o CODE:00017D1D db 72h ; r CODE:00017D1E db 75h ; u CODE:00017D1F db 6Eh ; n CODE:00017D20 db 20h CODE:00017D21 db 77h ; w CODE:00017D22 db 69h ; i CODE:00017D23 db 74h ; t CODE:00017D24 off_17D24 db 68h ; DATA XREF: DATA:off_D5370o CODE:00017D25 db 6Fh ; o CODE:00017D26 db 75h ; u CODE:00017D27 db 74h ; t CODE:00017D28 db 20h CODE:00017D29 db 74h ; t CODE:00017D2A db 68h ; h CODE:00017D2B db 65h ; e CODE:00017D2C off_17D2C db 20h ; DATA XREF: DATA:off_D5320o CODE:00017D2D db 6Fh ; o CODE:00017D2E db 72h ; r CODE:00017D2F db 69h ; i CODE:00017D30 db 67h CODE:00017D31 db 69h ; i CODE:00017D32 db 6Eh ; n CODE:00017D33 db 61h ; a CODE:00017D34 off_17D34 db 6Ch ; DATA XREF: DATA:off_D5048o CODE:00017D35 db 20h CODE:00017D36 db 43h ; C CODE:00017D37 db 44h CODE:00017D38 db 20h CODE:00017D39 db 69h ; i CODE:00017D3A db 6Eh ; n CODE:00017D3B db 20h CODE:00017D3C off_17D3C db 74h ; DATA XREF: DATA:off_D55F0o CODE:00017D3D db 68h ; h CODE:00017D3E db 65h ; e CODE:00017D3F db 20h CODE:00017D40 db 64h CODE:00017D41 db 72h ; r CODE:00017D42 db 69h ; i CODE:00017D43 db 76h ; v CODE:00017D44 db 65h ; DATA XREF: DATA:off_D53FCo CODE:00017D45 db 2Eh ; . CODE:00017D46 db 0 ... На что в данном случае можно поставить bpx для выяснения того, как программа принимает решение о выводе данного сообщения на экран? Какая это защита? Не журите сильно - я пытаюсь разобраться... ![]() |
|
Создано: 25 апреля 2007 16:21 · Личное сообщение · #2 |
|
Создано: 25 апреля 2007 16:49 · Поправил: Dr3d · Личное сообщение · #3 AKazak пишет: эмалированного жжош! А вообще, чтоб не париться с бряками, делай так: 1. грузишь прогу в оллю, запускаешь её и доходишь до окна об ошибке (окно не закрывай!) 2. возвращаешься в олю, жмешь F12 и Alt+F9 и тут есть два пути: 3.1. Либо ты можешь вернуться к окну с ошибкой, тогда жми ОК и останавливаешься после вызова функции MessageBox (в этом случае все) 3.2. Либо окажешься в цикле обработки сообщений. В это случае нужно трассировать прогу по F8 пока не будешь "ходить по кругу" (небольшой цикл, строк 20) В этом случае нужно поставит бряку строчкой ниже этого цикла, нажать F9, далее нажать OK в окне об ошибке и окажешься на бряке. После чего жмешь Ctrl+F9 и анализируешь код. Сложновато, но способ оч хороший, не надо искать строки в программе, ставить множество бряков на разные функции.. ![]() |
|
Создано: 25 апреля 2007 17:36 · Личное сообщение · #4 Veliant Когда ставлю Memory Breakpoint on Acces на строку CODE:00017D09 db 54h ; T Внешне в Ollydbg это никак не проявляется, а после запуска программы bpx не срабатывает... ![]() Dr3d На шаге 2 происходит следующее: Нажимаю F12 и Alt+F9 и жду OK и программа завершает свою работу и выделение в коде останавливается на RETN... ![]() |
|
Создано: 25 апреля 2007 17:40 · Личное сообщение · #5 |
|
Создано: 25 апреля 2007 18:17 · Личное сообщение · #6 |
|
Создано: 25 апреля 2007 18:46 · Личное сообщение · #7 AKazak, Delphi не юзает мессаджбокс...=) а для того, чтоб отучить от цд, ставь бряку на GetDriveTypeA (W). читай статьи, которые обитают здксь. это раз. два. если хочешь споймать окно, ставь бряку на, точно не помню, DestroyWindow...+) три. юзай не bpx а bp... четыре...прожку в студию, мы не телепаты. вот.+) ![]() |
|
Создано: 25 апреля 2007 19:11 · Личное сообщение · #8 |
|
Создано: 25 апреля 2007 20:16 · Личное сообщение · #9 |
|
Создано: 25 апреля 2007 20:43 · Личное сообщение · #10 Dr3d Какая утиль это сказала? Когда я сканил этот файл с помощью сканеров, я ничего не нашел... Прочитал статью: subscribe.ru/archive/industry.comp.pcuz/200608/11100553.html и понял, что у меня такая же защита, так как на моем CD две сессии (один мегабайт 6 с нечитаемыми секторами в конце, а на другом расположена сама программа). Поиск информации продолжается... ![]() |
|
Создано: 25 апреля 2007 20:49 · Личное сообщение · #11 |
|
Создано: 25 апреля 2007 20:55 · Личное сообщение · #12 |
|
Создано: 25 апреля 2007 21:14 · Личное сообщение · #13 sniperZ Может быть там и не Xtreme-Protector v1.05, но согласно статье файл был защищен Hexalock. Разбираюсь... ![]() Пока нашел следующее: 00018F61 . FF11 CALL DWORD PTR DS:[ECX] ; Вызов GetDriveTypeA 00018F63 . 83F8 05 CMP EAX,5 ; Проверка носителя: 5 - CD, 3 - HDD 00018F66 . 0F85 04030000 JNZ espancd.00019270 ; Отправляет на повторный вызов GetDriveTypeA для проверки следующего диска 00018F6C > B9 D37C0100 MOV ECX,espancd.<ModuleEntryPoint> ; Это пока неизвестно для чего... 00018F71 . 81C1 F5010000 ADD ECX,1F5 ; Это пока неизвестно для чего... ![]() |
|
Создано: 25 апреля 2007 22:07 · Личное сообщение · #14 |
|
Создано: 25 апреля 2007 22:28 · Личное сообщение · #15 |
|
Создано: 26 апреля 2007 13:02 · Личное сообщение · #16 Дошел до проверки метки CD следующими командами: ... 000192D3 . B8 53425F53 MOV EAX,535F4253 000192D8 . 3B06 CMP EAX,DWORD PTR DS:[ESI] 000192DA . 75 12 JNZ SHORT setup.000192EE 000192DC . B8 70616E69 MOV EAX,696E6170 000192E1 . 3B46 04 CMP EAX,DWORD PTR DS:[ESI+4] 000192E4 . 75 08 JNZ SHORT setup.000192EE ... Проверяется метка CD "SB_Spanish"! Как у вас успехи? ![]() |
|
Создано: 09 июля 2007 11:30 · Личное сообщение · #17 |
|
Создано: 30 июля 2007 12:47 · Личное сообщение · #18 Совершенно согласен с Compiller'ом - все происходящее напоминает гадание на кофейной гуще. Во всяком случае через деде мгновенно нужные окошки найдутся. то что нам нужно имеет имя - деде оч хор с этим справляется(находит в частности имена). А потом можно в Иде посмотреть - перекрестные ссылки выдаются на ура. Хотя там часто используется косвенный вызов функции - в этом случае я запускаю сайс, ставлю бряк на первую команду процедуры и смотрю что у меня лежит на верхушке стэка. Естественно там адрес возврата - по нему и пойдем. Так медленно со скрипом доберемся до кода, который проверяет наличие нашего диска в нашем приводе. Что дальше делать сам знаешь.. Да и вот что. Не настаиваю на своем мнении, но по моему не стоит многого ожидать от бряков на апи-функции в Делфе. Тем более не нужно искать место где опрашивается диск - вряд ли это рядом с защитой. Хотя бывает всякое ![]() |
|
Создано: 24 августа 2007 19:42 · Личное сообщение · #19 посты староваты уже, но все же добавлю. Попал и мне недавно диск СD-RX с защитой Hexalock. Суть защиты - файлы на диске( все или выборочно) лежат в пошифрованном виде, т.е. при их копировании они и останутся покриптованы. Криптуются типа данными с нечитаемых секторов диска. Т.е. при автозапуске диска запускается драйвер(или нет) и ставится глобальный перехват. При запуске любой проги к ней подгружаются длл от этой защиты и проверяют, можно ли этой проге открывать файлы с диска, если можно, то расшифровывают их (ставят перехват через таблицу импорта на многие функи, в том числе на writefile,readfile...работа с буфером обмена), и блокируют затем сохранение и копирование открываемых файлов. А сама прога оболочки диска привязана к диску также, как здесь описывали - проверяет через DeviceIoControl. На этот файл я забил, а вот для возможности скопировать видео файлы и doc - файлы, пришлось наваять прогу . Суть ее - называем ее также, как и программу которой можно открывать файлы на диске, и единственное - после открытия файла ( защита сама его расшифрует) для сохранения или снимаем перехват с WriteFile, либо юзаем этот вызов напрямую (причем GetProcAddress защита тоже перехватывает) и спокойно сохраняем на винте. Вот в принципе и все что хотел сказать. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› На что поставить bpx...? |