![]() |
eXeL@B —› Вопросы новичков —› Вопрос по отучению программы от CD... |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 24 мая 2007 11:12 · Поправил: AKazak · Личное сообщение · #1 Здравствуйте! Есть программа на лицензионном CD. Программа написана на Delphi и привязана к CD. Программа включает в себя 2 исполняемых файла: "setup.exe" и собственно exe самой программы. Оба этих файла, как я уже сказал привязаны к CD. PEiD 0.94 показал, что программа ничем не упакована + она хорошо открывается в IDA. При попытке запуска исполняемых файлов программы с эмулированного / скопированного CD программа выдает что-то типа MessageBox в котором написано "This program cannot run without the original CD in the drive.". Лицензионный CD устроен следующим образом: две сессии (одна мегабайт 6 с нечитаемыми секторами в конце, а на другой расположена сама программа). Все доступные сканеры защит ничего не показали. Анализ кода программы показал, что сначала программа проверяет тот факт, что она запускается действительно с CD, дальше проверяет название драйвера CD привода на названия известных эмуляторов (Virtual CD ...), после этого идет проверка на метку тома CD, а после этого программа обращается к ntdll.dll, которая и начинает некоторое время мусолить CD (судя по шуму движения головки CD привода). Последний процесс (активную работу с CD) а не анализировал... После этого управление передается на OEP, которую также удалось установить с помощью PEiD 0.94 + Generic OEP Finder plugin. В связи с этим у меня возник такой вопрос, есть ли общая методология способа отучивания программы от оригинального CD (чтобы программа запускалась с копии или с эмулированного образа), если оригинальный CD доступен? Если да, то как с ней можно ознакомиться? ![]() |
|
Создано: 24 мая 2007 16:31 · Личное сообщение · #2 |
|
Создано: 24 мая 2007 19:12 · Личное сообщение · #3 Сам не делал, но примерно начал бы так: 1.исследовать программу приотсутсвии CD в приводе 2.найти место, где она выясняет запускается ли она с СD (MessageBox отсюда) 3.найти место, где анализируется диск, если он типа есть 4.осталось найти место, куда программа прыгает после если есть или нету 5.если проверка диска лишь устанавливает какую-то переменную, а потом передает управление всегда в одно и то же место, то выхода 2 (изменить переменную(в памяти), пропатчить (в памяти) саму проверку переменной). 2 ты сделал, 3 тоже, 4 не знаю.. сделай 5ое и всё. Если получится пиши лоадер. А вообще данных ты дал мало и трудно судить. Может оказаться всё и не так просто. ----- radio uno in ibisa ... ![]() |
|
Создано: 24 мая 2007 19:18 · Личное сообщение · #4 Из раздела "статьи" навскидку http://www.exelab.ru/art/?action=view&id=286 http://www.exelab.ru/art/?action=view&id=235 http://www.exelab.ru/art/?action=view&id=99 А в далеком детстве я проделывал такую штуку. Копировал весь СД в какую нибудь папку и устанавливал игру уже не с СД, а из этой папки. Потом игра обращалась уже не к СД-РОМу, а к жесткому. Иногда получалось, иногда нет. ![]() |
|
Создано: 24 мая 2007 21:49 · Личное сообщение · #5 Sturgeon пишет: Копировал весь СД в какую нибудь папку и устанавливал игру уже не с СД, а из этой папки. Потом игра обращалась уже не к СД-РОМу, а к жесткому. Иногда получалось, иногда нет. Странно както защита была реализованна,видать её разработчик о GetDriveTypeA и прочих интересных штуках-таких как определение свободного места на диске и т.д. никогда неслышал ![]() AKazak ты для эмуляции вообще какую прогу использовал ? ----- Что один человек сделал , другой всегда сломать может... ![]() |
|
Создано: 24 мая 2007 22:47 · Личное сообщение · #6 |
|
Создано: 25 мая 2007 02:47 · Личное сообщение · #7 Что сразу приходит на ум.: игра где- то оставляет метку откуда она установлена. + прошёлся бы по известным функциям типа getDriveTypeA, GetVolumeInformation, GetFileAttributeA и т.д. если бы не помогло, начал бы пытаться оттолкнуться от MessageBox'a, ну а дальше не знаю пока. Ещё бы попробывал скопировать диск на RW и попытаться запустить с него ;) ----- Я ещё не волшебник, я только учусь... ![]() |
|
Создано: 25 мая 2007 07:16 · Личное сообщение · #8 AKazak пишет: последнюю версию Alcohol 120% Когда Alcohol не справляется случай печальный ![]() Assass1n пишет: игра где- то оставляет метку откуда она установлена Можно попробовать изменить букву CD на другую и посмотреть будет работать или нет. ----- Что один человек сделал , другой всегда сломать может... ![]() |
|
Создано: 25 мая 2007 07:17 · Личное сообщение · #9 |
|
Создано: 25 мая 2007 07:41 · Личное сообщение · #10 AKazak пишет: В моей программе GetDriveTypeA используется Ну тогда примерно так * Reference To: KERNEL32.GetDriveTypeA | Call dword ptr [xxxxxx] cmp eax, 00000005 je xxxxx ; если cd ;начало обломного кода с последующим выводом MessageBox "This program cannot run without the original CD in the drive." P.S. хотя скорее всего это неединственный тип проверки. ----- Что один человек сделал , другой всегда сломать может... ![]() |
|
Создано: 25 мая 2007 09:41 · Личное сообщение · #11 MACKLIA,Simz,Assass1n Программа приглашается в студию: rapidshare.com/files/27875126/setup.exe.html Ниже представлено то, что мне удалось найти (анализ проводился в OllyDbg): Это GetDriveTypeA 00018FDD > B9 1A000000 MOV ECX,1A
Это проверка на метку тома "SB_Spanish" 0001928D . B8 6C7D0100 MOV EAX,setup.<ModuleEntryPoint>
А вот здесь, программа ныряет в ntdll.dll и дальше делает нечто и после чего либо переходит на OEP: 000A212C либо выдает упомянутый выше MessageBox. 0001939D B9 04000000 MOV ECX,4
Помогите пожалуйста разобраться с тем как происходит проверка и как принимается решение как выполняться... Я не прошу сделать все за меня, просто самому интересно как происходит процесс... ![]() |
|
Создано: 26 мая 2007 17:54 · Поправил: Simz · Личное сообщение · #12 AKazak ака uzbek Почему не всю известную тебе информацию даешь??? Модераторам прошу обратить внимание: Вопрос по отучению программы от CD... На что поставить bpx...? "спящий режим" для отдельной программы - можно ли? имхо не уважительно так делать! ![]() |
|
Создано: 26 мая 2007 19:13 · Поправил: AKazak · Личное сообщение · #13 |
|
Создано: 28 мая 2007 16:08 · Личное сообщение · #14 Вообще странная какая то защита.... ничего особо не нашел: 1.только то что когда она чухает что что-то не так сама себя затирает в памяти нулями 2. нашел один int3 если его занопить то прога не "улетает" в нтдлл 3. нашел место где образуетса мессадж бокс об ошибке 4. в коде есть ещё несколько ЯВНЫХ проверок котрые не испольуются - видно прога раньше палит отсутствие диска и до них уже не доходит Вот и всё, на большеее нет врмени ![]() А эти ветки всё же клоны и в каждой из них есть какая то инфа которой нет в других ветках. По крайней мере если бы всё было бы в одной теме это мне бы пол-часа точно сэкономило. ![]() |
|
Создано: 30 мая 2007 13:31 · Личное сообщение · #15 |
|
Создано: 30 мая 2007 14:18 · Личное сообщение · #16 |
|
Создано: 30 мая 2007 16:49 · Личное сообщение · #17 AKazak пишет: А вот здесь, программа ныряет в ntdll.dll и дальше делает нечто и после чего либо переходит на OEP: 000A212C либо выдает упомянутый выше MessageBox. Ну так в чем проблема! Стоя на OEP дампи и восстанавливай импорт! Иногда встречаются такие навесные защиты которые проверяют диск а потом если все ОК, переходят на OEP... ![]() |
|
Создано: 30 мая 2007 17:16 · Личное сообщение · #18 RSI пишет: Иногда встречаются такие навесные защиты которые проверяют диск а потом если все ОК, переходят на OEP... У меня похоже так и есть... RSI пишет: Ну так в чем проблема! Стоя на OEP дампи и восстанавливай импорт! Запускаю прогу. В PETools делаю FullDump в какой-нибудь файл. Дамп не запускается. Подскажите пожалуйста, где можно почитать информацию по восстановлению импорта? Или подскажите вкратце как это сделать? ![]() |
|
Создано: 30 мая 2007 17:30 · Личное сообщение · #19 после сохранения дампа ( не киляя процесс ) бери ImportReconstructor 1.6 там выбирай свой процесс вбивай свое OEP-ImageBase потом > "IAT AutoSearch" и "GetImports" если после "Show Invalid" ничего плохого нет тогда "FixDump" и указывай на свой дамп!!! А ваще почитай пару статей хотя бы по распаковке UPX и ASpack лучше ищи в rar-статьях там с картинками понятней ![]() ![]() |
|
Создано: 30 мая 2007 17:57 · Личное сообщение · #20 |
|
Создано: 30 мая 2007 18:12 · Личное сообщение · #21 |
|
Создано: 30 мая 2007 18:55 · Личное сообщение · #22 |
|
Создано: 30 мая 2007 22:00 · Личное сообщение · #23 |
|
Создано: 30 мая 2007 22:48 · Личное сообщение · #24 |
|
Создано: 31 мая 2007 08:40 · Поправил: AKazak · Личное сообщение · #25 Итак... Я ознакомился со статьей "Распаковка: от самого простого к чуть более сложному" (http://exelab.ru/art/?action=view&id=206) и ещё раз убедился, что перед тем как трещать в форуме нужно как следует ознакомится с доступной литературой. Это - Отличная статья в которой ясно дана методология распаковки программ. Мне она очень понравилась и автору MozgC [TSRh] мое признание и благодарность!!! Из статьи я четко уяснил, что дамп надо делать когда распакованная программа остановлена на первой своей инструкции, то есть на OEP! Однако моя программа НИЧЕМ не была запакована и у меня в голове родилась следующая мысль: нужно дождаться пока программа проверит CD и остановить её на первой инструкции, то есть на OEP и в этот момент снять полный дамп. Я начал пробовать сделать это... В Ollydbg встал на OEP (000A212C): 000A2127 00 DB 00
и сделал следующее: правая кнопка мыша -> Find references to -> Selected command. В результате я обнаружил что на OEP ссылается только одна команда:
и тут у меня, по аналогии со статьей, возникла идея заменить в исполняемом файле байты "JMP EAX" на байты "JMP EIP" для того, чтобы зациклить программу и не дать ей перейти к OEP, а после этого с помощью PE tools снять дамп. Поскольку я не знаю какие байты отвечают опкоду "JMP EIP", я в Ollydbg выделил строку 000189F3 и нажал пробел. В открывшемся окне заменил "JMP EAX" на "JMP EIP" и когда нажал кнопку Assemble, под полем для ввода появилась надпись красным цветом "Unrecognized operand"... Я понял, что зациклить программу не удастся, а соответственно снять дамп с помощью PETools или LordPE тоже не получиться... Почитав про отладчик OllyDbg я обнаружил что него тоже есть дампер под названием Olly Dump (скачать новую версию Olly Dump 3.00.110 можно отсюда - http://hellspawn.nm.ru/article/olly_dump.zip). http://hellspawn.nm.ru/article/olly_dump.zip). Я его скачал и установил. В OllyDbg включил игнор всех исключений и поставил breakpoint на OEP. Запустил программу и отладчик встал на OEP. После этого сделал следующее: Plugins -> OllyDump -> Dump debugged process. В качестве метода восстановления импорта я использовал Method 1. Сохранил дамп в файл и записал копию с лицензионного CD на котором оригинальный setup.exe подменил дампом. И все заработало отлично!!! ![]() После этого у меня возникли следующие вопросы: 1) почему Ollydbg не дает поменять "JMP EAX" на "JMP EIP"? 2) загрузив прогу в Ollybgd я нашел такую строчку 000A21EE |. B9 20240A00 MOV ECX,setup.000A2420 ; |ASCII "Setup"
Однако, когда открыл View -> Memory то обнаружил, что адрес 000A21EE вообще ни в какую секцию программы не попадает... Как это может быть? Может быть я не там смотрю? 3) Где можно подробно почитать про загрузку любой программы в память и её взаимодействие с ОС? 4) Как можно было бы найти OEP без применения PEId + Generic OEP Plugin? Как Generic OEP Plugin ищет OEP? ![]() |
|
Создано: 31 мая 2007 09:33 · Поправил: crc1 · Личное сообщение · #26 AKazak пишет: 1) почему Ollydbg не дает поменять "JMP EAX" на "JMP EIP"? Потому что Ollydbg с регистром EIP не работает как с остальными регистрами, т.е. вариант PUSH EIP; JMP EIP; MOV [EIP], XXXXXXXX и т.д. не прокатит Что бы зациклить прогу надо использовать JMP сам на себя, опкод EB FE В твоем случае это будет 000189F3 EBFE JMP 000189F3 2. Если в окне кода такую строку нашел, значит и адрес есть, смотри внимательней по всей Memory 3. Гугл 4. Трассировкой с EP. AKazak пишет:Как Generic OEP Plugin ищет OEP? Х.з. спроси у автора плугина З.Ы. AKazak пишет: В качестве метода восстановления импорта я использовал Method 1. А вот это зря. Лучше использовать IMPREC. Скорей всего прога на других компах работать не будет ![]() |
|
Создано: 31 мая 2007 09:58 · Поправил: AKazak · Личное сообщение · #27 crc1 пишет: Лучше использовать IMPREC. Скорей всего прога на других компах работать не будет Проверял - работает! crc1 пишет: 3. Гугл А что в строке поиска писать?... crc1 пишет: Лучше использовать IMPREC. А как мне тогда прогу запустить? Ну вот изменю я байты на "EB FE" и сохраню измененную прогу на жесткий диск. Если я запущу её прямо с жесткого диска, то она выдаст ошибку, так как запущена не с CD. Если я скопирую лицензионный CD на CD-RW и оригинальный файл заменю измененным, то в процессе проверки подлинности диска выкатиться сообщение, о том что диск не подходит (так как прога запускается с RW)... Что же тогда делать? Можно ли снимать дамп и восстанавливать таблицу импорта когда прога остановлена на OEP в Ollydbg? Вообщем сделал я так как: в Olly остановился на OEP. Снял дамп на жесткий диск. Продолжил выполнение программы - она запустилась. Открыл ImpRec, выбрал процесс, в ввел в поле "OEP" значение OEP - Imagebase (в моем случае это A212Ch-10000h=9212C), нажал кнопку Search и Get Imports. Результат - список найденных импортных функций и напротив всех стоит YES. Команда Show Invalid ничего не выделила. После этого я нажал Fix Dump и выбрал файл с дампом. В результате появился новый файл с окончанием "_", который не хочет запускаться (говорит, что не является приложением Win 32)... Проверил точку входа в файле окончанием "_" - ImpRec автоматически исправил её на 9212C... Что делать? Вроде бы ImpRec сработал как надо... ![]() |
|
Создано: 31 мая 2007 11:29 · Личное сообщение · #28 AKazak пишет: А как мне тогда прогу запустить? Мля AKazak пишет:Запустил программу и отладчик встал на OEP А дальше сымай дамп, OEP известно, адрес ИАТ найдешь, размер посчитаешь ну и восстанавливай импорт IMPREC'ом (в Olly Dump "методы1 и 2" не всегда корректно прикручивают импорт это уже обсуждалось, а IMPREC всегда) AKazak пишет:А что в строке поиска писать?... Как спросил так и пиши, вот к примеру www.kolasc.net.ru/cdo/programmes/os/index.html Кароче не жди когда тебе все на блюде принесут ![]() |
|
Создано: 31 мая 2007 11:34 · Поправил: AKazak · Личное сообщение · #29 |
|
Создано: 31 мая 2007 12:25 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос по отучению программы от CD... |
Эта тема закрыта. Ответы больше не принимаются. |