Фев 212012
 

Часто на странице есть множество input`ов с уже заполненными значениями. Если их 2-3, то парсинг не утомляет, а вот если это например форма изменения информации в какой-нибудь соц. сети — это быстро надоедает.

Сегодня как раз столкнулся с такой ситуацией, моя лень пошла на пользу — спарсил все инпуты одной регэкспой, а затем изменил значения только необходимых инпутов.

Сама регэкспа:

<input.*?name=['|"](?<name>.*?)['|"].*?value=['|"](?<value>.*?)['|"].*?>

Модификаторы: m (multiline), i (case insensitive).

Использование на PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
preg_match_all('/<input.*?name=[\'|"](?<name>.*?)[\'|"].*?value=[\'|"](?<value>.*?)[\'|"].*?>/im', $page, $matches);
$post = array();
foreach ($matches['name'] as $key => $value) {
	$post[$value] = $matches['value'][$key];
}
// Смотрим POST: print_r($post);
// В случае, если форма не одна - удаляем ненужные инпуты с помощью unset
 
// Модифицируем некоторые значения:
$post['Email'] = $username;
$post['Passwd'] = $password;
$post['timeStmp'] = time();
 
// Формируем RAW POST, если используется cURL, то этого можно не делать
$raw = http_build_query($post);
Фев 142012
 

Так как VkObmen наконец-то ввел проверку премиума на сервере, выкладываю исходники Loaderа для версии 3.3. Сейчас толка в них нету, причина написана выше. Выкладываю, чтобы глянули способ патчинга и обхода Themidы (которой был накрыт обмен на тот момент).

.486 
.model flat, stdcall
option casemap :none 
 
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
 
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
 
 
.data
Space                   db " ",0
App db "Error",0 
Err1 db " not found",0
App2 db "(3.3) Loader by bafoed (ASM)",0
Err2 db "Патчинг успешно завершен :)",0 
 
prog db "VkObmen.exe",0
va1 DWORD 5753576
va2 DWORD 5753577
va3 DWORD 5753683
va4 DWORD 5753684
 
bufwr1 DWORD 144
bufwr2 DWORD 144
bufwr3 DWORD 144
bufwr4 DWORD 144
 
.data?
Buffer dd 1024 dup (?)
B1 dd 1024 dup (?)
B2 dd 1024 dup (?)
B3 dd 1024 dup (?)
B4 dd 1024 dup (?)
B5 dd 1024 dup (?)
bufr dw ?
pinfo PROCESS_INFORMATION <> 
sinfo STARTUPINFO <> 
n DWORD ? 
.code
 
start: 
 
 
invoke GetCL, 1, ADDR B1
invoke GetCL, 2, ADDR B2
invoke GetCL, 3, ADDR B3
invoke GetCL, 4, ADDR B4
invoke GetCL, 5, ADDR B5
INVOKE lstrcat, ADDR Buffer, Addr prog
INVOKE lstrcat, ADDR Buffer, Addr Space
INVOKE lstrcat, ADDR Buffer, Addr B1
INVOKE lstrcat, ADDR Buffer, Addr Space
INVOKE lstrcat, ADDR Buffer, Addr B2
INVOKE lstrcat, ADDR Buffer, Addr Space
INVOKE lstrcat, ADDR Buffer, Addr B3
INVOKE lstrcat, ADDR Buffer, Addr Space
INVOKE lstrcat, ADDR Buffer, Addr B4
INVOKE lstrcat, ADDR Buffer, Addr Space
INVOKE lstrcat, ADDR Buffer, Addr B5
invoke CreateProcess,NULL, ADDR Buffer, NULL, 
NULL, TRUE, NULL, NULL, NULL,addr sinfo,addr pinfo 
.IF eax == 0 
mov Buffer, " "
INVOKE lstrcat, ADDR Buffer, Addr prog 
INVOKE lstrcat, ADDR Buffer, Addr Err1 
 
invoke MessageBox,NULL,addr Buffer,addr App,MB_ICONERROR
invoke ExitProcess,0
.ENDIF
.WHILE TRUE 
invoke ReadProcessMemory,pinfo.hProcess,va1,addr bufr,1,n
.IF eax != 0 
.IF bufr != 00h 
 
 
 
invoke SuspendThread,addr pinfo.hThread
 
invoke WriteProcessMemory,pinfo.hProcess,va1,addr bufwr1,1,n
invoke WriteProcessMemory,pinfo.hProcess,va2,addr bufwr2,1,n
invoke WriteProcessMemory,pinfo.hProcess,va3,addr bufwr3,1,n
invoke WriteProcessMemory,pinfo.hProcess,va4,addr bufwr4,1,n
 
invoke ResumeThread,addr pinfo.hThread 
invoke CloseHandle,pinfo.hThread 
invoke MessageBox,NULL,addr Err2,addr App2,MB_ICONINFORMATION
invoke ExitProcess,0 
.ENDIF
.ENDIF
.ENDW
 
end start
Фев 132012
 

Необходимо было привязать Redbean к FuelPHP.

      1) Качаем последнюю версию RedBean.
      2) Создаем папку fuel/rb, в ней папку vendor. Туда кладем загруженный rb.php
      3) Создаем файл fuel/rb/bootstrap.php с содержимым:

      <?php
      Autoloader::add_classes(array(
      	'R'             => __DIR__.'/vendor/rb.php',
      ));
      4) Правим app/config/config.php:
      в whitelisted_classes добавляем «R», в always_load => packages добавляем «rb».
      5) Правим app/bootstrap.php, в самый конец файла вставляем:

      R::setup('sqlite:'.APPPATH.'/dbfile.db','user','password'); //sqlite

      Не забываем поменять данные на свои.

      6) Тестируем, в контроллере пишем:

      		$album = R::dispense('album');
      		$album->title = '13 Songs';
      		$album->artist = 'Fugazi';
      		$album->year = 1990;
      		$album->rating = 5;
      		R::store($album);
      		$album = R::load('album', 1)
      		echo $album->title;

Если все работает — значит все сделали правильно.

Фев 122012
 

Пожалуйста, никогда не делайте так:

$sql = "SELECT dumps.*, AES_DECRYPT(dumps.dump_track2, '".strval(DB_ENCRYPT_PASS)."') AS dump_track2, ".TABLE_USERS.".user_name, ".TABLE_GROUPS.".group_color FROM `dumps` LEFT JOIN `".TABLE_USERS."` ON dumps.dump_userid = ".TABLE_USERS.".user_id LEFT JOIN `".TABLE_GROUPS."` ON ".TABLE_USERS.".user_groupid = ".TABLE_GROUPS.".group_id WHERE ".$searchAvailable." AND AES_DECRYPT(dump_track2, '".strval(DB_ENCRYPT_PASS)."') LIKE '".$searchBin."%' ORDER BY dump_id LIMIT ".(($page-1)*$perPage).",".$perPage;
Янв 252012
 

Данная статья актуальна для владельцев нетбуков/ноутбуков.

С момента покупки нового ноутбука столкнулся с проблемой: изначально на нем была установлена Home Basic, в которую не был включен даже интерфейс Aero. Разумеется такой расклад меня не очень устроил, все таки хочется использовать функционал видеокарты и при повседневном использовании. Изначально на ноутбуке было установлено много драйверов на все устройства. Это и кнопки FN, спец. софт для переключения между дискретной и встроенной графики, экономия энергии и т.п. Дисков с этими драйверами в комплекте не шло, поэтому переставлять новую настроенную винду не очень хотелось. Continue reading »

Янв 232012
 

Возникла необходимость сделать серверную часть, отдающую данные в формате XML.
Сам привык использовать JSON, но так как софт пишется на .NET C#, то решил использовать более родную для него структуру.
Работает с помощью XMLWriter.

Для тестов был выбран следующий массив:

$info = array(
    'id' => 123,
    'login' => 'bafoed',
    'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
    'email' => '[email protected]',
    'active' => true,
    'languages' => array('PHP', 'Javascript', 'C#')
);

Continue reading »

Янв 092012
 

Увидел в qweqwe тему о том, что приложение для загрузки музыки ВКонтакте удалили и теперь скачивать музыку без установки приложений стало сложнее. Написал javascript для адресной строки, который позволит скачать музыку заново, без установки расширений. Протестировано на Google Chrome.
Использование:

  • Зайти на страницу с аудиозаписями
  • Вставить скрипт в адресную строку и нажать Enter

Сам скрипт:

javascript:var a=document.getElementsByClassName("audio fl_l");for(i=0;i<a.length;i++){var b=a[i].innerHTML.match(/value="(.*?)\.mp3,/gi),b=b[0].replace(",",""),b=b.replace('value="',"");a[i].innerHTML=a[i].innerHTML.replace(/<div class="title_wrap">(.*?)<\/div>/ig,'<div class="title_wrap">$1 ---- <a href="'+b+'" target="_blank">\u0421\u043a\u0430\u0447\u0430\u0442\u044c</a></div>');void(0);};