das zweite

Hi,

hier mein zweites Crack-Me... Es basiert auf mein Serial Me No. 1, aber einiges hat sich geändert... Nun, hoffentlich ist der genug sicher, dann kann ich endlich mal einen guten Schutz in meine Proggis einbauen... Und trotzdem: "Viel Glück!"

REGELN:
x Keine Serials
x Kein KeyGens
x Cracken oder Patchen

TIPP:
x Schutz

Gruss
PMTheQuick ;)
 
Erstmal die Serial:
Lesco/-7z3sTa7dfGzs
Hier wieder ein Selfkeygen, der Lösungsweg ist der gleiche bei dem ersten CrackMe, zwar sind die Offsets unterschiedlich, sie lassen sich jedoch auf genau dem gleichen Weg ermitteln, daher denke ich, dass ein weiteres Tutorial hier nicht nötig ist.(@Mods: Falls ihr anderer Meinung seid, schreibe ich noch ein extra Tutorial).
Altes Tutorial: http://www.hackerboard.de/attachment.php?attachmentid=1674

//Keygen war nicht ganz richtig, für Keygen, siehe nächster Post.
 
Leider falsch, Lesco! Bei dir kommt sicher auch ILLEGAL REQUESTION am Anfang, oder???
( Also beim Self-KeyGen...)

Gruss
PMTheQuick ;)
 
Nur wenn man das Archiv nicht auspackt, sondern die enthaltene Datei per Doppelklick ausführt. Entpacke die Datei mal und versuche es nochmal.
Aber trotzdem: Hier mal ohne "Illegal Request(ion)" und eine sehr knappe Beschreibung der Überprüfung:
 
Nein... Geht nicht... Der CRC32-Check gibt immer falsch aus...

Gruss
PMTheQuick ;)

So... der zweite ging... Nochmals... Bravo Lesco ;)... Aber... wie kann ich meine CrackMe's sicherer machen??? Denn ich dachte, das wäre jetzt fast unknackbar...
 
Also, du solltest es vermeiden, dass die richtige Serial offen im Programm zu sehen ist. Du müsstest also eine Art Prüfung entwerfen, die nicht die richtige Serial generiert, sondern die eingegebene auf best. Merkmale überprüft oder eine Art Prüfsumme erstellt, die mit einem, von dem Namen abhängigen Wert, übereinstimmt. Allerdings, muss diese mehr oder weniger umkehrbar oder "bruteforce-bar" sein, da du sonst selber keine gültige Serial generieren könntest.
Oftmals eignen sich für diese Dinge auch mathematische Probleme, wie nait auf dem BuHa-Board mit einem sehr interessanten Crackme[1] gezeigt hat. Die Sachen kann man dann noch ausbauen, wie z.B. eine virtuelle Machine zur Überprüfung zur verwenden o. ä.. In einem meiner Crackmes[2], wird bspw. die Serial-Routine "dynamisch" und vom Namen abhängig generiert, sie sieht also für jeden Namen anders aus.
Am Besten schaust du dir einfach mal einige CrackMes hier auf dem Board oder auf www.crackmes.de und die zugehörigen Lösungen an, wenn du weitere Ideen suchst.
Eine andere Möglichkeit wäre die Überprüfung zu verstecken, wie etwa durch API Hooks oder Junkcode(Ein Beispiel dafür wäre [3]) o.ä.. Generell ist das halt schwer zu sagen, da der Reiz an CrackMes gerade der ist, dass jedes Crackme anders ist/sein sollte und neue Ideen verwendet.

[1]https://www.buha.info/board/showthread.php?t=51711
[2]https://www.buha.info/board/showthread.php?t=52019
[3]http://www.crackmes.de/users/warrantyvoider/message_for_you/
 
Da ich gestern leider nicht da war, kommtmeine Loesung erst heute.

Lesco hat schon die kleinen Unterschiede beschrieben.

Ich habe wieder einen Sniffer gecodet ,diesmal aber ohne dll.
 
Zuletzt bearbeitet:
Ich geh den Weg des geringsten Wiederstandes :D



Anhang entfernt, sorry, aber du solltes Dein System überprüfen. IDA sagt:
Code:
 call    $+5
.flat:00408205                 push    ebp
.flat:00408206                 mov     ebx, [esp+8]
.flat:0040820A                 mov     ebp, [esp+8+var_4]
   sub     [esp+8+var_4], 7205h
.flat:00408216                 and     ebx, 0FFFFF000h
.flat:0040821C                 sub     ebp, offset byte_401005
der "berühmte" Deltacall gleich am Anfang - sieht mir wirklich nciht nach einem falsepositiv aus.
 
Obwohl ich Virenscannern ja eigentlich nicht traue, glaube ich nicht, dass es ein false positive ist.
virusscan.jotti.org:
AntiVir
Found nothing
ArcaVir
Found W32.Virtob.A
Avast
Found nothing
AVG Antivirus
Found Win32/Virut.A
BitDefender
Found Win32.Virtob.C
ClamAV
Found nothing
Dr.Web
Found Win32.Virut
F-Prot Antivirus
Found nothing
Fortinet
Found W32/Virut.A
Kaspersky Anti-Virus
Found Virus.Win32.Virut.a
NOD32
Found Win32/Virut.5127
Norman Virus Control
Found nothing
UNA
Found nothing
VirusBuster
Found Win32.Virut.A
VBA32
Found Virus.Win32.Virut.A

Außerdem ist deine Datei rund 6000 Byte größer.
 
Ohoh,was da im Netz steht is ja nicht grade schön :/
Naja muss ich halt formatieren gehen und die .exen nicht mit nehmen...
Also bis dann :(

EDIT:
Fertig :)
Nochmal sorry das ich ein verseuchtes File reingestellt hab
 
Mal eine kleine Frage : was ist der berühmte Deltacall?
Nunja, wenn man ein Codestück in eine andere Executable injiziert (und zwar ohne DLLs ;) ), hat man das Problem, dass man jedesmal andere Adressen hat und erstmal gar nicht weiß, wo man sich genau in der Executable befindet. Das wäre auch nicht schlimm - viele Operationen (JMP,CALL) Funktionieren mit relativen Adressierungen - aber es gibt auch Operationen (i.R sollten es Datenzugriffe sein) die eine "feste" Adresse haben wollen. Möchte man also in seinem Code auch Variablen nutzen, behilft man sich mit einem Trick:
wie "jeder" :) weiß wird bei einem Call die Rücksprungsadresse auf den Stack abgelgt.
Jetzt könnte man ja sowas machen - sie ablegen lassen und auslesen:

call delta
delta:
pop ebx

damit hat man nachher in ebx seine aktuelle Adresse

call delta ist nix anderes als call $+5 Dollazeichen bedeutet in den meisen Assemblern aktuelle Postition - ein call ist 5 Bytes lang und "Roh" sieht das so aus:

E8 00 00 00 00 (Springe 0 Bytes weiter)

hier ein Beispiel:
Code:
inj_start:
pushad
    jmp @f
    stolen_bytes db(5) dup(0)  <- Buffer
    @@:
    call delta
	delta:	
	pop ebp
	mov esi,ebp
	sub esi, (delta-stolen_bytes)  <- eine menschenfreundliche adressierungsweise
	mov edi,[esp+32]              ;an esp+32 liegt die Rücksprungsadresse (wegen pushad)
	sub edi,5                          ;wenn man diese um 5 verringert, bekommt man die eigene
	mov ecx,5                    Aufrufadresse
	rep movs byte ptr [esi],byte ptr [edi]       ;und die wird mit originaldaten überschrieben
	mov eax, [esp+32]          ; hier wird die Rücksprungsadresse manipuliert
	sub eax,5                        ; so dass man nachher wieder an der Stelle landet, wo
	mov [esp+32],eax	     ; vorher der Hook-Call stand

      MOV EAX,DWORD PTR SS:[ESP+60h]     ;das ist der eigentliche Patch
      SUB EAX,3298h
      mov byte ptr [eax],0c3h
	  
	  
popad    
    
    retn
allerdings wird es hier noch nicht wirklich genutzt - bei größeren Codes steigt aber die nutzung auch drastisch an, weil einem recht schnell die Register ausgehen ;)
(Der Code ist an sich ein einmaliger "Patch-Hook" der nach dem aufruf eine bestimmte Adresse patcht und dann den Hook entfernt (stellt originalcode wieder her) und den originalcode ausführt.

das ganze kann man auch variiert betreiben:
call delta
delta: mov eax,[esp]

dürfte genauso klappen und wird auch öfters angewendet, zusammen viel mit Junkcode (einem Müllcode, der nichts bewirkt, außer den Call zu verschleiern) - weil AV-Scanner solche Bytefolgen wohl sehr interessant finden würden.


Um jetzt zurück auf die Frage zu kommen: Delta heißt es wohl weil "Delta" für Differenz steht - und "berühmt" weil dieser Trick in den meisten Tutorials und Webseiten als Delta-Call genannt wird ;).
 
Einfach :)

Das CrackMe gepatcht mit Anleitung im Anhang!

Zu ILLEGAL REQUESTION, kann das sein, wenn man das CrackMe in einem anderen Ordner ausführt als das erste Mal???
 
Zurück
Oben