Программа работает только с сд-рома. При переносе на хард выдает сообщение - "Программа должна быть запущена с лицензионного диска". Это понятно. При загрузке в Olly двух вариантов программы, - с сд и с харда, - сразу после открытия в OllyDbg! - обнаруживаются отличия в областях памяти. И в кодах дезассемблера. От типа диска, например, или от типа файловой системы... Естественно, что эти отличия влияют на ход выполнения программы. Их можно бы и пофиксить... Хотелось бы максимально приблизить работу копии к оригиналу. Так вот, вопрос. После открытия двух копий программы в двух окнах Olly - до запуска исполнения, в точке входа! - по адресу 002002С (по дампу области памяти 0020000-002000F) лежат разные байты: 0C (на харде) и 0D (на сд-роме) - см. аттач. Объясните чайнику, каким образом эта разница возникает? Спасибо за внимание.
По адресу 20000h (обычно) лежит структура RTL_USER_PROCESS_PARAMETERS, а по смещению 2Ch соотв-но юникодовская строка CurrentDirectory - вот у тебя первая буква диска и отличается
Благодарю очень-очень... Но откуда эта инфа? Таких (или подобных) моментов много, все не спросишь... За помощь - много-много виртуального пива, за ссылку на инфу - пузырь виртуальной водки ))
Насчет структуры RTL_USER_PROCESS_PARAMETERS и т.п. то это из разряда NtUndoc - можешь погуглить по этому словечку или по названию структур PEB, TEB. Да и здесь на сайте можно качнуть Undocumented Functions for Microsoft Windows NT/2000 и\или KmdKit by Four-F Ну а то, что эта структура в Win XP лежит по адресу 20000h - это просто факт, в других версиях в принципе м.б. и по другому адресу, нужно смотреть по цепочке TEB->PEB->ProcessParameters
Вчера leo писал: Еще раз благодарю, коллега. Однако, проделав эксперимент, я получил странные выводы. При размещении программы на любом локальном диске (у меня были D:, G:... по адресу 0020002С лежит байт 0C, на сд-роме и на виртуальном диске - байт 0D. Ты сказал в #3: И я опять не понимаю: не буква диска здесь играет, а тип диска, не так ли? Кроме того, ты говоришь - Вот я приаттачиваю то, что рамблер выдал на http://usar.pp.ru/download/trash/TEB.inc... Смотрим на CURDIR.handle. Code (Text): CURDIR STRUCT DosPath UNICODE_STRING <> ; 00h Handle PVOID ? ; 04h CURDIR ENDS И не 2Ch, а 4Ch, да? Опять же, я прошу объяснения тому, что очи видят... Сам пока понять не могу... Пока один большой плюс: Code (Text): PEB_BASE equ 07FFDF000h И ведь правда, есть такой блок памяти после загрузки программы... Спасибо, коллега, за хворост для моего костра... Не прощаюсь, жду дальнейших ценных размышлений!
В #4 я уже поправил, что по 2Ch лежит хэндл текущей директории CURDIR.Handle Почему этот хэндл "всегда" равен 0C или 0D не знаю, т.к. по идее он мог бы быть любым. Поэтому более или менее серьезная прога не может полагаться на это различие, а по сему просто забей на это дело Нет, смещение структуры CurrentDirectory в ProcessParameters равно 24h. DosPath это не просто указатель, а 8 байт UNICODE_STRING. Итого смещение Handle будет 24h+8=2Ch Это не плюс, а минус , т.к. это устаревшая инфа - начиная с Win XP адреса TEB и PEB устанавливаются от запуска к запуску случайным образом в пределах нескольких страниц от 07FFDF000h (рандомизация). Olly в карте памяти помечает TEB как "data block of main thread", дампишь эту страничку и по смещению 30h определяешь адрес PEB
Здраствуйте у важаемы крякеры)) Сел изучать "Введение в крекинг с нуля". С граматическими и логическими ошибками в этих урока справляюсь, было все ясно до 14 урока)) Дошло дело до задачек по сложней и тут началось мучение... есть пару моментов которые хотелось уточнить,цитата: ..."На следующей строке происходит сравнение 0A с содержимым [EBX-10], то есть с нулём" - почему с нулем?? регистр ebx и так равен 0000 и если [ebx-10] ....непонятно раз ...."В следующей строке перемещаем в EDX ноль ( mov edx,dword ptr ss:[ebp-10]) " - а где здесь ноль нарисовался??? непонятно два если кому не трудно объясните пожалуйста зарание благодарен с ув DarkMist
Потому что [EBX-10] это не вычитание из содержимого регистра EBX десяти это обращение по адресу содержащемуся в регистре ebx плюс еще смещение на 10 байт от этого адреса.