Цитата:
Сообщение от QaK
это что, конкретно?
|
Теперь не надо писать длинные строчки в 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;
if not VirtualProtect(Proc, 5, PAGE_EXECUTE_READWRITE, OldProtect) then begin
Exit;
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);
except
Exit;
end;
Result := True;
end;
Я так понял здесь надо изменять?
Код:
//вычисляем адрес относительного (jmp near) перехода на новую функцию
Address := dword(NewProc) - dword(Proc) - 5;
Кто разъяснит, что именно надо в HookCode поправить, чтобы более корректно работало?
Добавлено через 57 секунд
Цитата:
Сообщение от Amorality
На абиссе пофиксили ПНХ дллкой под названием blinkw32.dll , хотелось бы увидеть в твоем ПНХ возможность обхода фикса если это возможно .. Жаль конечно
|
На х300 работает.