Меню
Категории
Алгоритм шифрования паролей из CuteFTP 5.0 XP
9 ноября, 2007 Система

Алгоритм шифрования паролей в CuteFTP 5.0 XP

Однажды полетел у меня винт. И файлы с паролями к сайтам и ФТПшниками повредились, а набирать это вручную не хотелось. Покопался я в своих бесчисленных программах – залез в папку CuteFTP 5.0 и увидал там неприметные файлы sm.dat и sm.bak – они были одинаковы и в них открытым текстом были написаны имена моих ФТП акаунтов с узернамами и адресами! Вот и чудо, я спасён. Ноони оказались, как показала практика XOR ом =).

В формате примерно таком:

===
Tred_________ _ _ _ 192.168.0.1_kas_эээ _ _ яяяяяяяяяяяя_ _ _ _ _ Ъ”э?°э?
===

Где явно можно различить что:192.168.0.1 – адрес kas – имя “эээ” – пароль интересно зашифрованный (:).
Ну ясно меня пробило написать расшифровщик и я придумал создать новый акаунт с паролем из всех возможных 256 символов.Тем более длина пароля и шифрованного слова совпадали.
И сделал. На мое удивление, я увидел зашифрованную строку из каракулей букв и цифр.
Но на этом страдание не кончилось я взял то, что получил и поменял старый пароль на строку каракулей и с ужасом увидел в файлике свой пароль.
Ну, естесно, я собрал все коды и их переводы в один файл (список приведен ниже). И начал устанавливать разницу между кодами шифрованного пароля – увидел, что все отличаются на 4 разных числа (200 184 72 56).
Ну а коль делать было нечего я собрал все коды рассортировал, начал устанавливать зависимость и заметил, что шифрованные коды идут не равномерно (а я уж обрадовался), коды чередуются в странном порядке по 8 кодов.
Очень интересно перекодировки чередуются по 8 кодов в 32 разных группах, ниже приведены таблицы.
До 16 группы идет чередованное сложение с числом, а после 16 симметричное вычитание по столько же значений, но в обратном порядке. Я долго-придолго думал, как же они реализовали такую тему в одну формулу, и решил, что одной формулой там и не пахнет. Так как хоть 2 оператора IF там должно было присутствовать.
Тем более никакой разницы никто и никогда не почует. Алгоритм мне показался весьма интересным, и расшифровать его было очень интересно так как это мой первый расшифрованный алгоритм. :) Могу также сказать что удивило меня в алгоритме так это то что если код символа шифруется из 1 в 201, то тоже самое можно сказать и о шифровке из 201 в 1. Так что расшифровать пароль не составляет труда и нет никаких формул и муторных дешифраторов!
ТОесть эта формула одновременно шифрует и дешифрует. Потом я приметил, что, и разница кодов на определенное число тоже чередуется! И я решил написать себе памятку вот она внизу. И до меня дошло, как они шифровали пароли: До 127 шло вычитание, а после – шло сложение тех же самых чисел в обратном прядке.

Но при программном дешифровании были проблемы с проверкой, поэтому это я реализовал не в консоли, а через WinAPI, так как CuteFTP 5.0 не консольное приложение ;).

Вобщем эти цифры (если кто не понял) – это ASCII коды символов а через дефис написаны их шифрованые/дешифрованные коллеги! Чтобы перекодировать нужно переводить, но я этот процесс малость запрограммировал исходик вы можете откопать далее.

Перечислены операции дешифровки для различных групп:

–[1]–
0-200
1-201
2-202
3-203
4-204
5-205
6-206
7-207
–[2]–
8-192
9-193
10-194
11-195
12-196
13-197
14-198
15-199
–[4]–
24-208
25-209
26-210
27-211
28-212
29-213
30-214
31-215
–[3]–
16-216
17-217
18-218
19-219
20-220
21-221
22-222
23-223
–[5]–
32-232
33-233
34-234
35-235
36-236
37-237
38-238
39-239
–[6]–
40-224
41-225
42-226
43-227
44-228
45-229
46-230
47-231
–[7]–
48-248
49-249
50-250
51-251
52-252
53-253
54-254
55-255
–[8]–
56-240
57-241
58-242
59-243
60-244
61-245
62-246
63-247
–[9]–
64-136
65-137
66-138
67-139
68-140
69-141
70-142
71-143
–[10]–
72-128
73-129
74-130
75-131
76-132
77-133
78-134
79-135
–[11]–
80-152
81-153
82-154
83-155
84-156
85-157
86-158
87-159
–[12]–
88-144
89-145
90-146
91-147
92-148
93-149
94-150
95-151
–[13]–
96-168
97-169
98-170
99-171
100-172
101-173
102-174
103-175
–[14]–
104-160
105-161
106-162
107-163
108-164
109-165
110-166
111-167
–[15]–
112-184
113-185
114-186
115-187
116-188
117-189
118-190
119-191
–[16]–
120-176
121-177
122-178
123-179
124-180
125-181
126-182
127-183
–[17]–
128-72
129-73
130-74
131-75
132-76
133-77
134-78
135-79
–[18]–
136-64
137-65
138-66
139-67
140-68
141-69
142-70
143-71
–[19]–
144-88
145-89
146-90
147-91
148-92
149-93
150-94
151-95
–[20]–
152-80
153-81
154-82
155-83
156-84
157-85
158-86
159-87
–[21]–
160-104
161-105
162-106
163-107
164-108
165-109
166-110
167-111
–[22]–
168-96
169-97
170-98
171-99
172-100
173-101
174-102
175-103
–[23]–
176-120
177-121
178-122
179-123
180-124
181-125
182-126
183-127
–[24]–
184-112
185-113
186-114
187-115
188-116
189-117
190-118
191-119
–[25]–
192-8
193-9
194-10
195-11
196-12
197-13
198-14
199-15
–[26]–
200-0
201-1
202-2
203-3
204-4
205-5
206-6
207-7
–[27]–
208-24
209-25
210-26
211-27
212-28
213-29
214-30
215-31
–[28]-

216-16
217-17
218-18
219-19
220-20
221-21
222-22
223-23
–[29]–
224-40
225-41
226-42
227-43
228-44
229-45
230-46
231-47
–[30]–
232-32
233-33
234-34
235-35
236-36
237-37
238-38
239-39
–[31]–
240-56
241-57
242-58
243-59
244-60
245-61
246-62
247-63
–[32]–
248-48
249-49
250-50
251-51
252-52
253-53
254-54
255-55

Теперь я приводжу вам список операций которые проводились для шифрования/дешифрования паролей в файле: Номер группы – операция.

1 +200
2 +184
3 +200
4 +184
5 +200
6 +184
7 +200
8 +184
9 +72
10 +56
11 +72
12 +56
13 +72
14 +56
15 +72
16 +56
17 -56
18 -72
19 -56
20 -72
21 -56
22 -72
23 -56
24 -72
25 -184
26 -200
27 -184
28 -200
29 -184
30 -200
31 -184
32 -200

Так вроде с цифрами закончили, ну а если вы пролистали в надежде найти готовый исхоник, то вам повезло я его не зажал. Вот он милый приведен ниже. И немного расскажу как работает этот код – Работа основана на простом многократном сравнении. Если код совпадает с нашей таблицей то выполняем соответствующую операцию и возвращаем расшифрованный код символа. Я проверял что функция не может ошибиться если передвавть в нее значения от 1 до 255, иначе функция должна вернуть NULL. Что означает ошибку.

#include “windows.h”
crypt(int s){ //Это функция получает значение кода символа и передает дешифрованный код
if(s<=127) //Проверка на половинку
{
if( (s>=0 && s<8) || (s>=16 && s<24) || (s>=32 && s<40) || (s>=48 && s<56) )
{
s+=200; //Операция
return s; //Вернем код шифров_символа
}
else //Если не подошло то катаем дальше
{
if( (s>=8 && s<16) || (s>=24 && s<32) || (s>=40 && s<48) || (s>=56 && s<64) )
{
s+=184;
return s;
}
else
{
if( (s>=64 && s<72) || (s>=80 && s<88) || (s>=96 && s<104) || (s>=56 && s<64) )
{
s+=72;
return s;
}
else
{
if( (s>=72 && s<80) || (s>=88 && s<96) || (s>=104 && s<112) || (s>=120 && s<184) )
{
s+=56;
return s;
}
} } } }
else
{
if( (s>=128 && s<136) || (s>=144 && s<152) || (s>=160 && s<168) || (s>=176 && s<184) )
{
s-=56;
return s;
}
else
{
if( (s>=136 && s<144) || (s>=152 && s<160) || (s>=168 && s<176) || (s>=184 && s<192) )
{
s-=72;
return s;
}
else
{
if( (s>=192 && s<200) || (s>=208 && s<216) || (s>=224 && s<232) || (s>=240 && s<248) )
{
s-=184;
return s;
}
else
{
if( (s>=200 && s<208) || (s>=216 && s<224) || (s>=232 && s<240) || (s>=248 && s<256) )
{
s-=200;
return s;
} } } } }
return 0;
}
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int number = crypt(236); //Код символа который нужно шифровать/дешифровать
char *string; //Переменные
string = new char [10];
itoa(number,string,10); //Превратим зашифрованный код в строку

MessageBox(0,string,”Это код символа из пароля зашифрованного CuteFtp 5.0 xp”,0);

return 0;
}

Автор не несет никакой ответственности за то, что могут сделать с этим кодом другие люди. Пусть они хоть их в троянцы вставляют. Эта статья приведена строго в ознакомительных целях для того чтобы показать авторам программы, что даже новичок расшифровал достаточно сложный алгоритм. На других компьютерах и ОС алгоритм не проверялся и это значит, что я не отвечаю за то, как поведет себя программа с другими версиями ОС и CuteFTP. А если вы используете мою статью то ссылка на автора обязательна, рассчитываю на ваше самоуважение.

Добавить комментарий




*