В основном заражают javascript файлы, как правило код пропущен через обфускатор (base64, japan utf-8 etc).
Очень легко в таких заражениях найти уникальную сигнатуру, и почистить все одним махом.
И так:

1
grep -rl 'hVu6r#r#iFy#eVtV' ./ | xargs sed -i '/hVu6r#r#iFy#eVtV/d'

hVu6r#r#iFy#eVtV — это и есть наша уникальная сигнатура.

Logkeys — очень простой и в тоже время удобный кейлогер(клавиатурный шпион) для линукс машин.
Доступен в репозиториях многих дистрибутивов linux, так же доступен и в сорсах. Адрес проекта на google-code -> http://code.google.com/p/logkeys/.
Установка на ubuntu|debian:

1
sudo apt-get install logkeys

Примеры запуска:

1
logkeys -s -o log_keys.txt

-s — запускаем кэйлогер
-o пишем в файл
-k — убить процесс
Чтоб в файл не попадали функциональные клавиши, а только буквы нужно запустить с параметром —no-func-keys

1
logkeys -s --no-func-keys -o log_key.txt

Linux: Opera Passwords Recovery

| Октябрь 28th, 2010

Пароли в Opara лежат в файле wand.dat, который расположен в директории ~/.opera/. Немного полазив по сайтам сделал собирательный пример выуживания паролей. В основе пример из этой статьи, 2005 года еще, http://www.reteam.org/blog/archives/00000012.htm. Причина написания поста, в том, что софт который есть в сети, почему-то, стоит денег, многие некорректно декриптуют содержимое, и так, ближе к теме:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
// sna@reteam.org  - 6th of April 2005
// unwand.cpp //
#include <iostream>
#include <string.h>

#include <openssl/md5.h>
#include <openssl/des.h>


const unsigned char opera_salt[11] =
{
    0x83, 0x7D, 0xFC, 0x0F, 0x8E, 0xB3, 0xE8, 0x69, 0x73, 0xAF, 0xFF
};

int main(int argc, char **argv)
{
    if(argc != 2)
    {
        std::cout << "Usage: unwand <opera wand file>" << std::endl;
        return 1;
    }

    FILE *fdWand = fopen(argv[1], "rb");

    if(NULL == fdWand)
    {
        perror("Failed to open file");
        return 1;
    }

    fseek(fdWand, 0, SEEK_END);
    unsigned long fileSize = ftell(fdWand);

    unsigned char *wandData = (unsigned char *)malloc(fileSize);

    if(NULL == wandData)
    {
        fclose(fdWand);
        perror("Memory allocation failed");
        return 1;
    }

    rewind(fdWand);
    fread(wandData, fileSize, 1, fdWand);
    fclose(fdWand);

    unsigned long wandOffset = 0;

    //
    // main loop, find and process encrypted blocks
    //

    while(wandOffset < fileSize)
    {
        // find key length field at start of block
        unsigned char *wandKey = (unsigned char *)
            memchr(wandData + wandOffset, DES_KEY_SZ, fileSize - wandOffset);

        if(NULL == wandKey)
        {
            break;
        }

        wandOffset = ++wandKey - wandData;
        // create pointers to length fields
        unsigned char *blockLengthPtr = wandKey - 8;
        unsigned char *dataLengthPtr = wandKey + DES_KEY_SZ;

        if(blockLengthPtr < wandData || dataLengthPtr > wandData + fileSize)
        {
            continue;
        }

        // convert big-endian numbers to native
        unsigned long
            blockLength  = *blockLengthPtr++ << 24;
            blockLength |= *blockLengthPtr++ << 16;
            blockLength |= *blockLengthPtr++ <<  8;
            blockLength |= *blockLengthPtr;

        unsigned long
            dataLength  = *dataLengthPtr++ << 24;
            dataLength |= *dataLengthPtr++ << 16;
            dataLength |= *dataLengthPtr++ <<  8;
            dataLength |= *dataLengthPtr;

        // as discussed in the article
        if(blockLength != dataLength + DES_KEY_SZ + 4 + 4)
        {
            continue;
        }

        // perform basic sanity checks on data length
        if(dataLength > fileSize - (wandOffset + DES_KEY_SZ + 4)
            || dataLength < 8 || dataLength % 8 != 0)
        {
            continue;
        }

        unsigned char
            hashSignature1[MD5_DIGEST_LENGTH],
            hashSignature2[MD5_DIGEST_LENGTH],
            tmpBuffer[512];

        //
        // hashing of (salt, key), (hash, salt, key)
        //

        memcpy(tmpBuffer, opera_salt, sizeof(opera_salt));
        memcpy(tmpBuffer + sizeof(opera_salt), wandKey, DES_KEY_SZ);

        MD5(tmpBuffer, sizeof(opera_salt) + DES_KEY_SZ, hashSignature1);

        memcpy(tmpBuffer, hashSignature1, sizeof(hashSignature1));
        memcpy(tmpBuffer + sizeof(hashSignature1),
            opera_salt, sizeof(opera_salt));

        memcpy(tmpBuffer + sizeof(hashSignature1) +
            sizeof(opera_salt), wandKey, DES_KEY_SZ);

        MD5(tmpBuffer, sizeof(hashSignature1) +
            sizeof(opera_salt) + DES_KEY_SZ, hashSignature2);

        //
        // schedule keys. key material from hashes
        //

        DES_key_schedule key_schedule1, key_schedule2, key_schedule3;

        DES_set_key_unchecked((const_DES_cblock *)&hashSignature1[0],
            &key_schedule1);

        DES_set_key_unchecked((const_DES_cblock *)&hashSignature1[8],
            &key_schedule2);

        DES_set_key_unchecked((const_DES_cblock *)&hashSignature2[0],
            &key_schedule3);

        DES_cblock iVector;
        memcpy(iVector, &hashSignature2[8], sizeof(DES_cblock));

        unsigned char *cryptoData = wandKey + DES_KEY_SZ + 4;

        //
        // decrypt wand data in place using 3DES-CBC
        //

        DES_ede3_cbc_encrypt(cryptoData, cryptoData, dataLength,
            &key_schedule1, &key_schedule2, &key_schedule3, &iVector, 0);

        if(0x00 == *cryptoData || 0x08 == *cryptoData)
        {
            std::wcout << L"<null>" << std::endl;
        }
        else
        {
            // remove padding (data padded up to next block)
            unsigned char *padding = cryptoData + dataLength - 1;
            memset(padding - (*padding - 1), 0x00, *padding);
                    //uncomment if Windows platform
            //std::wcout << (wchar_t *)cryptoData << std::endl;
           
            // dump byte-aligned data[dataLength] little endian UTF-16 as UTF-8. (c) Madhu
            for (unsigned int i = 0; i < dataLength; i+=2) {
                int uch = cryptoData[i];
                uch = uch | cryptoData[i+1];
                if (uch == 0) break;
                if (uch > 0x7FF)
                    std::cout << (unsigned char) (((uch >> 12) & 0xF) | 0xE0)
                            << (unsigned char) (((uch >> 6) & 0x3F) | 0x80)
                            << (unsigned char) ((uch & 0x3F) | 0x80);
                else if (uch > 0x7F)
                    std::cout << (unsigned char) (((uch >> 6) & 0x1F) | 0xC0)
                            << (unsigned char) ((uch & 0x3F) | 0x80);
                else std::cout << (unsigned char) uch;             
            }                      
        }
        std::cout << std::endl;;
        wandOffset = wandOffset + DES_KEY_SZ + 4 + dataLength;
    }

    free(wandData);
    return 0;
}

Компиляция:

1
g++ -Wall -o unwand -lssl unwand.cpp

Запуск программы:

1
./unwand ~/.opera/wand.dat

Hotot: twitter client

| Октябрь 15th, 2010
hotot

hotot

Долго примерялся к различным twitter-клиентам на ubuntu/linux, но все были монстрами, тяжелыми и набитыми различной чепухой. Некоторое время, продолжительное, пользовался обычным джаббером для постинга твиттов, но иногда хочется ведь и изображение запостить.
Так вот, попробовал клиент который еще в пелёнках ходит, под названием Hotot. И уже с месяц только ним и пользуюсь. Что же он умеет:
1) поддержка плагинов (уже имеются в наличии: загрузка изображений на сервисы твиттера и стороние, вывод геолокации в твиттах, встроенных переводчик завязаный на Google Translate, превью изображений прямо в твитт-ленте)
2) висеть в трее )
3) разбит на следующие разделы: лента твиттов ваших подписок, лента твиттов адресованных вам, личные сообщения, избранные твитты, ретвитты, поиск пользователя и обычный поиск.
4) работает как через ввод логина/пароля так и через OAuth API
5) поддержку прокси сервера (http-proxy, socks4|5 proxy)
6) написан на python (плагины на javascript с возможностью дополнять своими)

На данный момент последняя версия 0.9.5 под кодовым именем Ada. В которой также появилось возможность использовать сервис identica.

Теперь о том где взять клиент:
1) добавив репозиторий

1
2
3
sudo add-apt-repository ppa:hotot-team
sudo apt-get update
sudo apt-get install hotot

2) из сорсов:

1
2
3
4
hg clone https://hotot.googlecode.com/hg/ hotot
cd hotot/
python ./hotot/hotot.py // если просто хотите запустить и посмотреть
./setup.py build &amp;&amp; sudo ./setup.py install --install-layout deb // если решили установить

Сайт проекта http://hotot.org/

Для этого нам понадобится bluetooth manager — blueman.
Консольная звонилка wvdial — есть в пакетах sudo apt-get install wvdial.

Первое что делаем — это подключаем телефон в режиме DUN (Dial-Up Network). Пропущу всякие мелочи типа ввода PIN’a, разберетесь сами, ничего сложного.
Далее нам понадобиться создать простой конфиг для wvdial.

1
2
3
4
5
6
7
8
9
[Dialer Defaults]
Modem = /dev/rfcomm0
Init1 = ATZ
Init2 = AT+CGDCONT=1,\"IP\",\"www.djuice.com.ua\"
Phone = *99***1#
Username = 1111
Password = 1111
ISDN = no
New PPPD = yes

Конфиг для ОПСОСа DJuice. Настройки своего оператора думаю найти не сложно на официальном сайте. more »

Chapter [0x01] Для затравки.

mocp conky

mocp conky

Вот к такому виду мы придем в конце этого руководства, как немного облагородить свой рабочий стол (на любителя).
more »

Имея ноут DELL Vostro 1015 с Ubuntu на борту, стал замечать треск жесткого диска (hard driver) при работе от батареи, после обновления на 10.04.

Вызвано тем что был включен мод контроля жесткого диска в режиме работы от аккумулятора.

Отключаем эту фичу совсем, потому что убьет жесткий диск намного быстрей.

Открываем файлик в любом текстовом редакторе под рутом /etc/laptop-mode/laptop-mode.conf, находим следующую строку

ENABLE_LAPTOP_MODE_ON_BATTERY и присваиваем ей значение равное 0 (нулю).

В итоге должна иметь следующий вид:

1
ENABLE_LAPTOP_MODE_ON_BATTERY=0

3Proxy — очень хороший, маленький прокси-сервер. Делаем его полностью анонимным, легким движением руки (можно все задать и через опции, но мне как то, так спокойней), подкорректировав proxy.c в дире src/.
Задав значение переменной anonymous.

1
2
int anonymous = 1;                 //(222 строка)
//anonymous = param->srv->singlepacket;  //(238 строка)

Теперь нужно только собрать все.

1
make -f Makefile.Linux

После этого смело заходим, к примеру, на http://www.leader.ru/secure/who.html и смотрим, что идет «прямое» соединение и никаких прокси.

Curl & Perl & Web-Money

| Декабрь 5th, 2009

Сидя в субботний вечер, от нефиг делать накатал такой «парсер» для узнавания курса вывода WMZ на одном сайте.

1
curl http://ukrwebmoney.com/rates.js | perl -ne 'if (/out(.*?)([\d+][\.][0-9]{2})/) { print "Вывод WMZ: ".$2." UAH\n"; }' &gt; rate &amp;&amp; clear &amp;&amp; cat rate &amp;&amp; rm -f rate

Medusa — brute-forcer tools for linux

| Ноябрь 12th, 2009

Medusa — софт созданный гиками, включает в себя множество модулей, основные это: AFP, CVS, FTP, HTTP, IMAP, MS-SQL, MySQL, NCP (NetWare), NNTP, PcAnywhere, POP3, PostgreSQL, rexec, rlogin, rsh, SMB, SMTP (AUTH/VRFY), SNMP, SSHv2, SVN, Telnet, VmAuthd, VNC, также есть модуль для брута web форм. (web-form).
more »

moc-player

moc-player

sudo apt-get install moc — установка плеера.

$ mocp — запуск плеера (сервер и клиент)

Управление плеером осуществляется нажатием буквенных клавишь клавиатуры:

Q (Shift+q) — закрытие сервера и клиента moc
q — закрытие клиента moc, сервер при этом, продолжит проигрывание

moc — Двухпанельный плеер.

Левая панель — файловый менеджер
Правая панель — текущий плэйлист

Tab — Навигация между панелями more »

Нашел сегодня плагин для gedit, в котором очень давно нуждался, написал его Vadim (https://launchpad.net/~vadikgo).

Для установки плагина следует распаковать архив, содержимое (два файла) переместить в директорию ~/.gnome2/gedit/plugins , если директории plugins не существует — создайте ее.

Скачать: encoding.tar

Страница 1 из 212