C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Привязка к машине, как привязать свою прогу к машине...
UA_Freeman
Отправлено: 29.06.2004, 09:34


Дежурный стрелочник

Группа: Участник
Сообщений: 31



Кто-нибудь знает, как привязать свою прогу к определённой машине- по сути вычитать серийный винта или проца или мамки?
Возможно, кто-то знает линк на готовою библиотеку?
Shura
Отправлено: 29.06.2004, 12:10


Дежурный стрелочник

Группа: Участник
Сообщений: 45



полазий по http://wasm.ru там такое должно быть
exp
Отправлено: 29.06.2004, 23:02


Мастер участка

Группа: Участник
Сообщений: 304



Такой вопрос уже был когда-то недавно. Поищи в предыдущих вопросах.
Samual
Отправлено: 03.07.2004, 22:30


Дежурный стрелочник

Группа: Участник
Сообщений: 39



Да вопрос был, но нормальный ответ на него так никто и не дал.
PeroManiak
Отправлено: 04.07.2004, 01:06


Дежурный стрелочник

Группа: Участник
Сообщений: 71



Как определить тактовую частоту — известно:
CODE

double CPUSpeed(void)
 {
   DWORD dwTimerHi, dwTimerLo;
   asm
    {
       DW 0x310F
       mov dwTimerLo, EAX
       mov dwTimerHi, EDX
     }
   Sleep (500);
   asm
    {
       DW 0x310F
       sub EAX, dwTimerLo
       sub EDX, dwTimerHi
       mov dwTimerLo, EAX
       mov dwTimerHi, EDX
    }
   return dwTimerLo/(1000.0*500);
 }

Было выложено на sources.ru
Дело в другом: Запусти ее несколько раз — посмотри на результат.
Как прочитать FCC харда — действительно интересно, но вразумительного я еще ничего не видел.

Отредактировано PeroManiak — 04/07/2004, 02:09
Deem
Отправлено: 05.07.2004, 09:14


Мастер участка

Группа: Участник
Сообщений: 327



Привяжись к номеру кластера exe-файла. Тока юзерам скажи: вот все проги запускайте, а defrag — ни-ни. smile.gif
TiGeR
  Отправлено: 05.07.2004, 21:09


Ученик-кочегар

Группа: Участник
Сообщений: 22



В Delphi вот так узнать сирийник винта я так обычно и делаю smile.gif

function GetSerialNum(D: String): String;
var
SerialNum: PDword;
A, B : Dword;
Buffer : Array [0..255] of Char;
begin
New(SerialNum);
if GetVolumeInformation(PChar(D + ':\'), Buffer, SizeOf(Buffer),
SerialNum, A, B, Nil,0) then
Result := IntToStr(SerialNum^);
Dispose(SerialNum);
end;

на C++ Builder неохота переводить sad.gif
В прицепе тута всё ясно работает функция Windows API GetVolumeInformation cool.gif
PeroManiak
Отправлено: 06.07.2004, 02:32


Дежурный стрелочник

Группа: Участник
Сообщений: 71



QUOTE (Deem @ 05/07/2004, 10:16)
Привяжись к номеру кластера exe-файла. Тока юзерам скажи: вот все проги запускайте, а defrag — ни-ни. smile.gif

Можно, например, сделать exe'шник системным файлом, чтобы он типа зелененьким отображался smile.gif smile.gif, или стал неперещаемым файлом? И как привязать exe'шник к номеру кластера? КОД, Plz.
AVC
Отправлено: 06.07.2004, 08:47


Ветеран

Группа: Модератор
Сообщений: 1583



2TiGeR обратите внимание, что фукция возвращает не серийный номер винта а серийный номер тома, получаемый при форматировании (подделать не очень сложно)
Перевод для C
CODE

int __fastcall GetVolumeSerNum (char disk_letter)
{
AnsiString droot = AnsiString(disk_letter) + ":\\";
char buf[256];
char fsname[64];
unsigned long sernum, clen, fsflg;

if (!GetVolumeInformation(droot.c_str(), buf, sizeof(buf), &sernum, &clen, &fsflg, fsname, sizeof(fsname))) sernum = 0; // error

return sernum;
}


Отредактировано AVC — 06/07/2004, 08:50
Георгий
Отправлено: 06.07.2004, 11:58


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Ключ на usb или lpt
а все остальные способы, на мой взгляд, не серьёзные — как пример можно вспомнить Microsoft и её способ "активации" винды smile.gif
Guest
Отправлено: 06.07.2004, 12:52


Не зарегистрирован







GetVolumeInformation вообще не катит, ведь его подделать вообще легко.
Неужели нет нормального способа вычитать серийник винта?
UA_Freeman
Отправлено: 06.07.2004, 12:58


Дежурный стрелочник

Группа: Участник
Сообщений: 31



QUOTE (Guest @ 06/07/2004, 12:54)
GetVolumeInformation вообще не катит, ведь его подделать вообще легко.
Неужели нет нормального способа вычитать серийник винта?

Это был я
TiGeR
  Отправлено: 06.07.2004, 22:58


Ученик-кочегар

Группа: Участник
Сообщений: 22



А в принчипе да если есть другой способ киньте мне на мыло eminazizov@nm.ru wink.gif
TiGeR
Отправлено: 06.07.2004, 23:09


Ученик-кочегар

Группа: Участник
Сообщений: 22



А если узнать сирийник BIOS :-)

function GetBiosNumber: string;
begin
result := string(pchar(ptr($FEC71)));
end;

UA_Freeman
Отправлено: 07.07.2004, 09:38


Дежурный стрелочник

Группа: Участник
Сообщений: 31



QUOTE
:= string(pchar(ptr($FEC71)));

под NT это гарантированный access violation
Георгий
Отправлено: 07.07.2004, 09:56


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



CODE
function GetBiosNumber: string;
begin
result := string(pchar(ptr($FEC71)));
end;
в NT не работает

Отредактировано Георгий — 07/07/2004, 10:59
Gedeon
Отправлено: 07.07.2004, 12:57


Ветеран

Группа: Модератор
Сообщений: 1742



Собственно вот и там по ссылкам
http://borland.xportal.ru/forum/viewtopic.php?t=10693&
Хлор
Отправлено: 19.08.2004, 05:10


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Доброго времени суток....

Ну про индентификацию винта, есть кусок кода из старой досовской программулины, которая определяет физ. данные винта не зависящие от данных BIOS. Тут серийник определяется тот, который выцарапан на винте smile.gif)). Правда кусок под дос....

union {

int infs[256];

struct
{ int Config;
int Cyls, Rsrv1, Heads, BPT, BPS, SPT;
int Vendor[3]; //Производитель
char Serial[20]; //Серийный номер. 0=нет.
int BufType; //тип буффера
int BufSize; //размер буффера в 512 байтных блоках. 0=нет.
int ECC;
char Revision[8];
char Model[40]; //Номер модели. 0=нет.
int Features; //ЗАрезервировано.
int DwordIO;
int Capabil;
int Rsrv2; //Зарезервировано
int PIO, DMA;
int ExtValid;
//Логические характеристики
int CurrCyls, CurrHeads, CurrSect;
long Capacity; //Колличество секторов
int BlkMode;
long LBACapacity;
int SingleDMA;
int MultiDMA;
int AdvancedPIO;
int MinDMACycle, RecDMACycle, MinPIOCycle, MinIORDYPIOCycle;
} su;

}um;

void init_hd1(void)
{
int BasePort=0x1f0;
long tt,i;

tt = biostime(0,0);
outportb(BasePort+6,0xA0);
outportb(BasePort+7,0xEC);
while((inportb(BasePort+7)&0x80)!=0)
if((biostime(0,0)-tt)>5) break;
for(i=0;i<255;i++)
um.infs[i]=inport(BasePort);
}


Георгий
Отправлено: 19.08.2004, 08:56


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



в том то и проблема, что использовать этот кусок под winNT несколько проблематично
Gedeon
Отправлено: 19.08.2004, 11:50


Ветеран

Группа: Модератор
Сообщений: 1742



М-да, господа, все таки не пойму я этого стремления привязать прогу к тачке? Все таки обьясните зачем? Если она продается кому-либо с кем далее сотрудничаем, привязка, тупо, например к имени компа, мак адресу сетевухи, тому же номеру тома и т.д. Подделать можно, я тока сомневаюсь, что кто-то будет время тратить на это, подделать м. когда знаешь, что подделывать, а так времени потерять немеряно, никого не хочу обижать, но что-то очень я сомневаюсь в написании самостоятельно такого продукта, которого бы было недостаточно на одном компе и на который не жалко бы времени было потратить, чтобы взломать. 1С, те же мелкомягкие как пример невозможности такой привязки, да и не зачем на мой взгляд.
Konstantine
Отправлено: 19.08.2004, 12:04


Мастер участка

Группа: Модератор
Сообщений: 545



привязать ко всему тому к чему несложно: № томов винта, версия Винды, МАК адрес и т.д., но главное не растространять инфу к чему именно сделана привязка. А кто может сам разобраться, то скорее всего ему не будет смысла этого делать (если это не к-нибудь супер-прога)
UA_Freeman
Отправлено: 19.08.2004, 12:20


Дежурный стрелочник

Группа: Участник
Сообщений: 31



QUOTE
очень я сомневаюсь в написании самостоятельно такого продукта, которого бы было недостаточно на одном компе и на который не жалко бы времени было потратить, чтобы взломать

Ну вот не надо не надо, типа, мы все лохи и ничего не умеем, а они все крутые хацкеры и твою прогу поломают в два счёта!
А реально в нашем маленьком городке большой спрос на одну программулину, которая стоит $30-50, ломать её никто просто не возьмётся, но и платить не станут, если её можно будет просто скопировать. А триал обойдёт даже последний ламер, не годится
Konstantine
Отправлено: 19.08.2004, 14:23


Мастер участка

Группа: Модератор
Сообщений: 545



так Я и говорю, сделай кучу простых привязок, а сам кинь слух о самой супер-пупер защите — там попробуют — не получится. все привязки трудно отыскать.

Кстати можно ещё привязать к дате/времени директории Windows и перечню оборудования из реестра.

Ещё советую проверки на привязки писАть в разных местах программы. а не только при загрузке, причём в случае обнаружения несанкционированного копирования выдавать "левую" ошибку (напр. — типа мозгов не хватает), но так чтоб ТЫ узнавал текст этой ошибки (чтоб был ПОХОЖ на системные но не одинаков с ними)

Вернуться в Вопросы программирования в C++Builder