Идем на восток... (для любителей абиса)
Moderators: Murderator+, Murderator
Идем на восток... (для любителей абиса)
Хорошая погода, тепло;) Идем на Абис;))
4 Декабря 2006 UPDATE:
Всем походу лень листать.
http://filebuffer.narod.ru/abyss.html
4 Декабря 2006 UPDATE:
Всем походу лень листать.
http://filebuffer.narod.ru/abyss.html
Last edited by Grin on 2006-12-04 00:08:59, edited 1 time in total.
-
- Expert!
- Posts: 1032
- Joined: 2006-02-25 21:48:38
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
мне понравился ОлдП ... там нету безконечного макроса чтоб за ноч поднять 1% БСа
, там идёт игра 


Уроки языка Injection
Основные команды языка Injection
Yoko Injection Code Sweeper
Drw (2009) скрипты
2017 Начал играть на Uorpg.net
Основные команды языка Injection
Yoko Injection Code Sweeper
Drw (2009) скрипты
2017 Начал играть на Uorpg.net
-
- Posts: 143
- Joined: 2004-12-28 19:31:44
Что мешает нам зайти?
1. 3 крипт ключа, для передачи инфы вовремя логина
2. изменен коэфициент в формуле для определения будующих ключей
Начнем со второго. Когда вы залогинились сервер присылает рандомное число Seed и на основании него происходит шафрование всего последующего игрового трафика трафика.
как это выглядит в реале (воспользуюсь исходниками инжи)
изменен какраз 0x00001357 коэффициет за менили на 0x0000135f
в клиенте эта функция мало чем отличается от инжовой по этому легко найти;) Изменения этого коэффициента происходят после загрузки дллки тоесть сам клиент содержит нормальное родное число... длл его правит в момент загрузки.
Что касается 3 ключей. Они опять таки на прямую не прописаны... Длл перезаписывает xor команды на вызов своих процедур в которых тотже xor но уже с другим значение (куда проще было это значение просто переписать), возможно хитрость за ключалось в том что процедуры лежат в далюких некому не нужных сегментах и при дампе они просто не дампятся. Вытаскиваем ключи и наживую пишем в клиент и и справляет коэффициент. И заменяем abyss.dll на advapi32.dll в таблице импорта.
С инжектом тежелей он не умеет работать с 3 ключами...
тут в место m_k1 должен быть m_k2
а тут m_k3
Но ввиду того что все компилятор имеет своство выравнивать код было достаточно пустот чтобы эту функцию подредактить;) Тоже правим в инжекте правим и коэфициент.
Но на этом не закончено. Уних там есть приблуда которая каверкает пакеты а имено перезаписывает их номера.
Тоесть зайти вы зайдете но не поиграете;)
С пакетами буду разбиратся позже
1. 3 крипт ключа, для передачи инфы вовремя логина
2. изменен коэфициент в формуле для определения будующих ключей
Начнем со второго. Когда вы залогинились сервер присылает рандомное число Seed и на основании него происходит шафрование всего последующего игрового трафика трафика.
как это выглядит в реале (воспользуюсь исходниками инжи)
Code: Select all
void LoginCrypt::init(unsigned char * pseed, unsigned int k1, unsigned int k2)
{
unsigned int seed;
N2L(pseed, seed);
m_key[0] =
(((~seed) ^ 0x00001357) << 16)
| ((seed ^ 0xffffaaaa) & 0x0000ffff);
m_key[1] =
((seed ^ 0x43210000) >> 16)
| (((~seed) ^ 0xabcdffff) & 0xffff0000);
m_k1 = k1;
m_k2 = k2;
}
изменен какраз 0x00001357 коэффициет за менили на 0x0000135f
в клиенте эта функция мало чем отличается от инжовой по этому легко найти;) Изменения этого коэффициента происходят после загрузки дллки тоесть сам клиент содержит нормальное родное число... длл его правит в момент загрузки.
Что касается 3 ключей. Они опять таки на прямую не прописаны... Длл перезаписывает xor команды на вызов своих процедур в которых тотже xor но уже с другим значение (куда проще было это значение просто переписать), возможно хитрость за ключалось в том что процедуры лежат в далюких некому не нужных сегментах и при дампе они просто не дампятся. Вытаскиваем ключи и наживую пишем в клиент и и справляет коэффициент. И заменяем abyss.dll на advapi32.dll в таблице импорта.
С инжектом тежелей он не умеет работать с 3 ключами...
Code: Select all
void LoginCrypt::encrypt(unsigned char * in, unsigned char * out, int len)
{
for(int i = 0; i < len; i++)
{
out[i] = in[i] ^ static_cast<unsigned char>(m_key[0]);
unsigned int table0 = m_key[0];
unsigned int table1 = m_key[1];
m_key[1] =
(
(
(
((table1 >> 1) | (table0 << 31))
^ m_k1
)
>> 1
)
| (table0 << 31)
) ^ m_k1;
m_key[0] = ((table0 >> 1) | (table1 << 31)) ^ m_k2;
}
}
Code: Select all
| (table0 << 31)
) ^ m_k1;
тут в место m_k1 должен быть m_k2
Code: Select all
m_key[0] = ((table0 >> 1) | (table1 << 31)) ^ m_k2;
а тут m_k3
Но ввиду того что все компилятор имеет своство выравнивать код было достаточно пустот чтобы эту функцию подредактить;) Тоже правим в инжекте правим и коэфициент.
Но на этом не закончено. Уних там есть приблуда которая каверкает пакеты а имено перезаписывает их номера.
Тоесть зайти вы зайдете но не поиграете;)
С пакетами буду разбиратся позже