02-18-2014, 12:06 AM
Собственно сабж. Кто нибудь до них добирался?
supdate.log я бОльшую часть расшифровал. А вот до основного лога добраться не могу. Он под фемидой по самое...
[SRC="c++"]#include <iostream>
#include <cstdio>
using namespace std;
void uncrypt(char* str, int len, unsigned int key)
{
/*
;hsupdate.exe
mov ecx, 0x4E4 ; видимо ключ
loop:
mov al, [esi+edx] ;байт исходной строки
xor ebx, ebx
mov bl, ch
xor al, bl
mov [edx], al ;Кладёт байт зашифрованной строки.
movzx ax, al
add eax, ecx
lea ecx, [eax+eax*2]
shl ecx, 4
sub ecx, eax
lea ecx, [ecx+ecx*2]
lea ecx, [ecx+ecx*4]
lea ecx, [ecx+ecx*8]
lea eax, [eax+ecx*2]
mov ecx, 58BFh ;Магия или вторая часть ключа?
sub ecx, eax
inc edx
dec edi
jnz short loop
*/
unsigned int tmp = 0;
for (int i=0; i < len; ++i)
{
tmp &= 0xFFFF0000;
tmp |= str[i] & 0x000000FF;
str[i] ^= (unsigned char)(key >> 8);
tmp += key;
key = tmp * 3;
key = key << 4;
key -= tmp;
key *= 3;
key *= 5;
key *= 9;
tmp = tmp + key *2;
key = 0x58BF;
key -= tmp;
}
}
int main(int argc, char *argv[])
{
if (argc < 2){
cout << "Usage: HSLogEncrypt.exe supdate.log" << endl;
return 0;
}
cout << "Start" << endl;
FILE* f = fopen(argv[1], "rb");
while (!feof(f)){
//4b len; len b message
int strlen;
fread(&strlen, 0x4, 0x1, f);
char str[strlen];
fread(str, strlen, 0x1, f);
uncrypt(str, strlen, 0x4E4);
cout.write(str, strlen);
cout << endl;
}
return 0;
}
[/SRC]
Пробовал перебирать ключ - бесполезно.
Толи алгоритм другой, толи сразу оба ключа отличаются.
Всё происходит в ehsvc.dll. Но он мало того, что накрыт фемидой, так ещё и подвязан на адресное пространство архейджа.
Вобщем мне пока не по зубам, а лог почитать надо. HSу что-то на моём компе не нравится, а общаться на эту тему с техподдержкой мейла занятие сомнительное xD.
supdate.log я бОльшую часть расшифровал. А вот до основного лога добраться не могу. Он под фемидой по самое...
[SRC="c++"]#include <iostream>
#include <cstdio>
using namespace std;
void uncrypt(char* str, int len, unsigned int key)
{
/*
;hsupdate.exe
mov ecx, 0x4E4 ; видимо ключ
loop:
mov al, [esi+edx] ;байт исходной строки
xor ebx, ebx
mov bl, ch
xor al, bl
mov [edx], al ;Кладёт байт зашифрованной строки.
movzx ax, al
add eax, ecx
lea ecx, [eax+eax*2]
shl ecx, 4
sub ecx, eax
lea ecx, [ecx+ecx*2]
lea ecx, [ecx+ecx*4]
lea ecx, [ecx+ecx*8]
lea eax, [eax+ecx*2]
mov ecx, 58BFh ;Магия или вторая часть ключа?
sub ecx, eax
inc edx
dec edi
jnz short loop
*/
unsigned int tmp = 0;
for (int i=0; i < len; ++i)
{
tmp &= 0xFFFF0000;
tmp |= str[i] & 0x000000FF;
str[i] ^= (unsigned char)(key >> 8);
tmp += key;
key = tmp * 3;
key = key << 4;
key -= tmp;
key *= 3;
key *= 5;
key *= 9;
tmp = tmp + key *2;
key = 0x58BF;
key -= tmp;
}
}
int main(int argc, char *argv[])
{
if (argc < 2){
cout << "Usage: HSLogEncrypt.exe supdate.log" << endl;
return 0;
}
cout << "Start" << endl;
FILE* f = fopen(argv[1], "rb");
while (!feof(f)){
//4b len; len b message
int strlen;
fread(&strlen, 0x4, 0x1, f);
char str[strlen];
fread(str, strlen, 0x1, f);
uncrypt(str, strlen, 0x4E4);
cout.write(str, strlen);
cout << endl;
}
return 0;
}
[/SRC]
Пробовал перебирать ключ - бесполезно.
Толи алгоритм другой, толи сразу оба ключа отличаются.
Всё происходит в ehsvc.dll. Но он мало того, что накрыт фемидой, так ещё и подвязан на адресное пространство архейджа.
Вобщем мне пока не по зубам, а лог почитать надо. HSу что-то на моём компе не нравится, а общаться на эту тему с техподдержкой мейла занятие сомнительное xD.