Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› На что поставить bpx...?
Посл.ответ Сообщение

Ранг: 9.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 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 для выяснения того, как программа принимает решение о выводе данного сообщения на экран?

Какая это защита?

Не журите сильно - я пытаюсь разобраться...



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 25 апреля 2007 16:21
· Личное сообщение · #2

Ставь на всю строку Memory Breakpoint on Acces
AKazak пишет:
эмалированного






Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 25 апреля 2007 16:49 · Поправил: Dr3d
· Личное сообщение · #3

AKazak пишет:
эмалированного

жжош!

А вообще, чтоб не париться с бряками, делай так:
1. грузишь прогу в оллю, запускаешь её и доходишь до окна об ошибке (окно не закрывай!)
2. возвращаешься в олю, жмешь F12 и Alt+F9 и тут есть два пути:
3.1. Либо ты можешь вернуться к окну с ошибкой, тогда жми ОК и останавливаешься после вызова функции MessageBox (в этом случае все)
3.2. Либо окажешься в цикле обработки сообщений. В это случае нужно трассировать прогу по F8 пока не будешь "ходить по кругу" (небольшой цикл, строк 20) В этом случае нужно поставит бряку строчкой ниже этого цикла, нажать F9, далее нажать OK в окне об ошибке и окажешься на бряке. После чего жмешь Ctrl+F9 и анализируешь код.

Сложновато, но способ оч хороший, не надо искать строки в программе, ставить множество бряков на разные функции..



Ранг: 9.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 25 апреля 2007 17:36
· Личное сообщение · #4

Veliant

Когда ставлю Memory Breakpoint on Acces на строку

CODE:00017D09 db 54h ; T

Внешне в Ollydbg это никак не проявляется, а после запуска программы bpx не срабатывает...

Dr3d

На шаге 2 происходит следующее: Нажимаю F12 и Alt+F9 и жду OK и программа завершает свою работу и выделение в коде останавливается на RETN...




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 25 апреля 2007 17:40
· Личное сообщение · #5

AKazak, что за прога? Дай ссыль.




Ранг: 115.8 (ветеран)
Активность: 0.080
Статус: Участник

Создано: 25 апреля 2007 18:17
· Личное сообщение · #6

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

-----
Ни одно доброе дело не должно остаться безнаказанным !!!




Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 25 апреля 2007 18:46
· Личное сообщение · #7

AKazak, Delphi не юзает мессаджбокс...=)
а для того, чтоб отучить от цд, ставь бряку на GetDriveTypeA (W). читай статьи, которые обитают здксь. это раз.
два. если хочешь споймать окно, ставь бряку на, точно не помню, DestroyWindow...+)
три. юзай не bpx а bp...
четыре...прожку в студию, мы не телепаты.
вот.+)



Ранг: 9.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 25 апреля 2007 19:11
· Личное сообщение · #8

Программа приглашается в студию :

rapidshare.com/files/27875126/setup.exe.html

Что скажете?




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 25 апреля 2007 20:16
· Личное сообщение · #9

AKazak, там Xtreme-Protector v1.05 *
Я до такого ещо не дорос...



Ранг: 9.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 25 апреля 2007 20:43
· Личное сообщение · #10

Dr3d

Какая утиль это сказала? Когда я сканил этот файл с помощью сканеров, я ничего не нашел...

Прочитал статью:

subscribe.ru/archive/industry.comp.pcuz/200608/11100553.html

и понял, что у меня такая же защита, так как на моем CD две сессии (один мегабайт 6 с нечитаемыми секторами в конце, а на другом расположена сама программа).

Поиск информации продолжается...




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 25 апреля 2007 20:49
· Личное сообщение · #11

AKazak, приват 0дэй утилита называется PEiD
Если хочешь сам снять защиту, то придется попотеть!



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 25 апреля 2007 20:55
· Личное сообщение · #12

Dr3d пишет:
там Xtreme-Protector v1.05 *

никуя там не икстрим. не верьте пеид....

AKazak, всё как я сказал. bp GetDriveTypeA дальше потрейсь, там туева хуча поверок.
попытайся сам разобраться. не получится я гляну, а щас пока время мало...



Ранг: 9.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 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 ; Это пока неизвестно для чего...



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 25 апреля 2007 22:07
· Личное сообщение · #14

хех, там после проверки на сц-ром юзается DeviceIoControl. можешь бряку на неё сразу лепить...
для чего юзается, я ещё не разбирался...




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 25 апреля 2007 22:28
· Личное сообщение · #15

У мну почему-то ругнулся, что нужны админские права, хотя я под адином сижу...



Ранг: 9.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 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"!

Как у вас успехи?



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 июля 2007 11:30
· Личное сообщение · #17

Глупое предложение - взять прогу и обработать DeDe Delphi Decompiler - иногда очень помогает для анализа.



Ранг: 10.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 июля 2007 12:47
· Личное сообщение · #18

Совершенно согласен с Compiller'ом - все происходящее напоминает гадание на кофейной гуще. Во всяком случае через деде мгновенно нужные окошки найдутся. то что нам нужно имеет имя - деде оч хор с этим справляется(находит в частности имена). А потом можно в Иде посмотреть - перекрестные ссылки выдаются на ура. Хотя там часто используется косвенный вызов функции - в этом случае я запускаю сайс, ставлю бряк на первую команду процедуры и смотрю что у меня лежит на верхушке стэка. Естественно там адрес возврата - по нему и пойдем. Так медленно со скрипом доберемся до кода, который проверяет наличие нашего диска в нашем приводе. Что дальше делать сам знаешь..

Да и вот что. Не настаиваю на своем мнении, но по моему не стоит многого ожидать от бряков на апи-функции в Делфе. Тем более не нужно искать место где опрашивается диск - вряд ли это рядом с защитой. Хотя бывает всякое



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 24 августа 2007 19:42
· Личное сообщение · #19

посты староваты уже, но все же добавлю.
Попал и мне недавно диск СD-RX с защитой Hexalock.
Суть защиты - файлы на диске( все или выборочно) лежат в пошифрованном виде, т.е. при их копировании они и останутся покриптованы. Криптуются типа данными с нечитаемых секторов диска. Т.е. при автозапуске диска запускается драйвер(или нет) и ставится глобальный перехват. При запуске любой проги к ней подгружаются длл от этой защиты и проверяют, можно ли этой проге открывать файлы с диска, если можно, то расшифровывают их (ставят перехват через таблицу импорта на многие функи, в том числе на writefile,readfile...работа с буфером обмена), и блокируют затем сохранение и копирование открываемых файлов. А сама прога оболочки диска привязана к диску также, как здесь описывали - проверяет через DeviceIoControl. На этот файл я забил, а вот для возможности скопировать видео файлы и doc - файлы, пришлось наваять прогу . Суть ее - называем ее также, как и программу которой можно открывать файлы на диске, и единственное - после открытия файла ( защита сама его расшифрует) для сохранения или снимаем перехват с WriteFile, либо юзаем этот вызов напрямую (причем GetProcAddress защита тоже перехватывает) и спокойно сохраняем на винте. Вот в принципе и все что хотел сказать.


 eXeL@B —› Вопросы новичков —› На что поставить bpx...?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати