Полезные программы (собственные)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by De-visible, 9 Jul 2008.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    IcqMod DLL

    IcqMod DLL


    Что это?
    Это небольшая DLL для работы с аськой ) которая реализует основные функции для работы с протоколом.
    Основные - это коннект, дисконнект, отправка и получение сообщений, запрос авторизации и отказ авторизовать.

    Заче оно нужно?
    1) Очень удобный модуль для ICQ спама
    2) Очень удобный модуль для ICQ флуда
    3) Возможность быстрого создания простых ICQ ботов
    4) Использование в любом другом софте который использует ICQ протокол

    В чем особенность?
    1) чистый размер DLL - 6 килобайт
    2) возможность использования в любом компилируемом языке
    3) простота использования
    4) поддержка socks4 и socks5
    5) нет нужны юзать VCL и тому подобные вещи.
    6) собственный двиг (не используется TICQClient)/ собственно по размеру это видно
    7) в онлайн можно выводить сколько угодно номеров (в особенности если юзать прокси) при этом тормозить ничего не будет в отличии от использования VCL компонента TICQClient

    Какие функции имеются?
    ICQClose - закрытие соединение
    ICQConnect - коннект к серваку
    ICQSendMsg - посылка сообщения
    ICQSendAuth - посылка запроса на авторизацию с передачей текста
    ICQAuth - авторизовать UIN или отказать в авторизации
    ICQReadMsg - проверка на наличие сообщения в очереди.

    Технические особенность
    1) максимальное кол-во параллельно работающих коннектов - неограничено, на сколько система позволит
    2) максимальный размер входящего сообщения - 240 байт. Просто большие сообщения отправляются другим способом, который не поддерживается в dll
    3) поддержка приема русских сообщений
    4) оправка сообщений на рус языке требует предварительного конверта текста в UTF8. Англ и так прокатывает.
    5) используется только WinSock2
    6) написан на Си.
    7) Скомпилен в VS 2008 Pro

    Дополнительно
    Т.к. судя по виду, эту либу будут использовать в основном для спама или флуда или в других программах которые будут приность прибыль людям, то исходники данной DLL выкладывать не буду. Тем кому они понадобятся могу продать за определенную плату.

    Пример использования в Delphi
    Пример реализации в делфи простого бота который будет выводить в консоль сообщение которые посылает юзвери и их UIN's
    на запрос !TIME будет отослано текущее время.

    Пример лежит в архиве
    TimeBot.dpr - сам бот
    IcqMod.pas - вспомогательный модуль описывающий константы и прототипы
    IcqMod.dll - сама dll

    Пример использования в C/C++
    Примера не будет, просто в файле IcqMod.h описаны константы и прототипы функций. Кому нужно разберутся.

    Подробное описание функций? констант и структур
    Code:
      PROXY_INFO = packed record
        ProxyType : dword; // тип прокси
        ProxyIp : dword; //  адрес прокси
        ProxyPort : word; // порт прокси
      end;
      PPROXY_INFO = ^PROXY_INFO;
    
    Данная структура описывает инфо о прокси.
    Типы прокси:
    PROXY_TYPE_SOCKS_4 = 1;
    PROXY_TYPE_SOCKS_5 = 2;

    заполняется так примерно:
    proxy.ProxyType = PROXY_TYPE_SOCKS_5;
    proxy.ProxyPort = 1222;
    proxy.ProxyIp = inet_addr("127.0.0.1");
    --------------------------------
    Code:
      ICQ_CLIENT = packed record
        status : byte;
        sequence : word;
        sock : dword;
      end;
    
    основная структура описывающая состояние работы. Заполняется функцией ICQConnect
    В ней не стоит ничего менять, просто используете для работы. Единственная переменная за состоянием которой нужно следить - status она может принимать значение:
    ICQ_CLIENT_STATUS_CONNECTED = 1; - связь установлена
    ICQ_CLIENT_STATUS_DISCONNECTED = 2; - нет связи с сервером
    --------------------------------
    function ICQConnect(var client : ICQ_CLIENT; host : PAnsichar; port : word; login : PAnsichar; pass : PAnsichar; pproxy : PPROXY_INFO) : dword; stdcall; external ICQMOD_DLL;

    подключение к серверу, где
    client - переменная для хранения состояния
    host - имя сервака типа login.icq.com
    port - порт сервера (5190)
    login - UIN
    pass - пароль для UINа
    pproxy - указатель на структуру описывающую прокси.
    Если 0 значит не юзать прокси, если указана структура прокси, то берет из неё данные для коннекта

    Функция возвращает код состояния:
    ICQ_CONNECT_STATUS_OK = $FFFFFFFF; // подключился удачно
    ICQ_CONNECT_STATUS_RECV_ERROR = $FFFFFFFE; // ошибка чтения данных
    ICQ_CONNECT_STATUS_SEND_ERROR = $FFFFFFFD;// ошибка отправки данных
    ICQ_CONNECT_STATUS_CONNECT_ERROR = $FFFFFFFC;// ошибка коннекта к серваку
    ICQ_CONNECT_STATUS_AUTH_ERROR = $FFFFFFFB; // не смог авторизоваться. Или пас не подходит или превышен лимит
    -----------------
    function ICQReadMsg(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar; var msglen : integer) : dword; stdcall; external ICQMOD_DLL;

    Проверка на сообщение.
    client - описание состояния
    UIN - адрес буфера куда будет помещен UIN человека от которого пришло сообщение. желательно чтобы был 10 байт.
    msg - адрес буфера куда будет записано сообщение.
    msglen - переменная в которую будет записана длинна сообщения.

    Функция возвращает:
    0 - сообщения нет
    1 - сообщение получено.

    Данная функция извлекает данне из сокета если они есть. И если это сообщение то парсит его.
    ----------------
    function ICQAuth(var client : ICQ_CLIENT; UIN : PAnsichar; AuthOk : dword) : dword; stdcall; external ICQMOD_DLL;


    Авторизация номера.
    client - описание состояния
    UIN - номр человека которого нужно авторизовать
    AuthOk - флаг авторизации:
    0 - послать команду - в авторизации отказано
    1 - авторизовать человека.
    ---------------------
    procedure ICQClose(var client : ICQ_CLIENT); stdcall; external ICQMOD_DLL;

    закрывает соединение
    --------------------

    function ICQSendAuth(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar) : dword; stdcall; external ICQMOD_DLL;

    Отсылка запроса на авторизацию.
    UIN - кому отсылается
    msg - текст который будет присутствовать в запросе
    ---------------------
    function ICQSendMsg(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar) : dword; stdcall; external ICQMOD_DLL;

    Посылка сообщения
    UIN - кому
    msg - текст сообщения

    На последок всякая инфа
    Как будет работать DLL - хз. тестил на локальном компе. Сообщениями обменивался с QIP Infium на рус и англ языке. всё было норм.

    При написании DLL некоторые вещи были подсмотрены в TICQClient (запросы на отсылку сообщений и работу с авторизаций) Чтение сообщений и коннект подсмотренный с CommView и php классе работы с аськой. Так что сильно прошу не пинать ))

    И главное - не спамте мою аську :'(

    http://slesh.name/uploads/IcqMod.rar

    (С) SLESH 2009
     
    John D likes this.
  2. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    My proxy

    My proxy - поднимает проксю на 127.0.0.1:8080

    Delphi код


    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ToolWin, ImgList, Registry, IniFiles, WinSock, Unit2;
    
    type
      TForm1 = class(TForm)
        ListView1: TListView;
        ImageList1: TImageList;
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        ToolButton4: TToolButton;
        ToolButton5: TToolButton;
        StatusBar1: TStatusBar;
        procedure ToolButton4Click(Sender: TObject);
        procedure ToolButton5Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ToolButton1Click(Sender: TObject);
      private
        _listenThread:TListenThread;
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.ToolButton4Click(Sender: TObject);
    var
     _reg:TRegIniFile;
    begin
     _reg := TRegIniFile.Create('Software\Microsoft\Windows\CurrentVersion\Internet Settings');
     _reg.WriteString('','ProxyServer', '127.0.0.1:8080');
     _reg.WriteBool('', 'ProxyEnable', true);
     _reg.Free;
     ShowMessage('IE для текущего пользователя сконфигурирован!');
    end;
    
    procedure TForm1.ToolButton5Click(Sender: TObject);
    var
     _reg:TRegIniFile;
     _ini:TIniFile;
     _AppData:string;
    begin
     _AppData := '';
     _reg := TRegIniFile.Create('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders');
     _AppData := _reg.ReadString('', 'AppData', '');
    
     if not (DirectoryExists(_AppData)) then
     begin
      ShowMessage ('Не получилось определить папку');
      Exit;
     end;
    
    
     _AppData := _AppData+'\Opera\Opera\Profile\opera6.ini';
    
     if not (FileExists(_AppData)) then
     begin
      ShowMessage('Не найден конфигурационный файл!');
      Exit;
     end;
     
     _ini := TIniFile.Create(_AppData);
     _ini.WriteBool('Proxy', 'Use HTTP', true);
     _ini.WriteString('Proxy', 'HTTP Server','127.0.0.1:8080');
    
     _reg.Free;
     _ini.Free;
    
     ShowMessage('Opera сконфигурирована!');
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
     _WSAData: WSAData;
    begin
     if (WSAStartup(makeword(1,1), _WSAData))<>0 then
     begin
      ShowMessage('Произошла ошибка при инициализации WinSock!');
      Exit;
     end;
    end;
    
    procedure TForm1.ToolButton1Click(Sender: TObject);
    begin
     _listenThread := TListenThread.Create(false);
     StatusBar1.Panels.Items[0].Text := 'Проксик запущен на порту 8080';
    end;
    
    
    end.
    
    Исходники + прога
     
    _________________________
    #82 <Cyber-punk>, 14 Dec 2009
    Last edited by a moderator: 14 Dec 2009
  3. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Прога My fast port scan

    Программа My fast scan port быстро сканирует порты на удалённом сервере. Написанно на delphi 7.

    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, winsock2, ComCtrls;
    
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Label1: TLabel;
        AddressEdit: TEdit;
        Label2: TLabel;
        StartPortEdit: TEdit;
        EndPortEdit: TEdit;
        Label3: TLabel;
        Button1: TButton;
        DisplayMemo: TRichEdit;
        ProgressBar1: TProgressBar;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function LookupName: TInAddr;
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    //Функция преобразвывающся введённый адрес сервера в спец формат
    //Если введено символьное имя, то она преобразовывает его сначала в IP адрес,
    //а потом переводит в спец формат
    function TForm1.LookupName: TInAddr;
    var
     HostEnt: PHostEnt;
     InAddr: TInAddr;
    begin
     if Pos('.', AddressEdit.Text)>0 then
      InAddr.s_addr := inet_addr(PChar(AddressEdit.Text))
     else
      begin
      HostEnt := gethostbyname(PChar(AddressEdit.Text));
      FillChar(InAddr, SizeOf(InAddr), 0);
      if HostEnt <> nil then
       begin
        with InAddr, HostEnt^ do
         begin
          S_un_b.s_b1 := h_addr^[0];
          S_un_b.s_b2 := h_addr^[1];
          S_un_b.s_b3 := h_addr^[2];
          S_un_b.s_b4 := h_addr^[3];
         end;
       end
      end;
      Result := InAddr;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
     i,j,s, opt, index: Integer;
     FSocket: array [0..41] of TSOCKET; //Массив сокетов
     busy   : array [0..41] of boolean; //Массив, в котором будет храниться информация о каждом сканируемом сокете
     port   : array [0..41] of integer; //Массив сканируемых портов
     addr   : TSockAddr;
     hEvent : THandle; //Объект для обработки сетевых событий
     fset   : TFDset;
     tv     : TTimeval;
     tec    :PServEnt;
     PName:String;
     GInitData : TWSADATA;
    begin
     // Устанавливаю максимальное и минимальное значение полоски состояния сканирования
     //Я устанавливаю в минимум начальный порт сканирования, а в максимум - конечный порт
     ProgressBar1.Min:=StrToInt(StartPortEdit.Text);
     ProgressBar1.Max:=StrToInt(EndPortEdit.Text);
    
     //Инициализирую WinSock
     WSAStartup(MAKEWORD(2,0), GInitData);
    
     //Записываю в переменную i значение начального порта
     i:=StrToInt(StartPortEdit.Text);
    
     //Заполняю основные поля структуры addr, которая будет использоваться
     //при вызове функции connect
     addr.sin_family := AF_INET;
     addr.sin_addr.s_addr := INADDR_ANY;
    
     //Вывожу сообщение о том, что начат поиск введённого хоста
     DisplayMemo.SelAttributes.Color:=clTeal;
     DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold];
     DisplayMemo.Lines.Add('Поиск хоста');
    
     //LookupName - эта функция написана выше и она возвращяет адрес в спец формате указанного сервера
     //Результат этой функции я записываю в поле адреса сервера структуры addr
     addr.sin_addr := LookupName;
    
     //Вывожу сообщение о том, что начато сканирование
     DisplayMemo.SelAttributes.Color:=clTeal;
     DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold];
     DisplayMemo.Lines.Add('Сканирование...');
    
     //В index находиться количество сокетов проверяемых за один раз
     index:=40;
    
     //Создаю объект для обработки сетевых событий
     hEvent := WSACreateEvent();
     while i<StrToInt(EndPortEdit.Text) do
      begin
       ///Всем элементам массива busy присваиваю значение false
       for j:=0 to index do
        busy[j]:=false;
    
       //В этом цикле будут асинхронно посылаться запросы на моединение
       //переменная j будет изменяться от 0 до максимального количества
       //элементов в массиве
       for j:=0 to index do
        begin
         //Если j-й порт превысил значение указанного максимального
         //порта, то прервать цикл
         if i>StrToInt(EndPortEdit.Text) then
          begin
           index:=j-1;
           break;
          end;
    
         //Инициализирую очередной j-й сокет из массива FSocket
         FSocket[j] := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    
         //Добавляю j-й сокет к объекту событий с помощью WSAEventSelect
         //1-й параметр - Добавляемый сокет
         //2-й параметр - объект событий, который был создан с помощью WSACreateEvent
         //3-й параметр - какие события ожидать. Тут я указываю FD_WRITE - события записи и FD_CONNECT - события о заключении соединения
         WSAEventSelect(FSocket[j], hEvent, FD_WRITE + FD_CONNECT);
    
         //Указываем порт, на который надо произвести попытку соединения
         addr.sin_port := htons(i);
    
         //Попытка коннекта на очередной порт
         connect(FSocket[j], @addr, sizeof(addr));
    
         //Даём ОС поработать и обработать накопившиеся события.
         //Если этого не делать, то вовремя сканирования будет
         //происходить эффект зависания
         Application.ProcessMessages;
    
         //Проверяю, были ли ошибки.
         if WSAGetLastError()=WSAEINPROGRESS then
          begin
           //Если ошибка произошла, то закрываю этот порт
           closesocket (FSocket[j]);
           //Устанавливаю соответствующий элемент в массиве busy в true
           //чтобы потом не проверять этот порт, потому что он всё равно
           //уже закрыт
           busy[j]:=true;
          end;
    
         //Указываю в массиве port, на какой именно порт мы сейчас послали запрос
         port[j]:=i;
    
         //Увеличиваю счётчик i в котором я отслеживаю, какой порт сейчас сканируеться
         //чтобы на следующем этапе цикла for запустить сканирование следующего порта
         i:=i+1;
        end;
    
       //Обнуляю переменную fset
       FD_Zero(fset);
    
       //Заполняю сканируемый массив сокетов в переменную fset
       for j := 0 to index do
        begin
         if busy[j] <> true then
          FD_SET (FSocket[j], fset);
        end;
    
       //Даём ОС поработать и обработать накопившиеся события.
       Application.ProcessMessages;
    
       //Заполняю структуру, в которой указано время ожидания события от сокета
       tv.tv_sec := 1; //Мы будем ждать 1 секунду
       tv.tv_usec := 0;
    
       //Ожидаем пока произойдёт хотя бы одно событие от любого из сокетов
       s:=select (1, nil, @fset, nil, @tv);
    
       //Даём ОС поработать и обработать накопившиеся события.
       Application.ProcessMessages;
    
       //Запускаю массив, в котором будет проверятся, какие из сокетов в массиве FSocket
       //прошли коннект успешно, а какие нет.
       for j := 0 to index do
        begin
         //Проверяем, был ли закрыт соответствующий порт из-за ошибки
         //Если да, то нет смысла его проверять
         if busy[j] then continue;
    
         if FD_ISSET (FSocket[j], fset) then
          begin
           //В переменную s записываеться размер перменной Opt
           s:=Sizeof(Opt);
           opt:=1;
           //Получаю состояние текущего j-го сокета
           //результат состояния будет в переменной opt
           getsockopt(FSocket[j], SOL_SOCKET, SO_ERROR, @opt, s);
    
           //Если opt равно 0 то порт открыт и к нему можно подключится
           if opt=0 then
             begin
              //Пытаюсь узнать символьное имя порта
              tec := getservbyport(htons(Port[j]),'TCP');
              if tec=nil then
               PName:='Unknown'
              else
               begin
                PName:=tec.s_name;
               end;
              //Вывожу сообщение об открытом порте
              DisplayMemo.Lines.Add('Хост:'+AddressEdit.Text+': порт :'+IntToStr(Port[j])+' ('+Pname+') '+' открыт ');
             end;
          end;
         //Закрыть j-й сокет, потому что он больше уже не нужен
         closesocket(FSocket[j]);
        end;
       //Увеличивею позицию в ProgressBar1
       ProgressBar1.Position:=i;
      end;
     //Закрываю объект событий
     WSACloseEvent(hEvent);
    
     //Вывожу сообщение о конце сканирования
     DisplayMemo.SelAttributes.Color:=clTeal;
     DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold];
     DisplayMemo.Lines.Add('Сканирование закончено...');
     ProgressBar1.Position:=0;
    end;
    
    end.
    
    Исходники + прога
     
    _________________________
  4. J.U.M.P

    J.U.M.P Member

    Joined:
    8 Sep 2009
    Messages:
    15
    Likes Received:
    9
    Reputations:
    4
    ПЫЛЕСОС v2.0

    качаем: http://jumpsoft.narod.ru/pileSOS.exe

    О программе:
    программа сортирует файлы там, куда вы ее поместите. Соответствующие файлы она перемещает в соответствующие папки, которые создает если их нету.
    Очень будет полезна тем, кто много качает и интернета, и на рабочем столе (и не только) у него хлам.
    ---
    Имеется множество настроек, также можно сортировать только те форматы, которые вы введете.
     
    #84 J.U.M.P, 15 Jan 2010
    Last edited: 15 Jan 2010
    1 person likes this.
  5. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Читабельный вывод древообразной структуры на консоль

    Функция для вывода читабельной древообразной структуры на консоль.
    Писал для дерева такого типа
    Code:
    class Tree {
    public:
        std::string value;
        std::vector<Tree> tree;
    };
    также легко будет переделать и под другой тип дерева.

    Например если сконструировать дерево след. выражения
    Code:
    1+2*3
    то вывод будет примерно таким
    Code:
    [+]-|
        |-[1]
        |
        |-[*]-|
        |     |-[2]
        |     |-[3]
    Code:
    #include <iostream>
    #include <string>
    #include <vector>
    
    class Tree {
    public:
        std::string value;
        std::vector<Tree> tree;
    };
    
    void printTree (Tree tree, int offsetWidth = 0, std::string offsetStr = "") {
        std::string str = "[" + tree.value + "]";
        std::string offset(offsetWidth + 1, ' '); // +1 because of '-' character on line 19
        offset = offset.replace(0, offsetStr.length(), offsetStr);
        int length = str.length();
        int size = tree.tree.size();
        if (offsetWidth > 0) {
            offset += "|";
            std::cout << offset << "-";
        }
        std::cout << str;
        if (size > 0) {
            std::cout << "-|\n";
            for (int i = 0; i < size; i++) {
                if (offsetWidth > 0) {
                    printTree(tree.tree[i], length + offsetWidth + 3, offset); // +3 because of '[', ']', '-' characters
                }
                else {
                    printTree(tree.tree[i], length + offsetWidth, offset);
                }
                if (i == size - 1) {
                    std::cout << offset;
                    std::cout << "\n";
                }
            }
        }
        else {
            std::cout << "\n";
        }
    }
    
    int main (int argc, char* argv[]) {
        print(tree);
        std::cin.get();
        return 0;
    }
    
    
     
    #85 rudvil, 17 Jan 2010
    Last edited: 17 Jan 2010
  6. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Bruteforce MMP / брут паролей сервиса mail.ru

    > intro
    Посмотрел сейчас сюжет про linux, про идеи open source (лиценцию GNU GPL) и решил опубликовать исходники.
    // тему создавал отдельную, но тут и обсуждать не чего. Пусть хоть исходник потеряется в сабжах нужной темы ;)

    > WARNING
    Перед тем как компилировать исходники, настоятельно рекомендую прочесть статью 272 часть 2 (до пяти лет) и статью 138 УК РФ (до трёх лет)

    - about
    Функция генерация пароля взята из статьи "Циклический инкремент паролей", собственно каркас TCP/IP клиента у Криса Касперски, а идеи построения нормального сетевого приложения вычитаны у Йона Снейдера
    Клиент MMP собственно мой... многопоточность достигается путем открытия сразу N сокетов, которые в дальнейшем живут своей жизнью.

    + test
    При тестировании на скорости ~256 кб/c один сокет проверяет 4 пароля в секунду... 4 сокета соответственно 16 (думаю можно и больше не проверял). Приблизительно через 10 минут сервер попросту закрывает все соединения с данного IP (ну я так думаю, потому что помогает переподключение к инету).

    --==[ СОРЦЫ Bruteforce MMP ]==---
     
    _________________________
    1 person likes this.
  7. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    vkAPI.pas

    Code:
    unit vkapi;
    
    interface
    
    uses
      Windows, Classes, idHTTP, idCookieManager, SysUtils, Dialogs;
    
    var
      HTTP : TIDHTTP;
    
    function VK_Login(email, pass: string): boolean;
    procedure VK_GetFriendList(Names, OnlineFrinds: TStrings);
    function VK_OpenWriteBox(id: string): string;
    procedure VK_SendMessage(id, hash, msg: string);
    procedure VK_GetNewMessageList(Messages: TStrings);
    function VK_ReadMessage(msg_id: string): string;
    
    implementation
    
    function DecChas(chas: string): string;
    var
     Decchas : string;
     str : string;
     I : Integer;
     Len : integer;
    begin
    
     str := Copy(chas, 6, 12);
     Len := Length(str);
    
     For I := 0 To Length(str) -1 do
     begin
      Decchas := Decchas + str[len];
      Inc(len, -1);
     end;
    
     str := Copy(chas, 21, Length(chas) -5);
     str := str + Copy(chas, 5, 1);
    
     Len := Length(str);
    
     For I := 0 To Length(str) -1 do
     begin
       Decchas := Decchas + str[len];
       Inc(len, -1);
     end;
    
     Result := Decchas;
    end;
    
    function VK_Login(email, pass: string): boolean;
    var
     Cookie : TidCookieManager;
     Data, Page : TStringList;
     I : Integer;
     S : string;
    begin
     HTTP := TIDHTTP.Create(NIL);
     Cookie := TidCookieManager.Create(nil);
    
    
    
     Cookie.AddCookie('remixchk=5;', 'vkontakte.ru');
     Cookie.AddCookie('remixclosed_tabs=0;', 'vkontakte.ru');
     Cookie.AddCookie('remixlang=0;', 'vkontakte.ru');
     Cookie.AddCookie('remixgroup_closed_tabs=0;', 'vkontakte.ru');
     Cookie.AddCookie('remixnotajaxphotos=1;', 'vkontakte.ru');
     Cookie.AddCookie('remixnews_privacy_filter=0;', 'vkontakte.ru');
     Cookie.AddCookie('audio_vol=100;', 'vkontakte.ru'); 
    
    
    
     HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 MRA 5.6 (build 03278) Firefox/3.5.7 sputnik 2.1.0.18';
     HTTP.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
     HTTP.Request.AcceptLanguage := 'ru,en-us;q=0.7,en;q=0.3';
     HTTP.Request.AcceptCharSet := 'windows-1251,utf-8;q=0.7,*;q=0.7';
     HTTP.Request.Pragma := 'no-cache';
     HTTP.Request.CacheControl := 'no-cache';
     HTTP.Request.RawHeaders.Add('X-Requested-With: XMLHttpRequest');
    
     HTTP.AllowCookies := True;
     HTTP.HandleRedirects := True;
     HTTP.ProtocolVersion := pv1_1;
     HTTP.CookieManager := Cookie;
    
     Data := TStringList.Create;
     Page := TStringList.Create;
    
     HTTP.Post('http://vkontakte.ru/login.php', Data);
    
     Data.Add('act=login');
     Data.Add('email=' + email);
     Data.Add('pass=' + pass);
    
     Page.Text := HTTP.Post('http://login.vk.com/', Data);
    
     For I := 0 To Page.Count -1 Do
     begin
      If Pos('id=' + #39 + 's' + #39, Page[i]) <> 0 Then
      begin
       S := Page[i];
       S := Copy(s, Pos('value=', s) +7, Length(s));
       Delete(s, Pos(#39, s), Length(s));
      end;
     end;
    
     Data.Clear;
    
     Data.Add('redirect=0'); // При установке значения "1", при успешном логине, вы попадаете на свою страницу
     Data.Add('op=slogin');
     Data.Add('s=' + s);
    
     Page.Text := HTTP.Post('http://vkontakte.ru/login.php', Data);
    
     If Pos('error', Page.Text) <> 0 Then Result := False
     Else Result := True;
    
     Page.Free;
     Data.Free;
    end;
    
    procedure VK_GetFriendList(Names, OnlineFrinds: TStrings);
    var
      Data : TStringList;
      I : Integer;
      id, name, FriendsData,
      OnlineFriendsData: string;
      OnlineCount, FriendCount : string;
    begin
      Data := TStringList.Create;
      Data.Text := HTTP.Get('http://vkontakte.ru/friends.php');
    
      For I := 0 To Data.Count -1 do
      begin
        If Pos('var friendsData', Data[i]) <> 0 Then
        begin
          FriendsData := Data[i];
          FriendsData := Copy(FriendsData, Pos('friends' + #39 + ':', FriendsData) +10, Length(FriendsData));
          Delete(FriendsData, Pos('universities', FriendsData) -3, Length(FriendsData));
        end;
    
      If Pos('var js_fr_cnt', Data[i]) <> 0 Then
      begin
        FriendCount := data[i];
        FriendCount := Copy(FriendCount, Pos('=', FriendCount) +2, Length(FriendCount));
        Delete(FriendCount, Pos(';', FriendCount), Length(FriendCount));
      end;
    end;
    
    
      For I := 0 To StrToInt(FriendCount) -1 do
      begin
       Name := Copy(FriendsData, Pos('"', FriendsData) +1, Length(FriendsData));
       Id := Copy(FriendsData, Pos(',', id)+2, Length(FriendsData));
       Delete(id, pos(',', id), Length(id));
       If Id[1] = '[' Then Delete(id, 1, 1);
       Delete(FriendsData, 1, Pos(']', FriendsData));
       Delete(id, pos(',', id), Length(id));
       Delete(name, Pos('"', name), Length(name));
       Names.Add(name + '{id:' + id + '}');
      end;
    
    // Загружаем online друзей
    Sleep(1000);
    
      Data.Text := HTTP.Get('http://vkontakte.ru/friends.php?filter=online');
    
      For I := 0 To Data.Count -1 do
      begin
        If Pos('var friendsData', Data[i]) <> 0 Then
        begin
          OnlineFriendsData := Data[i];
          OnlineFriendsData := Copy(OnlineFriendsData, Pos('friends' + #39 + ':', OnlineFriendsData) +10, Length(OnlineFriendsData));
          Delete(OnlineFriendsData, Pos('universities', OnlineFriendsData) -3, Length(OnlineFriendsData));
        end;
    
       If Pos('friends_common_count', Data[i]) <> 0 Then
       begin
         OnlineCount := Data[i];
         OnlineCount := Copy(OnlineCount, Pos('friends_common_count', OnlineCount) +22, Length(OnlineCount));
         Delete(OnlineCount, Pos('<', OnlineCount), Length(OnlineCount));
       end;
    
      end;
    
      For I := 0 To StrToInt(OnlineCount) -1 do
      begin
       Name := Copy(OnlineFriendsData, Pos('"', OnlineFriendsData) +1, Length(OnlineFriendsData));
       Id := Copy(OnlineFriendsData, Pos(',', id)+2, Length(OnlineFriendsData));
       Delete(id, pos(',', id), Length(id));
       If Id[1] = '[' Then Delete(id, 1, 1);
       Delete(OnlineFriendsData, 1, Pos(']', OnlineFriendsData));
       Delete(name, Pos('"', name), Length(name));
       OnlineFrinds.Add(name + '{id:' + id + '}');
      end;
    
     end;
    
    function VK_OpenWriteBox(id: string): string;
    var
     Str : string;
    begin
     Str := HTTP.Get('http://vkontakte.ru/mail.php?act=a_write_box&to=' + id);
     str := Copy(str, Pos('decodehash', str) +12, Length(str));
     Delete(str, Pos(#39, str), Length(str));
     Result := str;
    end;
    
    procedure VK_SendMessage(id, hash, msg: string);
    var
     Post : TStringList;
    begin
     Post := TStringList.Create;
     Post.Add('act=sent');
     Post.Add('ajax=1');
     Post.Add('chas=' + DecChas(hash));
     Post.Add('to_id=' + id);
     Post.Add('title=Posted by Vkonatkte Messenger v1.0 by Vadim');
     Post.Add('message=' + AnsiToUTF8(msg));
     Post.Add('from_box=1');
    
     HTTP.Request.Referer := 'http://vkontakte.ru/mail.php?act=a_write_box&to=' + id;
     HTTP.Post('http://vkontakte.ru/mail.php', Post);
     Post.Free;
    end;
    
    procedure VK_GetNewMessageList(Messages: TStrings);
    var
     Page : TStringList;
     I : Integer;
     Name, Body, id, Image,
     messId : string;
    begin
     Page := TStringList.Create;
     Page.Text := HTTP.Get('http://vkontakte.ru/mail.php');
    
     For I := 0 To Page.Count -1 do
     begin
       If Pos('newRow', Page[i]) <> 0 Then
       begin
         Image := Page[i+8];
         Image := Copy(image, Pos(#34, image) +1, Length(image));
         Delete(image, Pos(#34, image), Length(image));
    
         Id := Page[i+7];
         Id := Copy(id, Pos('d', id) +1, Length(id));
         Delete(id, pos(#34, id), Length(id));
    
         MessId := Page[i+20];
         MessId := Copy(MessId, Pos('mail.php?', MessId) +21, Length(MessId));
         Delete(MessId, Pos('&', MessId), Length(MessId));
    
         Name := Page[i+13];
         Name := Copy(name, Pos('>', name) +1, length(name));
         Delete(name, Pos('<', name), Length(name));
    
         Body := Page[i+20];
         Body := Copy(body, Pos('Body">', body) +6, Length(body));
         Delete(body, Pos('<', body), Length(body));
         Messages.Add('id: ' + Id + ',body:' + Body + ',name:' + name + ',messid:' + MessId);
       end;
     end;
    
     page.Free;
    end;
    
    function VK_ReadMessage(msg_id: string): string;
    var
     Page : TStringList;
     i : Integer;
     msg : string;
    begin
     Page := TStringList.Create;
     Page.Text := HTTP.Get('http://vkontakte.ru/mail.php?act=show&id=' + MSG_ID + '&out=0');
    
     For I := 0 To Page.Count -1 do
     begin
        If Pos('<td class="label">Сообщение:</td>', Page[i]) <> 0 Then
        begin
          msg := Page[i+3];
          msg := Copy(msg, Pos('">', msg) +2, Length(msg));
          msg := StringReplace(msg, '<br>', #13, [rfReplaceAll]);
          Delete(msg, Pos('</div>', msg), Length(msg));
        end;
     end;
     Result := msg;
     Page.Free;
    end;
    
    end.
    
    
     
    #87 RedFern.89, 26 Jan 2010
    Last edited: 11 Feb 2010
    ErrorNeo, wolmer and TrueBit like this.
  8. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Flash grabber by Gar|k

    Размер exe - 3.5 Кб
    Язык - winAPI

    Разрабатывалась для успешной сдачи сесси, препод зажал лекции в электронке :cool:

    Фишки:
    - Копирует скрытые файлы
    - Не нужно прав администратора
    - Небольшая нагрузка на процессор
    - Копирует только файлы определенного формата, пропуская уже скопированные файлы
    - Запоминает уже копированные флешки по серийному номеру и запускает повторное сканирование ЭТОЙ только через сутки.

    Подробнее о релизе смотреть тут - ИСХОДНИК, EXE

    Скомпиленная версия держит форматы doc,docx,ppt,pptx,rtf - все это легко правится из исходника + я предоставил проект vs2008 со всеми настройками
     
    _________________________
    3 people like this.
  9. transserg

    transserg Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    147
    Likes Received:
    25
    Reputations:
    2
    Дело было вечером делать было нечего =)
    решил написать Грабер для USB флешек
    (Вспомнилась статья из какого то номера Хакера) вот что получилось.
    Возможности
    1. Возможность автозагрузки программы
    2. Работать скрыто ( скрывает иконку из трея и ни о чем не предупреждает)
    3. Типы файлов задаются по маске *.exe к примеру
    4. Можно указать пусть куда копировать файлы
    5. Все файлы разделяются по папкам для каждой флешки
    6. Возможно сохранять структуру папко как на саомй флешку
    7. построение полного списка файлов
    [​IMG]

    есть пару недочетов
    1. длина 1 го расширения не более 6ти символов общая длина под маски равна 255 символов.
    2. пусть до папки назначения должен быт обязательно указан и заканчиваться " \ "

    вот ссыль на сорци
    http://depositfiles.com/files/6twdaaw4h
    http://slil.ru/28543554
    http://rapidshare.com/files/340750659/FlashGraber.rar.html
    пас antichat.ru
    P.S. жду справедливой критики по Коду и по самой идеи
    не сочтите за плагиат =) похоже идея родилась с Gar|k параллельно
    https://forum.antichat.ru/thread173437.html создавал тему с ним ранее
     
    John D and shell_c0de like this.
  10. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    делим фал на части и качаем

    Code:
    unit DownloadTh;
    
    interface
    
    uses
     Windows, Classes, SysUtils, idHTTP, IdComponent, IniFiles, ExtCtrls;
    
    const
      HEADER_RANGE     = 'Range: bytes=';
      HEADER_USERAGENT = 'Downloader/1.0 (Windows NT; Vadim; Redfern;)';
    
    { Сюда идет запись файла }   
    var
      FStream : TFileStream;
    
    { События }
    type
      TOnAddSegmentEvent = procedure(StartPos, MaxPos : Int64) of object;
      TOnSetPositionEvent = procedure(Index: Integer; Position: Int64) of object;
    
    { Основной класс(поток) }
    type
      TDownload = class(TThread)
      protected
       FHTTP       : TidHTTP;
       FRangeStart : string;
       FRangeEnd   : string;
       FURL        : string;
       FFileName   : string;
       FTotalCount : Int64;
       FContentLen : Int64;
      private
     { Properties }
       property URL           : string                 read  FURL
                                                       write FURL;
       property FileName      : string                 read  FFileName
                                                       write FFileName;
       property RangeStart    : string                 read  FRangeStart
                                                       write FRangeStart;
       property RangeEnd      : string                 read  FRangeEnd
                                                       write FRangeEnd;
       property TotalCount    : Int64                  read  FTotalCount;
       property ContentLength : Int64                  read  FContentLen;
     { Procedures }
       procedure Execute; override;
       procedure OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
       procedure OnWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
       procedure Disconnect;
      end;
    
    { Внешний класс(объект) для загрузки файла }
    type
      TMultiHTTPDownloader = class(TComponent)
      protected
        FDownload           : array of TDownload;
        FPartCount          : Integer;
        FFileName           : string;
        FStateFile          : string;
        FURL                : string;
        FOnAddSegmentEvent  : TOnAddSegmentEvent;
        FOnSetPositionEvent : TOnSetPositionEvent;
        FTimer              : TTimer;
        FTotalCount         : Int64;
        FContentLen         : Int64;
      private
        procedure TriggerAddSegment(Min, Max: Int64);
        procedure TriggerSetPosition(Index: Integer; Position: Int64);
        procedure OnTimer(Sender: TObject);
      public
        constructor Create(AOwner: TComponent);
        procedure Start;
        procedure Abort;
        procedure Pause;
        procedure Resume;
        property  TotalCount  : Int64                     read  FTotalCount;
        property  ContentLen  : Int64                     read  FContentLen;
      published
        property PartCount    : Integer                   read  FPartCount
                                                          write FPartCount;
        property FileName     : string                    read  FFileName
                                                          write FFileName;
        property StateFile    : string                    read  FStateFile
                                                          write FStateFile;
        property URL          : string                    read  FURL
                                                          write FURL;
        property OnAddSegment : TOnAddSegmentEvent        read  FOnAddSegmentEvent
                                                          write FOnAddSegmentEvent;
        property OnSetPosition: TOnSetPositionEvent       read  FOnSetPositionEvent
                                                          write FOnSetPositionEvent;
      end;
    
    procedure Register;
    
    implementation
    
    /////////////////////////////TDownload/////////////////////////////
    
    { Выполнение загрузки }
    procedure TDownload.Execute;
    begin
     // Создаем объект "FHTTP"
       FHTTP := TidHTTP.Create(nil);
     // Присваеваем заголовки
       FHTTP.Request.CustomHeaders.Add(HEADER_RANGE + FRangeStart + '-' + FRangeEnd); // Custom
       FHTTP.Request.UserAgent := HEADER_USERAGENT;
     // Присвоение процедур
       FHTTP.OnWork := OnWork;
       FHTTP.OnWorkBegin := OnWorkBegin;
     // Запуск
       FHTTP.Get(FURL, FStream);
     // Очистка памяти по завершению
       FHTTP.Free;
    end;
    
    { Щитаем колличество скачанных байт }
    procedure TDownload.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
    begin
      FTotalCount := AWorkCount;
    end;
    
    { Щитаем общее колличество байт }
    procedure TDownload.OnWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
    begin
      FContentLen := AWorkCountMax;
    end;
    
    { Отключем }
    procedure TDownload.Disconnect;
    begin
       FHTTP.Disconnect;
    end;
    
    //-----------------------------------------------------------------------------|
    /////////////////////////////TMultiHTTPDownloader//////////////////////////////|
    //-----------------------------------------------------------------------------|
    
    // Создаем нужное вместе с объектом "TMultiHTTPDownloader"
    constructor TMultiHTTPDownloader.Create(AOwner: TComponent);
    begin
      Inherited Create(AOwner);
      FTimer := TTimer.Create(nil);
      FTimer.OnTimer := OnTimer;
      FTimer.Enabled := False;
      FTimer.Interval := 1000;
    end;
    
    
    // Обрабатываем нужные события в таймере
    procedure TMultiHTTPDownloader.OnTimer(Sender: TObject);
    var
      I : Integer;
    begin
      FContentLen := 0;
      FTotalCount := 0;
      For I := 0 To FPartCount -1 Do
      begin
        Inc(FTotalCount, FDownload[i].TotalCount);
        Inc(FContentLen, FDownload[i].ContentLength);
        TriggerSetPosition(I, FDownload[i].TotalCount);
      end;
    
      If FTotalCount = FContentLen Then
      begin
        FTimer.Enabled := False;
      end;
    end;
    
    // Добавить сегмент в индикатор
    procedure TMultiHTTPDownloader.TriggerAddSegment(Min, Max: Int64);
    begin
      If Assigned(FOnAddSegmentEvent) Then
        FOnAddSegmentEvent(Min, Max);
    end;
    
    // Установка позиции сегментов
    procedure TMultiHTTPDownloader.TriggerSetPosition(Index: Integer; Position: Int64);
    begin
      If Assigned(FOnSetPositionEvent) Then
        FOnSetPositionEvent(Index, Position);
    end;
    
    // Заустить закачку
    procedure TMultiHTTPDownloader.Start;
    var
      Chunk, Offset,
      ContentLength        : Int64;
      HTTP                 : TidHTTP;
      I                    : Integer;
    begin
      { Проверка на назначенный статичный файл }
      If FStateFile = '' Then
      begin
        Raise Exception.Create('Имя статичного файла не определено');
        Exit;
      end;
    
      { Проверка на введенный URL-аддрес }
      If FURL = '' Then
      begin
        Raise Exception.Create('поле URL не должено остоваться пустым');
        Exit;
      end;
    
      { Прове }
    
      HTTP := TidHTTP.Create(nil);
      HTTP.Head(FURL);
      ContentLength := HTTP.Response.ContentLength;
      HTTP.Free;
    
      FStream := TFileStream.Create(FFileName, fmCreate);
    
      Chunk := ContentLength div FPartCount;
      Offset := 0;
      FTimer := TTimer.Create(nil);
      FTimer.OnTimer := OnTimer;
      FTimer.Interval := 1000;
      FTimer.Enabled := True;
    
      For I := 0 To FPartCount -1 Do
      begin
        SetLength(FDownload, I +1);
        FDownload[i] := TDownload.Create(True);
        FDownload[i].RangeStart := IntToStr(Offset);
        FDownload[i].RangeEnd := IntToStr(Offset + Chunk);
        FDownload[i].FreeOnTerminate := True;
        FDownload[i].FileName := FFileName;
        FDownload[i].URL := FURL;
        TriggerAddSegment(Offset, Offset + Chunk);
        Offset := Offset + Chunk +1;
      end;
    
      For I := 0 To FPartCount -1 Do FDownload[i].Resume;  
    
    end;
    
    // Остановка
    procedure TMultiHTTPDownloader.Abort;
    var
      I : Integer;
    begin
      For I := 0 To FPartCount -1 Do
      begin
       FDOwnload[i].Disconnect;
       FDownload[i].Free;
      end;
      SetLength(FDownload, 0);
      FTimer.Enabled := False;
    end;
    
    // Пауза
    procedure TMultiHTTPDownloader.Pause;
    var
      I     : Integer;
      iFile : TIniFile;
    begin
      iFile := TIniFile.Create(FStateFile);
    
      For I := 0 To FPartCount -1 do
      begin
        iFile.WriteString('Section ' + IntToStr(i), 'Position', IntToStr(FDownload[i].TotalCount));
        iFile.WriteString('Section ' + IntToStr(i), 'Length', IntToStr(FDownload[i].ContentLength));
      end;
    
      For I := 0 To FPartCount -1 Do
      begin
       FDownload[i].Disconnect;
       FDownload[i].Free;
      end;
      iFile.Free;
      FTimer.Enabled := False;
    end;
    
    // Возобновление
    procedure TMultiHTTPDownloader.Resume;
    var
      I     : Integer;
      iFile : TIniFile;
      Temp  : TStringList;
    begin
      iFile := TIniFile.Create(FStateFile);
      Temp  := TStringList.Create;
    
      iFile.ReadSections(Temp);
    
      For I := 0 To Temp.Count -1 do
      begin
         SetLength(FDownload, I +1);
         FDownload[i] := TDownload.Create(True);
         FDownload[i].RangeStart := iFile.ReadString('Section ' + IntToStr(i), 'Position', '');
         FDownload[i].RangeEnd := iFile.ReadString('Section ' + IntToStr(i), 'Length', '');
      end;
    
      For I := 0 To Temp.Count -1 do FDownload[i].Resume;
    
      FTimer.Enabled := True;
    
      Temp.Free;
      iFile.Free;
    end;
    
    procedure Register;
    begin
      RegisterComponents('Standard', [TMultiHTTPDownloader]);
    end;
    
    end.
    
     
  11. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    #define интересные может кто предложит?)
     
  12. shell_c0de

    shell_c0de Hack All World

    Joined:
    7 Jul 2009
    Messages:
    1,183
    Likes Received:
    618
    Reputations:
    690
    Простоя программулька для брокеров (котировки Forex)
    Написал для себя чтобы каждый раз в терминал MT4 не заходит
    [​IMG]

    Пример простой но кому то пригодится идея...

    Исходники и компилированные скачать тут
     
    _________________________
  13. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Look4Hash

    http://crackfor.me/index.php.

    Суть утилиты в том что ты подгружаешь хеш список, и прогоняешь его по сервису.

    [​IMG]

    сорцы

    Годится как пример для работы с компонентом BackgroundWorker.

    Писал на C#, .NET Framework 3.5. Visual Studio 2010 RC1.
     
    2 people like this.
  14. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    base64_encode [C]

    Сейчас для HTTP аутентификации понадобилось... Может кому ещё пригодится.
    написано с помощью...
    Code:
    // base64 by Gar|k
    //#define B64_DEF_LINE_SIZE   72
    //#define B64_MIN_LINE_SIZE    4
    // buf - строка для кодирования
    // sizebuf - размер строки
    // rez - буффер для результата
    // функция возвращает размер полученого хеша
    int base64_encode(char *buf,int sizebuf,char *rez,int linesize)
    {
    	static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    	unsigned char in[3], out[4];
    	int i, len, blocksout=0,count=0;
    
    	while(count!=sizebuf)
    	{
    		len = 0;
    		for( i = 0; i < 3; i++ ) 
    		{
    			if( count!=sizebuf )
    				{ in[i] = (unsigned char)*buf++; count++; len++; }
    			else in[i] = 0;
    		}
    
    		if( len ) 
    		{
    			out[0] = cb64[ in[0] >> 2 ];
    			out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ];
    			out[2] = (unsigned char) (len > 1 ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '=');
    			out[3] = (unsigned char) (len > 2 ? cb64[ in[2] & 0x3f ] : '=');
    
    			memcpy(rez,out,4); rez+=4;
    			blocksout++;
    		}
    
    		if( blocksout >= (linesize/4) || count==sizebuf )  blocksout = 0;
    	}
    *rez++=0;
    	return count;
    }
    
     
    _________________________
    #94 Gar|k, 26 Mar 2010
    Last edited: 26 Mar 2010
  15. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    38
    Likes Received:
    4
    Reputations:
    5
    Написал авторег вебмани.К сожалению без скрина кидаю.
    прога лежит тут:
    o4u.msk.ru/webmoneyreger.rar

    Прога регит форму, лезет на мыло, тырит активационный код, вписывает его, ждет активации по смс.

    Скоро сделаю авторег без активации по смс.

    Офф.Топик тут:https://forum.antichat.ru/thread191555.html
     
  16. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    MD5 на основе Crypto API

    Понадобилось генерировать 128-ми битные ключи для RC4 шифрования, вспомнил про MD5.

    вариант с использованием динамически выделяемой памяти
    Code:
    #include <wincrypt.h>
    
    // на выходе адрес буфера 16 байтного хеша
    // после использования выполни VirtualFree(LPVOID lpAddress,0,MEM_RELEASE);
    unsigned char *md5(unsigned char *string,DWORD count)
    {
    	HCRYPTPROV hProv;
    	HCRYPTHASH hHash;
    	unsigned char *hash_value;
    
    	// Инициализация контекста криптопровайдера
    	if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
    	{
    		// Cоздание хеш-объекта
    		if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
    		{
    			// Передача хешируемых данных хэш-объекту.
    			if (CryptHashData(hHash, string, count, 0))
    			{
    				// Получение хеш-значения
    				count = 0;
    				if (CryptGetHashParam(hHash, HP_HASHVAL, NULL, &count, 0))
    				{
    					hash_value=(unsigned char *)VirtualAlloc(NULL,count,MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);
    					if (CryptGetHashParam(hHash, HP_HASHVAL, hash_value, &count, 0))
    					{
    						return hash_value;
    					}
    				}
    			}
    		}
    	}
    
    	return NULL;
    }
    
    но хеш-то всегда 16 байт поэтому можно оптимизировать так
    Code:
    // hash_value указатель на >=16 байтный буфер (напр. char hash[16];)
    BOOL md5(unsigned char *hash_value,unsigned char *string,DWORD count)
    {
    	HCRYPTPROV hProv;
    	HCRYPTHASH hHash;
    
    	// Инициализация контекста криптопровайдера
    	if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
    	{
    		// Cоздание хеш-объекта
    		if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
    		{
    			// Передача хешируемых данных хэш-объекту.
    			if (CryptHashData(hHash, string, count, 0))
    			{
    				// Получение хеш-значения
    				count = 16;
    				if (CryptGetHashParam(hHash, HP_HASHVAL, hash_value, &count, 0)) return TRUE;
    			}
    		}
    	}
    
    	return FALSE;
    }
    
     
    _________________________
    #96 Gar|k, 18 Apr 2010
    Last edited: 19 Apr 2010
    2 people like this.
  17. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Прога My torrent

    Прога My torrent - создаёт торрент файлы.

    [​IMG]

    [​IMG]

    Прога

    Сорцы
     
    _________________________
    #97 <Cyber-punk>, 19 Apr 2010
    Last edited: 19 Apr 2010
  18. Травников

    Травников New Member

    Joined:
    17 Feb 2010
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    BrutalSynonym

    BrutalSynonym

    Простенькая программа синонимайзер.
    Заменяет слова в тексте на их синонимы,если таковые находятся в словаре (прилагается).
    В словаре записи вида: слово синоним1 синоним2 ... синонимN
    Случайным образом выбирает по одному синониму к каждому слову.

    [​IMG]

    Вставляете текст в верхнее текстовое поле
    Нажимаете кнопку "Generate"
    Получаете текст в нижнем текстовом поле

    Качество замен зависит от словаря.
    Словарь можно дополнять и изменять (к примеру использовать английский словарь синонимов), но файл с синонимами должен иметь название "synonym.txt"


     
    #98 Травников, 4 May 2010
    Last edited: 8 May 2010
  19. vkhacker

    vkhacker New Member

    Joined:
    12 Dec 2009
    Messages:
    1
    Likes Received:
    1
    Reputations:
    0
    DateChanger v0.1

    Программа для изменения ДАТЫ СОЗДАНИЯ большого количества файлов. Позволяет изменять дату создания файлов в каталоге по указанной маске. Возможна лишь установка действительной даты, т.е. даты, которая уже наступила. Также программа изменяет дату EXIF и удаляет содержание других параметров EXIF у файлов типа JPEG и JPG (небольшая потеря качества).

    [​IMG]


    Скачать DateChanger v0.1
     
  20. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    не то что бы полезная программа скорее сырье для изучения регулярных выражений
    тем кто хочет поигратся с регулярными выражениями в ANSI С для компияции надо добавить библиотеку импорта glib.lib скачать версию для венды ну и поставить флаг компилировать как Си код без плюсов
    пользоватся просто вводим регулярное выражение диск на котором искать файлы
    перебирает все файлы на диске мапит и скармливает их глибовскому регекспу и выводит файлы
    в которых найдено совпадение например найти файлы в которых есть мыльники [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4} или файлы с адресами проксей [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,4} да или просто найти в каких файлах хранится твой пароль gj#@$hjkhkjh кому интересно велком http://www.regular-expressions.info/ работает довольно быстро так как файл мапится и тут же идет на парсинг в GRegex вообщем кто хочет изучить регекспы и пользоватся ими в ANSI C зе бест
    да и к тому же часто помниш слово а найти файл не можеш виндовый поиск иногда в упор не находит строку в файле хотя она там есть это только у меня так ?

    кому интересно зачем g_regex_match (regex, string, 0, &match_info); в SEH фрейм включено скажу дело в том чтоб не испортить файл он открывается с атрибутом PAGE_READONLY но не все файлы заканчиваются '\0' поэтому на 165 тыс файлов где то 18 нарушений доступа на эти случаи можно прикрутить когда поймали исключение
    загрузить файл полность в память завершить его '\0' вручную и отдать на парсинг
    это медленно поэтому я предпочел ловить исключения а когда поймал можно для него индивидуально и выделить память идеи насчет того что сделать защиту PAGE_READWRITE дописать '\0' и парсить не идут так как в момень парсинга могут прибить прогу файл останетя испорченным ну это так мысли может и можно еще как то сделать

    Code:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <glib.h>
    
    
    typedef void (*LPSEARCHFUNC)(LPCTSTR lpszFileName);
    BOOL SearchFiles(
            LPCTSTR lpszFileName,                
            LPSEARCHFUNC lpSearchFunc,           
            BOOL bInnerFolders );     
                                                
    
    char file[MAX_PATH];
    
    BOOL SearchFiles(LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL bInnerFolders)
    {
        LPTSTR part;
       char tmp[MAX_PATH]; // временный массив
        char name[MAX_PATH];
    
       HANDLE hSearch = NULL;
       WIN32_FIND_DATA wfd;
        memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
    
        // сначало поиск внутри вложенных папках ...
        if(bInnerFolders)
        {
            if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0) return FALSE;
            strcpy(name, part);
            strcpy(part, "*.*");
    
            // если папки существуют, то делаем поиск
            wfd.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
            if (!((hSearch = FindFirstFile(tmp, &wfd)) == INVALID_HANDLE_VALUE))
            do
            {
                // в каждой папке есть две папки с именами "." и ".."
                // и эти папки мы не трогаем
    
                // пропускаем папки "." и ".."
                if (!strncmp(wfd.cFileName, ".", 1) || !strncmp(wfd.cFileName, "..", 2))            
               continue;
           
                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если мы нашли папку
                {
                    char next[MAX_PATH];
                    if(GetFullPathName(lpszFileName, MAX_PATH, next, &part) == 0) return FALSE;
                    strcpy(part, wfd.cFileName);
                    strcat(next, "\\");
                    strcat(next, name);
    
                    SearchFiles(next, lpSearchFunc, TRUE);
                }
            }
            while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
    
            FindClose (hSearch); // заканчиваем поиск
        }
    
       if ((hSearch = FindFirstFile(lpszFileName, &wfd)) == INVALID_HANDLE_VALUE) 
           return TRUE; // в противном случае выходим
       do
       if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) // если мы нашли файл
       {
            if(GetFullPathName(lpszFileName, MAX_PATH, file, &part) == 0) return FALSE;
            strcpy(part, wfd.cFileName);
    
            lpSearchFunc(file);
       }
       while (FindNextFile(hSearch, &wfd)); // ищем следующий файл
       FindClose (hSearch); // заканчиваем поиск
    
        return TRUE;
    }
    
    int yes;
    char entries;
    int entriesf;
    int failopen;
    int all_files;
    int except;
    
    static void
    print_ip(const gchar *string);
    
    void __cdecl show_info()
    {
    	int len, ret;
    	char *cv, *pfmt;
    	pfmt = strrchr(file, '\\');
    	if (!pfmt)
    		__asm int 3;
    	len = _scprintf("f %d s %d a %d x %d %s", failopen, yes, all_files, except, pfmt);
    	if (-1 == len)
    		__asm int 3;
    	cv = malloc(len + 1);
    	if (!cv)
    		__asm int 3;
    	ret = sprintf(cv, "f %d s %d a %d x %d %s", failopen, yes, all_files, except, pfmt);
    	if (-1 == ret)
    		__asm int 3;
    	ret = SetConsoleTitle(cv);
    	if (!ret)
    		__asm int 3;
    	free(cv);
    }
    
    void DoSomething(LPCTSTR name)
    {
    	HANDLE hFile = INVALID_HANDLE_VALUE, hMap = NULL;
    	DWORD dwFileSize;
    	CHAR *base = NULL;
    	show_info(++all_files);
    	__try
    	{
    		hFile = CreateFile(name, GENERIC_READ,
    			FILE_SHARE_READ, NULL, OPEN_EXISTING,
    			FILE_ATTRIBUTE_NORMAL, NULL);
    		if (hFile == INVALID_HANDLE_VALUE)
    		{
    			show_info(++failopen);
    			__leave;
    		}
    		dwFileSize = GetFileSize(hFile, NULL);
    		if (dwFileSize == INVALID_FILE_SIZE)
    			__leave;
    		hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, dwFileSize, NULL);
    	    if (!hMap)
    			__leave;
    		base = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, dwFileSize);
    	    if (!base)
    			__leave;
    		
    		print_ip(base);
    	}
    	__finally
    	{
    		if (base)
    			UnmapViewOfFile(base);
    		if (hMap)
    			CloseHandle(hMap);
    		if (hFile != INVALID_HANDLE_VALUE)
    			CloseHandle(hFile);
    	}
    	if (entriesf && entries == 'y')
    	{
    		puts(name);
    		entriesf ^= entriesf;
    	}
    	return;
    }
    
    #define _124KB 126976
    static char regexp[_124KB];
    
    static void
    print_ip(const gchar *string)
    {
      GRegex *regex;
      GMatchInfo *match_info;
         
      regex = g_regex_new (regexp, 0, 0, NULL);
      __try
        {
    	  g_regex_match (regex, string, 0, &match_info);
        }
      __except(EXCEPTION_EXECUTE_HANDLER)
        {
    	  show_info(++except);
    	  g_regex_unref(regex);
    	  return;
        }
      while (g_match_info_matches (match_info))
        {
          gchar *word = g_match_info_fetch (match_info, 0);
          g_print ("%s\n", word);
          g_free (word);
          g_match_info_next (match_info, NULL);
    	  entriesf = 1;
    	  show_info(++yes);
        }
      g_match_info_free (match_info);
      g_regex_unref (regex);
    }
    
    int main(void)
    {
    	printf("echo entries (y/n) -> ");
    	scanf("%c", &entries);
    	fflush(stdin);
    	printf("enter regexp -> ");
    	gets(regexp);
    	SearchFiles("C:\\*.*", DoSomething, TRUE);
    }
    
    
     
Loading...
Similar Threads - Полезные программы собственные
  1. Peja
    Replies:
    0
    Views:
    2,516