Янв 042012
 

Видел, что часто просят скрипт на сохранение лички. Посчитал эту идею интересной и решил реализовать. Скрипт написан на PHP.

Возможности:

  • Дамп диалога только с конкретным человеком
  • Дамп диалогов всех друзей
  • Вывод дампа в 2-х форматах
  • Автоматическая архивация диалога
Скрипт работает быстро, через API.
Дек 292011
 

Обновил скрипт просмотра рейтинга, работает через API.

Принцип запросов тот же, как и в посте про VkInfo.

Распространяется в виде дополнения для хрома / js-скрипта. Если использовать второй вариант — не забудьте подключить jQuery. Тестировал только на хроме.

Continue reading »

Дек 282011
 

Примерно так я делаю бекапы :)
Может быть кому-нибудь пригодится.

<?php
unlink('/tmp/dropbox_cookie');
$dropbox = Dropbox::forge();
try {
    $dropbox->login('[email protected]', 'password');
    $dropbox->upload('filename.tar', '/folder');
}
catch (Exception $e) {
    die("Error: " . $e->getMessage());
}
class Dropbox
{
    public static function forge()
    {
        return new Dropbox();
    }
 
    public function login($mail, $pass)
    {
        $page  = curl('https://www.dropbox.com/login');
        $token = pm($page, '/name="t" value="([a-z0-9]*?)"/');
        if (!$token)
            throw new Exception('no token');
        $page = curl('https://www.dropbox.com/login', true, array(
            'login_email' => $mail,
            'login_password' => $pass,
            't' => $token
        ));
        if (!substr_count($page, '/home'))
            throw new Exception('invalid login/password');
    }
 
    public function upload($filename, $dir)
    {
        $page  = curl('https://www.dropbox.com/home');
        $page  = explode('https://dl-web.dropbox.com/upload', $page);
        $token = pm($page[1], '/name="t" value="([a-z0-9]*?)"/');
        if (!$token)
            throw new Exception('no token');
        $page = curl('https://dl-web.dropbox.com/upload', true, array(
            'plain' => 'yes',
            'dest' => $dir,
            't' => $token,
            'file' => '@' . $filename
        ));
        if (!substr_count($page, '302 FOUND'))
            throw new Exception('cant upload file');
    }
}
 
function curl($url, $headers = false, $post = false)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, $headers);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/dropbox_cookie');
    curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/dropbox_cookie');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
    if ($post) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}
 
function pm($haystack, $regexp)
{
    return preg_match($regexp, $haystack, $out) ? $out[1] : false;
}
?>
Дек 272011
 

В этой статье я расскажу, как сделать свой Denwer на Ubuntu.
В интернете много мануалов, но все они сводятся к установке LAMP.
У нас все будет немного иначе — папки будут автоматически подхватываться системой: создаем папку test1.ru и грузим в нее свои файлы — в hosts и виртуальных хостах автоматически создается запись.

Для начала поставим все необходимое в виде Apache + MySQL + PHP:
sudo apt-get install php5 && sudo apt-get install apache2 && sudo apt-get install mysql-server-5.0 && sudo apt-get install phpmyadmin

В процессе установки phpMyAdmin выбираем наш сервер — apache2.
После этого переходим на http://localhost — если видим страницу It Works!, то все сделано правильно.

Continue reading »

Дек 132011
 

У Волка есть сервис под названием VkInfo.
Работает он через API ВКонтакта, но делает он это на стороне сервера, запрашивая страницы и парся их, а затем отдавая клиенту уже форматированный HTML-код.

В этой статье мы напишем такой же сервис, только работающий на стороне клиента. Для этого надо сделать кросс-доменный запрос на http://api.vkontakte.ru браузером и затем парсить его. Так как сервер ВК может отдавать результаты запроса в JSON — воспользуемся JSONP, идущий в комплекте с jQuery.

JSONP (JSON Padding) или «JSON с подкладкой» является расширением JSON, когда имя функции обратного вызова указывается в качестве входного аргумента.

Continue reading »

Ноя 292011
 

Одну из первой статей этого блога я хочу посвятить реверсингу.

После этого поста мне в личку сразу повалило куча мессаг с просьбами (а иногда и требованиями :D) отдать крякнутую версию. Я не привык раздавать готовое, поэтому софт собственно никто не получил. Часть этого народа забило, часть захотело крякать, хотя надо сказать, что это не так и просто. Continue reading »