LINUX.ORG.RU

пароли в Sim


0

0

как (чем) можно восстановить пароль такого вида? что это за алгоритм хотябы?

"$431c$4376$4312$4374$430e$4349$4323 и т.д..."


Ответ на: комментарий от ivlad

Это-то понятно =)

Коротко суть проблемы. В файле
~/.kde/share/apps/sim/ICQ.XXX.1/clients.conf
лежат учетные записи для ICQ, Jabber и др. 
пароли там хрянятся в виде
Password="$431c$4376$4312$4374$430e$4349$4323$4348"

Нашел в файле sim-0.9.3/sim/api/contacts.cpp кусок кода, отвечающий за декодирование пароля при запуске Сим'а. А в cfg.cpp описание функции getToken.

Только вот проблема у меня, уже нашел, какой файл нужно для QString подцепить, но не могу никак заставить gcc воспринимать класс string.
sim_crack.cpp:11: error: `string' was not declared in this scope

Подзабыл я немного C++, не подскажете, где искать? В stdlib, system, string описания этого класса нету.
Вчера уже не было времени разбираться, в понедельник продолжу...
gcc version 3.3.3 (SuSE Linux)

#include<iostream>
#include<stdlib>
#include<system>
#include<string>
#include</usr/lib/qt3/include/qstring.h>

#define PASS "$431c$4376$4312$4374$430e$4349$4323$4348"

//EXPORT
string getToken(string &from, char c, bool bUnEscape)
{
    string res;
    unsigned i;
    for (i = 0; i < from.length(); i++){
        if (from[i] == c)
            break;
        if (from[i] == '\\'){
            if (!bUnEscape)
                res += '\\';
            i++;
            if (i >= from.length())
                break;
            if (bUnEscape){
                char c = from[i];
                switch (c){
                case 'n':
                    c = '\n';
                    break;
                case 'r':
                    c = '\r';
                    break;
                case 't':
                    c = '\t';
                    break;
                }
                res += c;
            }else{
                res += from[i];
            }
            continue;
        }
        res += from[i];
    }
    if (i < from.length()){
        from = from.substr(i + 1);
    }else{
        from = "";
    }
    return res;
}

int main (void)
{

//Client::Client(Protocol *protocol, const char *cfg)
//{
//    load_data(_clientData, &data, cfg);

    // now uncrypt password somehow
//    QString pswd = getPassword();
    QString pswd = PASS;
    if (pswd.length() && (pswd[0] == '$')) {
        pswd = pswd.mid(1);
        QString new_pswd;
        unsigned short temp = 0x4345;
        QString tmp;
        do {
            QString sub_str = getToken(pswd, '$');
            temp ^= sub_str.toUShort(0,16);
            new_pswd += tmp.setUnicodeCodes(&temp,1);
            temp = sub_str.toUShort(0,16);
        } while (pswd.length());
//        setPassword(new_pswd);
    }
    printf("\npass=&s\n", new_pswd);
}

P.S. Я так понял, раскодировка идет обычным XOR'ом с фиксированным числом, посимвольно. Каждый символ - в 16-битном юникоде...

boatman
() автор топика
Ответ на: комментарий от anonymous

вот оно!!! точно, спасибо огромное! а я и забыл совершенно про using namespace. скорее всего дело действительно именно в нем.

не могу сейчас достучаться до своей машинки на работе - видать выключили. в понедельник доделаю.

boatman
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.