PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seriennummer des BIOS auslesen (C)



againsttcpa
03-06-2003, 11:37
Hallo,

wie kann ich die Seriennummer des BIOS auslesen?

Sven

peschmae
03-06-2003, 11:43
hmmm,

das Bios hat eine Seriennummer?

Bist du wirklich gegen TCPA oder arbeitest du gerade an sowas? :p

MfG Peschmä

againsttcpa
03-06-2003, 11:49
Ja, ich bin gegen TCPA und nein ich arbeite nicht gerade an so etwas, und ich benötige einen Tip wie und/oder wo ich die Seriennumer auslesen kann und nicht einen Kommentar.

SeeksTheMoon
03-06-2003, 12:57
wie kann man mit C überhaupt auf das Bios zugreifen?

tuxipuxi
03-06-2003, 12:57
also ich bin fuer freundlichkeit in diesem forum :)

againsttcpa
03-06-2003, 13:37
Original geschrieben von tuxipuxi
also ich bin fuer freundlichkeit in diesem forum :)

Ich wollte nicht unfreundlich sein. :rolleyes: Wenn ich allerdings eine kurze, präzise Frage stelle, dann geschieht dies nicht aus Jux und dollerei, sondern hat wahrscheinlich einen ernsten Hintergrund. Eigentlich habe ich einen Tip erwartet und keine Bemerkung. :mad: witzige Bemerkungen auf ernsthafte Fragen kann ich erst nach Feierabend humorvoll begegnen :D

Sven

BLUESCREEN3D
03-06-2003, 15:58
Original geschrieben von SeeksTheMoon
wie kann man mit C überhaupt auf das Bios zugreifen?

<vermutung>vielleicht mit interrupts?</vermutung>

peschmae
03-06-2003, 16:28
okok, aber ich meine immer noch ne zweizeilige Erklärung wozu wäre angebracht

<vermutung2>der Kernel muss da auch mithelfen</vermutung2>

<vermutung3>hier wirst du wohl kaum die gewünschte Antwort kriegen (ausser anda_skoa weiss es ;) </vermutung3>

MfG Peschmä

tuxipuxi
03-06-2003, 17:53
<vermutung4> anda_skoa ist nicht der hardwarenahe typ und weiss es deswegen nicht :)</vermutung4>

pik7
03-06-2003, 22:05
hallo,

dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
findet alle Strings im bios.



#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>

int main() {

off_t seek=0x000fff59;
int mem_fd;
char buffer[30]={0};
int count;

mem_fd=open("/dev/mem",O_RDWR);

lseek(mem_fd,seek,SEEK_SET);

read(mem_fd,buffer,30);

printf("%s\n" ,buffer);
return 1;
}



zeigt bei mir die Nummer an.
AMI Bios Elitegroup/K7S5A

Ich bezweifle aber das die verschiedenen Bios Hersteller
die Strings alle an die gleiche Speichierstelle im Bios Rom setzen.
Das einzigste worauf man sich zumeist verlassen kann ist
das an 0xFFF0 der Sprungbefehl ins Bios steht(5Byte).
Danach kommen dann noch 11 Byte da steht dann Realease Datum drin
und vieleicht noch die Bios Version.
(aber Ausmahmen bestätigen auch hier die Regel).

gruß

againsttcpa
04-06-2003, 06:04
Die BIOS-Informationen stehen bei jedem BIOS an der selben Stelle.
Ich weiß, daß die BIOS-Seriennummer an der Adresse $FEC71 steht. Wie kann ich darauf zugreifen?

Ich verwende den Borland C-Compiler 5.5. Ich finde die Datei unistd.h nicht. Könnte man das obige Beispiel auch anders schreiben?

Sven

peschmae
04-06-2003, 10:59
steht das zeugs eigentlich nirgends in /proc ??

MfG Peschmä

arthur
04-06-2003, 11:58
das von pik7 gezeigte programm ist nur für linux,
und ist so nicht auf windows portierbar.
der weg wäre dort aber ähnlich, das bios wird irgendwo ins speicher gemappt,
du müsstest nur die adresse haben, und dann einfach das zeug auslesen.

wenn ich fragen darf, wofür brauchst du die seriennummer des bios ?

gruss
Arthur

againsttcpa
04-06-2003, 12:30
Durch Googeln bin ich dahintergekommen, daß unistd.h etwas mit dem POSIX-Standard zu hat. Für Windows habe ich schon entsprechende Funktionen. Ich hatte nur gehofft es wäre möglich für Windows/Linux denselben oder ähnlichen Code verwenden zu können.

Ich schreibe Software für die Baubranche, da wären CAD, AVA usw., die Grundversionen sind jeweils Freeware, die speziell für die Architekten und Ingenieure vorhandene Version(en) werden ein geringes Entgeld kosten.
Da die BIOS-Seriennummern einmalig sind, wollte ich diese für Freischaltungszwecke der kostenpflichtigen Versionen verwenden.

Sven

arthur
04-06-2003, 13:37
ich würde mich da eher an die mac-adresse halten, so machen es die "grossen".
ist genauso eindeutig wie die serial nummer und kommst leichter/sicherer ran.

gruss
Arthur

ps.
ich würde mir nicht zuviel aufwand damit machen, hab noch nichts gesehen was 100% schutz
bringen würde.

againsttcpa
04-06-2003, 13:48
Ach, und wenn keine Netzwerkkarte vorhanden ist :confused:


Original geschrieben von arthur

ich würde mir nicht zuviel aufwand damit machen, hab noch nichts gesehen was 100% schutz
bringen würde.

Das möchte ich dann später von Profi's :D testen lassen. Ich habe da von einem Hacker eine ziemlich gute Anleitung wie man was machen sollte. Er bietet sich dann auch an zu testen. Vielleicht finden sich da noch ein paar mehr Profi's ;)

Am wichtigsten ist mir auch der Schutz vor den Möchtegerncrackern/hackern.

Sven

peschmae
04-06-2003, 14:13
... die mac kann man übrigens fälschen

MfG Peschmä

arthur
04-06-2003, 14:16
ich kenn mich mit der materie etwas aus, und ich kann dir sagen das die serial nummer allein nicht ausreicht.
der weg ist es, teile deines programms verschlüsselt zu halten und erst nach dem start bzw.
während der laufzeit zu entschlüsseln.
hier könntest du deine nummer als schlüssel benutzen.
das ganze wäre aber ziemlich aufwendig.

gruss
Arthur

ps.
solltest du mal was haben, ich stelle mich auch freiwillig als tester ;)

arthur
04-06-2003, 14:17
Original geschrieben von peschmae
... die mac kann man übrigens fälschen

MfG Peschmä
man kann alles fälschen ;)

againsttcpa
04-06-2003, 14:22
Original geschrieben von arthur
ich kenn mich mit der materie etwas aus, und ich kann dir sagen das die serial nummer allein nicht ausreicht.
der weg ist es, teile deines programms verschlüsselt zu halten und erst nach dem start bzw.
während der laufzeit zu entschlüsseln.
hier könntest du deine nummer als schlüssel benutzen.
das ganze wäre aber ziemlich aufwendig.

gruss
Arthur

ps.
solltest du mal was haben, ich stelle mich auch freiwillig als tester ;)

F A L S C H !!!
Ich habe nicht im mindesten vor mein Programm zu verschlüsseln und dann während der Laufzeit zu entschlüsseln. Auch nicht nur Teile. Wie das ganze abläuft werde ich hier nicht verraten. Schick mir bitte eine eMail, damit ich Dich in die Liste der Tester :D :D aufnehmen kann. Sobald ich soweit bin, lasse ich dich das dann wissen und schicke Dir eine Version zu. Ok?

Sven

P.S.: Ist mir gerade eingefallen., Ich schreib ein kleines CrackMe. Geht dann etwas schneller und Du kannst Deine Künste:D daran probieren.

tuxipuxi
04-06-2003, 16:36
verstehe ich das richtig dass du wissen willst ob man das auf linux portieren kann und du es mit dem borland c compiler fuer windows ausprobierst, der scheinbar nichtmal die gaengigen headerdateien findet :confused:

againsttcpa
04-06-2003, 16:57
Original geschrieben von pik7
hallo,


#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>

int main() {

off_t seek=0x000fff59;
int mem_fd;
char buffer[30]={0};
int count;

mem_fd=open("/dev/mem",O_RDWR);

lseek(mem_fd,seek,SEEK_SET);

read(mem_fd,buffer,30);

printf("%s\n" ,buffer);
return 1;
}




Hiermit gibt es Schwierigkeiten, da dies nur mit Root-Rechten funktioniert. Ich kann nicht davon ausgehen, daß das Programm vom Root ausgeführt wird.

Und nun?

pik7
04-06-2003, 17:38
Ich weiß, daß die BIOS-Seriennummer an der Adresse $FEC71 steht. Wie kann ich darauf zugreifen?


Glaub ich nicht!
Wo kann ich das nachlesen?



Und nun?


Und was?
Das problem kann man lösen indem man z.b als root
startet und dann auf einen normalen User runterschaltet.
setuid() und Freunde.

gruß

tuxipuxi
04-06-2003, 17:44
und hier gibt es das problem, dass es quatsch ausgibt:


[tuxipuxi@localhost test]$ ./a.out

[tuxipuxi@localhost test]$ su
Password:
[root@localhost test]# ./a.out

pik7
04-06-2003, 18:11
und hier gibt es das problem, dass es quatsch ausgibt:


dann bau mal überall Fehlerbehandlung ein.



If((mem_fd=open("/dev/mem",O_RDWR)==-1) {
peeror("Fehler open");
}
usw.


und man mem

quinte17
10-06-2003, 13:11
ich weiß ja nicht wie du dir dass vorstellst über eine BIOS-seriennummer einen key herauszugeben... aber was ist nun wenn einer ein update macht, weil dann erst seine was weiß ich was richtig funzt??? ändert sich da nicht auch die seriennummer des BIOS??

ist nur eine vermutung...
wenns schmarrn ist, dann bitte ich diesen beitrag zu ignorieren...


mfg
cya

tuxipuxi
10-06-2003, 13:59
hi,

weiss ja nicht was fuer updates du meinst, die bios seriennummer waere aber soweit ich es weiss auf dem bioschip selbst, und den tauschst du im regelfall nur zusammen mit dem board.

gruss,

tuxipuxi.