PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Festplattenseriennummer auslesen



Tasm-Devil
06.02.2005, 14:56
Also zunächsteinmal möchte ich sagen das egal was man auch macht um ein Programm kopiersicher zu machen, im endeffekt immer gecrackt werden kann.

Darum erwarte ich keine Wunder aber ich möchte zumindest einen kleinen Ansatz haben wie ich mein C++ - Porgramm so absichern kann das es aktiviert werden muss und dann nur auf einem Rechner läuft.

Dazu habe ich mir überlegt die seriennummer der Festplatte auszulesen.

Nur finde ich dazu in Google fast nichts. Nur eine englische seite, dessen codes nich in Dev-C++ oder dem Borland C++ Builder funzen.

Also wenn einer ne Idee hat dann her damit.

P.S. Das ganze bitte für C++.

mcs
06.02.2005, 15:52
geht das nicht über das bios? das bios kann man auslesen, vielleicht steht da auch die nummer drin

mfg mcs

avatar
06.02.2005, 16:49
Das ist ein relativ guter Kopierschutz. Du musst es nur so im Programm verstecken, dass es nicht so leicht gefunden und gepatcht werden kann ;)

WINDOWS Programmierbeispiel C++
// DriveInfo_1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdio.h>
#include <windows.h>

#define INFOBUF_SIZE 256

int main(int argc, char* argv[])
{
char drives[INFOBUF_SIZE];
char volumeName[INFOBUF_SIZE], fileSystem[INFOBUF_SIZE];
unsigned long serialNumber;
GetLogicalDriveStrings(INFOBUF_SIZE, drives);
const char *ptr = drives;
while( *ptr != '\0' ) {
unsigned int driveType = GetDriveType(ptr);
if( driveType != DRIVE_REMOVABLE &&
driveType != DRIVE_CDROM )
{
GetVolumeInformation(ptr, volumeName, INFOBUF_SIZE, &serialNumber, 0, 0,fileSystem, INFOBUF_SIZE);
printf("drive = %s, ", ptr);
printf("volumneName = %s, ", volumeName);
printf("fileSystem = %s", fileSystem);
printf("Serial = %X\n", serialNumber);
}
ptr = strchr(ptr, '\0');
ptr += 1;
}

return 0;
}

DOS Programmierbeispiel in C

#include <dos.h>
#include <stdio.h>

void main(void)
{
typedef struct {
unsigned short info_level;
unsigned long disk_serial_number;
unsigned char volume_label[11];
unsigned char filesystem[8];
}DISK_INFO;

union REGS inregs, outregs;
struct SREGS segregs;
DISK_INFO disk;

inregs.h.ah = 0x69;
inregs.h.al = 0x00;
inregs.h.bl = 0x03; /* Drive C: */
inregs.x.dx = FP_OFF(&disk);
segregs.ds = FP_SEG(&disk);
int86x(0x21, &inregs, &outregs, &segregs);
printf("Serial Number: %lX\n", disk.disk_serial_number);
}

Quelle: http://www.cpe.mut.ac.th/Question.asp?GID=1120

Im DOS-Fenster kannst du auch mit dem Kommando dir /p die Seriennummer der Festplatte abfragen. Das DIR Programm gibt sie gleich ganz oben in der ersten oder zweiten Zeile aus.