Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FestplattenSeriennummer ohne GetVolumeInformation auslesen ? (https://www.delphipraxis.net/16041-festplattenseriennummer-ohne-getvolumeinformation-auslesen.html)

stoxx 9. Feb 2004 14:26


FestplattenSeriennummer ohne GetVolumeInformation auslesen ?
 
Hallo,

ich möchte die Festplatten Seriennummer von einem Laufwerk auslesen.
Aber OHNE zu Hilfenahme der API Funktion GetVolumeInformation.

DA müsste es doch noch einen Weg mit viel Assembler geben oder ?
Leider bin ich da überhaupt nicht fit drin ..
Kennt jemand einen Weg ? Danke !

viele Grüße
stoxx

Chewie 9. Feb 2004 15:02

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Wieso willst du denn den komfortablen Weg über GetVolumeInformation nicht gehen?

chris 9. Feb 2004 15:32

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
hi,

mit DeviceIOControl() (auch API) könnte man es bewerkstelligen, aber das ist nicht ganz unkompliziert.

wieso nimmst du nicht GetVolumeInformation() ?

stoxx 9. Feb 2004 16:24

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von Chewie
Wieso willst du denn den komfortablen Weg über GetVolumeInformation nicht gehen?


naja .. weil das ein Teil meines Lizensierungsverfahrens darstellt. Und den API Aufruf GetVolumeInformation sieht ja gleich jeder, wenn er genauer hinguckt :-)

The-X 9. Feb 2004 17:54

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
wie wär's mit dynamisch laden und den namen des funktionsaufrufs mit XOR verschleiern? *gg*

stoxx 9. Feb 2004 18:41

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von The-X
wie wär's mit dynamisch laden und den namen des funktionsaufrufs mit XOR verschleiern? *gg*


welche Vorteile genau soll Dynamisches Laden bringen ?
Den API Aufruf sieht man doch trotzdem oder ?

The-X 10. Feb 2004 11:39

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Nicht im Import-Table, nur wenn man Software wie Api-Monitor oder ähnliches benutzt!

Mal davon abgesehen, wenn du die Seriennummer einer Festplatte zur Reg-Code-Generierung benutzt darf der User keine andere Festplatte benutzen (z.B. nach Backup & HeadCrash o.ä.) also:

Platte A - Programm installiert und registriert
Backup von Platte A
Platte A -> defekt
Restore auf Platte B
Programm fragt nach Registrierung?

oder warte auf diesen einen Prozessor (von dem ich atm nicht weiss wie er heisst) *gg

neolithos 10. Feb 2004 11:45

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Es gibt eine Möglichkeit die Partitionsnummer-Seriennummer herauszufinden.

Vielleicht reicht die das?

neolithos 10. Feb 2004 12:09

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Übrigens diese Serial ist Tatsächlich an die Partition gebunden.

Und so könnte man sie alternativ auslesen!

Funktioniert nur bei FAT32 und WinNT-Systemen (2k, XP)

Delphi-Quellcode:
  stm := TFileStream.Create('\\.\D:', fmOpenRead or fmShareDenyNone);
  try
    stm.Read(buf, 512);

    lst.Items.Add(Format('Serial: %s', [IntToHex(PCardinal(@buf[$43])^, 8)]));
  finally
    stm.Free;
  end;

Für FAT12, FAT16, NTFAS müssten andere Werte wie 43h eingesetzt werden.

Welches Laufwerk es nun ist kann man auch an dem 2 Byte erkennen. Oder man interpretiert den kompletten Header und Prüft ob eine gültige Kennung in FileSystemName herauskommt.

stoxx 10. Feb 2004 12:12

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von The-X
Nicht im Import-Table, nur wenn man Software wie Api-Monitor oder ähnliches benutzt!

Mal davon abgesehen, wenn du die Seriennummer einer Festplatte zur Reg-Code-Generierung benutzt darf der User keine andere Festplatte benutzen (z.B. nach Backup & HeadCrash o.ä.) also:

Das ist korrekt, dann läuft die Software nicht mehr.
Dann bekommt der User einfach eine neue Lizenz.

a) frage ich noch andere Dinge ab
b) kann er soviele neue Lizenzen (dennoch im Rahmen) haben wie er will, da das programm sowieso nur
eine begrenzte Laufzeit hat. Also sozusagen mit Verfallsdatum.

Kennst Du zufällig eine Soft, die alle Funktions und Prozedurnahmen automatisch etwas kryptisch verschlüsselt aussehen lässt und gleich den ganzen Quelltext bearbeitet ?
Wird sicherlich schwierig, da es ja alle Units durchgehen müsste. hmm

stoxx 10. Feb 2004 12:40

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Hallo Neolithos,

die Idee klang interessant. Nur kommt bei mir da nicht die Festplattennummer, mach ich was falsch ?
habe ganz normales NTFS.
Weiss auch nicht, was Du da machst *g*


Code:
procedure TForm1.Button1Click(Sender: TObject);
var stm : TFileStream;
   buf : array[0..511] of byte;
begin
stm := TFileStream.Create('\\.\C:', fmOpenRead or fmShareDenyNone);
  try
    stm.Read(buf, 512);
    lst.items.add(inttostr(PCardinal(@buf[$43])^));
    lst.Items.Add(Format('Serial: %s', [IntToHex(PCardinal(@buf[$43])^, 8)]));
  finally
    stm.Free;
  end;
end;

neolithos 10. Feb 2004 12:41

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
ich schau mal wie der Hase bei NTFS läuft, kann ein bißchen dauern!

neolithos 10. Feb 2004 12:47

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Nimm mal die Position 48h.

Was mach ich nun:

1. Ich öffne die Festplatte als Binärstrom (so geht es nur NTFS)
2. Ich lese den ersten Sector.
3. Ich caste die Position an der die Festplatten-Serial steht.

Verständlich?

The-X 10. Feb 2004 13:13

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von stoxx
Kennst Du zufällig eine Soft, die alle :shock: Funktions und Prozedurnahmen automatisch etwas kryptisch verschlüsselt aussehen lässt und gleich den ganzen Quelltext bearbeitet ?
Wird sicherlich schwierig, da es ja alle Units durchgehen müsste. hmm

PE-Crypt glaub ich macht sowas, aber nur mit kompilierten .exe

stoxx 10. Feb 2004 13:30

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von neolithos
Nimm mal die Position 48h.

Was mach ich nun:

1. Ich öffne die Festplatte als Binärstrom (so geht es nur NTFS)
2. Ich lese den ersten Sector.
3. Ich caste die Position an der die Festplatten-Serial steht.

Verständlich?


Hallo Neolithos,

was Du da machst, war mir klar. Aber die Position an sich hast Du durch probieren herausgefunden ?
48 bzw die 72 ste Stelle geht bei mir


PCardinal(@buf[72])

was aber total unverständlich ist, dass es nur geht, wenn ich die Buffergröße auf 512 einstelle.
Bei buf : array[0..510] und
stm.Read(buf,511) kommt was ganz anderes, dürfte doch eigentlich nicht sein oder ?
Sollte man eventuell noch die Clustergröße berücksichtigen ?
sicher oder ? Gibt es denn irgendwo Informationen über den Aufbau des erstens Sektors einer Partition ?
vielen Dank Euch beiden !

viele Grüße
stoxx

neolithos 10. Feb 2004 13:49

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von stoxx
was aber total unverständlich ist, dass es nur geht, wenn ich die Buffergröße auf 512 einstelle.
Bei buf : array[0..510] und
stm.Read(buf,511) kommt was ganz anderes, dürfte doch eigentlich nicht sein oder ?

Das steht aber so in der MSDN, man kann auf Festplatten nur in Blöcken die durch 512 teilbar sind zugreifen. (Das kenn ich auch noch von DOS-Zeiten so)

Zitat:

Zitat von stoxx
Sollte man eventuell noch die Clustergröße berücksichtigen ?

Nein, der erste Sektor ist immer 512 Byte groß, das hat nix mit Clustern zu (Cluster ist eine log. Einheit der Partitionen)!

Zitat:

Zitat von stoxx
Gibt es denn irgendwo Informationen über den Aufbau des erstens Sektors einer Partition ?

Zu hauf im Internet...
Stichworte: FAT, NTFS, FileSystem, Operationsystems, Betriebssystem, Partionstabelle

Nich alle auf einmal :mrgreen:

stoxx 10. Feb 2004 14:59

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Zitat:

Zitat von stoxx
Gibt es denn irgendwo Informationen über den Aufbau des erstens Sektors einer Partition ?

Zu hauf im Internet...
Stichworte: FAT, NTFS, FileSystem, Operationsystems, Betriebssystem, Partionstabelle

Nich alle auf einmal :mrgreen:[/quote]


Hi,

die ersten Probleme fangen schon an :-)
jetzt hab ich mal geguckt und nun steht überall, dass in Byte 0 drin stehen soll ob es eine Starbare oder nicht Starbare Partion ist. siehe Link

http://wwwbs.informatik.htw-dresden....g/Seite0A.html

Jetzt hab ich aber mal meinen ersten Sektor von c in eine DAtei abgespeichert und mit einem Hex Editor angesehen.
Nur komischerweise fängt die Datei folgendermaßen an:

EB 52 90 4E 54 46 53 20

da ist nix von hex 00 oder hex 80 ??
wieso das ?

neolithos 10. Feb 2004 22:35

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
Was die da gelesen haben ist der MBR.

Den kann man via '\\.\PHYSICALDRIVE0' lesen! Öffnet einen Bytestrom auf die gesamte Blatte.

Dich Interessiert aber nicht der Aufbau der gesamten Platte, sondern nur der der einzelnen Partition.

http://www.ntfs.com/fat-systems.htm
http://averstak.tripod.com/fatdox/bootsec.htm

Versuch es mal darüber!
Wenn du dich mal in dieses Thema eingelesen kann es ganz interessant werden!

stoxx 10. Feb 2004 23:04

Re: FestplattenSeriennummer ohne GetVolumeInformation ausles
 
feine Links ! Danke !


P.S. was heisstn eigentlich nahe Dresden ?
Wie weit weg von Freiberg ? :-D :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz