Autor Beitrag
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 04.01.03 13:37 
Mit der XOr-Verschlüsselung kenne ich mich nicht aus. Aber soweit ich weiß, spricht man wirklich dabei von der Größe des Schlüssels.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
alexschultze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: Sa 04.01.03 14:00 
mh. da wäre es gut nochmal einen Experten zu fragen. Und wie könnte man ein Codierungsprogramm /sicher/ machen?`
Wenn der Schlüssel im Programm steht, ist es ja relativ leicht hackbar. (W32.ASM oder Dede als Tools mit denen man sowas auslesen kann :evil: )
Was kann man eigentlich tun? Man kann halt nur den Leuten die es decodieren sollen das Programm geben und hofft das sie den Schlüssel (das Programm) nicht weitergeben.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 04.01.03 14:10 
Wieso muß der Schlüssel im Programm stehen. Du gibst das Kennwort doch ein.

Wenn du aber Daten im Programm schützen willst, dann würde ich kein Kennwort nehmen, sondern eine Formel.
torstenheinze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 461



BeitragVerfasst: Sa 04.01.03 14:16 
ich hab einen tutorial im html format, ich kann den hier ja mal reinstellen.
torstenheinze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 461



BeitragVerfasst: Sa 04.01.03 14:18 
Maestro proudly presents:

[ Tutorial: „How2Code“ ]





„warme Worte“:
Dieses Tutorial widmet sich an alle, die ein „sicheres“ Programm schreiben wollen. Das sicher steht in „“, weil es für ein Profi kein Problem ist ,ein Kopierschutz zu knacken. Aber es hält kleine Lamer & dumme Newbies ab, unser Programm zu modifizieren. Leider kann ich nicht sagen, ob dieses Tutorial für Anfänger geeignet ist, aber ein bisschen Wissen in Delphi solltet ihr schon haben...


Ich verwende Delphi v4.0. Da ich aber „System-Nah“ programmiere, d.h. Win32 API`s verwende, sollte es kein Problem sein, den Code in VB oder/und in C++ zu portieren. Achja, der grüne Text ist Source-code.


OK, nun geht es auch schon los...



Content:



1. Einführung

2. Win32DASM ausschalten

3. ANTi-SiCE Tricks

4. CRC32-Checks einbauen

5. Serialabfrage programmieren

6. das Tool packen

7. <einige &#8222;Profitips&#8220;>





&#8222;Einführung&#8220;:

Als erstes müßt ihr wissen, was ihr schreiben wollt. Soll ein CrackMe oder Shareware werden?! Bei einem CrackMe ist der &#8222;Sinn&#8220; (und das Programmdesign) ziemlich egal... Aber Shareware sollte schon sinnvoll durchdacht sein... was aber nicht meine Aufgabe ist *g*





&#8222;Win32DASM ausschalten&#8220;:

Der Win32DAM lebt von String-Ref., d.h. ohne diese ist er ziemlich &#8222;machtlos&#8220;. Der integrierte Debugger ist zwar schön, aber dahingehend ziemlich nutzlos. Auch könnte man das Tool mit einen Crypter packen, aber zu jedem Crypter gibt es ein Programm, was diesen Vorgang wieder rückgängig macht. Also schreiben wir unsere eigene Methode, String&#8217;s in der Delphi .EXE zu verstecken. Und das geht so:



Procedure EnDeCrypt(Var InString: String);

Var x: Byte;

Begin

RandSeed := Length(InString);

FOR x := 1 To Length(InString) Do

InString[x] := Chr(Ord(InString[x]) Xor (Random(128) Or 128));

End;



Also diese Routine ist die altbekannte (oder auch nicht) XOR Methode um String&#8216;s zu verschlüsseln. Sie ist zwar klein, aber sehr kraftvoll. Ich würde zwar kein .TXT-Crypter damit schreiben, aber unser Ziel ist doch nur, dass der Win32Dasm die Strings nicht lesen kann, oder?! Nun folgt die Erklärung: der Befehl RandSeed berechnet eine Zufallszahl aus der Länge des gegeben String&#8217;s InString. Dieser wird als Parameter der Procedure übergeben & dann mit der XOR Routine verschlüsselt. Nun ist ein Sinnvoll, ein kleines Programm zu c0den, was wir als &#8222;Werkzeug&#8220; benutzen, d.h. es parallel laufen lassen. Damit können wir schon während der Entwicklungszeit verschlüsselte String&#8217;s erzeugen, die wir als Const pro Procedure benutzen. Damit können wir z.B. folgende MsgBox definieren:



Procedure Meldung;

Var dStr: String;

Begin

dStr := `&#338;&#8217;äÈ&#8482;ÁÌ&#352;ûú÷׷İ÷ö`

EnDeCrypt(dStr);

Messagebox(form1.handle,Pchar(dStr),&#8216;Achtung...&#8216;,0);

End;



Diese Procedure wurde eine Messagebox ausgeben, die die Überschrift &#8222;Achtung...&#8220; hat & mit den Text &#8222;Dies ist ein Test.&#8220; ausgibt. Warum?! Hää? Warum mit den Text &#8222;Dies ist ein Test.&#8220; ausgibt? Das ist ganz einfach, der Variable dStr wird der Wert `&#338;&#8217;äÈ&#8482;ÁÌ&#352;ûú÷׷İ÷ö` zugewiesen. Dieser wird beim Starten des Programm decodiert & als, für uns, lesbaren Text ausgeben. Nur leider sieht das der Win32DASM nicht... denn der String wird erst während des Startens dekodiert. Kewl, huu?! Es ist zwar ein aufwendige Methode, aber sie fkt. perfekt. Damit sollten wir alle wichtigen Strings dekodieren, z.B.: die in Fehlerboxen, wenn der Serial falsch war. Also, man könnte eigentlich alle Strings in einem Programm verschlüsseln, was aber sehr aufwendig ist. Darum sollten wir uns mit den wichtigsten String&#8217;s begnügen. Ihr könnt es gleich mal testen, eine .EXE erzeugen & das ganze in Win32DASM betrachten. Ihr findet euren String nicht... Auch kann keiner die Strings in der .EXE wiederherstellen.

Damit sollten eure String&#8217;s erstmal geschützt sein vor Lamer & Newbie&#8217;s.



( siehe SOURCE\CRYPTER\String_CRYPTER.DRP)







&#8222;ANTi-SiCE Tricks&#8220;:

Auch hier sei am Anfang gewarnt, dass diese Methode ziemlich leicht zu knacken ist. Ich zeige euch zwei verschiedene Methoden, um SiCE zu entdecken. Eine davon, bekannt als &#8222;MeltIce&#8220; von David Eriksson's, wird von einem Tool namens FrogSiCE erkannt & &#8222;gepatched&#8220;. Aber welcher Newbie kennt schon FrogSiCE?!



Also, &#8222;MeltIce&#8220; basiert auf der Methode, eine VxD (VxD = virtueller Geräte Treiber) von SiCE zu &#8222;öffnen&#8220;. Es gibt zwei Stück: SiCE & NTICE. Diese öffnen wir mit CreateFile(`\\.\<Name der VxD>`, win32 stuff)!



Um SiCE für Windows9x zuerkennen nehmt diese Methode:



Function Is_Sice: Boolean;

Var xSiCE,SiCE: String;

Begin

xSiCE := '÷¹&#376;%S'; //ist unser \\.\SICE *g*

EnDeCrypt(xSiCE);

SiCE := xSice;

xFile := CreateFile(PChar(SiCE),GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE,NIL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);

If xFile = INVALID_HANDLE_VALUE Then

Begin Is_Sice := False End

Else Begin Is_Sice := True End;

CloseHandle(xFile);

End;



Wie ihr schon seht, benutze ich wieder den EnDeCrypt(). Denn sonst würde in unserer .EXE &#8222;//./SICE&#8220; stehen & das wollen wir nicht. Denn einfach mit HIEW öffnen & in z.B.: &#8222;//./SICT&#8220; umändern und alles wäre für die Katz. Denn dann würde das Programm versuchen, die VxD SICT zu öffnen & würde Erfolg haben. Die MeltIce Methode basiert darauf, dass es einen Fehler gibt, wenn die VxD geöffnet wird. Also, einfach mit:


If Is_Sice Then ReBootPC Else LoadProg;



starten. Wenn SiCE installiert ist, bekommt die Funktion den Wert True (wahr). Ist dies der Fall, wird die Procedure ReBootPC aufgerufen. Ist SiCE nicht installiert, so wird die Procedure LoadProg aufgerufen & unser Programm lädt ohne Probleme hoch. Wie ich Eingangs schon erwähnt hatte, gibt es ein Programm was das alles &#8222;patcht&#8220;. fR0GsiCE heißt dieses geniale Tool. Leider läßt sich dieses Programm nicht im Speicher aufspüren L. Aber halb so wild, denn a) ein Newbie kennt fROGSiCE nicht & b) wir haben noch ein weitere Tricks im Ärmel...





&#8222;CRC32-Checks einbauen&#8220;:

Ein weitere cooler Code ist einen CRC-Check bei jedem start des Programmes durchlaufen zu lassen. Dann wird der Wert, der mir XOR verschlüsselt ist, aus einer Datei gelesen & mit dem akt. CRC-Wert verglichen. Stimmen diese nicht überein, lassen wir das Programm beenden. Das &#8222;coole&#8220; an der ganzen Sache ist, wird auch nur ein JE -> JNE geändert so läuft das Programm nicht mehr.

Die Delphi-Unit liegt bei. Sie muß einfach nur kompiliert werden... That`s all.

Wie ihr sie in eurer Programm einbindet, dass zeig ich euch jetzt:



FUNCTION ProcessFile(CONST Path: STRING): DWORD;

VAR CRCTemp : DWORD;

CRCValue : DWORD;

CRCValueHex: STRING;

Error : WORD;

TotalBytes : TInteger8;

BEGIN

RESULT := 0;

Application.ProcessMessages;

CRCVAlue := 0;

CalcFileCRC32(Path, CRCValue, TotalBytes, Error);

RESULT := CRCValue;

CRCValueHex := IntToHex(CRCvalue, 8);

CRCTemp := DirCRC32;

CalcCRC32 (@CRCValueHex[1], SizeOf(CRCValueHex), CRCTemp);

DirCRC32 := CRCTemp;

CRCTemp := AllCRC32;

CalcCRC32 (@CRCValueHex[1], SizeOf(CRCValueHex), CRCTemp);

AllCRC32 := CRCTemp;

melticecrc32 := IntToHex(NOT AllCRC32, 8);

END;



Ihr müßt aber noch vorher die Variable <melticecrc32> global als String def.!!

Mit dieser Function könnt ihr den CRC-Wert einer Datei bestimmen. Das geht so:



Processfile(ParamStr(0));



ParamStr(0) ist die akt. Datei, also eure .EXE Datei. Mit der folgendem TForm1.FormShow habt ihr alles im Griff *g*...



procedure TForm1.FormShow(Sender: TObject);

var errorcode: word;

crcvalue: cardinal;

bytes: int64;

f: textfile;

dStr,dupecrc,egal: String;

begin

If Is_Sice Then Close;

If Is_Sice_NT Then Close;

Processfile(ParamStr(0));

dStr := 'Áñ£&#710;½&#8225;®&#8220;&#382;³Ç'; // unsere `meltice.dat`

EnDeCrypt(dStr);

assignfile(f,dStr);

{$i-}

reset(f);

dStr:='ê¿®ñÐÍçº&#8216;³&#710;îñ&#8364;¯ÂÀ¼Ô&#339;ЭêÊí¦²Æ&#8211;ô¤´£ðÙÖþÿú®Ü';

// unsere Fehlermeldung!!

EnDeCrypt(dStr);

if ioresult <> 0 then

begin

messagebox(form1.handle,pchar(dstr),'',0);

close;

end;

readln(f,dupecrc);

closefile(f);

endecrypt(dupecrc);

Assignfile(f,'debug.dat');

rewrite(f);

writeln(f,melticecrc32);

closefile(f);

if dupecrc <> melticecrc32 then

begin

close;

end;

messagebox(0,'Aufgabe: <siehe CrackMe_#4.nf0>!!','',0);

if dupecrc <> melticecrc32 then

begin

close;

end;

end;



Nun wird also bei jedem Start die Datei `meltice.dat`geöffnet. In dieser Datei steht die akt. CRC verschlüsselt drinn, die ihr vorher eingegeben habt. Der Wert wird ausgelesen, entschlüsselt & mit der akt. CRC verglichen. Stimmen diese NICHT überein, so wird das Programm beendet. Bitte benutzt keine MsgBox für Fehlermeldungen, diese kann man im DASM leicht per Imp-Fkt. Finden & man patcht den Sprung, also das Programm wird nicht beendet. Laßt lieber eine <Error.log> erstellen & schreibt dort euere Fehlermeldung rein... Das ist besser.



Ach ja, bitte kompiliert euer Programm & laßt für euch den CRC ausgeben. Erst wenn euer Programm fix & fertig ist, aktiviert ihr den CRC-Check. Wie gesagt, der muß per Hand am Ende (und durch die XOR-Routine) in die Datei `meltice.dat`eingegeben werden.



DA DIESES THEMA SEHR HEIKEL IST, SCHREIBT MIR BEI FRAGEN EINE e-MaiL AN: Maestro.Hacks@gmx.net !

Auch schaut euch den Source unter SOURCE\HACKME an...





&#8222;Eine gute Serialabfrage programmieren&#8220;:



Hier möchte ich nun nicht einen Source präsentieren, sondern lieber euch Vorschläge unterbreiten. Wenn ich hier einen Source veröffebtliche, und ihr den 1 zu 1 übernehmt, dann ist ein KeyGen für euer Programm schnell & bald geschrieben.... Also, es gibt verschiede Wege, eine &#8222;intelligente&#8220; Serial zu proggen. Mann könnte einfach den Namen, der als String vorliegt, in einen HEX Wert umrechen. Viel Besser ist aber, und das verwende ich, eine CRC32-Modifizierte Variente zu nehmen. Dann beträgt der KEY ca. 8-12 Zeichen, die in keinerlei sichtbarer relation stehen mit dem Usernamen! Natürlich könnte man auch einfach die XOR Routine verwenden. D.h. den Username in XOR Verschlüsseln & dann vergleichen lassen. Oder denckt euch selber was aus & schreibt mir euren Weg per e-mail J.





&#8222;das Tool packen&#8220;:

Dies liegt nun echt in eurer Entscheidung. Es gibt zu jedem öffentl. erhältlichen Packer ein Gegenstück. Ich würde es nur verwenden, um die .EXE zu verkleinern. Oder ihr schreibt euch selber einen :). Einen guten .EXE Packer, egal ob für PE oder DOS findet ihr unter SOURCE\PACKER. Das ist ein DOS Tool was gleiche Cmd-Line Eigenschaften hat.





&#8222;ein paar Profitip`s...&#8220;:

1. KEINE Nag-Screen&#8217;s, ohne CRC32 Check -> sind einfach zu patchen!

2. viele CRC-Checks einbauen, Abbruch OHNE Fehlermeldung

3. viele XOR-Strings einbauen, auch in MsgBox!!

4. Nie das akt. Datum per API checken, lieber an Systemdateien!

5. ANTi-SiCE Tricks benutzen

6. < einen eigenen ANTi-fROGSiCE schreiben :) >





So, das war es erstmal von mir. Ich hoffe ihr hattet Spaß & könnt dies als &#8222;ultimative&#8220; Hilfe benutzen. Kommentare jeder Art, also Lob,Kritik etc. ist gern gelesen unter maestro.hacks@gmx.net.





All rights reserved @ Maestro, fRACTUs`99.



/\/[ don&#8217;t be destructive &#8211; be creative ]\/\



Gr33tz: all @ fRACTUs`99 | AmoK | EVC | r!SC | MS_Jessica J | Pr0g | Crazy-Andy | Crazyfoxy | SiR Dynamite & alle die ich vergessen habe...
torstenheinze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 461



BeitragVerfasst: Sa 04.01.03 14:21 
tut mir leid, das dieses zeug: &#8216 überallsteht.
als ich den beitrag in dem fenster wo man das eingibt hineinkompiert habe, da war das nicht zu sehen.


achja, normalerweise war noch ein democrypter dabei, ic kann dir das auch senden ( sag mir mal dazu deine email).
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 04.01.03 14:30 
ein link hätt'es vermutlich auch getan und die '&#8216' wären auch weggeblieben... :roll:

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
torstenheinze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 461



BeitragVerfasst: Sa 04.01.03 14:39 
ich weiß ja leider nicht mehr wo ich das her hab,
außerdem mochten die mods doch nicht so viele links :wink: