Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #88, АПРЕЛЬ 2006 г.

Ломаем наяву

EGOiST/TSRh (icq: 8507375)

Хакер, номер #088, стр. 088-074-5


_aStringString

public final String _aStringString(String s)

{

String s1 = s;

String s2;

return s2 = (new e())._aStringString(s1);

}

Отсюда идет просто перенаправление в класс e.class в одноименную функцию. Что ж, заглянем и туда:

_aStringString в e.class

public final String _aStringString(String s)

{

byte abyte0[];

int i = (abyte0 = _aStringaB(s)).length;

StringBuffer stringbuffer = new StringBuffer(i * 2);

for(int k = 0; k < i; k++)

{

int j;

if((j = abyte0[k] & 0xff) < 16)

stringbuffer.append('0');

stringbuffer.append(Integer.toHexString(j));

}

String s1;

return s1 = stringbuffer.toString().toLowerCase();

}

Опять наш ключ отсылают дальше, потом результат переводят в хекс строку и в нижний регистр, ну и возвращают обратно. Из _aStringaB(String s) отправляют прямиком в _aaIIV(int ai[], int i), предварительно в _aStringaI(String s) переведя наш ключ в массив. А в _aaIIV видно знакомые константы:

_aaIIV в e.class

public final void _aaIIV(int ai[], int i)

{

ai[i >> 5] |= 128 << i % 32;

ai[((i + 64 >>> 9) << 4) + 14] = i;

int j1 = 0x67452301;

int k1 = 0xefcdab89;

int l1 = 0x98badcfe;

int i2 = 0x10325476;

for(int j2 = 0; j2 < ai.length; j2 += 16)

Как ты догадался, это - алгоритм мд5. Так, теперь давай вернемся в начало, то есть в b.java. Получается, что m_bString присваивает мд5 хэш нашего ключа. Немного разобрались. Давай смотреть дальше. В функции _evV() идет запуск потока текущего класса. Далее в текущем классе вызывается функция run(). Вот туда и заглянем:

run() в b.class

public final void run()

{

Alert alert;

try

{

k._aStringSStringString(null, m_aString, m_bString, "1.31.1000", true);

byte abyte0[] = m_bString.getBytes();

m_aRecordStore.setRecord(1, abyte0, 0, abyte0.length);

int i = 0;

try

{

int j = getWidth();

int l = getHeight();

int i1 = UltraIM.m_aDisplay.numColors();

int j1 = 0;

do

{

i1 >>= 1;

j1++;

} while(i1 > 1);

String s;

i = Integer.parseInt(s = "" + j + l + j1);

}

catch(Exception _ex) { }

if(i > 0)

k._bIStringV((i - 0x15f90) * 11, m_bString, null);

_cvV();

Итак, ключ (m_aString) и хэш ключа (m_bString) передаются в функцию _aStringSStringString(String s, String s1, String s2, String s3, boolean flag), находящуюся в k.class.

_aStringSStringString в k.class

public static final String _aStringSStringString(String s, String s1, String s2, String s3, boolean flag)

throws ax

{

HttpConnection httpconnection;

String s4;

String s5;

httpconnection = null;

s4 = "0";

StringBuffer stringbuffer = new StringBuffer();

if(s1 != null)

stringbuffer.append("a=" + s1 + "&");

if(s2 != null)

Назад на стр. 088-074-4  Содержание  Вперед на стр. 088-074-6