Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
539
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.68 KB | None | 0 0
  1. <?php
  2. class dle
  3. {
  4.     private $kernel;
  5.     private $reg = array();
  6.    
  7.     public function __construct($kernel)
  8.     {
  9.         $this->kernel = $kernel;
  10.     }
  11.    
  12.    
  13.     public function start()
  14.     {
  15.         switch($this->kernel->argv['mode'])
  16.         {
  17.             case 'pm':  $this->pm();break;
  18.             case 'addnews': $this->addnews();break;
  19.             default: $this->kernel->log("Input action", true, ERROR_FATAL);break;
  20.         }
  21.        
  22.         return;
  23.     }
  24.    
  25.    
  26.     private function addnews()
  27.     {
  28.         //---------------------------------------------//
  29.         // берем все сайты с базы
  30.         //---------------------------------------------//
  31.         $result = $this->kernel->db->sql_query("SELECT * FROM dle_sites");
  32.         if($this->kernel->db->num_rows() == 0) $this->kernel->log("Sites not found", true, ERROR_FATAL);
  33.        
  34.         //---------------------------------------------//
  35.         // выбераем ак сервис
  36.         //---------------------------------------------//
  37.         if(!$this->kernel->ac) {
  38.             if($this->kernel->argv['ac'] == 'antigate') {
  39.                 include(ROOT_DIR . 'lib/antigate.php');
  40.                 $this->kernel->ac = new ac(&$this->kernel);
  41.             } else if($this->kernel->argv['ac'] == 'captchabot') {
  42.                 include(ROOT_DIR . 'lib/captchabot.php');
  43.                 $this->kernel->ac = new ac(&$this->kernel);
  44.             } else {
  45.                 $this->kernel->log("Incorrect AC service", true, ERROR_FATAL);
  46.             }
  47.         }
  48.         //---------------------------------------------//
  49.         // тексты новости
  50.         //---------------------------------------------//
  51.         $news = array();
  52.         $news['prev'] = file_get_contents(ROOT_DIR . 'dle_news-prev.txt');
  53.         $news['full'] = file_get_contents(ROOT_DIR . 'dle_news-full.txt');
  54.         $news['title'] = file_get_contents(ROOT_DIR . 'dle_news-title.txt');
  55.         while($data = $this->kernel->db->fetch_assoc($result))
  56.         {
  57.             //---------------------------------------------//
  58.             // создаем сессию и настройки
  59.             //---------------------------------------------//
  60.             $this->kernel->network->new_session();
  61.             $this->kernel->network->setOpt(array(
  62.                 'cookie-file' => TEMP_DIR . microtime(),
  63.                 'return-result' => 1,
  64.                 'return-headers' => 1,
  65.                 'follow-location' => 1,
  66.             ));
  67.            
  68.             $this->kernel->log("URL: {$data['url']}");
  69.             //---------------------------------------------//
  70.             // смотрим есть ли логин в базе. если нету, то регимся.
  71.             //---------------------------------------------//
  72.             if($data['login'] == '' or $data['pass'] == '') {
  73.                 if($this->register($data['url']) == false) {
  74.                     continue;
  75.                 } else {
  76.                     $data['login'] = $this->reg['login'];
  77.                     $data['pass'] = $this->reg['pass'];
  78.                     $this->kernel->db->sql_query("UPDATE dle_sites set login = '{$data['login']}', pass = '{$data['pass']}' where id = '{$data['id']}'");
  79.                 }
  80.             }
  81.             //---------------------------------------------//
  82.             // входим
  83.             //---------------------------------------------//
  84.             $this->login($data['login'], $data['pass'], $data['url']);
  85.             //---------------------------------------------//
  86.             // закроем и откроем соеденение, баг курла чтоли какой то
  87.             // иначе просто куки не сохраняются, которые были отданы при логине
  88.             // а если закрыть - то сохранятся. пиздец.
  89.             //---------------------------------------------//
  90.             $this->kernel->network->close();
  91.             $this->kernel->network->new_session();
  92.             $this->kernel->network->setOpt(array(
  93.                 'cookie-file' => $this->kernel->network->cookie_file,
  94.                 'return-result' => 1,
  95.                 'return-headers' => 1,
  96.                 'follow-location' => 1,
  97.             ));
  98.             //---------------------------------------------//
  99.             // получим капчу
  100.             //---------------------------------------------//
  101.             $this->kernel->log("Try add news");
  102.             $code = $this->kernel->ac->send($data['url'] . 'engine/modules/antibot.php', 'jpg', array('cookie-file' => $this->kernel->network->cookie_file, 'referer' => $data['url'] . '?do=addnews'));
  103.             //---------------------------------------------//
  104.             // возьмем секретные коды антиспама. и зачем они?
  105.             //---------------------------------------------//
  106.             $this->kernel->network->setOpt(array(
  107.                 'url' => "{$data['url']}?do=addnews",
  108.                 'method' => GET
  109.             ))->start();
  110.             preg_match('/\<input type=\"hidden" name\="mod" value\="addnews" \/\>\<input type\="hidden" name\="(.*?)" value\="(.*?)" \/\>/i', $this->kernel->network->data, $hidden);
  111.            
  112.             $this->kernel->log("Code: {$code}");
  113.             //---------------------------------------------//
  114.             // запрос на добавку
  115.             //---------------------------------------------//
  116.             $postdata = array(
  117.                     'title' => $news['title'],
  118.                     'bbfont' => '0',
  119.                     'bbsize' => '0',
  120.                     'short_story' => $news['prev'],
  121.                     'full_story' => $news['full'],
  122.                     'sec_code' => $code,
  123.                     'add' => 'отправить',
  124.                     'mod' => 'addnews',
  125.                     $hidden[1] => $hidden[2],
  126.             );
  127.             $this->kernel->network->setOpt(array(
  128.                 'url' => "{$data['url']}?do=addnews",
  129.                 'method' => POST,
  130.                 'postdata' => $postdata,
  131.                 'referer' => $data['url'] . '?do=addnews',
  132.             ))->start();
  133.            
  134.             //---------------------------------------------//
  135.             // проверяем теперь на успех
  136.             //---------------------------------------------//
  137.             $this->kernel->network->data = iconv('cp1251', 'UTF-8', $this->kernel->network->data);
  138.             if(stristr($this->kernel->network->data, 'Ваша новость была успешно добавлена в базу данных.')) {
  139.                 $this->kernel->log("News added");
  140.                 $this->kernel->stats['total']++;
  141.                 $this->kernel->log("Total added: {$this->kernel->stats['total']}");
  142.             } else if(stristr($this->kernel->network->data, '<li>Введен неверный код безопасности</li>')) {
  143.                 $this->kernel->log("Bad image code");
  144.             } else {
  145.                 $this->kernel->log("Can't send news");
  146.             }
  147.             //---------------------------------------------//
  148.             // завершаем
  149.             //---------------------------------------------//
  150.             unset($code, $postdata, $hidden);
  151.             $this->kernel->network->close();  
  152.         }
  153.        
  154.         $this->kernel->log("Work done :)");
  155.     }
  156.    
  157.    
  158.     private function register($url)
  159.     {        
  160.         $code = $this->kernel->ac->send($url . 'engine/modules/antibot.php', 'jpg', array('cookie-file' => $this->kernel->network->cookie_file, 'referer' => $url . '?do=register'));
  161.         $this->kernel->log("Captcha: {$code}");
  162.         $this->kernel->network->setOpt(array(
  163.             'url' => "{$url}?do=register",
  164.             'method' => POST,
  165.             'postdata' => array(
  166.                 'name' => 'IAmNewsMan',
  167.                 'password1' => 'hello11',
  168.                 'password2' => 'hello11',
  169.                 'email' => 'nulleg@mail.ru',
  170.                 'sec_code' => $code,
  171.                 'submit_reg' => 'submit_reg'
  172.             ),
  173.         ))->start();
  174.         file_put_contents(TEMP_DIR . 'mda'.rand().'.html', $this->kernel->network->data);
  175.         if(stristr($this->kernel->network->data, '<input type="text" name="fullname"')) {
  176.             $this->kernel->log("Success register: IAmNewsMan:hello11");
  177.             $this->reg['login'] = 'IAmNewsMan';
  178.             $this->reg['pass'] = 'hello11';
  179.             return true;
  180.         } else if(stristr($this->kernel->network->data, 'Через 10 минут (возможно и раньше)')) {
  181.             $this->kernel->log("Register failing, need activation");
  182.             return false;
  183.         } else {
  184.             $this->kernel->log("Rigster failing");
  185.             return false;
  186.         }
  187.     }
  188.    
  189.     private function pm()
  190.     {
  191.         $this->kernel->network->new_session();
  192.         $this->kernel->network->setOpt(array(
  193.             'return-result' => 1,
  194.             'return-headers' => 1,
  195.             'follow-location' => 1,
  196.             'cookie-file' => TEMP_DIR . microtime(),
  197.             'timeout' => 10,
  198.         ));
  199.         $this->login();
  200.        
  201.         for($i = $this->kernel->argv['s'];$i < $this->kernel->argv['e']; $i++)
  202.         {
  203.             $this->kernel->network->setOpt(array(
  204.                 'url' => $this->kernel->argv['url'] . "index.php?do=pm&doaction=newpm&user={$i}",
  205.                 'method' => GET,
  206.                 'no-body' => 0,
  207.             ))->start();
  208.             preg_match('/\<input type\="text" name\="name" value\="(.*?)"/i', $this->kernel->network->data, $out);
  209.            
  210.             $this->kernel->network->setOpt(array(
  211.                 'url' => $this->kernel->argv['url'] . "index.php?do=pm&doaction=newpm&user={$i}",
  212.                 'method' => POST,
  213.                 'postdata' => array(
  214.                     'name' => $out[1],
  215.                     'subj' => $this->get_subj(),
  216.                     'comments' => $this->get_comments(),
  217.                     'outboxcopy' => 1,
  218.                     'send' => 'send',
  219.                 ),
  220.                 'no-body' => 1,
  221.             ))->start();
  222.             $this->kernel->log("Message to id {$i} sent");
  223.         }
  224.     }
  225.    
  226.    
  227.     private function get_subj()
  228.     {
  229.         $this->kernel->db->sql_query("SELECT * FROM dle_subj order by rand() limit 1");
  230.         $subj = $this->kernel->db->fetch_assoc();
  231.        
  232.         return urlencode(iconv('UTF-8', 'cp1251', $subj['subj']));
  233.     }
  234.    
  235.    
  236.     private function get_comments()
  237.     {
  238.         $this->kernel->db->sql_query("SELECT * FROM dle_comm order by rand() limit 1");
  239.         $comm = $this->kernel->db->fetch_assoc();
  240.        
  241.         return urlencode(iconv('UTF-8', 'cp1251', $comm['comm']));
  242.     }
  243.    
  244.     private function login($login = '', $pass = '', $url = '')
  245.     {
  246.         if(!$login || !$pass) list($login,$pass) = explode(':', $this->kernel->argv['login']);
  247.         $this->kernel->network->setOpt(array(
  248.             'url' => $url ? $url : $this->kernel->argv['url'],
  249.             'method' => POST,
  250.             'postdata' => array(
  251.                 'login_name' => $login,
  252.                 'login_password' => $pass,
  253.                 'login' => 'submit',
  254.             ),
  255.         ));
  256.         $this->kernel->network->start();
  257.        
  258.         if(stristr($this->kernel->network->data, 'Set-Cookie: dle_user')) {
  259.             $this->kernel->log("Success login");
  260.             return true;
  261.         } else {
  262.             $this->kernel->log("Can't login", true, ERROR_FATAL);
  263.         }
  264.  
  265.        
  266.     }
  267.        
  268.        
  269.    
  270. }
  271.  
  272. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement