Исходники здесь
Вот такие скомпилированные версии есть у меня.
Ниже данные устарели.
Репозиторий находится тут (открывать через SVN клиент)
Удобный просмотр репозитория через браузер тут
Скомпилированные версии тут Пароль к архиву: coderx.ru
Есть ли предложения по модернизации существующего кода с описанием как должно и что хотелось бы заменить/добавить?
Дополнительные компоненты брать тут. (<-- TPerlRegEx есть только там)
/upd:
для компиляции последних ревизий понадобятся JCL, JVCL (ссылки выше) а так же:
jwapi2.2a, SyntEdit, TRichView.v11.0+ScaleRichView.v2.0, TsiLang (letitbit / upload.com.ua)
Немного подправленный FastScript искать в файловом архиве.
Последний раз редактировалось NLObP, 17.10.2016 в 00:02.
Добавлено через 4 минуты
А и еще тут обсуждение где-то на форуме было - и предложили грузить расшифровку пакетов в начале загрузки ПНХ и при нажатии кнопочки - "перечитать из инишек"
Добавлено через 1 минуту
Можно сделать возможность выбора инишек, т.е. сделать менюшку, в которой будет отображаться все Packet.ini, и выбирать из нее, ну и для ItemID, и прочих инишек можно то же самое.
Теперь не надо писать длинные строчки в packets.ini, понимает циклы и функции в нем. Расшифровывает коды беря значения из items.ini, sysmsg.ini, skills.ini и т.д.
Цитата:
Сообщение от QaK
А и еще тут обсуждение где-то на форуме было - и предложили грузить расшифровку пакетов в начале загрузки ПНХ и при нажатии кнопочки - "перечитать из инишек"
Вот мне бы таких предложений и развернутых поподробнее. Чтобы воплотить можно было полегче. Многого даже в мыслях нет, а по готовой подсказке додумать могу.
Цитата:
Сообщение от QaK
Можно сделать возможность выбора инишек, т.е. сделать менюшку, в которой будет отображаться все Packet.ini, и выбирать из нее, ну и для ItemID, и прочих инишек можно то же самое.
Уже сейчас есть выбор, если стоит галочка Камаель, то при загрузке программы считывается packetst1.ini, иначе packets.ini. В принципе можно как у Саурона расписано в его ВПП по коду протокола линейки выбор сделать. Может даже одновременно разные загруженные попробовать сделать.
Вот была тема от OllyDebug про правку HookCode, так и заглохла.
Цитата:
Цитата:
Цитата:HookCode исправленный не выложишь тут ?
Хорошо, как домой дойду.
Ну на самом деле там не сложно:
проверка на опкод $E9 и длину инструкции 5 байт, затем вычисляем абсолютный адрес прыжка, вычитаем из него то куда сохраняем тру функцию и записываем $E9 + dword(результат).
delphi Код:
function HookCode(TargetProc, NewProc: pointer; var OldProc: pointer): boolean;
var
Address: dword;
OldProtect: dword;
OldFunction: pointer;
Proc: pointer;
begin
Result := False;
try
Proc := TargetProc;
//вычисляем адрес относительного (jmp near) перехода на новую функцию
Address := dword(NewProc) - dword(Proc) - 5;
ifnot VirtualProtect(Proc, 5, PAGE_EXECUTE_READWRITE, OldProtect)thenbeginExit;
end;
//создаем буффер для true функцииGetMem(OldFunction, 255);
//копируем первые 4 байта функции
dword(OldFunction^) := dword(Proc);
byte(pointer(dword(OldFunction) + 4)^) := SaveOldFunction(Proc, pointer(dword(OldFunction) + 5));
byte(Proc^) := $e9; //устанавливаем переход
dword(pointer(dword(Proc) + 1)^) := Address;
VirtualProtect(Proc, 5, OldProtect, OldProtect);
OldProc := pointer(dword(OldFunction) + 5);
exceptExit;
end;
Result := True;
end;
Я так понял здесь надо изменять?
Код:
//вычисляем адрес относительного (jmp near) перехода на новую функцию
Address := dword(NewProc) - dword(Proc) - 5;
Кто разъяснит, что именно надо в HookCode поправить, чтобы более корректно работало?
Добавлено через 57 секунд
Цитата:
Сообщение от Amorality
На абиссе пофиксили ПНХ дллкой под названием blinkw32.dll , хотелось бы увидеть в твоем ПНХ возможность обхода фикса если это возможно .. Жаль конечно
На х300 работает.
Последний раз редактировалось NLObP, 01.08.2008 в 12:19.
Причина: Добавлено сообщение
А и еще тут обсуждение где-то на форуме было - и предложили грузить расшифровку пакетов в начале загрузки ПНХ и при нажатии кнопочки - "перечитать из инишек"
Жто я предлогал сделать ini фалы по папкам и на главной странице загружать инишки присетами, или сделать выпадающие списки для каждого ini, фактически нужна переменная для пути к набору файлов или набор переменных для каждого из INI, КомбоБокс, и кнопка загрузить, устанавливающая переменную... и незабыть сделать аналог "По умолчанию"
Добавлено через 9 минут
кстати, очень неплохо получилось, даже без подсветки - логи вполне читаемы
Только вот что-то со скилами у мну не фурычит
d skillID: 1204 Unknown Skill
Последний раз редактировалось PanAm, 01.08.2008 в 14:08.
Причина: Добавлено сообщение
Что то странное происходит с перехватом у меня: пакеты расшифровываются верно, но в списке соединений пусто.Как возможно это исправить? Вот полученные пакеты от серва в расшифрованном виде:
Код:
Tип: 0x09 (CharSelectionInfo)
Pазмер: 301+2
Время прихода: 15:36:56:156
d ListSize: 1
d 7: 0
b 0:
s Name: ?????
d CharID: 51083776
s LoginName: ??????
d SessionID: 715892224
d ClanID: 234
d 0: 0
d Sex: 256
d Race: 768
d ClassID: 11264
d 1: 256
d 0: 0
d 0: 0
d 0: 0
f CurrentHP: 5,20938627568739E238
f CurrentMP: 1,74980057982643E100
d SP: 19776
f Exp: 1,99207268403191E-317
d Level: 1792
d Karma: 0
d PkKills: 0
d 0: 0
d 0: 0
d 0: 0
d 0: 0
d 0: 0
d 0: 0
d 0: 0
d 0: 0
i Unknown:
i RightEarring:
i LeftEarring:
i Necklace:
i RightRing:
i LeftRing:
i Head:
i RightHand:
i LeftHand:
i Gloves:
i Chest:
i Legs:
i Boots:
i Unknown:
i Unknown:
i Hair:
i Face:
i Unknown:
i Unknown:
d 0: 0
d 0: 0
d 0: 28672
d 0: 0
d 0: 0
d 0: 29696
d HairStyle: 0
d HairColor: 606464
d Face: 0
f MaxHP: 1,14078493722293E-310
f MaxMP: 1,45073483719657E-318
d DeleteDays: 0
d ClassID: 0
d ActiveID: 0
b EnchantEffect:
w AugmentationID:
w 0:
d TransformID: 0
как видите здесь сумбур, но в пакете данных байты содержащие ник перса верные(
а вот следующий пакет от сервера:
Код:
Tип: 0x0B (CharSelected)
Pазмер: 280+2
Время прихода: 15:36:58:812
s Name: Laska
d CharID: 199546
s Title:
d SessionID: -366302298
d ClanID: 0
d 0: 0
d Sex: 1
d Race: 3
d ClassID: 44
d 1: 1
d X: -45278
d Y: -111875
d Z: -265
f CurrentHP: 280
f CurrentMP: 83
d SP: 77
f Exp: 7,78153392199963E-320
d Level: 7
d Karma: 0
d 0: 0
d INT: 18
d STR: 40
d CON: 47
d MEN: 27
d DEX: 26
d WIT: 12
d 0: 0
d 0: 0
d ClassID: 0
d 0: 0
d 0: 0
d 0: 0
d 0: 0
b Empty:
Вобщем поразмыслив догнал что в первом пакете неверно считываются данные (по крайней мере в моем случае) например SP=19776 что есть 40 4D однако, т.к. байты пишутся в обратном порядке и сп фактически 77, должна имется строка 4D 00 которую я и нашел в виде: 40 4D 00...вот такой вот баг( как поправить?
Добавлено через 32 минуты
Пробовал заменить файл packets.ini на packetst1.ini в исходном пнх, обрабатывает верно, но соединение все равно не создается. Пишет Создано новое соединение - 0 но список пуст
Последний раз редактировалось Breadfan, 02.08.2008 в 17:07.
Причина: Добавлено сообщение
За это сообщение Breadfan нажился 4 спасибками от:
Теперь не надо писать длинные строчки в packets.ini, понимает циклы и функции в нем
В при выделении пакетов CharInfo и UserInfo пакетхак зацикливается вот в этом месте: h(cubics:For.0001)h(cubID).
Наверное это происходит из-за того, что если h(cubics:For.0001) равно нулю, то h(cubID) отсутствуют.
Последний раз редактировалось Emocean, 02.08.2008 в 19:34.
Да нет, в том то и дело, что сами данные отображены верно, т.е. сверяя значения пришедших данных я получаю верные значения (ник, лвл и т.д.), удалось запустить SkyBot (ессно переправив ID пакетов в скрипте и длл), но вот не создает соединение и все тут! То есть работать с двумя и более клиентами не получится(
Потому и интересно, как принудительно присвоить соединению имя...
Вот пример пакета CharSelectionInfo
Выделенный кусок легко переводится в ник перса, однако пнх не принимает это, а просто вывел в описании:
Tип: 0x09 (CharSelectionInfo)
Pазмер: 301+2
Время прихода: 03:17:05:187
И вот еще выявленные недочеты:
1. Выдает ошибку при запуске, если загружено окно Л2
2. Иногда без всяких сообщений прекращает работу и закрывается
3.Нет ограничения на кол-во запоминаемых пакетов, что приводит к ошибке после некоторго времени с этой опцией
4. Кстати, по крайней мере в Камаеле вылетает при переключении на вкладку Посылка
Последний раз редактировалось Breadfan, 04.08.2008 в 22:15.
За это сообщение Breadfan нажился 5 спасибками от:
Каким образом можно принудительно присвоить соединению имя?
Есть как оказалась процедура, при помощи которой можно присвоить имя соединению:
Код:
SetName(Name: string);
Добавлено через 2 минуты
Цитата:
Сообщение от Emocean
В при выделении пакетов CharInfo и UserInfo пакетхак зацикливается вот в этом месте: h(cubics:For.0001)h(cubID).
Наверное это происходит из-за того, что если h(cubics:For.0001) равно нулю, то h(cubID) отсутствуют.
Проверил. Надо для Интерлюдии в packets.ini поправить пакет UserInfo он отличается от C4. На цикле кубиков зацикливается.
Наверно надо такие, попробуй
Да нет, в том то и дело, что сами данные отображены верно, т.е. сверяя значения пришедших данных я получаю верные значения (ник, лвл и т.д.), удалось запустить SkyBot (ессно переправив ID пакетов в скрипте и длл), но вот не создает соединение и все тут! То есть работать с двумя и более клиентами не получится(
Потому и интересно, как принудительно присвоить соединению имя...
Вот пример пакета CharSelectionInfo
Выделенный кусок легко переводится в ник перса, однако пнх не принимает это, а просто вывел в описании:
Tип: 0x09 (CharSelectionInfo)
Pазмер: 301+2
Время прихода: 03:17:05:187
Запиши лог и выложи здесь. Я буду настраивать.
Это Камаель. Попробуй нормальную расшифровку 09 и 0B пакета подсунуть. Я основываюсь на Сауроновских packets.ini
Добавлено через 19 минут
{Minor and major changes by NLObP
Что уже есть:
-------------
3.2.1
+ поддержка ДЛЛ by QaK
+ небольшая оптимизации кода by OllyDebug;
3.2.3 от 01.08.2008
+ при запуске программы загрузка packets.ini или packetst1.ini в зависимости от галочки Камаель;
+ при установки/снятии галочки Камаель перечитываем packets.ini или packetst1.ini;
+ парсер понимает одно и двухбайтные коды пакетов;
+ в редакторе скриптов горячие клавиши: ctrl-S - сохранение, ctrl+F9 проверка скрипта;
3.2.4 от 02.08.2008
+ парсер пакетов использует циклы и функции в packets.ini by Sauron
Get.Skill - возвращает название скила по его ID из значения аргумента
Get.MsgID - возвращает текст по его ID из значения аргумента
Get.Func01 - возвращает название Item'а по его ID из значения аргумента
Get.Func02 - возвращает тип Say2
Get.Func09 - разное
3.2.5 от 04.08.2008
+ сохраняет размеры окна в конфиге
+ парсер пакетов использует циклы и функции в packets.ini by Sauron
+ kID=1000000 в конфиге для Get.NpcID - возвращает текст по его ID из значения аргумента
+ Get.ClassID - профа
+ Get.FSup - Status Update ID
}
Добавлено через 8 минут
ЗЫЖ 50 минут на Абиссе рыбу ловит.
Добавлено через 12 часов 37 минут
Сделал
3.2.6 от 04.08.2008
+ по ProtocolVersion грузим разные packets.ini
С Интерлюдией и С4, с packets.ini, которые у меня есть вроде работает нормально, а для Камаеля пакетхак фигню всякую показывает и подвисает в циклах.
Есть у кого правильный packets.ini для Камаеля и лог пакетов для тестов?
Последний раз редактировалось NLObP, 04.08.2008 в 18:33.
Причина: Добавлено сообщение