Итак,пишу свой лаунчер для RF Online.Дошёл до выбора сервера,выбираю сервер а дальше проблема... вопрос,как проходит запуск RF_online.bin?
P.S. в отладчиках не силён
Как у тебя обстоят дела с сабжем? Я просто начал писать чат клиент под андроид и проблема на этапе шифрования логина и пароля. Не мог бы поделиться наработками?
Как у тебя обстоят дела с сабжем? Я просто начал писать чат клиент под андроид и проблема на этапе шифрования логина и пароля. Не мог бы поделиться наработками?
Как у тебя обстоят дела с сабжем? Я просто начал писать чат клиент под андроид и проблема на этапе шифрования логина и пароля. Не мог бы поделиться наработками?
Чат клиент - в смысле ОГ клиент, который входит в игру и позволяет чатиться?
Ну если ты споткнулся на кодировании логина и пароля, то, честно, дальше соваться вообще не стоит :/
А так, у нас на форуме где-то лежала стаааарая статья про написание ланчера для rf_online.bin.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Дарк, я под ла2 тоже споткнулся на этапе кодирования логина и пароля))))
А тут затык в том что я давно не программировал и уже почти всё забылось. А сейчас появилось свободное время перед защитой диплома.
По поводу статьи вогела в итоге там непонял что берётся тут: if i <= length(aPassword) then aByte := ord(aPassword[i]) else aByte := 0;
По докам делфей вроде как орд - это аски код, а в другой статье на этом форуме про разбор ланчера олькой, там автор использует хекс. Это меня немного выбивает из колеи и поэтому я запутался.
По поводу затыка на шифровании пароля и логина проблема в том что не могу понять где конкретно у меня проблема, перепробовал кучу вариантов, сервак все равно отвечает что логин пасс не верный...
Добавлено через 40 секунд
и кстати пишу для серва где играю, там вообще самый первый ап, то есть русофф 2007 года. Классика
Последний раз редактировалось demo; 23.05.2012 в 12:20.
Причина: Добавлено сообщение
хм.. Весь буффер (логин+нульбиты+пароль+1нульбит) кодируются целиком. И при раскодировании неверным ключём сервер должен видеть одну длинную строчку (без нульбитов) и соответственно он не должен писать, что пароль неверный (по крайней мере в рфлогине, если ключ неправильный, сервер то ли ничего не отвечает, то ли хрень какую-то). Поэтому может ты в составлении пакета ошибаешься?
А в ла2 там вообще жесть, на сколько я помню, blowfish и поверх него Md5.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
и да, дарк, по сути ОГ, но без возможности чего либо кроме как писать в чат. Пишу в софтину то я для себя, чтоб пока еду с работы на работу сидеть болтать с ги, учитывая что самое интересное пропускаю именно когда еду с работы))) Прога на что-то серьёзное не расчитана, тупо ловить 1 - 2 пакета, и отправлять 1-2 пакета (не считая тика пинг понга авторизации и тд). Вот и всё))) поэтому хочется получить небольшую помощь :)
Сервак 2.1.1, старый рус оф, защита только на серве, от дюпов, клиент-серверной защиты нету... поэтому по идее под такой серв должно быть не самый геморрой писать... а ведь всё равно загеморроился)))
Добавлено через 5 минут
Там в ла2 это извращение, там блоуфиш + рса. и в итоге встал тоже на шифровании логина и пароля, но оно там дальше чем в рфке, в рфке это почти самое начало
А по поводу того как я делаю строку с логином и пассом в рф (тестирую сначала на си шарпе, потом буду переписывать под андрюшу):
Код:
public static byte[] CryptLoginPassword(string login, string passowrd, byte aPlusKey, byte aXORKey) {
int maxPasswordLength = 13;
byte MyByte = 0;
byte[] resylt1 = new byte[13];
byte[] resylt2 = new byte[13];
for (int i = 0; i < maxPasswordLength; i++) {
if (i < login.Length) {
MyByte = OrdToHex(ORD(login[i]));
Console.Write("\n"+MyByte+"\n");
} else {
MyByte = 0;
}
MyByte = MyByte + aPlusKey;
MyByte = MyByte ^ aXORKey;
resylt1[i] = Convert.ToByte(MyByte);
}
for (int i = 0; i < maxPasswordLength; i++) {
if (i < passowrd.Length) {
MyByte = OrdToHex(ORD(passowrd[i]));
} else {
MyByte = 0;
}
MyByte = MyByte + aPlusKey;
MyByte = (MyByte) ^ (aXORKey);
resylt2[i] = Convert.ToByte(MyByte);
}
byte[] resultfinal = new byte[26];
resylt1.CopyTo(resultfinal, 0);
resylt2.CopyTo(resultfinal, resylt1.Length);
return resultfinal;
}
В 2.1.1 (это самый древний ап, напомниаю) ключ приходит приблизительно такой: 0x07 0x00 0x15 0x0D 0x04 0xFF 0x03
Из него я беру только 5 и 6 байты, 04- это плюс ключ, фф - это ключ для ксора... если я правильно всё понял. однако не понятно нужно ли использовать 7 байт. Во всех статьях 7 байт не используется, а в впф он совмещён с 6 в дворд.
Судя по тому что ты сказал, дарк, я не правильно вообще всё сделал... :(
Добавлено через 12 минут
по идее в результате я должен получить пакет вот такой:
1F 00 размер (не меняется)
15 03 тип пакета
68 75 6E 76 7D 07 07 07 07 07 07 07 07 - логин (5 символов)
74 7E 68 75 7B 7B 7C 3E 3E 07 07 07 07 - пароль (9 символов)
00 - завершающий нулевой байт (корейцы любят траву)
однако даже близко не могу приблизиться... у меня логин и пароль не хотят получаться такими же (я жёстко забил логин и пароль, и ключи в константы для тестов).
Добавлено через 24 минуты
А какашки в ответ на неправильный логин пароль мне серв шлёт такие:
0E 00 15 04 1C CC CC CC CC 00 00 00 00 CC
Последний раз редактировалось demo; 23.05.2012 в 12:56.
Причина: Добавлено сообщение