Wie kann ich meine Anwendung abschmieren lassen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dz!

@AndyX

erklärung hinzufügen!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hi,

Erstmal Danke an all. Könnt Ihr für diese 'Tricks' mal ein kurzes Beispiel machen?

@Kaeru, AndX: Was bewirkt dz!, !UD2 ?

@Thorium: Bei !std kommt es zum Absturz, wenn das nächste mal eine Stringoperation ausgeführt wird? Also sowas wie zB A.s = B.s + C.s?

@Fluid: Was ist mit der OnError Library gemeint? Kann man damit sowas auslösen?

@Deem2031: Was genau bewirkt denn !SUB Esp, 4?

Ich sollte schon wissen was da passiert. Ich will ja nicht irgend einen Käse einbauen... Ein klitzekleines Beispiel wäre auch super.

Volker
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

SetErrorNumber(fiktiver Fehlercode)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Volker Schmid hat geschrieben:@Kaeru...: Was bewirkt dz!...
dz! bewirkt, dass der leser sich kritisiert fühlt, so ähnlich wie "ts ts ts"...
AndyX soll eine beschreibung für "!UD2" hinzufügen.

...ich war vorhin fast versucht, sein posting zu vermüllen,
weil ein Befehl ohne Beschreibung so nützlich ist wie ein Klo ohne Anus.

@Fluid
auch du brichst dir keinen Zacken aus der Krone, wenn du etwas ausführlicher wirst.

...vielleicht sollten wir die mindestlänge von Postings mal auf 120 Zeichen erhöhen?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kaeru Gaman hat geschrieben:auch du brichst dir keinen Zacken aus der Krone, wenn du etwas ausführlicher wirst.
Joa, hast ja recht bin aber etwas mundfaul gerade. Im Prinzip ist die Verwendung der OnError() Lib eigentlich das beste was man machen kann da man volle Kontrolle über den weiteren Verlauf des Programms nach Auftreten eines Fehlers hat. Normalerweise kann mit den Befehlen OnErrorExit(), OnErrorGosub(), OnErrorGoto() und OnErrorResume() bestimmen was bei einem echten / unerwarteten Fehler passiert.

Mit SetErrorNumber() kann man halt so einen Fehler künstlich herbeiführen:

Code: Alles auswählen

Procedure ErrorHandler()
    MessageRequester("","Error "+Str(GetErrorNumber()))
    End
 EndProcedure

OnErrorGosub(@ErrorHandler())
SetErrorNumber(54)
...vielleicht sollten wir die mindestlänge von Postings mal auf 120 Zeichen erhöhen?
Würd' nicht schaden. Kann aber auch in Spam ausarten. Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hi Fluid Byte,
SetErrorNumber(54)
Damit wird der Fehler aber sofort ausgelöst. Ich will, dass das erst später zum Fehler wird. Das von Deem2031 klingt interessant...

Volker
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Also "!Sub Esp,4" bewirkt, dass der Stack um 4 Byte verschoben wird, praktisch wie ein !PUSH ohne !POP. Zur folge hat das, das sämliche Daten auf dem Stack an einer falschen Stelle stehen. Bei PureBasic dürften davon eigentlich nur lokale Variablen und Rücksprungadressen betroffen sein. Alle lokale Variablen haben also fasche Werte und wenn du aus einer Procedure springst stürzt das Programm mit Sicherheit ab, da die Adresse falsch ist. Es kann aber natürlich auch passieren das die Adresse die er da ausliest zufällig gültig ist und er willkürlichen Code ausführt, was natürlich unvorhersehbare Aktionen durchführt. Eventuell könnte man die Stackadresse auch gezielt so verschieben das beim Rücksprung eine bestimmte Position ausgeführt wird, die das Programm dann zum absturz bringt.

"!UD2" ist ein Befehl, der nur dazu da ist eine Exception zu werfen, das Programm wird also auch dabei sofort abstürzen.

[EDIT]

Code: Alles auswählen

Procedure Error()
  MessageRequester("","")
  ;!UD2
EndProcedure

Procedure Check()
  Protected ErrorHandler ;Muss als !erste! lokale Variable definiert werden
  ErrorHandler = @Error()
  If #True
    !SUB Esp, 4
  EndIf
EndProcedure

Check()
Wie man sieht wird Error() eigentlich nie aufgerufen, durch die Veränderung von ESP (dem StackPointer) wird die Procedure aber beim Rücksprung aus Check ausgeführt.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Volker Schmid hat geschrieben: @Thorium: Bei !std kommt es zum Absturz, wenn das nächste mal eine Stringoperation ausgeführt wird? Also sowas wie zB A.s = B.s + C.s?
Naja nicht unbedingt in Zusammenhang mit Zeichenketten, auch mit Daten. Hab das grad mal getestet und die PureBasic-Prozeduren scheinen doch sicher dagegen zu sein. Macht aber nix, auf die Win-API ist verlass. :wink:

Im folgenden Code wird ein Crash beim MessageRequester verursacht:

Code: Alles auswählen

EnableExplicit

Define.s Test

!std
Test = "muh"
MessageRequester("Test",Test)
Das gute daran ist das STD ein ganz normale Anweisung ist, nix was einen Hacker besonders ins Auge fallen sollte, genau wie SUB ESP,x.

UD2 ist Blödsinn, erstens wird der Crash sofort ausgelöst, zweitens weis ein Hacker dort sofort woran es liegt. Die Anweisung ist ja für nix anderes gut. :roll:

Egal was du von beidem verwenden willst: !std oder !SUB Esp, 4. Beides wird funktionieren und beides ist nicht direkt offensichtlich. Aber greife auf keinen Fall auf Dateien zu zwischen dem "Crashvorbereiter" und dem Crash. Nur zur Sicherheit das nix kaputt geht. Und teste es einfach bei dir wann es Crasht und wann nicht. Kann eigentlich nicht viel passieren, solange du nicht auf Dateien zugreifst.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hallo,

Ich habe nun die !STD und die !SUB Esp,4 Methoden beide an verschiedenen Stellen eingebaut. Wichtig dabei, dass das erst mitten im Programm passiert. Und wenn ich das richtig verfolgt habe, passiert der Fehler erst später... (zB zwanzig Befehle später im WindowOpen-Befehl) :twisted:

Super, Vielen Dank!

Eine Frage noch: Wenn ich eine Prozedur CheckDLLIntegrity() nenne, kann man diesen Prozedurnamen dann später im Debugger/Disassembler sehen? Wenn ja, dann müsste ich mir ja noch einen guten Namen ausdenken. Wenn nein, dann ist das im Source natürlich besser...

Volker
Antworten