Теперь немного о программе. Для начала регайтесь через программу в контакте (Через кнопочку зайти), после чего указывайте свой ID и размер в ММ и нажимайте кнопку отправить. Не ссать пароли не тырит, проверьте на любом антивирусе. Вобщем идеи и предложения выкладывайте сюда.
Прога работает, только для корректной работы нужно зайти из проги под своим логином, и указать свой ID в программе. В дальнейшем будет все на автомате + угадывать слова. Выложу после того как доделаю вместе с исходным кодом МБ кому понадобится.
<SCRIPT>
function hack_begin()
{
input = document.fromCharCode.input.value;
massive = input.split(",");
i = 0
slovo = "";
predel = massive.length - 5;
while (i < predel){
nomer = massive[i];
nomer=nomer-i;
slovo = slovo + String.fromCharCode(massive[i]-i);
i++;
}
document.fromCharCode.output.value = slovo;
}
</SCRIPT>
вот что написал я.. в делфи консоль.
Код:
program kroko;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
type
mas=array [1..20] of byte;
function Str_Count(str: string): Integer;
var
strLen, idx: Integer;
begin
Result:=0; idx:=1; strLen:=Length(str);
while idx<=strLen do
begin
while (idx<=strLen) and (str[idx] = ',') do
idx:=idx+1;
if idx<=strLen then
begin
Result:=Result+1;
while (idx<=strLen) and (str[idx] <> ',') do
idx:=idx+1;
end;
end;
end;
//считает буквы
{function FromCharCode(ch:array of byte):AnsiString;
var L:Integer;
begin
L := Length(ch);
SetLength(result, L);
if L > 0 then Move(ch[0], result[1], L);
end;}
function Get_Str(str: string; n:word):string;
var
idx, space, strLen: integer;
begin
strLen:=Length(str);
space:=0; idx:=0; Result:='';
while (space<>(n-1)) and (idx<=strLen) do
begin
idx:=idx+1;
if (str[idx] = ',') then space:=space+1
end;
idx:=idx+1;
while (idx<=strLen) and (str[idx] <> ',') do
begin
Result:=Result+str[idx];
idx:=idx+1
end;
end;
//выдирает коды букв
procedure Clear_Str (var str:string);
var idx:integer;
t:string;
begin
t:='10'; idx:=1;
while idx<>0 do
begin
idx:=pos(t,str);
delete(str,idx,2);
end;
end;
//чистит строку от "10" т.е было 1080 станет 80
procedure Create_Mas (m_str:string; var m:mas; n:byte);
var i:byte;
str:string;
code:integer;
begin
for i:=1 to n do
begin
str:=Get_Str(m_str,i);
val(str,m[i],code);
end;
end;
//создаёт массив из кодов букв
procedure Convert_Mas (var m:mas; n:integer);
var i:integer;
begin
for i:=1 to n do
m[i]:=(m[i])-(i-1);
end;
//обход защиты приложения (основная процедура)
var
s,word,res:string;
matr:mas;
i,n:byte;
begin
write ('string:');
s:=('1082,1073,1090,1080,1094,1077,1084,1079,1082,1089,1091');
//берём строку из кодов символов
n:=Str_Count(s)-5; //считаем кол-во букв
Clear_Str(s); //чистим строку от "10"
Create_Mas(s,matr,n); //создаём массив
Convert_Mas(matr,n); //переделываем массив
for i:=1 to n do
write (matr[i]:5);
WriteLn(' ',FromCharCode(matr));
readln;
end.
может написано и коряво, но как умею.. всё работает кроме перевода в символы. т.е из строки 1082,1073,1090,1080,1094,1077,1084,1079,1082,1089, 1091 я получаю "RHXMZH", а должен получить "карета". кто захочет доделать буду только благодарен. и ещё бы переделать её в приложение с интерфейсом. +в дальнейшем научить ловить пакеты от сервера и парсить оттуда зашифрованное слово и выдавать его пользователю.
Вот почему у тебя не определяется корректно слово.
Если закодирован первый символ был 1080, то его раскодирование = String.fromCharCode(1079 - 0), тоесть String.fromCharCode(1079). Второй был 1081, его раскодировка = String.fromCharCode(1081 - 1), тоесть String.fromCharCode(1080), и так далее, с каждым разом увеличивая _loc_4. то бишь далее 1085 - 2 = 1083 и т.д. Кроме соответственно пяти последних ну это ты знаешь.
Последний раз редактировалось Neset; 24.05.2010 в 08:19.