Autor Beitrag
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Do 30.11.06 20:18 
@ marc : bist ja auch ein Profi :wink:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Do 30.11.06 23:09 
ja, habe mir schon gedacht, dass das nicht mehr aktuell ist, aber manchmal bin ich halt etwas nostalgisch :lol:
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Sa 02.12.06 18:45 
user profile iconeruhenon 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Sa 02.12.06 20:34 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
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.

Ich habe eine einfache XOR-Verschlüsselung eingesetzt. Wenn man aber zum Beispiel Blowfish mit SHA1-Hash nimmt, dürfte es fast unmöglich werden, den verschlüsselten Code ohne Passwort zu bekommen. Da ist dir was tolles eingefallen, user profile iconeruhenon ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 02.12.06 20:37 
user profile iconChryzler hat folgendes geschrieben:
Ich habe eine einfache XOR-Verschlüsselung eingesetzt.

Ich sehs, ich mach mich gerade über deinen Code her:
ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: 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! :gruebel:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



BeitragVerfasst: Di 05.12.06 00:14 
user profile iconrizla 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! :gruebel:


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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Di 05.12.06 15:10 
user profile iconrizla 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! :gruebel:

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.

user profile iconeruhenon hat folgendes geschrieben:
user profile iconrizla 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! :gruebel:


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.
user profile iconeruhenon 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Di 05.12.06 17:39 
user profile iconeruhenon 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 53



BeitragVerfasst: Di 26.12.06 18:10 
sieht nicht so aus als würde das hier jemand noch hinkriegn...
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Di 26.12.06 18:55 
Mensch, Leute! Jetzt strengt euch mal ein bisschen an! So schwierig ist es doch gar nicht :nut:
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
BeitragVerfasst: Mi 27.12.06 13:33 
user profile iconLuckie 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Mi 27.12.06 13:36 
Das steht schon irgendwo auf der ersten/zweiten Seite :roll:

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.