Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Полезные программы (собственные) (https://forum.antichat.xyz/showthread.php?t=76601)

De-visible 09.07.2008 22:44

Полезные программы (собственные)
 
Здесь постим свои небольшие реализации, (повторяю СВОИ!)
-----------

Интересные и действительно нужные проекты будут поощраться...
-----------
Также можете оставлять просьбы на реализацию той или иной проги. =)

SlyBit 10.07.2008 02:21

Аплоад файла по HTTP протоколу.

Данный исходный текст показывает как отослать файл на сервер по http протоколу методом POST. Имя файла передается в поле Request-URI, сам файл в Entity-Body. На сервере обрабатывает запрос и сохраняет файл простейший скрипт upload.php.

SendFileToServer.cpp:
Код:

// by SlyBit (c) 07.2008 /SendFileToServer.cpp/
 
#include "winsock2.h"
#include <windows.h>
 
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(linker, "/ENTRY:Entry")
 
#define HOST_NAME "test.ru"
#define FILE_NAME "test_file.rar"
#define URL_NAME  "upload.php"
 
BOOL WINAPI SendDataToServer(PVOID pData, DWORD dwDataSize, WORD wPort, PCHAR pAddress)
{
    SOCKET      ConnectSocket;
    sockaddr_in ClientService;
    INT        nSendBytes = 0;
   
    if(INVALID_SOCKET == (ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))) {
        return 0;
    }
   
    ClientService.sin_family = AF_INET;
    ClientService.sin_port = htons(wPort);
    ClientService.sin_addr.s_addr = inet_addr(pAddress);
   
    if(SOCKET_ERROR == connect(ConnectSocket, (SOCKADDR*)&ClientService, sizeof(ClientService))) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    if(SOCKET_ERROR == (nSendBytes = send(ConnectSocket, (PCHAR)pData, dwDataSize, 0))) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    closesocket(ConnectSocket);
   
    return nSendBytes;
}
   
BOOL WINAPI GetIpByHostName(PCHAR pHostName, PCHAR pIp, DWORD dwIpSize)
{
    hostent *pHosten;
   
    if(!(pHosten = gethostbyname(pHostName))) {
        return 0;
    }
   
    if(lstrlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize) {
        return 0;
    }
   
    lstrcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
 
    return 1;
}
 
BOOL WINAPI SendFileToServer(PCHAR pFileName, PCHAR pAddress, PCHAR pUrl)
{
    PVOID  pFile;
    DWORD  dwFileSize, dwRetSize;
    CHAR    szIp[17];
    PCHAR  pSendData;
    HANDLE  hFile;
 
    if(!GetIpByHostName(pAddress, szIp, 17)) {
        return 0;
    }
 
    if(INVALID_HANDLE_VALUE == (hFile = CreateFile(pFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0))) {
        return 0;
    }
    if(0xFFFFFFFF == (dwFileSize = GetFileSize(hFile, 0))) {
        CloseHandle(hFile);
        return 0;
    }
   
    if(!(pSendData = (PCHAR)VirtualAlloc(0, dwFileSize+300, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        return 0;
    }
   
    wsprintf(pSendData, "POST /%s?file_name=%s HTTP/1.1\r\nHost: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-length: %i\r\n\r\nupload_file=",
        pUrl, pFileName, pAddress, dwFileSize+strlen("upload_file="));
 
    if(!ReadFile(hFile, pSendData+strlen(pSendData), dwFileSize, &dwRetSize, 0)) {
        VirtualFree(pSendData, 0, MEM_RELEASE);
        CloseHandle(hFile);
        return 0;
    }
    CloseHandle(hFile);
 
    if(!SendDataToServer(pSendData, strlen(pSendData), 80, szIp)) {
        VirtualFree(pSendData, 0, MEM_RELEASE);
        return 0;
    }
 
    VirtualFree(pSendData, 0, MEM_RELEASE);
 
    return 1;
}
 
VOID WINAPI Entry()

    WSAData wsaData;
 
    if(NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) {
        ExitProcess(0);
    }
   
    if(SendFileToServer(FILE_NAME, HOST_NAME, URL_NAME)) {
        MessageBox(0, "SendFileToServer Ok", 0, 0);
    } else {
        MessageBox(0, "SendFileToServer Error", 0, 0);
    }
   
    ExitProcess(0);
}

upload.php:
Код:

<?php Error_Reporting(E_ALL & ~E_NOTICE);
 
function SaveDataToFile($log_data, $file_name) 
{
    $file = basename($file_name);
    $filehandle = fopen($file, "wb");
    fputs($filehandle, $log_data);
    fclose($filehandle);
}
 
SaveDataToFile($_POST['upload_file'], $_GET['file_name']);
 
?>

Полезные ссылки:
Русский RFC по HTTP
Статья "Генерация HTTP запросов"

W!z@rD 10.07.2008 19:47

FastLauncher
прога добавляет ярлык в %systemDirectory% что позволяет запускать ее из коммандной строки, либо Win+R/Диспетчер задач -> Новая задача

http://slil.ru/25970580

Скомпилированна в Delphi7.

PHP код:

program FL;

uses
  Windows
ShlObjActiveXSysUtils;

const
  
About 'Coded by: W!z@rD Special build: www.antichat.ru';

  
MAXSIZE 260;
  
OFN_FILEMUSTEXIST = $00001000;
  
OFN_PATHMUSTEXIST = $00000800;
  
OFN_HIDEREADONLY  = $00000004;
  
OFN_LONGNAMES     = $00200000;

  
WM_COMMAND = $0111;
  
WM_DESTROY = $0002;
  
WM_CLOSE   = $0010;

type
TOpenFilenameA 
packed record
  lStructSize
DWORD;
  
hWndOwnerHWND;
  
hInstanceHINST;
  
lpstrFilterPAnsiChar;
  
lpstrCustomFilterPAnsiChar;
  
nMaxCustFilterDWORD;
  
nFilterIndexDWORD;
  
lpstrFilePAnsiChar;
  
nMaxFileDWORD;
  
lpstrFileTitlePAnsiChar;
  
nMaxFileTitleDWORD;
  
lpstrInitialDirPAnsiChar;
  
lpstrTitlePAnsiChar;
  
FlagsDWORD;
  
nFileOffsetWord;
  
nFileExtensionWord;
  
lpstrDefExtPAnsiChar;
  
lCustDataLPARAM;
  
lpfnHook: function(Wnd:HWNDMsg:UINTwParam:WPARAMlParam:LPARAM):UINT stdcall;
  
lpTemplateNamePAnsiChar;
end;
  
TOpenFilename TOpenFilenameA;

function 
GetOpenFileName(var OpenFileTOpenFilename): BOOL;
  
stdcallexternal 'comdlg32.dll' name 'GetOpenFileNameA';

{
$R dialog.res}

var
  
TheFilestring;
  
buf: array [0..MAXSIZE-1of Char;
  
ofnTOpenFileName;

procedure OleCheck(ResultHResult);
begin
  
if Result 0 then Exit;
end;

function 
CreateComObject(const ClassIDTGUID): IUnknown;
begin
  OleCheck
(CoCreateInstance(ClassIDnilCLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVERIUnknownResult));
end;

procedure OpenFileDlg;
begin
  ofn
.lStructSize:=SizeOf(TOpenFileName);
  
ofn.hWndOwner  :=0;
  
ofn.hInstance  :=HInstance;
  
ofn.lpstrFilter:=nil;
  
ofn.lpstrFile  :=buf;
  
ofn.nMaxFile   :=MAXSIZE;
  
ofn.Flags      :=OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_HIDEREADONLY;
  if 
GetOpenFileName(ofnthen TheFile:=ofn.lpstrFile;
end;

function 
GetSysDirstring;
var
  
buf: array [0..MAX_PATHof Char;
begin
  GetSystemDirectory
(bufMAX_PATH);
  
Result:=buf;
end;

function 
Install(_filestring): Boolean;
var
LnkName   string;
MyObject  IUnknown;
MyIcon    IShellLink;
MyPFile   IPersistFile;
WFileName WideString;
begin
  
try
    
CoInitialize(nil);
    
MyObject:=CreateComObject(CLSID_ShellLink);
    
MyIcon:=MyObject as IShellLink;
    
MyPFile:=MyObject as IPersistFile;
    
with MyIcon do
    
begin
      SetArguments
(PChar(''));
      
SetPath(PChar(_file));
      
SetWorkingDirectory(PChar(ExtractFilePath(_file)));
    
end;
    
LnkName:=Copy(ExtractFileName(_file), 1Length(ExtractFileName(_file)) - Length(ExtractFileExt(_file)));
    
WFileName:=GetSysDir '\' + LnkName + '.lnk';
    MyPFile.Save(PWChar(WFileName), False);
  except
    Result:=False;
    Exit;
  end;
  Result:=True;
end;

function DlgProc(hWin:HWND; uMsg:UINT; wp:WPARAM; lp:LPARAM): BOOL; stdcall;
begin
  Result:=False;
  case uMsg of
    WM_COMMAND:
    case LoWord(wp) of
      3: begin
        OpenFileDlg;
        SetWindowText(GetDlgItem(hWin, 2), PChar(TheFile));
      end;
      4: begin
        if not FileExists(TheFile) then
        MessageBox(hWin, '
File not exists!', 'FL', MB_ICONERROR or MB_APPLMODAL)
        else
        if Install(TheFile) then MessageBox(hWin, '
Done!', 'FL', MB_APPLMODAL);
        end;
      5: MessageBox(hWin, About, '
FL', MB_APPLMODAL);
    end;
    WM_DESTROY, WM_CLOSE: PostQuitMessage(0);
  end;
end;

begin
  DialogBox(hInstance, '
frmMain', 0, @DlgProc);
end. 


SlyBit 11.07.2008 18:46

Файл лоадер

Представляю вашему вниманию исходный текст простенького лоадера файлов. Толком не тестировал, багрепорт и замечания пожалуйста в ПМ.

DownloadFile.cpp:
Код:

// by SlyBit (c) 07.2008 /DownloadFile.cpp/
 
#include "winsock2.h"
#include <windows.h>
 
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(linker, "/ENTRY:Main")
 
#define HOST_NAME  "wasm.ru"
#define URL_NAME    "/pub/21/files/lockfileswork/RawRead.rar"
#define FILE_NAME  "RawRead.rar"
#define HEADER_SIZE 400
 
// Возводим число x в положительную целочисленную степень
#define DEGREE(Val, Deg) if(!Deg) { Val = 1; } else for(int i1=2, i2=Val; i1<=Deg; i1++) { Val *= i2; }                   

// Переводим число Str, представленное в виде строки в числовой вид Int
#define STR_TO_INT(Str, Int) for(int l=0, s=10; l<strlen(Str); l++, s=10) { DEGREE(s, (strlen(Str)-1-l)); Int += ((BYTE)Str[l]-0x30)*s; }
 
PCHAR WINAPI HTTPSendReceiveData(PVOID pInData, DWORD dwInDataSize, PCHAR pIpAddress, PDWORD pOutSizeSize)
{
    SOCKET      ConnectSocket;
    sockaddr_in ClientService;
    INT        nReceiveBytes, i, j = 0, nCurr;
    CHAR        szHeader[HEADER_SIZE] = "\0", szVal[10] = "\0";
    PCHAR      pOutData = 0;
 
    if(INVALID_SOCKET == (ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))) {
        return 0;
    }
   
    ClientService.sin_family = AF_INET;
    ClientService.sin_port = htons(80);
    ClientService.sin_addr.s_addr = inet_addr(pIpAddress);
   
    if(SOCKET_ERROR == connect(ConnectSocket, (SOCKADDR*)&ClientService, sizeof(ClientService))) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    if(SOCKET_ERROR == send(ConnectSocket, (PCHAR)pInData, dwInDataSize, 0)) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    // Получаем заголовок ответа
    if(SOCKET_ERROR == recv(ConnectSocket, szHeader, HEADER_SIZE, 0)) {
        closesocket(ConnectSocket);
        return 0;
    }
 
    for(i=0; i<HEADER_SIZE; i++)
    {
        // Получаем размер данных
        if(!memcmp("Content-Length: ", szHeader+i, strlen("Content-Length: ")-1))
        {
            do {
                szVal[j] = szHeader[i+strlen("Content-Length: ")+j]; j++;
            } while(szHeader[i+strlen("Content-Length: ")+j] != '\r');
           
            STR_TO_INT(szVal, *pOutSizeSize);
        }
        // Получаем указатель на начало файла в ответе
        if(!memcmp("\r\n\r\n", szHeader+i, strlen("\r\n\r\n")-1))
        {
            i += strlen("\r\n\r\n");
            break;
        }
    }
   
    if((HEADER_SIZE-1 == i) || !*pOutSizeSize) {
        return 0;
    }
 
    if(!(pOutData = (PCHAR)VirtualAlloc(0, *pOutSizeSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) {
        return 0;
    }
 
    if(HEADER_SIZE-i >= *pOutSizeSize) {
        memcpy(pOutData, szHeader+i, *pOutSizeSize);
    } else {
        nCurr = HEADER_SIZE-i;
        memcpy(pOutData, szHeader+i, nCurr);
       
        // Получаем оставшиеся данные   
        while(nReceiveBytes = recv(ConnectSocket, pOutData+nCurr, *pOutSizeSize-nCurr, 0))  {
            if(nReceiveBytes == SOCKET_ERROR) {
                closesocket(ConnectSocket);
                return 0;
            }
            nCurr += nReceiveBytes;
        }
    }
 
    closesocket(ConnectSocket);
   
    return pOutData;
}
   
BOOL WINAPI GetIpByHostName(PCHAR pHostName, PCHAR pIp, DWORD dwIpSize)
{
    hostent *pHosten;
   
    if(!(pHosten = gethostbyname(pHostName))) {
        return 0;
    }
   
    if(lstrlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize) {
        return 0;
    }
   
    lstrcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
 
    return 1;
}
 
BOOL WINAPI DownloadFile(PCHAR pFileName, PCHAR pHostName, PCHAR pUrl)
{
    CHAR    szIp[17], szSendData[300];
    PCHAR  pFile = 0;
    HANDLE  hFile;
    DWORD  dwFileSize = 0, dwRetSize;
   
    if(!GetIpByHostName(pHostName, szIp, 17)) {
        return 0;
    }
   
    wsprintf(szSendData, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", pUrl, pHostName);
 
    if(!(pFile = HTTPSendReceiveData(szSendData, strlen(szSendData), szIp, &dwFileSize))) {
        return 0;
    }
   
    if(INVALID_HANDLE_VALUE == (hFile = CreateFile(pFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0))) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        return 0;
    }
   
    if(!WriteFile(hFile, pFile, dwFileSize, &dwRetSize, 0)) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        CloseHandle(hFile);
        return 0;
    }
   
    VirtualFree(pFile, 0, MEM_RELEASE);
    CloseHandle(hFile);
   
    return 1;
}
   
VOID WINAPI Main()

    WSAData wsaData;
 
    if(NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) {
        ExitProcess(0);
    }
 
    if(DownloadFile(FILE_NAME, HOST_NAME, URL_NAME)) {
        MessageBox(0, "DownloadFile Ok", 0, 0);
    } else {
        MessageBox(0, "DownloadFile Error", 0, 0);
    }
 
    ExitProcess(0);
}


De-visible 03.12.2008 00:48

POST Encode for DELPHI coding

[Зачем?]

За пару минут накодил эту программулину, зачем?
Да затем, что она облегчает вставку запросов в код программы, кто занимался сетевым программированием на DELPHI (WinSock) думаю поймут, что это неудобно и иной раз просто бесит делать эту работу в ручную:)
Хотя кому как), опубликую может кому понадобиться...


[Скрин]

http://img444.imageshack.us/img444/151/28367617by7.jpg


[Результаты работы]


Код:

GET /index.php? HTTP/1.1
Host: forum.antichat.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729) WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Encode:

Код:

'GET /index.php? HTTP/1.1'+#13#10+
'Host: forum.antichat.ru'+#13#10+
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (.NET CLR 3.5.30729) WebMoney Advisor'+#13#10+
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'+#13#10+
'Accept-Language: ru,en-us;q=0.7,en;q=0.3'+#13#10+
'Accept-Encoding: gzip,deflate'+#13#10+
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'+#13#10+
'Keep-Alive: 300'+#13#10+
'Connection: keep-alive'+#13#10

[Скачать]
http://rapidshare.com/files/169010605/PE_by_De_-V.rar.html

[Warn:]
Заядлых критиков прошу обойти этот пост, так как создавалось это все только для упрощения рутиной работы:).

WAR!9G 05.12.2008 00:39

Мass Wand

Программка из этой же серии - для упрощения рутиной работы. По долгу службы часто приходится вспоминать пароли от Оперы, читай заниматся дешифрованием wand-файлов c расширением .dat :D
И всё ничего, если файл один-два, а если сотня? А ещё лучше если надо осуществить парсинг информации всех дешифрованных файлов. Тут то на помощь и приходит Mass Wand.

1. Просто кладёшь все файлы от Оперы в папку Dat
2. Запускаеешь саму программу Mass Wand
3. Ждёшь пока висят часы, ибо графический интерфейс в данном случае лишнее.
4. На выходе получаешь дешифрованные Dat файлы в папке Notes в текстовом формате.
5. В корневой папке будет файл Completed.txt - это сборная солянка из того что удалось дешифровать.

Алгоритм дешифрования реализован на C - код плавает в сети. Остальное моё - Delphi.

Код:

SearchRec: TSearchRec;
dat_list, bat_content, temp_notes: TStringList;
i: Integer;
username: string;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=False;
temp_notes:=TStringList.Create;
dat_list:=TStringList.Create;
bat_content:=TStringList.Create;

If FindFirst('dat\*.dat', faAnyFile, SearchRec)=0 then
repeat
dat_list.Add(SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);

for i:=0 to dat_list.Count-1 do
begin
bat_content.Clear;
username:=dat_list.Strings[i];
username:=AnsiReplaceStr(username,'.dat','');
bat_content.Add('unwand dat/'+username+'.dat >notes/'+username+'.txt');
bat_content.SaveToFile(username+'.bat');
ShellExecute(Handle, 'open', PChar(username+'.bat'), nil, nil, SW_HIDE);
Sleep(100);
DeleteFile(username+'.bat');
end;

Application.Terminate;
dat_list.Clear;
bat_content.Clear;
If FindFirst('notes\*.txt', faAnyFile, SearchRec)=0 then
repeat
dat_list.Add(SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);

for i:=0 to dat_list.Count-1 do
begin
temp_notes.LoadFromFile('notes\'+dat_list.Strings[i]);
bat_content.AddStrings(temp_notes);
bat_content.SaveToFile('Complete.txt');
end;
end;

end.


RaX 16.12.2008 18:59

Отправка сообщения с авторизацией
 
Отправка e-mail с авторизацией


Т.к часто возникает такая проблема, вот код для Delphi в консоли. Программа читает текст из файла message.txt и отправляет его на ide4@rambler.ru с ящика rax_08@mail.ru (укажите свой).
Код:

{(C)2008 by RaX}
program mail;

{$APPTYPE CONSOLE}

uses
  SysUtils, WinSock, Windows;

function lookupname(str: string): TInAddr;
var
  _hostEnt:PHostEnt;
  _inAddr:TInAddr;
begin
  if (lowerCase(str)[1] IN ['a'..'z']) OR
      (lowerCase(str)[2] IN ['a'..'z']) then
  begin
    _hostEnt := getHostByName(pchar(str));
    FillChar(_inAddr, sizeOf(_inAddr), 0);
    if _hostEnt<>nil then
    begin
      with _hostEnt^, _inAddr 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
  else
    _inAddr.s_addr := inet_addr(pchar(str));

 Result:= _inAddr;
end;

function GetLocalHost: string;
var
 sh : array [0..255] of char;
begin
 if gethostname(sh, 255)=0 then
  Result := StrPas(sh)
 else
  Result := '';
end;

procedure SendStr(s:TSocket; str:String);
var
 sRecvBuff : array [0..255] of char;
 TempStr : AnsiString;
 i:integer;
begin

 TempStr:=str+#13+#10;
 CopyMemory(@sRecvBuff, PChar(TempStr), Length(TempStr));
 i:=send(s, sRecvBuff, Length(TempStr), 0);

 writeln('>'+str);
end;

procedure GetStr(s:TSocket);
var
  TempStr : AnsiString;
  sRecvBuff : array [0..255] of char;
begin
 recv(s, sRecvBuff, SizeOf(sRecvBuff), 0);
 TempStr:=sRecvBuff;
 writeln('<'+Copy(TempStr, 1, Pos(#13, TempStr)));
end;

var
 wData : WSADATA;
 sServerListen, suser: TSOCKET;
 server_addr, user_addr : sockaddr_in;
 sRecvBuff : array [0..255] of char;
 TempStr:AnsiString;
 i, iRet:Integer;
begin

 // Загрузка WinSock
 if WSAStartup(MAKEWORD(1,1), wData) <> 0 then
        begin
  writeln('WinSock error!');
  readln;
  exit;
        end;

 // Создание сокета
  suser := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
 if suser = INVALID_SOCKET then
  begin
  writeln('Socket error!');
  readln;
  exit;
  end;

 // Запонение структуры адреса POP3
 user_addr.sin_addr.s_addr := htonl(INADDR_ANY);
 user_addr.sin_family := AF_INET;
 user_addr.sin_port := htons(110);
 user_addr.sin_addr := LookupName('pop.mail.ru');

 if (connect(suser, user_addr, sizeof(user_addr)) = SOCKET_ERROR) then
  begin
  writeln('Connection error!');
  readln;
  exit;
  end;

 getstr(suser);
 sendstr(suser,'USER rax_08');
 getstr(suser);
 sendstr(suser,'PASS 1234546');
 getstr(suser);

 sServerListen := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
 if sServerListen = INVALID_SOCKET then
  begin
  writeln('Socket error!');
  readln;
  exit;
  end;

 // Запонение структуры адреса SMTP
 server_addr.sin_addr.s_addr := htonl(INADDR_ANY);
 server_addr.sin_family := AF_INET;
 server_addr.sin_port := htons(587);
 server_addr.sin_addr := LookupName('smtp.mail.ru');

 if (connect(sServerListen, server_addr, sizeof(server_addr)) = SOCKET_ERROR) then
  begin
  writeln('Connection error!');
  readln;
  exit;
  end;

  sleep(100);

 getstr(sServerListen);
 sleep(100);
 // Приветствие сервера

  sendstr(sServerListen,'HELO '+GetLocalHost);

  getstr(sServerListen);

  sendstr(sServerListen,'MAIL FROM: rax_08@mail.ru');

 // От
 getstr(sServerListen);
 // Кому
 sendstr(sServerListen,'RCPT TO:<ide4@rambler.ru>');
 getstr(sServerListen);
 // Начало отправки данных сообщения
 sendstr(sServerListen,'DATA');
 sleep(1000);
 getstr(sServerListen);


 // От
 sendstr(sServerListen,'From: rax_08@mail.ru');
 // Кому
 sendstr(sServerListen,'To:<ide4@rambler.ru>');
 // Кодировка, в данном случае стоит отправка с HTML
 sendstr(sServerListen,'Mime-Version: 1.0'+#13+#10+'Content-Type: text/html; charset="us-ascii');

//Читаем сообщение из файла
 assign(input,'message.txt');
 reset(input);
 while not eof do
  begin
  // Сообщение

  readln(TempStr);
  while TempStr<>'' do
    begin
    CopyMemory(@sRecvBuff, PChar(TempStr), Length(TempStr));
    iRet:=send(sServerListen, sRecvBuff, Length(TempStr), 0);

    if iRet=SOCKET_ERROR then
      break;

    writeln('>'+Copy(TempStr, 1, Pos(#13, TempStr)));

    Delete(TempStr, 1, iRet);
    end;
  end;

  close(input);

 // Конец сообщения
 sendstr(sServerListen,#13+#10+'.');
 getstr(sServerListen);

 // Выход
 sendstr(sServerListen,'QUIT');

 sendstr(suser,'QUIT');

  getstr(suser);

 CloseSocket(suser);

 CloseSocket(sServerListen);


end.


bons 23.12.2008 01:22

icmprange
Утилита предназначена для посылки ICMP-запросов диапазону IP-адресов.

mbrscan
Утилита читает структуры MBR жестких дисков локального компьютера.

исходные коды и исполняемые файлы в этой теме

jawbreaker 23.12.2008 12:32

DNS Lookup
 
Программка для поиска имён в DNS:

http://pic.ipicture.ru/uploads/081223/XAUFaQWa36.jpg

С# код:

PHP код:


using System
;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace 
DNS_LOOKUP
{
    public 
partial class Form1 Form
    
{
       public 
Form1()
        {
            
InitializeComponent();
            
label1.Text "Host name:";
        }
        private 
void btnResolve_Click(object senderEventArgs e)
        {
                try
                {
                    
IPHostEntry iphost Dns.Resolve(txtBoxInput.Text);
                    foreach (
IPAddress ip in iphost.AddressList)
                    {
                        
string ipaddress ip.AddressFamily.ToString();
                        
listBoxIPs.Items.Add(ipaddress);
                        
listBoxIPs.Items.Add(" " ip.ToString());
                    }
                    
txtBoxHostName.Text iphost.HostName;
                }
                catch (
System.Exception ex)
                {
                    
MessageBox.Show(ex.Message);
                }
        }
    }


Скачать exe'шник
Скачать исходники

_antony 23.12.2008 16:23

может будет кому нибудь интересно.
дабл клик по драйверу чтобы посмотреть адреса обработчиков irp и куда они смотрят.
http://sav1or.rootkits.ru/programs/irp_h/main.png
http://sav1or.rootkits.ru/programs/irp_h/functions.png
download

rudvil 12.02.2009 02:12

Упрощенный string replace
 
Пользовательская функция replace для которой нужны только 3 параметра - (исходный текст, найтичто, заменитьчем)

Написал вот такой реплейсер т.к. встроенный в C++ для меня не неудобен.

Обновлённая версия

eLWAux 21.02.2009 23:37

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

pascal:
Код:

program crypt_lab1;

uses
  crt;

const
  MaxDig = 1000;  { максимальное количество цифр }
  Osn    = 10000; { основание нашей системы счисления }

type
  TLong = array[0..MaxDig] of integer;

 { считивание длинного числа с файла }
 procedure ReadLong(filename :string; var a:TLong);
 var i  :integer;
    F  :text;
    ch :char;
 begin

    for i:=0 to MaxDig do a[i]:=0;
    a[0]:=1;

    assign(F, filename);
    reset(F);
    while not eof(F) do begin
          read(F,ch);

          for i:=a[0] downto 1 do begin
              a[i+1] := a[i+1] + ( longint(a[i]) *10) div Osn;
              a[i]  := ( longint(a[i]) *10) mod Osn;
              end;

          {val(ch,temp,temp); a[1] := a[1] + temp;}
          a[1] := a[1] + ord(ch) - ord('0');
          if (a[a[0]+1]>0) then inc(a[0]);

    end;
    close(F);

 end;


 { вывод длинного числа на экран из массива}
 procedure WriteLong(var a :TLong);
 var ls,s:string; i:integer;
 begin
      str( Osn div 10, ls);
      write(a[a[0]]); {starwa cufra}
      for i:=a[0] - 1 downto 1 do begin
          str(a[i], s);
          while length(s)<length(ls) do
                s:='0'+s;
          write(s);
      end;
      writeln;
 end;

  { сравнения двох дл. чисел: a == b }
 function Eq(a,b :TLong):boolean;
 var
    i:integer;
 begin
      Eq := false;
      if ( a[0]<>b[0] ) then exit;

      { a[0] == b[0] }
      for i:=1 to a[0] do
      if (a[i] = b[i]) then
        Eq := i = a[0];
 end;

  { сравнения двох дл. чисел: a > b }
 function More(a,b :TLong):boolean;
 var i :integer;
 begin
      if ( a[0]>b[0] ) then More:=true else
                            More:=false;
      for i:=a[0] downto 1 do
          if (a[i]<>b[i]) then
          begin
            if (a[i]>b[i]) then More:=true else More:=false;
            break;
          end;
 end;

  { сравнения двох дл. чисел: a > b }
 function Less(a,b :TLong):boolean;
 var i :integer;
 begin
      Less := Not(More(a, b) Or Eq(a, b))
 end;

  { сравнения двох дл. чисел: a >= b }
 function More_Eq(a, b : TLong) : boolean;
 begin
                More_Eq := More(a, b) Or Eq(a, b)
 end;

  { сравнения двох дл. чисел: a <= b }
 function Less_Eq(a, b : TLong) : boolean;
 begin
        Less_Eq := Not More(a, b)
 end;

 { сложения двух длинних чисел: a + b }
 procedure Sum2Long(var a,b :TLong; var c :TLong);
 var i,k:integer;
 begin
      for i:=0 to MaxDig do  { aHaJlor:                    }
          c[i] := 0;        {  fillchar(c, sizeof(c), 0); }

      if a[0]>b[0] then k:=a[0] else k:=b[0];
      for i:=1 to k do begin
          c[i+1] := (c[i] + a[i] + b[i]) div osn;
          c[i] := (c[i] + a[i] + b[i]) mod osn;
      end;
      if (c[k+1] = 0) then c[0]:=k else c[0] := k+1;
 end;

var
  a,b,c :TLong;
  i    :integer;

begin
  clrscr;

  ReadLong('num1.txt',a);
  ReadLong('num2.txt',b);
  write('a  = ');  WriteLong(a);
  write('b  = ');  WriteLong(b);

  Sum2Long(a,b,c);
  write('a+b = ');  WriteLong(c);

  writeln( 'a > b ', More(a,b) );
  writeln( 'b > a ', More(b,a) );
  writeln( 'c > b ', More(c,b) );
  writeln( 'c > a ', More(c,a) );

  readln;
end.

пример входних данных:
num1.txt: 102030405060708090
num2.txt: 11222333444455555666666777777888888899

W!z@rD 22.02.2009 10:19

Парсинг гугла
 
Парсинг гугла на ссылки.
Используемый язык - C#

Пример использования:
PHP код:

 void Button1Click(object senderEventArgs e
        { 
            var 
= new Google(textBox1.Text) {LinksCount 100}; 
            var 
result = new List<string>(); 
            while(
g.Read()) 
            { 
                var 
tmp g.GetResult(); 
                foreach(var 
s in tmp
                { 
                    
result.Add(s); 
                } 
            } 
            if (
checkBox1.Checked
            { 
                
result result.Distinct().ToList(); 
            } 
            foreach(var 
s in result
            { 
                
textBox2.Text += "\r\n"
            } 
        } 

Подробнее (описание методов и полей) - https://forum.antichat.ru/showthread.php?p=1118071
пример + класс http://www.sendspace.com/file/jbwxtf

eLWAux 12.03.2009 21:23

HQ9+ интерпретатор:

Код:

program Project1;
 
{$APPTYPE CONSOLE}

uses
  SysUtils;
  var i,ii,x:integer;
  s:string;

begin
  ReadLn(s);

  //Алгоритм работы будет повторяться, пока  пользователь не введет команду exit
  while s<>'exit' do begin
    write('> ');
    ReadLn(s);
    for i:=1 to Length(S)  do
        case s[i] of
                //Если символ равен заглавной или прописной H, вывести  Hello, world!
            'H':writeLn(']  Hello, world!');
            'h':writeLn(']  Hello, world!');
            'Q':writeLn(s);
                //Если символ равен заглавной или прописной Q, вывести  переменную S.
                //Там код программы
            'q':writeLn(s);
            '+':Inc(x); //Если символ равен плюсу, увеличить икс.
            '9':begin //Символ девять выводит стих.
                writeLn(']  99 bottles of beer');
                for ii:=98 downto 1 do begin
                    writeLn(']  you take one down, pass it around,');
                    writeLn(']  '+IntToStr(ii)+' bottles of beer on the wall');
                    writeLn(']  ');
                    writeLn(']  '+IntToStr(ii)+' bottles of beer');
                end;
                writeLn(']  you take it down, pass it around,');
                writeLn(']  no more bottles of beer on the wall.');
        end;
    end;
  end;
 
end.

Код:
> HQ++QH
Результат:
> Hello, world. HQ++QH HQ++QH Hello, world.

De-visible 22.03.2009 23:06

http://ru.wikipedia.org/wiki/HQ9%2B

Maccer 24.03.2009 00:16

Не знаю есть ли аналоги, писал для своих нужд, может кому еще пригодится.
Программа составляет список всех айпишников из списка диапазонов.

Скачать
Исходник (Visual Studio 2008)

Использование:
Копируем, к примеру, албанские айпишники и сохраняем в source.txt (слово albania в списке проблем не создает)
Запускаем программу, ждем пока появится надпись Complete и берем готовый список из result.txt
(3ий Angry IP Scanner работает с такими списками)

s0l_ir0n 26.03.2009 08:41

Конвертация в Delphi
 
Код:

function IntToHex(Value: Integer; Digits: Integer): string;
function IntToStr(Value: LongWord): string;
function StringToDec(s:string) : string;
function StringToHex(Text: String): String;
function IntToHex8(Inp : DWord): String;
function Hex8ToInt(Hex8 : String): DWord;
function UpperCase(const S: string): string;
function HexToInt(HexStr : string) : Int64;
function IntToBin(IValue : Int64; NumBits : word = 64) : string;
function BinToInt(BinStr : string) : Int64;
function ByteToHex(Value: Integer): string;

Нашел в закромах родины библиотеку по конвертированию. Функции в ней не используют модуль SysUtils, поэтому если вы пишете на API то это может помочь, т.к. размер вашей программы не сильно увеличится.

По ссылке скомпилированная dll и исходный код.

Скачать

laedafess 27.03.2009 20:08

Можете мне накодить програмку, консольную в которую пишешь приложение и она его сворачивает..
ну например открыто несколько блокнотов, вводим
Код:

program.exe notepad
и все блокноты сворачиваются. Заранее спасибо.

KHR3b 05.04.2009 05:48

Народ, у кого есть исходники скана диапазона ip на определённый порт, или несколько на Visual cpp
зарание благодарен

razb 05.04.2009 12:49

Цитата:

Народ, у кого есть исходники скана диапазона ip на определённый порт, или несколько на Visual cpp
смотри nmap там все виды сканов есть)

KHR3b 05.04.2009 17:13

Цитата:

Сообщение от razb
смотри nmap там все виды сканов есть)

Я там годами разбираться буду (((

criz 05.04.2009 18:54

Цитата:

Сообщение от KHR3b
Народ, у кого есть исходники скана диапазона ip на определённый порт, или несколько на Visual cpp
зарание благодарен

Для начала смотрим тут, берем код и изменяем как нам надо :)

Aser 18.04.2009 11:05

Помогите пожалуйста!!!
нужна прога на С++ которая складывает умножает транспонирует матрицу.

rudvil 07.05.2009 23:25

Воть, обновленная версия реплейсера переписал все с нуля - повышена скорость работы, меньше строчек кода.

replace (Исходник, НайтиЧто, ЗаменитьЧем);

Пример:
Код:

std::string hello = "Hello World!";
replace(hello, "o", "_");
std::cout << hello << "\n";
выведет: Hell_ W_rld!

и ещё

std::string hello = "Hello Worlld!";
replace(hello, "ll", "$");
std::cout << hello << "\n";
выведет: He$o Wor$d!

Исходник:
Код:

#include <iostream>
#include <string>

void replace (std::string& source, std::string findWhat, std::string replaceWith) {
    if (source == "" || findWhat == "")
        return;
    if (source == findWhat) {
        source = replaceWith;
        return;
    }
    size_t findWhatIndex = 0;
    size_t startIndex = 0;
    size_t findLength = findWhat.length();
    bool flag = false;
    for (size_t i = 0; i < source.length(); i++) {
        if (flag) {
            if (source.at(i) == findWhat.at(findWhatIndex) && findWhatIndex < (findLength - 1))
                ++findWhatIndex;
            else if (source.at(i) == findWhat.at(findWhatIndex) && findWhatIndex == (findLength - 1)) {
                source = source.replace(startIndex, findLength, replaceWith);
                findWhatIndex = 0;
                startIndex = 0;
                flag = false;
            }
            else {
                findWhatIndex = 0;
                startIndex = 0;
                flag = false;
            }
        }
        else {
            if (source.at(i) == findWhat.at(0) && findLength == 1)
                source = source.replace(i, 1, replaceWith);
            else if (source.at(i) == findWhat.at(0)) {
                startIndex = i;
                ++findWhatIndex;
                flag = true;
            }
        }
    }
}


ErrorNeo 11.05.2009 17:52

хочу программу, которой можно указать ник и пароль на ачате,
вбить линки тредов(на форуме) новые сообщения в которых (мне) в данный моент инетресны.
(не более 10 штук)

как минимум прога должна оповещать о новых сообщениях в тредах.
лучше - если будет 10 вкладок, каждая из которых будет при нажатии считывать в форума все еще не прочитанные мной сообщения из данного треда и, желательно, что бы я там же - в ней - мог напечатать свой комментарий и постануть его через неё на форуме :)

если кто-нибудь - прочтя эту идею - захочет написать - стукните в ЛС.
Если будете писать на Делфи - стукните - напишем вместе.

Если же никто так и не захочет.. Ну тогда я её сам напишу как только полностью закончу работу над своей прогой для работы со словарями
Powerful Password List Creator
линка подробного описания суппорта проги на хэшкрекинге в связи некоторой со спецификой её теметики:
https://hashcracking.info/forum/view...php?f=10&t=233

ps. думаю, если до этого поста Вы _не знали_ о том, как вам нужна такая программа, а теперь _знаете_ и тоже _хотите_ - вы напишете сами :) В этом случае, если у Вас классно получится я вам поставлю стока плюсегов скока смогу за раз и после PPLC займусь уже инет-личером xDD

этот личер будет рандомно (но интеллектуально, без повторов) сёрфить страницы в инете, сохраняя их html составляющии в отдельную папочку.
Делать он это сможет, в общем-то, практически беспонечно :) Ессно алгоритм будет предусматривать защиту от захождения "в тупики" и какие-нибудь еще нужные моменты, которые обязательно всплывут в процессе реализации.
По сути это будет обычный поисковый бот, сохраняюший html файлы (и только их) на винт .
Так же, возможно, научу его личить отовсюду *.txt и *.dic файлы.

Ну а дальше.. дальше весь тот мусор, который на-парсит этот бот, пройдя через мою PPLC превратится один большой, качественный, и без повторов и упорядоченный по алфавиту пассворд-лист.

:) ну а для чего будет нужен он - это уже совсем другая история xDDDD
(если кому-то интересно написание такого личера, пишите. Расскажу своё видение алгоритма. Если же, опять таки, будете писать на делфи - то готов принятие и непосредственно в кодинге)

2 [De], к посту, который ниже: ты сам написал при открытии темы - "можете оставлять просьбы на реализацию той или иной проги". Я оставил 2 заявки на программы с описанием интересных, по моему мнению, идей. А так же разместил ссылку на свою "реализацию" (по этой ссылке, кстате, можно скачать как готовую прогу, так и её исходник). Если же для тебя задачи уровня сортировки букв в слове "Hellow world" интереснее - то, конечно же, дико извиняюсь.))

brain[pillow] 11.05.2009 18:58

Есть ли у кого пример брута http-формы по словарю на асме да ещё и с многопоточностью? Заранее спасибо :)

Feonor 18.05.2009 13:30

Простая прога для показа дополнительной HTTP информации. C#
Умеет выводить http header'ы и cookie'сы. Накодил для себя. Может помочь новичкам в C# т.к. там куча коментариев.
Пример вывода:
http://iscr.ru/photo/1242638444_o.JPG
СКАЧАТЬ размер 17.94 кб

ErrorNeo 25.05.2009 11:46

децл оффтоп, но "для себя" пореккомендую для подобных целей SocketSniffer от nirsoft.net.
но Feonor все равно спасибо) не пробовал еще работать с вижуал Си, ща потестю как оно там робит с http:)

dos999 11.06.2009 13:17

Программа генератор словарей для брута (со своими особенностями)
особенность программы в том что для каждого символа можно задать множество значений которые он может принимать. программ для генерирования словарей полно, но иногда требуется именно такая. например мне как то потребовалось подобрать пароль к архиву, но я знал что 3 и 4 символы пароля цифры, что набиральсь всё маленькими буквами и что последний символ "*".
Пишем в Delphi
Итак:
помещаем на форму пару Edit'ов, Button, Label и StringGrid (с 2 столбцами и 5 строками, свойства ColCount, RowCount).
создаём класс TPasses
Код:

type

  TPas = class
  private
    FNum: Integer;
    FValues: String;
  public
    property Num: Integer read FNum write FNum;
    property Values: String read FValues write FValues;
  end;

  TPasses = array of TPas;

при создании формы нам нужно привести Grid в нормальный вид
Код:

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.Cells[0, 0] := '№';
  StringGrid1.Cells[1, 0] := 'набор значений';
  for i := 1 to StringGrid1.RowCount do
    StringGrid1.Cells[0, i] := IntToStr(i);

Edit1 будет содержать путь к файлу в который будем сохранять наши пароли.
Edit2 содержит число - количество символов в пароле.

меняем число в Edit2, меняется и количество строк в StringGrid.
на событие OnChange объекта Edit2 вешаем процедуру.
Код:

procedure TForm1.Edit2Change(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.RowCount := StrToInt(Edit2.Text) +1;
  for i := 1 to StringGrid1.RowCount do
    StringGrid1.Cells[0, i] := IntToStr(i);
end;

Сл. процедура сохраняет в файл то что ей передали (и заодно отображает в нашем Label'е)
Код:

procedure TForm1.AddToFile(rec: String);
var
  AFile: TextFile;
begin
  if Length(rec)= StringGrid1.RowCount-1 then
  begin
    Label1.Caption := rec;
    Application.ProcessMessages;
    Assignfile(AFile,Edit3.Text);
    if fileexists(Edit3.Text) = false then
      rewrite(AFile)
    else Append(AFile);
    writeln(AFile, rec);
    closefile(AFile);
  end;
end;

Процедура GetPasses генерирует пароли
Код:

function TForm1.GetPasses: TPasses;
var
  i: Integer;
  Pas: TPas;
begin
  SetLength(Result, StringGrid1.RowCount-1);
  for i := 1 to StringGrid1.RowCount - 1 do
  begin
    Pas := TPas.Create;
    Pas.Num := StrToInt(StringGrid1.Cells[0, i])-1;
    Pas.Values := StringGrid1.Cells[1, i];
    Result[i-1] := Pas;
  end;
end;

Процедура GetWords рулит всем вышеперечисленным.
Код:

procedure TForm1.GetWords(srt: String; Num: Integer);
var
  i: Integer;
  ss: TPasses;
  s: String;
begin
  ss := GetPasses;
  for i := 1 to Length(ss[Num].Values) do
  begin
    s := srt + ss[Num].Values[i];
    AddToFile(s);
    if ((Num+1) <= (StringGrid1.RowCount-2)) then
      GetWords(s, Num+1);
  end;
end;

её и ставим на нашу кнопку
Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetWords('', 0);
end;

в итоге получаеться что то такое http://pic.ipicture.ru/uploads/090611/2qX77RPzpY.jpg
прога сэкономила мне кучу времени, надеюсь и вам поможет.
пишите или качайте:
http://depositfiles.com/files/cdppt65z1

Feonor 11.06.2009 13:59

регулярные выражения юзать не модно?

art2222 11.06.2009 15:22

Цитата:

AddToFile(s);
Имхо из этой процедуры открытие\закрытие файла нужно вынести.
Ведь если я захочу 10000 паролей, то прога 10000 раз откроет\закроет файл, что само по себе нехорошо.

dos999 15.06.2009 11:14

Я не утверждаю что эта программа оптимальна, оптимизируйте как вам будет угодно, я лишь идею подкинул.

[n]-c0der 15.06.2009 19:38

Цитата:

Сообщение от Feonor
регулярные выражения юзать не модно?

О, воткнули, что то от себя:D! В программирование не важна мода, нахрена регулярки там, где они нах не нужны...

Feonor 15.06.2009 22:21

Цитата:

Сообщение от [n]-c0der
О, воткнули, что то от себя:D! В программирование не важна мода, нахрена регулярки там, где они нах не нужны...

что то от себя воткнул ты, а я задал вопрос(слово модно было употреблено для иронии), если тебе проще задавать стопитсот параметров это твои проблемы, помойму проще юзать "регулярки". иди учи матчасть, тебе два..

[n]-c0der 16.06.2009 00:40

Цитата:

Сообщение от Feonor
что то от себя воткнул ты, а я задал вопрос(слово модно было употреблено для иронии), если тебе проще задавать стопитсот параметров это твои проблемы, помойму проще юзать "регулярки". иди учи матчасть, тебе два..

Хм... может кодерский батл устроим? :D Посмотрим кому и, что надо учить.
(походу в школе каникулы начались, онтечад опасносте...)

[n]-c0der 23.06.2009 00:02

Цитата:

Сообщение от rudvil
Воть, обновленная версия реплейсера переписал все с нуля - повышена скорость работы, меньше строчек кода.

Replace (Исходник, НайтиЧто, ЗаменитьЧем);

Пример:
Код:

string hello = "Hello World!";
Replace(hello, "o", "_");
cout << hello << endl;
выведет: Hell_ W_rld!

и ещё

string hello = "Hello Worlld!";
Replace(hello, "ll", "[*]");
cout << hello << endl;
выведет: He[*]o Wor[*]d!

Исходник:
Код:

#include <iostream>
#include <string>

using namespace std;

void Replace (string& source, string find_what, string replace_with) {
    if (source == "" || find_what == "") {
        return;
    }
    if (source == find_what) {
        source = replace_with;
        return;
    }
    unsigned int findwhat_index = 0,
    start_index = 0,
    find_length = find_what.length(),
    flag = 0;
    for (unsigned int i = 0; i < source.length(); i++ ) {
        switch (flag) {
            case 0:
                if (source.at(i) == find_what.at(0) && find_length == 1) {
                    source = source.replace(i, 1, replace_with);
                }
                else if (source.at(i) == find_what.at(0)) {
                    start_index = i;
                    findwhat_index++;
                    flag = 1;
                }
                break;
            case 1:
                if (source.at(i) == find_what.at(findwhat_index) && findwhat_index < (find_length - 1)) {
                    findwhat_index++;
                }
                else if (source.at(i) == find_what.at(findwhat_index) && findwhat_index == (find_length - 1)) {
                    source = source.replace(start_index, find_length, replace_with);
                    findwhat_index = 0;
                    start_index = 0;
                    flag = 0;
                }
                else {
                    findwhat_index = 0;
                    start_index = 0;
                    flag = 0;
                }
                break;
        }
    }
}


Не считаю хорошей идеей использовать в этой функции тип string ((..
ИМХО лучше реализовать с char;

rudvil 23.06.2009 00:07

Цитата:

Сообщение от [n]-c0der
Не считаю хорошей идеей использовать в этой функции тип string ((..
ИМХО лучше реализовать с char;

Цитата:

Сообщение от rudvil
Написал вот такой реплейсер т.к. встроенный в C++ для меня не неудобен.

писал специально для <string> :)

d_x 23.06.2009 00:24

[Assembler] Универсальный конвертор текста

Написал небольшую (9.5кб) и быструю программку на асме для конвертации текста и некоторых дополнительных функций. Умеет сохранять и открывать текстовые файлы, есть быстрое копирование и вставка текста.

Скрин:
http://s56.radikal.ru/i152/0906/37/ff1637316c0b.png

Поддерживает конвертацию:
  • Text -> URLEncode
  • Text -> String.fromCharCode (ascii)
  • Text -> String.fromCharCode (utf)
  • Text -> base64
  • Text -> MySQL char
  • Text -> HEX
  • Text -> BIN
  • Text -> chr()
  • Text -> MSSQL char
  • Text -> PostgreSQL
  • Text -> MD5
  • Text -> SHA1
  • Text -> &#xxx; (ascii)
  • Text -> &#xxx; (utf)
  • Text -> \xhh
  • Text -> %XX
  • Text -> VB chr$()
  • Text -> C# (char)
  • Text -> Транслит
  • URLEncoded -> Text
  • base64 -> Text

PS. Видел похожее от Pashkela (https://forum.antichat.ru/showpost.php?p=1151651&postcount=657), но там что-то на 700кб, да и вирустотал что-то подозревает, вроде бы там запакованный UPX'ом exe, сделанный из php =)

Скачать исходники и exe: kaimi.ru

Useroff 23.06.2009 08:19

http://forum.servmast.ru/index.php?topic=7.0
Конкулятор на C++.
Писал сам, достаточно часто обновляю :)

Зы: не сочтите за рекламу, просто часто переписываю, не хочется везде менять ...

Fata1ex 23.06.2009 08:36

Добавь хотя бы синтаксический анализатор простенький, а то в таком виде на звание "полезной программы" он претендовать ну никак не может.


Время: 11:31