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

 eXeL@B —› Вопросы новичков —› Как заставить switch всегда возвращать один и тот же результат?
Посл.ответ Сообщение

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

Создано: 19 октября 2006 15:43
· Личное сообщение · #1

Нам в школе выдали новый годовой пакет учебников от томского университета (ТУСУР) - пытаются воспитать программистов Вместе с красивой коробочкой, там лежал диск с "учебниками по визуальному программированию", из которого положено получать "знания" по Делфи и присылать свои работы..
Так вот, мне остался последний шаг, чтобы прислать им патч для пакета учебников с этого диска..
С-сно инсталлер мне с диалапа не выложить, да и там нет ничего интересного. Поковырялся, посмотрел:
1 рег. инфа ХРАНИТСЯ В ОТКРЫТОМ ВИДЕ В РЕЕСТРЕ - любой, введенный мной, пароль оказывался там (тут у них мегазащита - заныкали оочень глубоко в реестр :s1
2 пакер был.., его я уже снял
3 изучение исполняемого файла ничего не дало - мегазащита подразумевает хранение кода защиты в длл, лежащей рядом с файлом
4 поковырял длл, нашел несколько ф-ций защиты
5 две уже отцепил, теперь прога кидает ошибку на тему "кривой ключ" - рулез никакого ключа введено не было
И вот сейчас я запнулся на довольно простом фрагменте кода, смысл его следующий:
switch результат_проверки_на_ошибки_и_регистрации
case много разных ошибок
else нормально работаем
Извините за глупый вопрос, но я правда не знаю как это подправить
100064E2 . 48 DEC EAX
100064E3 . 83F8 06 CMP EAX,6
100064E6 . 0F87 6A010000 JA HtmlBook.10006656
100064EC . FF2485 3468001>JMP DWORD PTR DS:[EAX*4+10006834]
100064F3 > 68 E4070110 PUSH HtmlBook.100107E4
100064F8 . 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
100064FB . 50 PUSH EAX
100064FC . 8D8D A0FBFFFF LEA ECX,DWORD PTR SS:[EBP-460]
10006502 . 51 PUSH ECX
10006503 . E8 08FEFFFF CALL HtmlBook.10006310
10006508 . 83C4 0C ADD ESP,0C
1000650B . 6A FF PUSH -1
1000650D . 53 PUSH EBX
1000650E . 50 PUSH EAX
1000650F . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
10006512 . C645 FC 06 MOV BYTE PTR SS:[EBP-4],6
10006516 . E8 F5DAFFFF CALL HtmlBook.10004010
1000651B . 8D8D A0FBFFFF LEA ECX,DWORD PTR SS:[EBP-460]
10006521 . E9 27010000 JMP HtmlBook.1000664D
10006526 > 68 C8070110 PUSH HtmlBook.100107C8
1000652B . 8D55 B4 LEA EDX,DWORD PTR SS:[EBP-4C]
1000652E . 52 PUSH EDX
1000652F . 8D85 F8FAFFFF LEA EAX,DWORD PTR SS:[EBP-508]
10006535 . 50 PUSH EAX
10006536 . E8 D5FDFFFF CALL HtmlBook.10006310
1000653B . 83C4 0C ADD ESP,0C
1000653E . 6A FF PUSH -1
10006540 . 53 PUSH EBX
10006541 . 50 PUSH EAX
10006542 . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
10006545 . C645 FC 07 MOV BYTE PTR SS:[EBP-4],7
10006549 . E8 C2DAFFFF CALL HtmlBook.10004010
1000654E . 8D8D F8FAFFFF LEA ECX,DWORD PTR SS:[EBP-508]
10006554 . E9 F4000000 JMP HtmlBook.1000664D
10006559 > 68 A8070110 PUSH HtmlBook.100107A8
1000655E . 8D4D B4 LEA ECX,DWORD PTR SS:[EBP-4C]
10006561 . 51 PUSH ECX
10006562 . 8D95 14FBFFFF LEA EDX,DWORD PTR SS:[EBP-4EC]
10006568 . 52 PUSH EDX
10006569 . E8 A2FDFFFF CALL HtmlBook.10006310
1000656E . 83C4 0C ADD ESP,0C
10006571 . 6A FF PUSH -1
10006573 . 53 PUSH EBX
10006574 . 50 PUSH EAX
10006575 . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
10006578 . C645 FC 08 MOV BYTE PTR SS:[EBP-4],8
1000657C . E8 8FDAFFFF CALL HtmlBook.10004010
10006581 . 8D8D 14FBFFFF LEA ECX,DWORD PTR SS:[EBP-4EC]
10006587 . E9 C1000000 JMP HtmlBook.1000664D
1000658C > 68 8C070110 PUSH HtmlBook.1001078C
10006591 . 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
10006594 . 50 PUSH EAX
10006595 . 8D8D 4CFBFFFF LEA ECX,DWORD PTR SS:[EBP-4B4]
1000659B . 51 PUSH ECX
1000659C . E8 6FFDFFFF CALL HtmlBook.10006310
100065A1 . 83C4 0C ADD ESP,0C
100065A4 . 6A FF PUSH -1
100065A6 . 53 PUSH EBX
100065A7 . 50 PUSH EAX
100065A8 . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
100065AB . C645 FC 09 MOV BYTE PTR SS:[EBP-4],9
100065AF . E8 5CDAFFFF CALL HtmlBook.10004010
100065B4 . 8D8D 4CFBFFFF LEA ECX,DWORD PTR SS:[EBP-4B4]
100065BA . E9 8E000000 JMP HtmlBook.1000664D
100065BF > 68 6C070110 PUSH HtmlBook.1001076C
100065C4 . 8D55 B4 LEA EDX,DWORD PTR SS:[EBP-4C]
100065C7 . 52 PUSH EDX
100065C8 . 8D85 84FBFFFF LEA EAX,DWORD PTR SS:[EBP-47C]
100065CE . 50 PUSH EAX
100065CF . E8 3CFDFFFF CALL HtmlBook.10006310
100065D4 . 83C4 0C ADD ESP,0C
100065D7 . 6A FF PUSH -1
100065D9 . 53 PUSH EBX
100065DA . 50 PUSH EAX
100065DB . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
100065DE . C645 FC 0A MOV BYTE PTR SS:[EBP-4],0A
100065E2 . E8 29DAFFFF CALL HtmlBook.10004010
100065E7 . 8D8D 84FBFFFF LEA ECX,DWORD PTR SS:[EBP-47C]
100065ED . EB 5E JMP SHORT HtmlBook.1000664D
100065EF > 68 4C070110 PUSH HtmlBook.1001074C
100065F4 . 8D4D B4 LEA ECX,DWORD PTR SS:[EBP-4C]
100065F7 . 51 PUSH ECX
100065F8 . 8D95 68FBFFFF LEA EDX,DWORD PTR SS:[EBP-498]
100065FE . 52 PUSH EDX
100065FF . E8 0CFDFFFF CALL HtmlBook.10006310
10006604 . 83C4 0C ADD ESP,0C
10006607 . 6A FF PUSH -1
10006609 . 53 PUSH EBX
1000660A . 50 PUSH EAX
1000660B . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
1000660E . C645 FC 0B MOV BYTE PTR SS:[EBP-4],0B
10006612 . E8 F9D9FFFF CALL HtmlBook.10004010
10006617 . 8D8D 68FBFFFF LEA ECX,DWORD PTR SS:[EBP-498]
1000661D . EB 2E JMP SHORT HtmlBook.1000664D
1000661F > 68 2C070110 PUSH HtmlBook.1001072C
10006624 . 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
10006627 . 50 PUSH EAX
10006628 . 8D8D 30FBFFFF LEA ECX,DWORD PTR SS:[EBP-4D0]
1000662E . 51 PUSH ECX
1000662F . E8 DCFCFFFF CALL HtmlBook.10006310
10006634 . 83C4 0C ADD ESP,0C
10006637 . 6A FF PUSH -1
10006639 . 53 PUSH EBX
1000663A . 50 PUSH EAX
1000663B . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
1000663E . C645 FC 0C MOV BYTE PTR SS:[EBP-4],0C
10006642 . E8 C9D9FFFF CALL HtmlBook.10004010
10006647 . 8D8D 30FBFFFF LEA ECX,DWORD PTR SS:[EBP-4D0]
1000664D > C645 FC 05 MOV BYTE PTR SS:[EBP-4],5
10006651 . E8 2ABDFFFF CALL HtmlBook.10002380
10006656 > 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] /// как сделать безусловный переход сюда?
10006659 . 8B55 44 MOV EDX,DWORD PTR SS:[EBP+44]
1000665C . BE 10000000 MOV ESI,10
10006661 . 3BC6 CMP EAX,ESI
10006663 . 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
10006666 . 891A MOV DWORD PTR DS:[EDX],EBX
10006668 . 73 03 JNB SHORT HtmlBook.1000666D
1000666A . 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]

Заранее благодарен, длл в аттаче



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

Создано: 19 октября 2006 21:20
· Личное сообщение · #2

Вариант ELSE идёт по дефаулту и будет последним, достаточно подправить в начале условный переход на безусловный в самый конец



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

Создано: 19 октября 2006 21:43
· Личное сообщение · #3

100064E6 . 0F87 6A010000 JA HtmlBook.10006656 на JMP HtmlBook.10006656 ?



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

Создано: 19 октября 2006 22:51
· Личное сообщение · #4

сори, только что заметил что аттч не прицепился, вот линк:
rapidshare.de/files/37422785/HtmlBook.zip.html (45кб)



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

Создано: 19 октября 2006 22:55
· Личное сообщение · #5

наверное...
смотри ниже, там идет:
10006656 > 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
чуть ниже:
1000665C . BE 10000000 MOV ESI,10
а тут сравнивается EAX с 10:
10006661 . 3BC6 CMP EAX,ESI
и далее у тебя условный переход:
10006668 . 73 03 JNB SHORT HtmlBook.1000666D

а ниже наверное что-то интересное происходит....



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

Создано: 20 октября 2006 02:12
· Личное сообщение · #6

fix200 пишет:
а ниже наверное что-то интересное происходит....

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



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

Создано: 20 октября 2006 05:18
· Личное сообщение · #7

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

e819_20.10.2006_CRACKLAB.rU.tgz - _HtmlBook.zip



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

Создано: 20 октября 2006 05:21
· Личное сообщение · #8

посмотри откуда она из Ехе вызывается, может проблема там решится



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

Создано: 20 октября 2006 09:16
· Личное сообщение · #9

Даа, защита немного сложнее, чем я думал - в exe я проглядел четвертую функцию, они, вроде, полностью связаны.
00404EC3 . 51 PUSH ECX ; |Subkey
00404EC4 . 68 02000080 PUSH 80000002 ; |hKey = HKEY_LOCAL_MACHINE
00404EC9 . C68424 7004000>MOV BYTE PTR SS:[ESP+470],5 ; |
00404ED1 . 897424 28 MOV DWORD PTR SS:[ESP+28],ESI ; |
00404ED5 . FF15 04E04300 CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
00404EDB . 3BC6 CMP EAX,ESI
00404EDD . 75 08 JNZ SHORT _BookBro.00404EE7

...
00403626 . 68 02000080 PUSH 80000002 ; |hKey = HKEY_LOCAL_MACHINE
0040362B . C74424 30 0000>MOV DWORD PTR SS:[ESP+30],0 ; |
00403633 . FF15 04E04300 CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
00403639 . 85C0 TEST EAX,EAX
0040363B . 75 0A JNZ SHORT _BookBro.00403647
0040363D . 8B7424 1C MOV ESI,DWORD PTR SS:[ESP+1C]

...
00404F21 . 68 40F84300 PUSH _BookBro.0043F840 ; |ValueName = "name"
00404F26 . 56 PUSH ESI ; |hKey
00404F27 . C74424 28 C800>MOV DWORD PTR SS:[ESP+28],0C8 ; |
00404F2F . FFD3 CALL EBX ; \RegQueryValueExA

Далее - процедура, очень похожая на библиотечную, и очередной условный переход.
Распакованый exe'шник:
rapidshare.com/files/38455/BookBrowser.zip.html
(сервер почему-то ругается и не дает прикрепить аттач)
Сейчас засяду патчить..



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

Создано: 20 октября 2006 09:33
· Личное сообщение · #10

нашел еще один очень интересный фрагмент - я думал, что раз уж прога просто пишет введенный ключ в реестр, там никаких функций нет.. оказалось..
Видимо, для проверки того, что нарисовать в главном окне (незарегистрированная версия = "замочек"), сюда включили полный код проверки ключа.
начинается с:
00404ED5 . FF15 04E04300 CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA

Попробую сгенерить себе ключ - может что и получится.. (там сильно много вызывается исключений)



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

Создано: 20 октября 2006 10:13 · Поправил: Ice
· Личное сообщение · #11

И очередной облом - там какие-то антиотладочные средства не удается даже потрассировать программу.. Реализованы они в самом коде - ничего сверху на файле не довешано.
Подскажите, пожалуйста, зародышу крекера: где происходит обращение к библиотеке на чтение книги? я уже запутался в этих дебрях кода защиты, перемешанных с функциональным, да еще и с антиотладкой. Там где-то будут и параметры обращения к длл, и, что самое главное, условие открытия книги или файла ошибок, которое передается из блиотеки.



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

Создано: 20 октября 2006 11:28
· Личное сообщение · #12

fix200 пишет:
пошарил эту функцию, так и не понял что за число она должна возвращать, запутанно как-то всё. Немного поправил ее, смотри в аттаче.

Ошибка, которую кидает программа (makeerror) генерируется в этой же библиотеке, чуть ниже.
может, все-таки возможно подправить только ее, в exe'шнике, вроде, нет проверок на тему "что отображать", он просто выводит то, что вернула библиотечная функция
Ice пишет:
они, вроде, полностью связаны.
, а может и нет



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

Создано: 21 октября 2006 07:10
· Личное сообщение · #13

Ok, все, проблема решилась - в моем посте от Окт 20, 2006 20:16:07 был указан последний фрагмент кода, который надо было патчить. Теперь все работает.
fix200 спасибо тебе огромное за помощь.


 eXeL@B —› Вопросы новичков —› Как заставить switch всегда возвращать один и тот же результат?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати