Пишу бесплатно не сложные програмки на делфи......Для общего развития в сфере программирования на делфи....аська на аве
задание #1. имеем: ----------------------------------------------------- *формат url: Code: http://hashkiller.com/api/api.php?md5=098f6bcd4621d373cade4e832627b4f6 098f6bcd4621d373cade4e832627b4f6 тут - MD5 хэш (строка из 32 символов). + *файл, содержащий много строк с хешами. т.е. в каждой строке по 32 символа. (название файла фиксированное, скажем, input.txt) требуется: ------------------------------------------------------ минимум: слать поочередно все хеши (32 символьные строки) через указанный выше запрос, и записывать ответы сервера в отдельный файл. желательно: 1. в зависимости от ответа - а их может быть 2 вида. Сравни к примеру запросы Code: http://hashkiller.com/api/api.php?md5=098f6bcd4621d373cade4e832627b4f6 и http://hashkiller.com/api/api.php?md5=00000000000000000000000000000000 ну так вот... ответы с "true" желательно записывать в один файл, а с false - в другой. ну и само слово true и false в сами файлы писать ессно не надо. 2. хорошо бы вывести в окно программы счетчики успешных и сфейленных запросов. Так.. просто чтобы было. Ну и, когда программа закончит проверку - она должна об эотм тоже как-то сообщать. (например где-то в еню программки может появляться надпись "готово") ================================ p.s. если для тебя это слишком легко - скажу задание посложнее. Смотря насколько сложное тебе нужно
ErrorNeo Моя реализация с помощью инди10 [+] Выполняет все, что надо, после отработки просто закрывается консольное окно [-] Фиксированные имена файлов [-] Кривой код, размер файла, использование инди [-] Нету счетчика (да и нах он, если запросы выполняются моментально?) [-] Out файлы каждый раз перезаписываются заново Code: program Project1; uses Windows, idHTTP, Classes; {$APPTYPE CONSOLE} var http : TIdHTTP; in_list, true_list, false_list : TStrings; iCh, sPos, sPos2, sPos3 : integer; tmp, response_result : string; begin in_list := TStringList.Create; true_list := TStringList.Create; false_list := TStringList.Create; in_list.LoadFromFile('input.txt'); http := TIdHTTP.Create(); for iCh := 0 to in_list.Count -1 do begin tmp := http.Get('http://hashkiller.com/api/api.php?md5='+in_list.Strings[iCh]); sPos := pos('true',tmp); sPos2 := pos('false',tmp); sPos3 := pos('<plain>',tmp); if sPos<>0 then begin response_result:=copy(tmp,sPos3+7,length(tmp)-145); writeln(in_list.Strings[iCh]+' : '+response_result); true_list.Add(in_list.Strings[iCh]+' : '+response_result); end; if sPos2<>0 then begin false_list.Add(in_list.Strings[iCh]+' : '+'NOT FOUND'); end; end; false_list.SaveToFile('false.txt'); true_list.SaveToFile('true.txt'); http.Free; in_list.Free; true_list.Free; false_list.Free; end. З.Ы. Заодно нашел все нужные мне хеши, которые даже хешкряк.инфо не осилил =\ Быстро пади у них работают негры
Вот честно: сижу и читаю какие все тут блатные кодеры... Все умные прям такие... 2 минуты, 5 минут и т.д. Ну так сделай, напиши, покажи. Что зря посты кидать в два слова? Если ты действительно можешь хотябы такой код, как у меня накропать за 2 минуты (или 5 минут), а потом это все дело хоть маломальски отладить - запиши видео, а мы поглядим, как ты стираешь пальцы о клавиатуру, чтобы уложиться в лимит времени. Согласен, задание легкое... И легкое только тем, что не обременено какими-нить кукисами или извращенным парсингом. Да, это не тема для обсуждения задания ErrorNeo, но тем не менее - покажите на что ВЫ способны (если конечно, не только языками умеете молоть). А может кто осилит на чистом WinAPI+winsock сделать? Дабы размер ехе не привысил 50кб З.Ы. Извиняюсь, накипело
ну да, так оно, в общем-то, и должно работать, ex3me. задача действительно совсем-совсем несложная) задачей номер 2 будет разобраться как написать то же самое только с вин-апи В данном примере пользы от этого будет не много, но все же разобраться стоит - как раз на таком элементарном примере. Потому как в большинстве реальных задач вин-апи просто необходим(
Code: #include <stdio.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 #include <winsock.h> #define sleep(x) Sleep(x) #define close(x) closesocket(x) #pragma comment(lib, "ws2_32.lib") #else #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #endif static char *fetch_url(const char *, const char *, int *); int main(int argc, char *argv[]) { FILE *in, *out_bad, *out_good; char *body; char hash[34]; char url[64]; int g = 0, b = 0; if (argc < 2 || argc > 3) { printf("%s <input>\n", argv[0]); return 1; } in = fopen(argv[1], "rb"); if (!in) { perror("fopen"); return 1; } out_bad = fopen("bad_hash", "wb"); out_good = fopen("good_hash", "wb"); while (!feof(in)) { fscanf(in, "%s\n", hash); sprintf(url, "/api/api.php?md5=%s", hash); body = fetch_url("hashkiller.com", url, 0); if (strstr(body, "false")) { printf("[-] Hash not found %s\n", hash); fprintf(out_bad, "%s\n", hash); b++; } else { printf("[+] Hash found %s\n", hash); fprintf(out_good, "%s\n", hash); g++; } } printf("[i] Hash checking complete\n" "\t%d good hash\n" "\t%d bad hash\n", g, b); return 0; } int hard_fetch_ip = 0; #define MAX_LEN 1024 static char *fetch_url(const char *host, const char *url, int *res_len) { struct hostent *phe; struct sockaddr_in sin; int s, len, len_respose; char *body_send; char *body_recv; char *body_response; #if defined _WIN32 WSADATA wsaData; WSAStartup(0x101, &wsaData); #endif s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket"); return NULL; } if (!hard_fetch_ip) { phe = gethostbyname(host); if (phe == NULL) { perror("gethostbyname"); return NULL; } hard_fetch_ip = ((struct in_addr*)phe->h_addr_list[0])->s_addr; } sin.sin_family = AF_INET; sin.sin_addr.s_addr = hard_fetch_ip; sin.sin_port = htons(80); if (connect(s, (struct sockaddr*)&sin, sizeof(struct sockaddr_in))) { perror("connect"); return NULL; } body_send = (char *)malloc(MAX_LEN); body_recv = (char *)malloc(MAX_LEN); body_response = (char *)malloc(MAX_LEN); memset(body_response, 0, MAX_LEN); len_respose = 0; sprintf(body_send, "GET /%s HTTP/1.1\r\n" "Host: %s\r\n" "Connection: close\r\n" "Accept: */*\r\n\r\n", url, host); send(s, body_send, strlen(body_send), 0); int new_len = MAX_LEN; char *tmp; do { len = recv(s, body_recv, MAX_LEN, 0); len_respose += len; if (len_respose > new_len) { new_len = new_len * 2; body_response = (char *) realloc(body_response, new_len ); } memcpy(body_response + (len_respose - len), body_recv, len); } while (len); // remove headers tmp = strstr(body_response, "\r\n\r\n"); len_respose -= (tmp - body_response + 4); memcpy(body_response, tmp + 4, len_respose); free(body_recv); free(body_send); close(s); if (res_len) { *res_len = len_respose; } return body_response; } GNU/Linux $ gcc check-hash.c -Wall -o check-hash $ ./check-hash input.txt [+] Hash found 098f6bcd4621d373cade4e832627b4f6 [+] Hash found 098f6bcd4621d373cade4e832627b4f6 [-] Hash not found 00000000000000000000000000000000 [-] Hash not found 23423423842378947289374892734897 Hash checking complete 2 good hash 2 bad hash Windows $ i586-mingw32msvc-gcc check-hash.c -Wall -lws2_32 -o check-hash.exe $ wine ./check-hash.exe input.txt [+] Hash found 098f6bcd4621d373cade4e832627b4f6 [+] Hash found 098f6bcd4621d373cade4e832627b4f6 [-] Hash not found 00000000000000000000000000000000 [-] Hash not found 23423423842378947289374892734897 Hash checking complete 2 good hash 2 bad hash
а прогу для взлома интернета тебе не надо? если нужен хороший чеккер - иди в соответствующий раздел и заказывай за деньги! нашолся тут, умнеГ.