суббота, 4 августа 2012 г.

Парсер Google

Вообщем продолжение моей античатовской темы двухлетней давности :)  На днях решил переписать это на Python и сделать в виде отдельного модуля, чтобы было можно легко использовать в каких-то других скриптах (эксплойты, сканеры и т.д.) Да и самому удобнее.

Парсит поисковые системы:
  • search.myway.com
  • search.aol.ru
  • websearch.cs.com
  • search.virginmedia.com

Класс: GoogleParser
  • Метод __init__(self, keywords = [], del_dublicats = 1, threads_count = 20, verbose = 1)
    keywords - массив слов для подстановки к каждому запросу, увеличивают выдачу
    del_dublicats - надо ли удалять дубликаты
    threads_count - количество потоков
    verbose - писать ли лог работы в консоль
  • Метод Parse(self,dorks):
    dorks - массив поисковых запросов
  • Метод SortByPR(self, mode = 0, pause = 3)
    mode - сортировка по возрастанию/убыванию (0/1) соответственно
    pause - время задержки после каждого запроса. Чтобы не было бана.
  • Метод GetPR(self, query)
    query - сайт, для которого надо узнать PR. Возвращает число.
Настройки поисковых систем:
self.EngineList = [
        ...
]
Закомментировать те, которые не нужны.
Пример работы с модулем:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import se_parser
arr = []
IN = open("dorks.txt","r")
for s in IN:
 arr.append(s.strip())
IN.close()
obj = se_parser.GoogleParser()
obj.Parse(arr)
obj.SortByPR()
OUT = open("sites.txt","w")
for s in obj.Result:
 print>>OUT,s
OUT.close()

Скачать

пятница, 30 марта 2012 г.

[Python] Алгоритм шифрования RSA

Я решил написать алгоритм шифрования RSA на Python. Писалось в познавательных целях по статьям из википедии. Возможно, окажется кому-то полезным. Скрипт генерирует public/private-ключи и шифрует сообщение. Конфиг:

####################
bit = 10          //количество бит в случайных простых числах
e = 3             //открытая экспонента
msg = 6666    //сообщение для шифрования
####################

Реализация: скачать

Об алгоритме: RSA

Основные понятия:

воскресенье, 12 февраля 2012 г.

Задачка

Задача с олимпиады по информатике одного питерского ВУЗа:

13 00 73 52 - ЗАЯЦ
60 43 30 - ШУМ
03 11 40 32 21 - ?

Жду предложения в комментах. =)

воскресенье, 14 августа 2011 г.

Алгоритм сжатия данных

Об алгоритме: Кодирование_длин_серий
Кидаю сюда реализацию этого алгоритма на C++, может кому-то и понадобится. Это самый простой алгоритм сжатия данных. Реализовал в виде отдельного класса.


Скачать: RLE_algo.zip

пятница, 29 июля 2011 г.

Алгоритм шифрования данных

Выкладываю сюда мой алгоритм шифрования. Ничего особенно нового в нем нет. Писалось для учебных целей. В алгоритме используются:
Реализовано на C++. Программа предназначена для шифрования текстовых данных. Читает и пишет в файл data.txt. Может шифровать неограниченный объём данных.
Алгоритм устройчив к частотному анализу. Сложность взлома определяется длиной пароля. Он может состоять только из маленьких латинских букв. N = 26^m, где m - длина пароля

Скачать:
http://cyberguru007.narod2.ru/code/cryptor.zip 

понедельник, 18 июля 2011 г.

Задачи с acm.timus.ru

Немного о себе: я увлекаюсь спортивным программированием и люблю решать задачи. В качестве языка, по понятным причинам, я выбрал C++
Вот, хочу в своем блоге публиковать исходные коды/разборы некоторых задач. Возможно, кому-нибудь пригодиться. Лично я много раз сталкивался с тем, что негде почитать про идеи или реализацию для некоторых задач.
Итак, начнем с задач попроще:

Задача 1073. Квадратная страна
Автор задачи: Станислав Васильев
Источник задачи: Ural State Univerisity Personal Contest Online February'2001 Students Session
Метки: динамическое программирование
Исходный код: скачать
Примечание: вариация на тему задачи о банкомате - выдать нужную сумму минимальным количеством банкнот. Зачада решается простой динамикой.
Функция динамического программирования:
A[i] = min(A[i-w[0]], A[i-w[1]], ... , A[i-w[j]])+1;
где A[] - массив чисел. w[] - массив квадратов.

Задача 1209. 1, 10, 100, 1000...
Автор задачи: Алексей Лахтин
Источник задачи: USU Open Collegiate Programming Contest October'2002 Junior Session
Метки: задача для начинающих
Исходный код: скачать
Примечание: решаем за О(1).
После недолгих рассуждений понимаем, что номер, на котором стоит единичка задается формулой:
F(n) = 2 + n + n*(n+1)/2;
F(n) = (n^2+3n+4)/2;
Пусть  K — номер позиции в последовательности, про который надо узнать, какая цифра там находится.
(n^2+3n+2)/2 = K;
n^2+3n+4-2K = 0;
D = 8K-7;
D = M^2, значит 8K-7 = M^2, если на позиции с номером K стоит единица.

Задача 1087. Время забирать камни
Автор задачи: Антон Ботов
Источник задачи: Третье командное соревнование школьников Свердловское области по программированию, 4 марта 2001
Метки: игра
Исходный код: скачать
Примечание: это задача на моделирование игры. Почитать здесь
Решается определением всех возможных выигрышных и проигрышных позиций со значениями от 0 до n.

среда, 6 июля 2011 г.

Рутовый WSO веб-шелл

Решил запостить у себя, возможно кто-то еще не в курсе.
Итак, читаем сообщение в блоге хакера с ником nobody. Там говорится о способе заставить работать веб-шелл WSO 2.5 из под рута. Этот способ основывается на передаче команд php-интерпретатору, который вызывается из-под рута.
Сначала поднимаем на целевом сервере права до root`a. Получаем суидник.

Далее нам понадобится два файла:
  • wrapper.php - скрипт, который будет передавать команды веб-шеллу
  • wso_root.php - сам веб-шелл. Его пришлось немного модифицировать
Редактируем конфиг враппера (wrapper.php):
//config
$suid = "/tmp/bin";
$suid_pass = "123";
$wso_path = "/var/www/site/shell.php"; 
Как вы наверно поняли:
$suid - путь до суидника;
$suid_pass - пароль от суидника;
$wso_path - путь до веб-шелла

                      Демонстрация (картинка кликабельная):


Замечание: этот способ пока работает только с шеллами, которые не защищены паролем.

Скачать: wso_root.zip

P.S. авторство этого способа принадлежит nobody