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

 eXeL@B —› Вопросы новичков —› Вопрос по отучению программы от CD...
. 1 . 2 . >>
Посл.ответ Сообщение

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

Создано: 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 доступен? Если да, то как с ней можно ознакомиться?



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

Создано: 24 мая 2007 16:31
· Личное сообщение · #2

Помогите пожалуйста...




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 24 мая 2007 19:12
· Личное сообщение · #3

Сам не делал, но примерно начал бы так:
1.исследовать программу приотсутсвии CD в приводе
2.найти место, где она выясняет запускается ли она с СD (MessageBox отсюда)
3.найти место, где анализируется диск, если он типа есть
4.осталось найти место, куда программа прыгает после если есть или нету
5.если проверка диска лишь устанавливает какую-то переменную, а потом передает управление всегда в одно и то же место, то выхода 2 (изменить переменную(в памяти), пропатчить (в памяти) саму проверку переменной).

2 ты сделал, 3 тоже, 4 не знаю.. сделай 5ое и всё. Если получится пиши лоадер.
А вообще данных ты дал мало и трудно судить. Может оказаться всё и не так просто.

-----
radio uno in ibisa ...




Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 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
А в далеком детстве я проделывал такую штуку. Копировал весь СД в какую нибудь папку и устанавливал игру уже не с СД, а из этой папки. Потом игра обращалась уже не к СД-РОМу, а к жесткому. Иногда получалось, иногда нет.




Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 24 мая 2007 21:49
· Личное сообщение · #5

Sturgeon пишет:
Копировал весь СД в какую нибудь папку и устанавливал игру уже не с СД, а из этой папки. Потом игра обращалась уже не к СД-РОМу, а к жесткому. Иногда получалось, иногда нет.


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

AKazak ты для эмуляции вообще какую прогу использовал ?

-----
Что один человек сделал , другой всегда сломать может...




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

Создано: 24 мая 2007 22:47
· Личное сообщение · #6

Icelot
С поиском флаговой переменной у меня возникли определенные проблемы...

Sturgeon
Спасибо буду читать и разбираться...

MACKLIA
В моей программе GetDriveTypeA используется. Для эмуляции пробовал использовать DaemonTools и последнюю версию Alcohol 120%.



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

Создано: 25 мая 2007 02:47
· Личное сообщение · #7

Что сразу приходит на ум.:
игра где- то оставляет метку откуда она установлена.
+ прошёлся бы по известным функциям типа getDriveTypeA, GetVolumeInformation, GetFileAttributeA и т.д.
если бы не помогло, начал бы пытаться оттолкнуться от MessageBox'a, ну а дальше не знаю пока.
Ещё бы попробывал скопировать диск на RW и попытаться запустить с него ;)

-----
Я ещё не волшебник, я только учусь...





Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 25 мая 2007 07:16
· Личное сообщение · #8

AKazak пишет:
последнюю версию Alcohol 120%


Когда Alcohol не справляется случай печальный

Assass1n пишет:
игра где- то оставляет метку откуда она установлена

Можно попробовать изменить букву CD на другую и посмотреть будет работать или нет.

-----
Что один человек сделал , другой всегда сломать может...




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

Создано: 25 мая 2007 07:17
· Личное сообщение · #9

Однажды встречал такое что GetDriveTypeA вызывалось через GetProcAddress

очень долго не момг найти.....




Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 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. хотя скорее всего это неединственный тип проверки.

-----
Что один человек сделал , другой всегда сломать может...




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

Создано: 25 мая 2007 09:41
· Личное сообщение · #11

MACKLIA,Simz,Assass1n

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

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

Ниже представлено то, что мне удалось найти (анализ проводился в OllyDbg):

Это GetDriveTypeA

00018FDD > B9 1A000000 MOV ECX,1A
00018FE2 > 51 PUSH ECX
00018FE3 . B9 6C7D0100 MOV ECX,setup.<ModuleEntryPoint>
00018FE8 . 81C1 F5010000 ADD ECX,1F5
00018FEE . 51 PUSH ECX
00018FEF . B9 6C7D0100 MOV ECX,setup.<ModuleEntryPoint>
00018FF4 . 81C1 7E030000 ADD ECX,37E
00018FFA . FF11 CALL DWORD PTR DS:[ECX]
00018FFC . 83F8 05 CMP EAX,5
00018FFF . 0F85 04030000 JNZ setup.00019309
00019005 > B9 6C7D0100 MOV ECX,setup.<ModuleEntryPoint>
0001900A . 81C1 F5010000 ADD ECX,1F5


Это проверка на метку тома "SB_Spanish"

0001928D . B8 6C7D0100 MOV EAX,setup.<ModuleEntryPoint>
00019292 . C680 EE010000 >MOV BYTE PTR DS:[EAX+1EE],1
00019299 . 6A 00 PUSH 0
0001929B . 6A 05 PUSH 5
0001929D . 6A 10 PUSH 10
0001929F . E8 D3EFFFFF CALL setup.00018277
000192A4 . 0BC0 OR EAX,EAX
000192A6 . 75 0C JNZ SHORT setup.000192B4
000192A8 . B8 6C7D0100 MOV EAX,setup.<ModuleEntryPoint>
000192AD . C680 EE010000 >MOV BYTE PTR DS:[EAX+1EE],0
000192B4 > B9 6C7D0100 MOV ECX,setup.<ModuleEntryPoint>
000192B9 . 81C1 D2030000 ADD ECX,3D2
000192BF . 8B31 MOV ESI,DWORD PTR DS:[ECX]
000192C1 . 83BE 20070000 >CMP DWORD PTR DS:[ESI+720],0
000192C8 . 74 06 JE SHORT setup.000192D0
000192CA . 81C6 F8060000 ADD ESI,6F8
000192D0 > 83C6 28 ADD ESI,28
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
000192E6 . 59 POP ECX
000192E7 . B8 01000000 MOV EAX,1
000192EC . EB 5A JMP SHORT setup.00019348


А вот здесь, программа ныряет в ntdll.dll и дальше делает нечто и после чего либо переходит на OEP: 000A212C либо выдает упомянутый выше MessageBox.

0001939D B9 04000000 MOV ECX,4
000193A2 BE 6C7D0100 MOV ESI,setup.<ModuleEntryPoint>
000193A7 8BB6 D2030000 MOV ESI,DWORD PTR DS:[ESI+3D2]
000193AD 81C6 00070000 ADD ESI,700
000193B3 BF 05000000 MOV EDI,5
000193B8 81C7 6C7D0100 ADD EDI,setup.<ModuleEntryPoint>
000193BE F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
000193C0 6A 00 PUSH 0
000193C2 6A 00 PUSH 0
000193C4 68 2C010000 PUSH 12C
000193C9 E8 A9EEFFFF CALL setup.00018277
000193CE B8 6C7D0100 MOV EAX,setup.<ModuleEntryPoint>
000193D3 8BB8 D2030000 MOV EDI,DWORD PTR DS:[EAX+3D2]
000193D9 83C7 0B ADD EDI,0B
000193DC 8B0F MOV ECX,DWORD PTR DS:[EDI]
000193DE 8988 EB000000 MOV DWORD PTR DS:[EAX+EB],ECX
000193E4 83C7 06 ADD EDI,6
000193E7 8B0F MOV ECX,DWORD PTR DS:[EDI]
000193E9 8988 EF000000 MOV DWORD PTR DS:[EAX+EF],ECX
000193EF 61 POPAD
000193F0 B9 03000000 MOV ECX,3
000193F5 B8 6C7D0100 MOV EAX,setup.<ModuleEntryPoint>
000193FA 80B8 EF010000 >CMP BYTE PTR DS:[EAX+1EF],0
00019401 0F84 9C0D0000 JE setup.0001A1A3
00019407 B8 314D4C48 MOV EAX,484C4D31
0001940C E8 1C000000 CALL setup.0001942D


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



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

Создано: 26 мая 2007 17:54 · Поправил: Simz
· Личное сообщение · #12

AKazak ака uzbek Почему не всю известную тебе информацию даешь???

Модераторам прошу обратить внимание:
Вопрос по отучению программы от CD...
На что поставить bpx...?
"спящий режим" для отдельной программы - можно ли?

имхо не уважительно так делать!



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

Создано: 26 мая 2007 19:13 · Поправил: AKazak
· Личное сообщение · #13

Simz

Извините... За что не ручаюсь то и не утверждаю - в приведенных вами ветках только догадки...
И не AKazak aka uzbek, а просто AKazak и никакого отношения к uzbek я не имел и не имею...



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

Создано: 28 мая 2007 16:08
· Личное сообщение · #14

Вообще странная какая то защита....
ничего особо не нашел:
1.только то что когда она чухает что что-то не так сама себя затирает в памяти нулями
2. нашел один int3 если его занопить то прога не "улетает" в нтдлл
3. нашел место где образуетса мессадж бокс об ошибке
4. в коде есть ещё несколько ЯВНЫХ проверок котрые не испольуются - видно прога раньше палит отсутствие диска и до них уже не доходит

Вот и всё, на большеее нет врмени. И какая то странная защита вроде как и не сопротивляется .... и вроде как хз как её раскручивать

А эти ветки всё же клоны и в каждой из них есть какая то инфа которой нет в других ветках. По крайней мере если бы всё было бы в одной теме это мне бы пол-часа точно сэкономило.



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

Создано: 30 мая 2007 13:31
· Личное сообщение · #15

Simz

Напиши пожалуйста, если тебе не сложно, подробности по пунктам 2. и 3. и 4.



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

Создано: 30 мая 2007 14:18
· Личное сообщение · #16

Может быть можно скопировать программу из памяти?



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 30 мая 2007 16:49
· Личное сообщение · #17

AKazak пишет:
А вот здесь, программа ныряет в ntdll.dll и дальше делает нечто и после чего либо переходит на OEP: 000A212C либо выдает упомянутый выше MessageBox.


Ну так в чем проблема! Стоя на OEP дампи и восстанавливай импорт!

Иногда встречаются такие навесные защиты которые проверяют диск а потом если все ОК,
переходят на OEP...



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

Создано: 30 мая 2007 17:16
· Личное сообщение · #18

RSI пишет:
Иногда встречаются такие навесные защиты которые проверяют диск а потом если все ОК,
переходят на OEP...


У меня похоже так и есть...

RSI пишет:
Ну так в чем проблема! Стоя на OEP дампи и восстанавливай импорт!


Запускаю прогу. В PETools делаю FullDump в какой-нибудь файл. Дамп не запускается. Подскажите пожалуйста, где можно почитать информацию по восстановлению импорта? Или подскажите вкратце как это сделать?



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 30 мая 2007 17:30
· Личное сообщение · #19

после сохранения дампа ( не киляя процесс ) бери ImportReconstructor 1.6 там выбирай свой процесс вбивай свое OEP-ImageBase потом > "IAT AutoSearch" и "GetImports" если после "Show Invalid" ничего плохого нет тогда "FixDump" и указывай на свой дамп!!!

А ваще почитай пару статей хотя бы по распаковке UPX и ASpack лучше ищи в rar-статьях там с картинками понятней



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

Создано: 30 мая 2007 17:57
· Личное сообщение · #20

хахаха чо за бред



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

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

Hacker

Это что такое?



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

Создано: 30 мая 2007 18:55
· Личное сообщение · #22

RSI

Когда ввожу OEP, Import Reconstructor выдает Can't find anything good at this OEP!...

Что надо указывать в полях RVA и Size?




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 30 мая 2007 22:00
· Личное сообщение · #23

AKazak

Чё-то я не понял... А почему OEP получилось меньше ImageBase??? У меня ImageBase = 00010000 Ты уверен что ты правильно нашёл OEP?

-----
Research For Food




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

Создано: 30 мая 2007 22:48
· Личное сообщение · #24

daFix
У меня тоже ImageBase = 00010000, EP = 00017D6C а OEP= 000A212C (по данным OEP Generic Plugin из PETools)...

Все-таки мне не понятно - как правильно снять дамп проги из памяти сразу после её запуска в файл и сделать его рабочим?...



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

Создано: 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
000A2128 . 641E0A00 DD setup.000A1E64
000A212C /. 55 PUSH EBP
000A212D |. 8BEC MOV EBP,ESP
000A212F |. 83C4 CC ADD ESP,-34
000A2132 |. 53 PUSH EBX


и сделал следующее: правая кнопка мыша -> Find references to -> Selected command. В результате я обнаружил что на OEP ссылается только одна команда:


000189E1 . BF 6C7D0100 MOV EDI,setup.<ModuleEntryPoint>
000189E6 . B9 FC270000 MOV ECX,27FC
000189EB . FC CLD
000189EC . F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
000189EE . B8 2C210A00 MOV EAX,setup.000A212C
000189F3 . FFE0 JMP EAX


и тут у меня, по аналогии со статьей, возникла идея заменить в исполняемом файле байты "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?



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 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. Скорей всего прога на других компах работать не будет



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

Создано: 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 сработал как надо...



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 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 Кароче не жди когда тебе все на блюде принесут



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

Создано: 31 мая 2007 11:34 · Поправил: AKazak
· Личное сообщение · #29

crc1 пишет:
Кароче не жди когда тебе все на блюде принесут

Большое спасибо!

crc1

Все сделал, только исправленный дамп не запускается (см. конец пред. поста)...



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 31 мая 2007 12:25
· Личное сообщение · #30

Ну у тебя другой запускается


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Вопрос по отучению программы от CD...
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати