Это-то понятно =)
Коротко суть проблемы. В файле
~/.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-битном юникоде...