ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Delphi] VK, как получить signature?
  #1  
Старый 14.05.2010, 15:43
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
Question [Delphi] VK, как получить signature?

отправлял картинку на стену, решил проснифать запрос. Увидел нечто такое:


в контенте страниц я ничего ненашел.. где ж его искать то? о_О
 
Ответить с цитированием

  #2  
Старый 14.05.2010, 17:48
Tigger
Познавший АНТИЧАТ
Регистрация: 27.08.2007
Сообщений: 1,107
Провел на форуме:
5386281

Репутация: 1177


Отправить сообщение для Tigger с помощью ICQ
По умолчанию

AJAX?

Я хз, давно с ВК не работал.
 
Ответить с цитированием

  #3  
Старый 14.05.2010, 17:50
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Для снифа заюзай CommView и не парься. Когда всё сделаешь, то поищи в тексте слово signature и выдери из него значение. Затем поищи в тексте это значение. так и найдеш кто и когда его поставил
 
Ответить с цитированием

  #4  
Старый 14.05.2010, 18:48
Jingo Bo
Познающий
Регистрация: 25.10.2009
Сообщений: 97
Провел на форуме:
604635

Репутация: 15
По умолчанию

Этот хеш берется из флешки в которой рисуют граффити. После декомпиляции я понял как он генерируется, а именно :
1. Весь PNG файл конвертируется в base64
2. Из получееных данных берется первые 1024 байт и из них создаётся MD5 хэш, который собсна вы и видите.

З.Ы. Из инета не берите кодер base64, во флешке он специфичный немного.
 
Ответить с цитированием

  #5  
Старый 14.05.2010, 21:43
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

а какой же тогда нужен? оО
 
Ответить с цитированием

  #6  
Старый 14.05.2010, 21:56
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

при попытке отослать картинку, возникает ошибка: HTTP/1.1 413 Request Entity Too Large
исользован следующий код:

Код:
// ---- Отправка картинки на стену ----
procedure TidVKClient.PostWallPicture(const to_id, AFile: string);
var
 Multi : TIdMultiPartFormDataStream;
 Signature : string;
 URL : string;
begin
 Multi := TIdMultiPartFormDataStream.Create;

 Signature := StrTobase64(file_get_contents(AFile), 0);
 Signature := Copy(Signature, 0, 1024);
 ShowMessage(IntToStr(Length(Signature)));
 Signature := GetMD5(Signature);

 url := 'http://vkontakte.ru/graffiti.php?to_id=' + to_id + '&group_id=0';


 Multi.AddFormField('Signature', Signature);
 Multi.AddFile('Filedata', AFile, 'image/png');
 HTTP.Post(url, multi);
end;

Последний раз редактировалось RedFern.89; 14.05.2010 в 21:59..
 
Ответить с цитированием

  #7  
Старый 15.05.2010, 00:25
Jingo Bo
Познающий
Регистрация: 25.10.2009
Сообщений: 97
Провел на форуме:
604635

Репутация: 15
По умолчанию

У меня не получилось отослать граффити, мне выдает 400/ Bad Request, что означает что контакт понял что не флешка граффити отправляет.
Короче, вот что я накалякал после декомпилирования флешки и портирования(с некоторым изменением на делфи), работает 100%
Код:
unit EncryptsUnit;

interface

Uses Windows, SysUtils;

type TByteArray = array of Byte;


function base64_encodeByteArray(data : TByteArray) : String;
function base64_decodeToByteArray(data : String) : TByteArray;

function base64_encode(inStr : String) : String;
function base64_decode(inStr : String) : String;
implementation

{---------------------------------------------------------------}
{--BASE64 Encode, Decode----------------------------------------}
{---------------------------------------------------------------}
const version : String = '1.0.0';
      BASE64_CHARS : String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function BASE64_Index(c : Char) : Byte;
Var ci : Byte;
Begin
    ci := Ord(c);
    if ci <= $3D then
    Begin
        if (ci <= $39) then
        Begin
            if (ci >= $30) then
              Result := 53 + (ci - $30) else
            Begin
                if ci = $2B then Result := 63 else
                  if ci = $2F then Result := 64;
            end;
        end else
          Result := 65;
        Exit;
    end;
    if ci <= $5A then
    Begin
        Result := ci - $40;
        Exit;
    end;
    if ci <= $7A then
    Begin
        Result := 26 + ci - $60;
        Exit;
    end;
    Result := 65;
end;
function base64_encode(inStr : String) : String;
Var ba : TByteArray;
    utf : String;
Begin
    utf := AnsiToUtf8(inStr);
    SetLength(ba, Length(utf));
    Move(utf[1], ba[0], Length(utf));
    Result := base64_encodeByteArray(ba);
end;
function base64_encodeByteArray(data : TByteArray) : String;
Var inBuf : Array of Byte;
    i, j, k : Cardinal;
    outBuf : array[0..3] of Byte;
    dataPos : Cardinal;
Begin
    dataPos := 0; Result := '';
    i := 0;
    while (dataPos <= High(data)) do
    Begin
        SetLength(inBuf, 3);
        FillChar(inBuf[0], 3, 0);
        i := 0;
        while ((i < 3) and (dataPos <= High(data))) do
        Begin
            inBuf[i] := data[dataPos];
            i := i + 1;
            Inc(dataPos);
        end;
        outBuf[0] := (inBuf[0] and 252) shr 2;
        outBuf[1] := ((inBuf[0] and 3) shl 4) or (inBuf[1] shr 4);
        outBuf[2] := ((inBuf[1] and 15) shl 2) or (inBuf[2] shr 6);
        outBuf[3] := inBuf[2] and 63;
        while (i < 3) do
        Begin
            outBuf[(i + 1)] := 64;
            i := i + 1;
        end;
        k := 0;
        while (k < 4) do
        Begin
            Result := Result + BASE64_CHARS[outBuf[k]+1];
            k := k + 1;
        end;
    end;
end;

function base64_decode (inStr : String) : String;
Var ba : TByteArray;
    utf : String;
Begin
    ba := base64_decodeToByteArray(inStr);
    SetLength(utf, High(ba)+1);
    Move(ba[0], utf[1], High(ba)+1);
    Result := System.Utf8ToAnsi(utf);
end;

function base64_decodeToByteArray(data : String) : TByteArray;
Var
    i, j, k : Cardinal;
    inBuf : Array[0..3] of Byte;
    outBuf : Array[0..2] of Byte;
    _HypArray : TByteArray;
    _HypLength : Cardinal;
const ReAlignStep = 1024*1024*2; {Эт для того что бы менеджер память по байту не насиловать}
Begin
    i := 0; _HypLength := 0;
    SetLength(_HypArray, ReAlignStep);
    while (i < Length(data)) do
    Begin
        j := 0;
        while ((j < 4) and (i + j < Length(data))) do
        Begin
             inBuf[j] := BASE64_Index(data[i + j + 1]) - 1;
             Inc(j);
        end;
        outBuf[0] := (inBuf[0] shl 2) + ((inBuf[1] and 48) shr 4);
        outBuf[1] := ((inBuf[1] and 15) shl 4) + ((inBuf[2] and 60) shr 2);
        outBuf[2] := ((inBuf[2] and 3) shl 6) + inBuf[3];
        k := 0;
        while (k < 3) do
        Begin
            if (inBuf[(k + 1)] = 64) then
              Break;
            _HypArray[_HypLength] := outBuf[k];
            Inc(_HypLength);
            if _HypLength > High(_HypArray) then
                SetLength(_HypArray, High(_HypArray)+ReAlignStep+1);
            Inc(k);
        end;
        Inc(i, 4);
    end;
    SetLength(Result, _HypLength);
    Move(_HypArray[0], Result[0], _HypLength);
end;

end.
Модуль MD5 берется стандартный. А вот над TIdMultiPartFormDataStream придётся немного пошаманить(когда след. код разбрешь - поймёшь что).
Вот код отправки(понять можно)
Код:
                SetLength(signature, wallMem.Size);
                Move(PByte(wallMem.Memory)^, signature[1], wallMem.Size);
                signature := base64_encode(signature);
                SetLength(signature, Min(1024, Length(signature)));
                signature := StrMD5(signature);
                {Заполняем поля в запрос}
                wallPost := TIdMultiPartFormDataStream.Create;
                wallPost.Boundary := '--OLEG-ANDREEV-PAVEL-DUROV-GRAFFITI-POST';
                wallPost.RequestContentType := sContentType + wallPost.Boundary;
                wallPost.AddFormField('Signature', LowerCase(signature));
                Exit;
                wallPost.AddObject('Filedata', 'image/png', wallMem, 'graffiti.png');
                wallPost.AddFormField('Upload', 'Submit Query');
{дальше отправка wallPost}
Примечание - в wallMem : TMemoryStream хранится весь PNG файл.

Есть ещё трабла с TIdMultiPartFormDataStream в том что флешка немного не так завершает POST данные и это единственное различие, осталось только его переписать и тогда граффити отправится(один раз кстати у меня получилось отправить но потом контакт выдал System Error, что меня немного напугало и я опыты оставил).
 
Ответить с цитированием

  #8  
Старый 15.05.2010, 00:28
Jingo Bo
Познающий
Регистрация: 25.10.2009
Сообщений: 97
Провел на форуме:
604635

Репутация: 15
По умолчанию

Кстати в нижнем коде в одном месте Exit стоит, его надо проигнорировать естественно, я его для отладки вставлял) А верхний код кривоват, т.к. не полностью оптимизировал текст после декомпиляции.

Последний раз редактировалось Jingo Bo; 15.05.2010 в 00:30..
 
Ответить с цитированием

  #9  
Старый 15.05.2010, 13:30
Jingo Bo
Познающий
Регистрация: 25.10.2009
Сообщений: 97
Провел на форуме:
604635

Репутация: 15
По умолчанию

Блин нашёл почему граффити не отправляется, у них тоже переделаный немного MD5, вот придётся весь модуль декомпилировать и портировать. Если удастся, выложу сюда.
 
Ответить с цитированием

  #10  
Старый 15.05.2010, 14:07
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
По умолчанию

Модули base64 и md5 брал из проги vkontakte picture. Щас все работает даже не надо нажимать кнопку отправить на странице, компонент сам парсит все запросы.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, что Ваш ребенок растет хакером? PHOEN_i_X Болталка 148 13.06.2010 18:02
все про NETCAT fker *nix 6 01.05.2010 23:44
Взлом домофона Метаком andreipup Болталка 11 14.08.2009 16:06
Установка Windoze глазами линуксоида (100% факты) nerezus Болталка 47 16.10.2005 15:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ