Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Speedhack beim Spiel verhindern
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fingerboarder



Anmeldungsdatum: 09.12.2006
Beiträge: 37

BeitragVerfasst am: 01.05.2008, 21:18    Titel: Speedhack beim Spiel verhindern Antworten mit Zitat

Hallo everyone!!
Bei einem Spiel das ich programmiert habe, geht es darum, in möglichst kurzer zeit objekte hintereinander anzuklicken. Die Spielgeschwindigkeit und die Reaktion wir mithilfe von timer ermittelt. Der score wird dann online gestellt.
vor ein paar tagen hat aber mein kumpel mit so einem Programm namens CheatEngine mein programm gespeedhacked. d.h. das spiel läuft dann langsamer. und das schärfste: die reaktionszeit ist auch viel kleiner und so erreicht der milliarden an punkten.
Nun die eigentliche Frage: wie kann ich das verhindern?


Mfg FBRider
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 01.05.2008, 22:01    Titel: Antworten mit Zitat

gar nicht. es sei dem, du hackst dich selber in die winapi rein. kommt dann nur noch drauf an, wer von beiden stärker ist.

wer cheaten muss ist selber schuld, so meine devise... und baue deswegen selbst lustige cheats in meine spiele rein happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fingerboarder



Anmeldungsdatum: 09.12.2006
Beiträge: 37

BeitragVerfasst am: 01.05.2008, 22:06    Titel: Antworten mit Zitat

hi jojo.
ja das stimmt. aber ich find das nur bei einzelspielern gut.
die anderen spieler kommen sich halt vera....t vor, da der score online ist.
das stört mich halt. vielleicht some art punkbuster basteln
mfg fbrider
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 01.05.2008, 22:07    Titel: Antworten mit Zitat

ich weiß nicht, ob das möglich ist, aber du kannst (falls du das noch nicht macht) versuchen, mit TIMER die wirklich benötigte zeit zu ermitteln. TIMER gibt nämlich die anzahl der sekunden zurück, die seit dem start des systems vergangen sind. und so ein cheatmodul sollte nicht das ganze system ausbremsen...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 01.05.2008, 22:18    Titel: Antworten mit Zitat

lokales cheating lässt sich leider nicht effektiv unterbinden. Der nutzer kann grundsätzlich und potientiell jede lokal gespeicherte information anzeigen und ändern lassen, alles was dessen pc dir zusendet kann gefälscht sein (aimbot zB) und alles was du ihm zusendest und was er sich daraus erschließen kann kann er sich anzeigen lassen (wall/maphacks zB). Einen effektiven schutz dagegen gibt es nicht, du kannst lediglich eine erkennung für bekannte signaturen von programmen, die solche eingriffe vornehmen einbauen, individualentwicklungen wirst du aber nie entdecken oder bekämpfen können.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fingerboarder



Anmeldungsdatum: 09.12.2006
Beiträge: 37

BeitragVerfasst am: 01.05.2008, 22:30    Titel: Antworten mit Zitat

@jojo: JA ich benutze bereits timer (siehe erster post). bei cheatengine kann man ka den process auswählen und dann den speed auf zB 0.1 stellen. da ich ja alles mit timer mache, muss also timer gehackt werden.

@misterD: dann kann ich ja gleich nen pb einbauen = zu aufwendig für dieses kleine prog.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 01.05.2008, 23:44    Titel: Antworten mit Zitat

selbst der gibt dir wie bereits gesagt keinen echten schutz..
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 02.05.2008, 17:25    Titel: Antworten mit Zitat

[vermutung]Das ist einfach ein ramcheat, also der bearbeitet den speicherbereich deines programms. Die Funktion Timer an sich muss dabei gar nicht verändert werden, sondern nur die Variable, in der dann was gespeichert wird. So ein programm muss dann nur noch die Variablen suchen, die innerhalb von einer Sekunde um 1 erhöht werden (ist bei double variablen komplizierter aber auch nicht unbedingt schwer).
Man könnte jetzt von dem Wert jeder Variable, die mit der Zeitrechnung zu tun hat, nen hash wert erstellen, der dann bei zugriff auf die Variable geprüft wird. Sobald da ein Unterschied ist, wurde gecheatet. Nachteil: Variablenzugriffe dauern länger, da immer geprüft werden muss.

Ich würde das dann z.B. so machen:

Code:

#macro _type_(_datentyp_)
   Type t_##_datentyp_
      'Private:
         variable As _datentyp_
         hash As _datentyp_
         
         Declare Function create_hash() As _datentyp_
         
      
      Public:
         Declare property wert(_wert_ as _datentyp_)
         Declare property wert as _datentyp_
         
         Declare Constructor ()
   end type
   
   Constructor t_##_datentyp_##
      this.hash = create_hash()
   End Constructor
   
   Function t_##_datentyp_##.create_hash() As _datentyp_
      Dim As Byte Ptr pvar, phash
      Dim As _datentyp_ temp
      
      'If len(this.variable) = 0 Then Print "...." : Return ""
      temp = this.variable
      
      #if _datentyp_ = String
         pvar = cast(byte ptr, strptr(this.variable))
         If pvar = 0 Then Return ""
         phash = cast(byte ptr, strptr(temp))
      #else
         pvar = cast(byte ptr, @this.variable)
         phash = cast(byte ptr, @temp)
      #endif
      
      phash[0] = pvar[0] xor 255
      
      For i As Integer = 1 to Len(this.variable) - 1
         phash[i] = (pvar[i] Xor 255) Xor phash[i-1]
      Next i
            
      Return temp
   End Function
   
   Property t_##_datentyp_##.wert(_wert_ As _datentyp_)
      If this.hash <> create_hash() Then Print "Cheater!": End
      this.variable = _wert_
      this.hash = this.create_hash
   End Property
   
   Property t_##_datentyp_##.wert as _datentyp_
      If this.hash <> create_hash() Then Print "Cheater!": End
      Return this.variable
   End Property

   
#endmacro

#macro _dim_(_name_, _datentyp_)
   #ifndef t_##_datentyp_
      _type_(_datentyp_)
   #endif
   Dim var_##_name_ As t_##_datentyp_
   #define _name_ var_##_name_.wert
#endmacro

_dim_(test, string)
_dim_(muh, integer)

muh = 3
test = "hallo"
Print test
test = "..."
Print test

'zur simulation eins von beiden auskommentieren:
' var_test.variable = "asddd"
' var_muh.variable = 4
'

test = "2"
Print muh


Ja, das is kein richtiger Hash. Soll nur darstellen, wie das machbar wäre. Ob es schutz bietet kann ich dir auch nicht sagen, aber eigentlich sollte das gegen ramcheat helfen.
[/vermutung]
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.05.2008, 18:38    Titel: Antworten mit Zitat

Michael712, das glaub ich eher kaum. den systemtimer kann man sehr einfach verändern, was z.B. das capture-programm kkapture beweist. dabei werden die ganzen systeminternen befehle für die gestartete demo umgeleitet, sodass die demo auch brav wartet, bis das bild fertig gecaptured wurde.
Aber ich gehe jetzt nicht ins detail, wenn ihr mehr dazu erfahren wollt, schaut euch das Seminar von Ryg auf der BP08 an (ich hab's live gesehen Zunge rausstrecken).
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 02.05.2008, 22:50    Titel: Antworten mit Zitat

naja, wie gesagt, es war nur eine vermutung.
und mein code sollte gegen programme, die den ram verändern, helfen zwinkern
aber man kann IMHO den speedhack auch umgehen. Man muss sich nur ne routine coden, die timer ersetzt grinsen
Hätte ich jetzt windows und das cheat programm, dann würde ich mal 5min was versuchen...
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.05.2008, 23:04    Titel: Antworten mit Zitat

naja, wenn man das ganz oldschool mit for...next löst (muss vorher kalibriert werden, ist aber trotzdem noch ungenau!), könnte man diese speedhacks eventuell verhindern.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 02.05.2008, 23:18    Titel: Antworten mit Zitat

Du könntest das eventuell auf mit einer hörteren Lösung versuchen. Hierbei ist es nicht so einfach zu manipulieren. Jedcohmusst du sehr viele berechnungen im Spiel durchführen, um zu verhinden, das man Timing-Manipulationen vornimmt. (Verhindern kann man das wohl nie ganz, allerdings sehrwohl erschweren)


grundlage ist ein Getimter Spielablauf, desen Zeitabstand sich aus dem standard-Timerwert und dem CPU MIPS Count zusammensetzt. Diese beiden Werte kannst du so miteinader verrechnen, und über eine 2te Variable umrechnen, das du daraus die zeit beziehst. Dadurch reicht es nicht aus, nur den Timer zu ändenr, sondern auch den Wert der CPU Clocks. bzw das Ergebniss.


Um die CPU Clocks zu ermitteln, kannst du folgenden Code nutzen:

[C-DLL]
Code:
#include "dll.h"

void _stdcall cpuspeed(ULARGE_INTEGER *tsc)
{
   ULARGE_INTEGER r_bef_tsc;
   ULARGE_INTEGER r_aft_tsc;
   LARGE_INTEGER t_bef_tsc;
   LARGE_INTEGER t_aft_tsc;
   LARGE_INTEGER t_freq_tsc;
   QueryPerformanceFrequency(&t_freq_tsc);
   QueryPerformanceCounter(&t_bef_tsc);
   _asm
   {
      rdtsc
      mov r_bef_tsc.HighPart,edx
      mov r_bef_tsc.LowPart,eax
   }
   Sleep(1000);
   _asm
   {
      rdtsc
      mov r_aft_tsc.HighPart,edx
      mov r_aft_tsc.LowPart,eax
   }
   QueryPerformanceCounter(&t_aft_tsc);
   //t_bef_tsc.QuadPart = t_bef_tsc.QuadPart / t_freq_tsc.QuadPart;
   //t_aft_tsc.QuadPart = t_aft_tsc.QuadPart / t_freq_tsc.QuadPart;
   t_aft_tsc.QuadPart = t_aft_tsc.QuadPart - t_bef_tsc.QuadPart;
   t_aft_tsc.QuadPart = t_aft_tsc.QuadPart - t_freq_tsc.QuadPart;
   t_aft_tsc.QuadPart = (t_aft_tsc.QuadPart / t_freq_tsc.QuadPart) * 100;
   r_aft_tsc.QuadPart = r_aft_tsc.QuadPart - r_bef_tsc.QuadPart;
   r_aft_tsc.QuadPart = r_aft_tsc.QuadPart - (r_aft_tsc.QuadPart / t_aft_tsc.QuadPart );
   *tsc = r_aft_tsc;
}

void _stdcall rdtsc_(ULARGE_INTEGER *tsc)
{
   ULARGE_INTEGER t_tsc;
   _asm
   {
      rdtsc
      mov t_tsc.HighPart,edx
      mov t_tsc.LowPart,eax
   }
   *tsc = t_tsc;
}


Das is aus einem meiner alten Kernel, mit dessenhilfe ich ebenfalls ein Timingmodel bzw. einen HighSpeed-Timer bauen wollte / habe).

Die Rückgaben sind die Realen Clockwerte der CPU. Allerdings weis ich nicht, ob das auf Multicore systeme arbeitet, ode überhaupt mit den aktuellen Prozessoren. Das ist schon sooo lange her, das ich dir da auch nicht mehr wirklich helfen kann. Leute, mit mehr ASM erfahrugn auf den neuen maschinen helfen dir aber sicher weiter.

Aufrufen kannste das dann aus VB so:

Code:
Private Type LARGE_INTEGER
    LowPart As Long
    HighPart As Long
End Type
Privatec Declare Sub rdtsc Lib "<NameDerDLL.dll" Alias "rdtsc_" (ByRef tsc As LARGE_INTEGER)

Public Function Get_MIPS_Count() As Currency
On Error Resume Next
Dim TD As LARGE_INTEGER
'Call rdtsc(TD)
'Get_MIPS_Count = int32x32_int64(TD.LowPart, TD.HighPart)
End Function

Public Function int32x32_int64(ByVal lLo As Long, ByVal lHi As Long) As Currency
On Error Resume Next
Dim dLo As Double
Dim dHi As Double
If lLo < 0 Then
    dLo = (2 ^ 32) + lLo
Else: dLo = lLo
End If
If lHi < 0 Then
    dHi = (2 ^ 32) + lHi
Else: dHi = lHi
End If
int32x32_int64 = (dLo + (dHi * (2 ^ 32)))
End Function


Alternativ kann ich dir auch die DLL (für win98se compiliert) geben.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 03.05.2008, 10:12    Titel: Antworten mit Zitat

Meine Idee dazu:
Eine DLL...
Code:
declare function givetimer lib "timer" alias "givetimer" as double
declare function testtimer lib "timer" alias "testtimer" (byval mtime as double) as integer
dim shared as double thash
dim shared as integer rtrmode
thash = timer
if thash = 0 then end
function givetimer as double export
    if thash = 0 then end
    dim as double vtimer = timer
    if vtimer < thash then
        rtrmode + = 1
        if rtrmode = 1 then sleep 500 : function = givetimer else end
    end if
   
    if vtimer = 1 then end
    function = timer
end function

function testtimer (byval mtime as double) as integer export
    if thash = 0 then end
    if mtime > givetimer + 1 or mtime < givetimer - 1 or givetimer < thash then beep : function = -1 else function = 1
end function


Und dann noch ein kleines Testprogramm dazu:

Code:
declare function givetimer lib "timer" alias "givetimer" as double
declare function testtimer lib "timer" alias "testtimer" (byval mtime as double) as integer

OPEN "TIMER.dll" FOR INPUT AS #1
IF LOF(1) < 7000 then print "FEHLER: DLL FAKED!" : SLEEP :END
close #1
DIM AS INTEGER PRGTIMER
do
    PRGTIMER = GIVETIMER
   
    'DER CHEAT:
    'PRGTIMER = 1
   
    IF TESTTIMER(PRGTIMER) = -1 THEN PRINT "CHEATER!":SLEEP:END
    PRINT PRGTIMER
loop until inkey <> ""

_________________
Bis irgendwann... grinsen


Zuletzt bearbeitet von AndT am 03.05.2008, 10:33, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 03.05.2008, 10:17    Titel: Antworten mit Zitat

AndT hat Folgendes geschrieben:
Meine Idee dazu:
Eine DLL...
Code:
...
  IF rtrmode = 1 THEN SLEEP 500 : FUNCTION = givetimer ELSE END
...


geschockt geschockt geschockt

Also .. den Sinn einer DLL hast du scheinbar noch nicht geanz verstande. In einer DLL verwendet man kein "END" das das Parent-Programm beendet. Das ist ein ganz schlechter Programmierstiel! Denn solltest du dir ganz schnell abgewöhnen.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 03.05.2008, 11:14    Titel: Antworten mit Zitat

Nicht ein "END" wird im Normalfall ausgelöst.. auch nicht beim Cheatversuch aber beim versuch die DLL zu hacken.
In meinem Beispiel reicht es eigendlich zwischendurch mal mit testtimer(programmtimer) zu prüfen ob -1 ausgegeben wird. wenn das der fall ist, ist die zeit dann unglütig.
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 03.05.2008, 12:18    Titel: Antworten mit Zitat

Man führt GENERELL kein "END" in DLLs aus! ... DLL's sind Funktions-BIBLIOTEKEN! .. keine Programme! und eine Bibliotek wird nicht "Beendet" sondern "Entladen" .. udn das geschicht mit "DyLibUnload" und nicht mit "END" .. du führt zum beenden von Windows ja auch kein "ThreadExit(ThreadGet(GetDesktopHWND))" aus, sondern ein "ExitWindows"


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stuner



Anmeldungsdatum: 29.06.2006
Beiträge: 45

BeitragVerfasst am: 03.05.2008, 14:26    Titel: Antworten mit Zitat

Back to topic

Das Programm "Cheat Engine" schein nur den "Timer" Befehl zu manipulieren, nicht aber den "Time" Befehl. Um eine Manipulation zumindest mit diesem Programm zu erschweren kann man den "Time" Befehl benutzen (und man braucht dazu nicht einmal eine DLL ... zwinkern )

Code:
Dim Shared As Double startzeit, startzeit2, akt_zeit, akt_zeit2

Declare Function getcheat As Integer
Declare Function gettime As Double

startzeit = timer
startzeit2 = gettime

Do
   If getcheat Then 'Cheat entdeckt      
      Print "Haaaaaalt"
      Sleep
      end
   EndIf
   Sleep 10
Loop

Function getcheat As Integer
   Dim As Double temp1, temp2
   akt_zeit = Timer
   akt_zeit2 = gettime
   
   temp1 = Timer-startzeit 'Timer Zeit
   temp2 = akt_zeit2 - startzeit2 'Time Zeit
   
   If (temp1 - temp2) > 60*60*23 Then '24:00 Überschreitung kompensieren
      Do Until (temp1 - temp2) < 60*60*23
         temp1 -= 60*60*24
      Loop
   EndIf
   
   if ABS(temp1-temp2) > 1 Then Return -1
   Return 0
End Function

Function gettime As Double
   Dim As String temp
   temp = Time 'hh:mm:ss   
   Return Val(Left(temp,2))*60*60+Val(mid(temp,4,2))*60+Val(mid(temp,7,2))
End Function


Edit: Michael712s Änderung übernommen....
_________________
MfG Stuner


Zuletzt bearbeitet von stuner am 05.05.2008, 21:34, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fingerboarder



Anmeldungsdatum: 09.12.2006
Beiträge: 37

BeitragVerfasst am: 04.05.2008, 18:08    Titel: Antworten mit Zitat

Also vielen Dank für die vielen Antworten. Damit werd ich es bestimmt schaffen zumindest die Cheat Engine oder auch andere Programme auszuschalten.

Mfg FBRider
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 05.05.2008, 20:14    Titel: Antworten mit Zitat

Wenn Time davon nicht beeinflusst wird, dann kann man das natürlich benutzen. Ist auf jeden Fall die einfachste Lösung (hab da gar nicht dran gedacht, da ich dachte, dass TIME intern auch Timer benutzt). Ansonsten hätte man auch noch am Anfang zählen können, wieviele durchläuft pro sekunde gemacht werden, und dann mit späteren zählungen verglichen. Das Cheat prog läuft IMHO ja nicht von anfang an.


Achja, mir ist da was unschönes aufgefallen Zunge rausstrecken

Code:
IF temp1 > temp2 + 1 OR temp1 < temp2 - 1 THEN RETURN -1

lässt sich so viel leichter lesen/verstehen:

Code:
IF ABS(temp1-temp2) > 1 THEN RETURN -1

_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 05.05.2008, 20:39    Titel: Antworten mit Zitat

Michael712 hat Folgendes geschrieben:
(hab da gar nicht dran gedacht, da ich dachte, dass TIME intern auch Timer benutzt).

TIME holt sich ja die BIOS/Systemzeit. Ist eigentlich eher seltsam, die zu faken durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz