Autor |
Beitrag |
azubi_20
Beiträge: 593
WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
|
Verfasst: Do 30.11.06 20:18
@ marc : bist ja auch ein Profi
ne, ich hab von Assembler kein Plan, meine aber mal gelesen zu haben, dass früher einige Shareware-Autoren versucht haben, ihre Software mit solchen Tricks schwieriger knackbar zu machen.
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 30.11.06 20:55
Tja, klar wurde das verwendet. Aber erstens sind diese Methoden auch bekannt und man merkt dann oft, wenn es sich um einen Trick handelt. Und zweitens sind auch die Debugger besser geworden...
|
|
azubi_20
Beiträge: 593
WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
|
Verfasst: Do 30.11.06 23:09
ja, habe mir schon gedacht, dass das nicht mehr aktuell ist, aber manchmal bin ich halt etwas nostalgisch
|
|
Chryzler
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 02.12.06 18:45
eruhenon hat folgendes geschrieben: | wie wärs wenn ihr das programm nach nem schluessel einfach verschluesseln würdet und anstelle eines pw vergleichs einfach den teil des programms verschlüsselt. Dann bräuchtet ihr den schluessel für den algorithmus um den passwortbereich zu betreten...
wies realisiert wird einen bereich unverschluesselt und den anderen verschluesselt zu habn weiss ich zwar grad nich aber es gibt hier mit sicherheit ideen.
mfg
Jan |
Dann versucht doch mal, dieses kleine Progrämmchen zu cracken...
EDIT:
Hinweis: Wenn das Passwort richtig ist, kommt eine entsprechende ShowMessage.
Einloggen, um Attachments anzusehen!
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 02.12.06 20:30
genau, das programm entschlüsselt den teil von sich selbst, der für die abfrage zuständig ist, das würde die sache knifflig machen, wäre auch sicher nicht leicht umzusetzen.
|
|
Chryzler
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 02.12.06 20:34
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 02.12.06 20:37
Chryzler hat folgendes geschrieben: | Ich habe eine einfache XOR-Verschlüsselung eingesetzt. |
Ich sehs, ich mach mich gerade über deinen Code her:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190:
| (* 00456EF4 55 push ebp 00456EF5 8BEC mov ebp, esp 00456EF7 83C484 add esp, -$7C 00456EFA 53 push ebx 00456EFB 56 push esi 00456EFC 57 push edi 00456EFD 33C9 xor ecx, ecx 00456EFF 894D84 mov [ebp-$7C], ecx 00456F02 894D88 mov [ebp-$78], ecx 00456F05 894D8C mov [ebp-$74], ecx 00456F08 894D90 mov [ebp-$70], ecx 00456F0B 8BF0 mov esi, eax 00456F0D 33C0 xor eax, eax 00456F0F 55 push ebp
* Possible String Reference to: 'éÏÈúÿëë_^[‹å]Ã' | 00456F10 6834704500 push $00457034
***** TRY | 00456F15 64FF30 push dword ptr fs:[eax] 00456F18 648920 mov fs:[eax], esp 00456F1B C6459400 mov byte ptr [ebp-$6C], $00 00456F1F 8D5590 lea edx, [ebp-$70]
* Reference to control TForm1.Edit1 : TEdit | 00456F22 8B8634030000 mov eax, [esi+$0334]
| 00456F28 E837CDFDFF call 00433C64 00456F2D 8B4590 mov eax, [ebp-$70]
| 00456F30 E883D2FAFF call 004041B8 00456F35 8BF8 mov edi, eax 00456F37 85FF test edi, edi 00456F39 7E22 jle 00456F5D 00456F3B BB01000000 mov ebx, $00000001 00456F40 8D558C lea edx, [ebp-$74]
* Reference to control TForm1.Edit1 : TEdit | 00456F43 8B8634030000 mov eax, [esi+$0334]
| 00456F49 E816CDFDFF call 00433C64 00456F4E 8B458C mov eax, [ebp-$74] 00456F51 0FB64418FF movzx eax, byte ptr [eax+ebx-$01] 00456F56 304594 xor [ebp-$6C], al 00456F59 43 inc ebx 00456F5A 4F dec edi 00456F5B 75E3 jnz 00456F40 00456F5D 807D9429 cmp byte ptr [ebp-$6C], $29 00456F61 0F85A8000000 jnz 0045700F
* Reference to: kernel32.GetCurrentProcessId() | 00456F67 E830F0FAFF call 00405F9C 00456F6C 50 push eax 00456F6D 6A00 push $00 00456F6F 68FF0F1F00 push $001F0FFF
* Reference to: kernel32.OpenProcess() | 00456F74 E81BF1FAFF call 00406094 00456F79 8945FC mov [ebp-$04], eax 00456F7C 8D45F8 lea eax, [ebp-$08] 00456F7F 50 push eax 00456F80 6A64 push $64 00456F82 8D4594 lea eax, [ebp-$6C] 00456F85 50 push eax 00456F86 6890704500 push $00457090 00456F8B 8B45FC mov eax, [ebp-$04] 00456F8E 50 push eax
* Reference to: kernel32.ReadProcessMemory() | 00456F8F E810F1FAFF call 004060A4 00456F94 33DB xor ebx, ebx 00456F96 8D7D94 lea edi, [ebp-$6C] 00456F99 8D5588 lea edx, [ebp-$78]
* Reference to control TForm1.Edit1 : TEdit | 00456F9C 8B8634030000 mov eax, [esi+$0334]
| 00456FA2 E8BDCCFDFF call 00433C64 00456FA7 8B4588 mov eax, [ebp-$78]
| 00456FAA E809D2FAFF call 004041B8 00456FAF 50 push eax 00456FB0 8BC3 mov eax, ebx 00456FB2 5A pop edx 00456FB3 8BCA mov ecx, edx 00456FB5 99 cdq 00456FB6 F7F9 idiv ecx 00456FB8 52 push edx 00456FB9 8D5584 lea edx, [ebp-$7C]
* Reference to control TForm1.Edit1 : TEdit | 00456FBC 8B8634030000 mov eax, [esi+$0334]
| 00456FC2 E89DCCFDFF call 00433C64 00456FC7 8B4584 mov eax, [ebp-$7C] 00456FCA 5A pop edx 00456FCB 0FB60410 movzx eax, byte ptr [eax+edx] 00456FCF 3007 xor [edi], al 00456FD1 43 inc ebx 00456FD2 47 inc edi 00456FD3 83FB64 cmp ebx, +$64 00456FD6 75C1 jnz 00456F99 00456FD8 8D45F8 lea eax, [ebp-$08] 00456FDB 50 push eax 00456FDC 6A64 push $64 00456FDE 8D4594 lea eax, [ebp-$6C] 00456FE1 50 push eax 00456FE2 6890704500 push $00457090 00456FE7 8B45FC mov eax, [ebp-$04] 00456FEA 50 push eax
* Reference to: kernel32.WriteProcessMemory() | 00456FEB E814F1FAFF call 00406104 00456FF0 8B45FC mov eax, [ebp-$04] 00456FF3 50 push eax
* Reference to: kernel32.CloseHandle() | 00456FF4 E833EFFAFF call 00405F2C 00456FF9 B894AB4500 mov eax, $0045AB94
* Possible String Reference to: 'Vgoh%bhfl++Nxz!>1z|c5r~|9cti=zp' | 00456FFE BA4C704500 mov edx, $0045704C
| 00457003 E844CFFAFF call 00403F4C
| 00457008 E883000000 call 00457090 0045700D EB0A jmp 00457019
* Possible String Reference to: 'Wrong password!' | 0045700F B880704500 mov eax, $00457080
* Reference to : TMessageForm._PROC_0042DEDC() | 00457014 E8C36EFDFF call 0042DEDC 00457019 33C0 xor eax, eax 0045701B 5A pop edx 0045701C 59 pop ecx 0045701D 59 pop ecx 0045701E 648910 mov fs:[eax], edx
****** FINALLY |
* Possible String Reference to: '_^[‹å]Ã' | 00457021 683B704500 push $0045703B 00457026 8D4584 lea eax, [ebp-$7C] 00457029 BA04000000 mov edx, $00000004
| 0045702E E8E9CEFAFF call 00403F1C 00457033 C3 ret
| 00457034 E9CFC8FAFF jmp 00403908 00457039 EBEB jmp 00457026
****** END | 0045703B 5F pop edi 0045703C 5E pop esi 0045703D 5B pop ebx 0045703E 8BE5 mov esp, ebp 00457040 5D pop ebp 00457041 C3 ret
*) |
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 02.12.06 21:02
stimmt man kann auch einfach die passwort abfrage durch eine entschlüsselung des relevanten codes ersetzen, so muss man das passwort eingeben.
mfg
|
|
Chryzler
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 02.12.06 21:06
Man kann auch einfach (so würde ich es machen) den verschlüsselten Teil entschlüsseln, in der EXE überschreiben, und dann nen JMP vor der internen Entschlüsselungsroutine setzen.
|
|
eruhenon
Beiträge: 53
|
Verfasst: Mo 04.12.06 21:58
@Chryzler thx
nur mal als frage da wir uns ja in opensource units befinden wie haste das denn realisiert?
hab nämlich keinen ansatz wie ich die theorie in die praxis umsetzten kann.
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 04.12.06 22:04
Naja, also das mit in der Exe überschreiben ist nicht möglich. Ansonsten wäre das schon machbar. Code in den Speicher entschlüsseln und dann in Assembler dorthin jumpen. Das probier ich mal aus...
Aber ist ziemlich kompliziert... Mal sehen, ob ich das hinbekomme.
|
|
rizla
Beiträge: 417
Erhaltene Danke: 2
XP
FPC mit Lazarus
|
Verfasst: Mo 04.12.06 22:33
@Chryzler:
hmm.. sehr verdächtig: wenn ich als PW ")" (klammer zu) eingebe, wird in deinem crkme ein check als positiv bewertet und dein crkme beginnt, code zu entschlüsseln, der dann auch ausgeführt wird. bis jetzt läuft mein rechner noch, aber ich krieg immer wieder faults gemeldet (ich habe das dumpfe gefühl, dein crkme führt einfach alles aus). solltest vllt ne chksum einbauen, bevor der code ausgeführt wird oder aber zumindest verhindern, dass destruktiver code ausgeführt wird!
_________________ if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
|
|
eruhenon
Beiträge: 53
|
Verfasst: Di 05.12.06 00:14
rizla hat folgendes geschrieben: | @Chryzler:
hmm.. sehr verdächtig: wenn ich als PW ")" (klammer zu) eingebe, wird in deinem crkme ein check als positiv bewertet und dein crkme beginnt, code zu entschlüsseln, der dann auch ausgeführt wird. bis jetzt läuft mein rechner noch, aber ich krieg immer wieder faults gemeldet (ich habe das dumpfe gefühl, dein crkme führt einfach alles aus). solltest vllt ne chksum einbauen, bevor der code ausgeführt wird oder aber zumindest verhindern, dass destruktiver code ausgeführt wird! |
allerdings könnte hier wieder nen problem vorliegen. wennde ne checksum reinpackst is es zwar als md5 (oder wie auch immer du das machen willst) in dem programm drin aber es ist drin. somit kann man wieder das passwort auslesen und entsprechend per brute force (wenns unbedingt sein muss) entschlüsseln. man hat zumindest schon nen anhaltspunkt für das passwort.
wenn man es einfach ausführt dann hat zumindest der angreifer keine anhaltpunkte.
|
|
Chryzler
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 05.12.06 15:10
rizla hat folgendes geschrieben: | @Chryzler:
hmm.. sehr verdächtig: wenn ich als PW ")" (klammer zu) eingebe, wird in deinem crkme ein check als positiv bewertet und dein crkme beginnt, code zu entschlüsseln, der dann auch ausgeführt wird. bis jetzt läuft mein rechner noch, aber ich krieg immer wieder faults gemeldet (ich habe das dumpfe gefühl, dein crkme führt einfach alles aus). solltest vllt ne chksum einbauen, bevor der code ausgeführt wird oder aber zumindest verhindern, dass destruktiver code ausgeführt wird! |
Ich hab schon so ne kleine Checksum eingebaut, aber es ist klar, dass du immer wieder ein Passwort findest (z.B. ")"), das die selbe Checksum hat wie das Original-Passwort. Es ging ja auch eher so um's Prinzip. In Echt würde ich da natürlich SHA1 oder MD5 nehmen.
eruhenon hat folgendes geschrieben: | rizla hat folgendes geschrieben: | @Chryzler:
hmm.. sehr verdächtig: wenn ich als PW ")" (klammer zu) eingebe, wird in deinem crkme ein check als positiv bewertet und dein crkme beginnt, code zu entschlüsseln, der dann auch ausgeführt wird. bis jetzt läuft mein rechner noch, aber ich krieg immer wieder faults gemeldet (ich habe das dumpfe gefühl, dein crkme führt einfach alles aus). solltest vllt ne chksum einbauen, bevor der code ausgeführt wird oder aber zumindest verhindern, dass destruktiver code ausgeführt wird! |
allerdings könnte hier wieder nen problem vorliegen. wennde ne checksum reinpackst is es zwar als md5 (oder wie auch immer du das machen willst) in dem programm drin aber es ist drin. somit kann man wieder das passwort auslesen und entsprechend per brute force (wenns unbedingt sein muss) entschlüsseln. man hat zumindest schon nen anhaltspunkt für das passwort.
wenn man es einfach ausführt dann hat zumindest der angreifer keine anhaltpunkte. |
Wenn du ein genügend langes Passwort wählst, dürfte auch das kein Problem mehr sein.
eruhenon hat folgendes geschrieben: | @Chryzler thx
nur mal als frage da wir uns ja in opensource units befinden wie haste das denn realisiert?
hab nämlich keinen ansatz wie ich die theorie in die praxis umsetzten kann. |
Sieh dir mal diesen Thread an. Dann kommst du bestimmt drauf.
Chryzler
|
|
eruhenon
Beiträge: 53
|
Verfasst: Di 05.12.06 16:47
wenn cih dich jetzt richtig verstanden hab lädst du den code innen speicher und überschreibst ihn dann duch den (aus dem speicher ausgelesenen) entschlüsselten code...
oder hab ichs falsch verstanden?
|
|
Chryzler
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 05.12.06 17:39
eruhenon hat folgendes geschrieben: | wenn cih dich jetzt richtig verstanden hab lädst du den code innen speicher und überschreibst ihn dann duch den (aus dem speicher ausgelesenen) entschlüsselten code...
oder hab ichs falsch verstanden? |
1. Ich kopiere den verschlüsselten Teil an eine andere Stelle im Speicher
2. Ich entschlüssle den kopierten Teil
3. Ich schreibe den entschlüsselten Teil zurück an die originale Stelle
4. Ich rufe die nun entschlüsselte Stelle auf.
5. Ich gib den nicht mehr benötigten Speicher frei
Jetzt dürfte eigentlich alles klar sein.
Sobald das Prog gecrackt wurde, könnt ihr von mir aus auch noch den Quellcode haben
Chryzler
|
|
eruhenon
Beiträge: 53
|
Verfasst: Di 26.12.06 18:10
sieht nicht so aus als würde das hier jemand noch hinkriegn...
|
|
Chryzler
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 26.12.06 18:55
Mensch, Leute! Jetzt strengt euch mal ein bisschen an! So schwierig ist es doch gar nicht
Ich hätte das Prog im Rätselthread posten sollen
|
|
hagbart06
Hält's aus hier
Beiträge: 2
Win XP Home, Win XP Pro, Linux 10.1
Delphi6, C++, Delphi 2005
|
Verfasst: Mi 27.12.06 13:33
Luckie hat folgendes geschrieben: | Das ist jetzt nicht dein Ernst oder? Was hat das für ein Wert? So eine einfache if-Abfrage dürfte jeder hinbekommen, wohl schon ein Anfänger nach fünf Minuten. Zu dem steht das Passort hardgecodet in der Exe. Ich habe es mal gecrackt. Eventuell findest du ja das neu Passort raus. |
So das Passwort ist Crak, ist ganz einfach, muss man nur mit dem Editor öffnen, braucht nicht mal einen Hex-Editor
|
|
Leuchtturm
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Mi 27.12.06 13:36
Das steht schon irgendwo auf der ersten/zweiten Seite
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
|