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

 eXeL@B —› Вопросы новичков —› создание nocd для StarCraft
Посл.ответ Сообщение

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

Создано: 14 августа 2006 05:59
· Личное сообщение · #1

Товарищи ! Кто исследовал игру StarCraft ? Как сделать для нее nocd ? Если не трудно, то опишите поподробнее



Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 14 августа 2006 06:34
· Личное сообщение · #2

MINDFLY
Что именно тебя интересует? Если просто закрекать, то создавай тему в запросы на кряк, если нет, то пишиподробно на чем завис

-----
Подписи - ЗЛО! Нужно убирать!




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

Создано: 14 августа 2006 10:09
· Личное сообщение · #3

Помню года два назад находил в нете статью как сделать носд, тогда еще версия стара была вроде 1.08 так там нужно было вего заменить 2 байта в файле storm.dll, а сейчас незнаю надо смотреть...



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

Создано: 16 августа 2006 04:02
· Личное сообщение · #4

крек мне не нужен ! у меня есть ! точнее у меня есть загрузчик ! я хочу понять принцип работы nocd именно для starcraft ,что он там делает(для верси 1.14) ? потому, что,как я понял , там дело не только в GetDriveType.



Ранг: 389.6 (мудрец)
Активность: 0.150
Статус: Участник

Создано: 16 августа 2006 07:31
· Личное сообщение · #5

выложи *.ЕХЕ

-----
TBR




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

Создано: 17 августа 2006 01:08
· Личное сообщение · #6

Выложить *.exe чего именно?????????



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 18 августа 2006 13:53
· Личное сообщение · #7

Я сам новичок, но starcraft под рукой оказался, я сам лоадером загружаю (загружал ).
Как этот лоадер работает понятия не имею, но увидев этот пост решил для интереса попробовать отучить от диска вручную. У меня starcraft оригинал + установленный сверху brood war запатченый до версии 1.10 (последний патч влом скачивать че-то многовато весит).
Короче starcraft сильно хочет файл install.exe (он у меня в каталоге с игрой, точнее оба - и от SC и от BW). Поэтому в реестре к нему должен правильно путь быть прописан, значение "StarCD".

Приступим...

Грузим starcraft.exe в дебагере, открываем окно с api фунцкиями ( search for->names). Находим там getdrivetype, она вызывается в 2-ух местах идем к первому, попадаем сюды:

004668A7 |. FF15 04624E00 |CALL DWORD PTR [<&KERNEL32.GetDriveType>; \GetDriveTypeA
004668AD |. 83F8 05 |CMP EAX,5
004668B0 |. 0F85 83000000 |JNZ starcraf.00466939

SC проверяет все диски по очереди и сравнивает их с Cd-rom ( если не cdrom то прыгает дальше, потом обратно возвращается и подставляет следующий диск). Поэтому пока что это значение (5-cdrom) заменим на жесткий диск (3). Открываем hex редактор, меняем 5 на 3, пробуем запустить игру - нифига. Значит не единственная проверка, возвращаемся в дебаггер. Смотрим че там дальше происходит.
Видим это:

004668C1 |. E8 AC200600 |CALL <JMP.&Storm.#501>
004668C6 |. 8D5424 24 |LEA EDX,DWORD PTR [ESP+24]
004668CA |. 68 04010000 |PUSH 104
004668CF |. 57 |PUSH EDI
004668D0 |. 52 |PUSH EDX
004668D1 |. E8 DE200600 |CALL <JMP.&Storm.#503>
004668D6 |. 8D4424 14 |LEA EAX,DWORD PTR [ESP+14]
004668DA |. 8D4C24 24 |LEA ECX,DWORD PTR [ESP+24]
004668DE |. 50 |PUSH EAX
004668DF |. 6A 03 |PUSH 3
004668E1 |. 68 E8030000 |PUSH 3E8
004668E6 |. 51 |PUSH ECX
004668E7 |. E8 06220600 |CALL <JMP.&Storm.#266>
004668EC |. 85C0 |TEST EAX,EAX
004668EE |. 74 49 |JE SHORT starcraf.00466939

Тут SC 3 раза обращается к storm.dll и чего-то там химичит, потом проверяет eax на 0, и если eax=0 то прыгает дальше (JE SHORT starcraf.00466939) ( там дальше идет цикл и все возвращается снова на getdrivetype, начинется проверка следующего диска). Следовательно игра за окончательной проверкой CD идет в эти самые 3 call'a на storm.dll.
Ладно, идем в storm.dll по первому call'у, честно говоря я там ничего интересного не увидел и не понял че там происходит, поэтому идем по второму call'у. Там похоже как-то обрабатывается (заносится в память) предположительное место нахождения install.exe файла, толком не разобрал, ну да пофиг.
По выходу из этого call'а в стеке видим 2 стринга "StarCD" и "C:\Install.exe". По ходу SC собирается искать сидюк в этом месте.
Идем в последний call (CALL <JMP.&Storm.#266>), и попадаем в очень интересное место, проматываем немного вниз и видим там такие дела:
150198E7 FF15 00820315 CALL DWORD PTR [<&KERNEL32.GetDriveTypeA>; kernel32.GetDriveTypeA
еще чуть ниже:
15019920 FF15 FC810315 CALL DWORD PTR [<&KERNEL32.GetVolumeInfo>; kernel32.GetVolumeInformationA
и еще ниже:
15019957 FF15 F8810315 CALL DWORD PTR [<&KERNEL32.GetDiskFreeSp>; kernel32.GetDiskFreeSpaceA

Короче близардцы тут конкретную проверку устроили. Ну трэйсим этот кусок прецедуры понемногу, естественно на всех проверках заваливаемся по полной( у нас ведь install.exe в корне диска C: даже нету).
Смотрим ниже, после всех проверок идут такие строчки:

150199A8 8BC3 MOV EAX,EBX
150199AA 83E0 01 AND EAX,1
150199AD 896C24 10 MOV DWORD PTR [ESP+10],EBP
150199B1 894424 20 MOV DWORD PTR [ESP+20],EAX
150199B5 74 0B JE SHORT Storm.150199C2
150199B7 85ED TEST EBP,EBP
150199B9 75 07 JNZ SHORT Storm.150199C2
150199BB 6A 0F PUSH 0F
150199BD E9 8A010000 JMP Storm.15019B4C

Тут идет опять проверка eax и если прокатывает то прыгаем дальше (JE SHORT Storm.150199C2) если нет то потом идет безусловный прыг на конец процедуры, ну и опять в итоге на начальный getdrivetype попадаем. Значит нам надо обязательно попробовать сделать этот прыг (JE SHORT Storm.150199C2). Этот прыжок дальше идет к функциям работы с файлом (install.exe открывается и считывается дальше).

Запускаем storm.dll в хекс редакторе,находим это место и меняем JE на JMP (74 на EB).
По идее теперь игра возможно запустится, но потом начнет ругаться и падать из-за ненайденого на диске C: install.exe и нам останется найти в дебагере соответствующее место и сказать SC чтобы он искал install exe не на C: а там где он прописан в реестре.
Но вопреки моим ожиданиям игра не только запустилась, но и не стала ругаться на отсутствие install.exe на C:
Я решил проверить шо происходит, SC теперь вобще перестал проверять наличие диска (даже не доходит до getdrivetype). Видимо он теперь где-то считывает значение StarCD из реестра и сразу же, забив на все проверки запускается. Можно конечно дальше потрейсить и узнать че да как, да время больше тратить не охота, то что нам было нужно - мы добились просто сменив один байт в storm.dll.

Вот и все.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 18 августа 2006 23:22 · Поправил: DillerInc
· Личное сообщение · #8

sliderZ
Неплохо,неплохо...
Видимо в Diablo 2 (тоже Blizzard) помимо навешаного Securom'а такая же проверка используется,т.к. после снятия протектора игра всё равно требует диск(любой диск).Я тогда было начал копать,но,увидев,что концы уходят в библиотеки,подумал,что это будет не совсем корректно патчить ещё и их.Однако это вариант...

-----
the Power of Reversing team




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

Создано: 19 августа 2006 01:11 · Поправил: MINDFLY
· Личное сообщение · #9

Этого то я и ждал !! Вот здорово !!!!! Респект sliderZ !!!! Браво !!! Мои аплодисменты !!!


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


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