AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm patchen

Ein Thema von stoxx · begonnen am 13. Aug 2003 · letzter Beitrag vom 13. Aug 2003
Antwort Antwort
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

Programm patchen

  Alt 13. Aug 2003, 12:25
Habe den Beitrag "Programm zum knacken" gelesen.
Da ging es darum, den Code so abzuändern, dass Abfragen einfach umgeleitet werden.

Da werfen sich fragen auf.

Jemand hat mir mal gesagt, ich solle mit copy und paste sehr viele
If Then abfragen hintereinander einfügen.
So macht das ganze sehr, sehr viel Arbeit, und irgendwann keinen Spass mehr.
Aber dann hab ich mir gedacht, kann man denn diese Abfragen nicht mit einem mal überspringen ?


Also ich hab folgende Frage.
WAS ist alles möglich mit Assembler ?
Kann man eine IF Then else Abfrage auch ganz rausnehmen, dass sie gar nicht stattfindet ?
Dann hat er mir gesagt, das Case Abfragen besser als If sind, stimmt das ?

Ich würde gern 5000 Mal eine IF Then Abfragen hintereinander durchführen .. aber das ganze nützt ja nix, wenn man die alle mit einem Mal überspringen kann.
Kann mir jemand Tips dazu geben ? .. vielen Dank
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Programm patchen

  Alt 13. Aug 2003, 12:34
Zitat von stoxx:
Jemand hat mir mal gesagt, ich solle mit copy und paste sehr viele
If Then abfragen hintereinander einfügen.
So macht das ganze sehr, sehr viel Arbeit, und irgendwann keinen Spass mehr.
Aber dann hab ich mir gedacht, kann man denn diese Abfragen nicht mit einem mal überspringen ?
Da reicht es wenn man 5 Bytes durch ein $e9 xx xx xx xx (JMP Distance) ersetzt.


Zitat:
WAS ist alles möglich mit Assembler ?
Alles was der Prozessor hergibt. (Und das OS nicht verbietet )

Zitat:
Kann man eine IF Then else Abfrage auch ganz rausnehmen, dass sie gar nicht stattfindet ?
Warum sollte man das nicht können. Aber es ist einfacher den bedingten Sprung bei einer If-Anweisung durch einen unbedingten bzw. durch NOPs zu ersetzen.

Zitat:
Dann hat er mir gesagt, das Case Abfragen besser als If sind, stimmt das ?
Eine Case-Anweisung sieht in Assembler genauso aus, wie viele If-Anweisungen. Der Optimierer von Borland C++ macht da zwar was ganz spezielles: Er macht einen bedingten Sprung in eine Sprungadressen-Tabelle. Aber auch das kann man durchschauen.


Zitat:
Kann mir jemand Tips dazu geben ?
Wenn jemand dein Programm knacken will und sehr verbissen ist, dann schafft er das auch.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

Re: Programm patchen

  Alt 13. Aug 2003, 14:18
> Wenn jemand dein Programm knacken will und sehr verbissen ist, dann
> schafft er das auch.


hmm .. also ich bin bisher davon ausgegangen, wenn ich nicht gerade eine offensichtliche Warnmeldung ausgebe wie: 'Hier gehts nicht weiter, weil etwas falsch ist'
Sondern im Code ganz still etwas klamm heimlich änder, (irgendwelche Zeiger verbiegen, Objecte freigeben) ..
so dass das Programm irgendwann abstürzt, dann bin ich auf der sicheren Seite.
dazu nutze ich BUGs meiner Software aus der Vergangenheit.
Wenn also ich im Quelltext meinen Fehler kaum gefunden habe, gehe ich davon aus, dass jemand in Assembler dies auch nicht finden wird. vor allen Dingen, weil er das Programm nicht geschrieben hat.

> Da reicht es wenn man 5 Bytes durch ein $e9 xx xx xx xx (JMP
> Distance) ersetzt.


Also bedeutet das, dass in diesen Blöcken noch wichtiger code vorhanden sein muss.


Konkrete Frage jbg: Wir würdest Du Deine Software sicher machen ?
Bin eher auf Ideen suche ..
Es soll nicht der perfekte schutz sein.
Es soll nur unheimlich viel Arbeit machen, so dass es sich nicht lohnt.
Und es soll nur einer von 1000 hinbekommen ...

Es sind eher die vielen kleinen EINFACHEN Dinge, die mich interessieren, nicht irgendeine Mammut Verschlüßelung

besten Dank
  Mit Zitat antworten Zitat
Lillebrohr
(Gast)

n/a Beiträge
 
#4

Re: Programm patchen

  Alt 13. Aug 2003, 14:18
Guten Tag,

Zitat:
Jemand hat mir mal gesagt, ich solle mit copy und paste sehr viele
If Then abfragen hintereinander einfügen.
So macht das ganze sehr, sehr viel Arbeit, und irgendwann keinen Spass mehr.
Für was willst du das überhaupt einsetzen ??

If Serial = 12345 then
Showmessage(Erfolgreich registriert)

... oder wie ??

Wenn das dein Weg sein soll, dann ist das kein guter Schutz.
Dann vergewaltige ich mein Debugger für 2 min und bin fertig.

Wenn du nicht willst das sofort jemand dein Prog patcht, nimm einen guten Protector wie AsProtect.
Dank RSA-1024 kannst du wichtige Teile deines Programms verschlüsseln, z.B. die Funktion "Speichern". Diese würde somit nur bei einer gültigen Serial richtig entschlüsselt. In dem Fall hilft auch Patchen nichts: kein Speichern ohne richtige Serial!

Leider gibt es auch zu diesem Protector sogenannte Unpacker. Du könntest natürlich noch deine File mit einem Hash versehen lassen und beim Start prüfen ob der sich verändert hat. Wenn das der Fall sein sollte ---> BEENDEN.

Dann denkst du dir noch einen schönen Serialalgo aus. Packst noch ein bissl Blowfish rein und schon hättest du vorerst ein gut geschütztes Programm.

Mit freundlichen Gruß

LB
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: Programm patchen

  Alt 13. Aug 2003, 14:26
Zitat von Lillebrohr:

Wenn du nicht willst das sofort jemand dein Prog patcht, nimm einen guten Protector wie AsProtect.
Dank RSA-1024 kannst du wichtige Teile deines Programms verschlüsseln, z.B. die Funktion "Speichern". LB


Hallo Lillebrohr,

wie funktioniert das mit Asprotect genau ?
Wird die Exe nach der Compilierung verschlüsselt (einzelne Funktionen davon)
oder schon davor, während der Laufzeit ?
  Mit Zitat antworten Zitat
Lillebrohr
(Gast)

n/a Beiträge
 
#6

Re: Programm patchen

  Alt 13. Aug 2003, 14:45
Guten Tag,

Saug dir mal den Protector und schau ihn dir mal an.

Hier mal die Funktionsweise von AsProtect:

What is ASProtect?
ASProtect is the system of software protection of applications, designed for quick implementation of application protection functions, especially targeted for software developers. ASProtect is designed for such specific tasks as working with registration keys and creation of evaluation and trial application versions.

ASProtect Features
- compression of the application
- encryption of the application
- counteraction to dumping application memory with the tool like
ProcDump.
- application integrity check
- counteraction to debuggers and disassemblers
- counteraction to memory patching
- API for interaction between application and protection routines
- creation and verification of registration keys using public keys
encryption algorithms
- keeping of the database and checkup of "stolen" (illegal) registration keys
- possibility to create evaluation (trial) versions, that limit -
application functions based on evaluation time and the number of runs left
- expose nag-screens
- generating of registration keys, based on the specific computer system.

Tja klingt doch nicht übel oder ??

Und hier der dazugehörige Unpacker.

http://pham.bulhosting.com/protools/...ackers/rad.zip

Mit freundlichen Gruß

LB
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#7

Re: Programm patchen

  Alt 13. Aug 2003, 15:00
Hallo ...


noch zwei Fragen.

eine gepackte Exe .. wird ja in den Speicher entpackt.
Liegt sie dann dort in derselben Form vor, wie vor dem packen auf der Festplatte ?

bzw. Beim normalen Laden einer ungepackten Exe, wird da die Exe Datei eins zu eins in den Ram kopiert ?


beim suchen stößt man auf manch eigenartige Seiten ..

leute gibts ... da wundert man sich nur ...

http://daemon.anticrack.de/unpacking.txt
  Mit Zitat antworten Zitat
Lillebrohr
(Gast)

n/a Beiträge
 
#8

Re: Programm patchen

  Alt 13. Aug 2003, 15:09
Guten Tag,

achja der Daemon.

Zitat:
eine gepackte Exe .. wird ja in den Speicher entpackt.
Liegt sie dann dort in derselben Form vor, wie vor dem packen auf der Festplatte
Also der OEP, Original Entry Point, gibt die Stelle im Speicher an wo das Programm voll entpackt im Speicher vorliegt. Mal ein Beispiel.
Du hast den Packer UPX verwendet, was ei sehr einfacher ist. Dann mußt ab den OEP deiner EXE den Mist auf die Platte dumpen. Also den Original Part. Da aber der gedumpte Mist noch den alten EP hat mußt du den noch angleichen mit dem OEP. Wie du den rausbekommst kann ich dir später noch erklären. Tja und der Dumping Mist auf deiner Platte ist das selbe wie die OriginalExe die noch nicht gepackt war.

Ist halt wie vorher, wenn du das meinst.

Zitat:
Beim normalen Laden einer ungepackten Exe, wird da die Exe Datei eins zu eins in den Ram kopiert ?
Hmm, so kann man das nicht sehen. Die EXE wird immer eins zu eins in den RAM kopiert. Ich kapier nicht was du mir jetzt damit sagen willst ?

MfG

LB
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#9

Re: Programm patchen

  Alt 13. Aug 2003, 15:33
Zitat:
Die EXE wird immer eins zu eins in den RAM kopiert.

ich will folgendes tun, geht das ?

Kann ich die Exe aus dem Hauptspeicher heraus in ein TMemorystream laden ?
(um dann weiterführend einen crc Check dieser Exe machen ? )

geht sowas ?

beziehungsweise kann ich byte für byte auf die Exe (entpackt) im Ram zugreifen ?
  Mit Zitat antworten Zitat
Lillebrohr
(Gast)

n/a Beiträge
 
#10

Re: Programm patchen

  Alt 13. Aug 2003, 15:51
Guten Tag,

Zitat:
Kann ich die Exe aus dem Hauptspeicher heraus in ein TMemorystream laden ?
... Puuuh hab das in Delphi noch nie gemacht. Es ist üblich das mit ASM zu machen. Sicherlich würde es auch mit Delphi gehen aber wie weiß ich nicht. Bin in Delphi noch nicht allzu Advanced. Beschäftige mich mehr mit Win32ASM.

Zitat:
(um dann weiterführend einen crc Check dieser Exe machen ? )
Puuuuh es ist jetzt ganz schön heiß hier. Also ich möchte deine Ideen ma wiedergeben.

Du machst ein Programm. So wenn du das Programm startest soll das Programm dein eigenes Programm aus dem Speicher dumpen und in einen Stream laden. Dann willst du den CRC daraus bilden und mit einem feststehenden Wert vergleichen. Richtig ??? Wenn der falsch ist, Pufff ... FEHLER. Ok ?

Ist ganz schön aufwendig. Würd ich nicht so machen. Wenn du deine EXe aus dem Speicher dumpst dann hast du nichts anderes als wenn du deinen HexEditor öffnest und deine Original-Exe dort reinlädst.
Am besten du lässt das mit dem CRC, benutz einen guten Packer und das wars. Was du vielleicht noch machen kannst ist folgendes:

Du bildest aus deiner fertigen Exe den Hash. Den schreibst du dir auf. Dann machst du bei Form.Create eine Procedure die die Größe deiner Datei bestimmt. Aus der Größe bildest du den Hash und vergleichst ihn dann mit den den du aufgeschrieben hast. Wenn das falsch sein sollte ... PENG !!

MfG

LB
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 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