Pull to refresh
0

User

3
Subscribers
Send message
Прочитал в момент выхода. Спасибо большое ещё раз. Ваши статьи следует читать как минимум ради соблюдения принципа Крепсондо отличного слога!
Отлично написано, спасибо, однако осталась не раскрыта тема «провала» связанного с выбором дешевой микроскопической флешки.
Alt+F4 — это несомненный успех.
Perfect World, Jade Dynasty издаваемые мэйлру — разрабатываются китайцами, Ground War: Tanks — аналогично.
Так что не надо фэйспалмить — надо покурить матчасть ознакомиться с предметной областью.
Предложите свои услуги компании мэйл-ру, а то от их перлов типа «Зло проникло в волшебные штаны», «Фритуальные пленники Кенеди» и «Генерал армии ведро» уже совсем даже не смешно.
… о том, что робот украл у ученых, ведущими постоянную запись...

Это что за сюрр такой?
А все угнанные акки, находящиеся в продаже — они же, конечно же на частных почтовых серверах же? Верно? Правда ведь ни одного с почтой на мэйл-ру не угнали?
Кому нужна веская причина?
Не желающему распространять информацию о себе достаточно его не желания. В конечном итоге — это его право не желать чего-то, в частности разглашать информацию о себе.
… вот только клиент понятия не имеет, к чему этот OK относится, ведь он ничего не посылал,…


У «проблемы» есть очень элегантное и проверенное временем решение — инжекты. Если объяснять в двух словах — вам надо подняться в отладчике чуть выше чем отсылка клиентом пакета и найти функцию-обработчик щелчка на предмете, которая и инициирует посылку пакета серверу.
Эта функция, вероятнее всего, будет принимать один параметр — номер ячейки, предмет из которой следует использовать.

Дальше начинается «колдовство»:
1) вам необходимо изготовить процедуру, которая будет вызывать эту найденную функцию с нужным параметром, так, чтобы клиент не крашился.:
Например, вот так (пример взят для другой игры, просто для иллюстрации)
procedure AutoAttackCall(targetWid : dword); stdcall;
var
  Address: pointer;
begin
  // адрес нужной нам функции
  Address := Pointer(AutoAttackAddress); 
    asm
      pushad
      // готовим "окружение" для нашего вызова
      mov   esi, dword ptr [BASE_ADDRESS] 
      mov   esi, dword ptr [esi + PW_ROLE_BASE_OFFSET]
      // кладём в стек параметры для функции
      push  $0
      push  $80000000
      push  targetWid
      mov   ecx, esi
      // вызываем
      call Address
      popad
    end;
end;



2) Вызвать эту функцию в контексте процесса игры, так как будто это сделала она сама:

procedure THostPlayer.StartAutoAttack(targetWID : dword);
begin
    InjectFunc(@AutoAttackCall, @targetWID, SizeOf(targetWID));
end;


Код функции InjectFunc
procedure TProcess.InjectFunc(Func: Pointer; aParams: Pointer; aParamsSize: DWORD);
var
  hThread: THandle;
  lpNumberOfBytes: cardinal;
  lpThreadId: DWORD;
  ThreadAddr, ParamAddr: Pointer;
begin
  if self.processHandle<>0 then
  begin
    // ---- Выделим место в памяти процесса и запишем туда нашу функцию
    ThreadAddr := VirtualAllocEx(self.processHandle, 0, 256, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(self.processHandle, ThreadAddr, Func, 256, lpNumberOfBytes);

    // ---- Также запишем параметры к ней
    ParamAddr := VirtualAllocEx(self.processHandle, 0, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(self.processHandle, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

    // ---- Создадим поток, в котором это всё будет выполняться
    hThread := CreateRemoteThread(self.processHandle, 0, 0, ThreadAddr, ParamAddr, 0, lpThreadId);

    // ---- Ожидаем, пока функция отработает
    WaitForSingleObject(hThread, INFINITE);

    // ---- Подчищаем за собой
    CloseHandle(hThread);
    VirtualFreeEx(self.processHandle, ParamAddr, 0, MEM_RELEASE);
    VirtualFreeEx(self.processHandle, ThreadAddr, 0, MEM_RELEASE);
  end
end;

Ну как и ожидалось — код с мэйло-обменника благополучно исчез. Автор, перезалейте архив с исходниками куда-нибудь ещё, пожалуйста.
А почему конечные автоматы-то? Behaviour Trees гораздо более гибкие, меньше переписывать при изменении окружающих условий, да и на ниве бото-строения они себя зарекомедовали прекрасно.
Боты не могут протестировать эксплоиты, потому что уязвимости, которые должны эксплуатироваться ещё надо найти, а это отдельная не связанная с ботами задача.
Как вам уже выше ответили — все очевидные вещи, типа расстояния атаки и пр. проверяются на серверной стороне.
Но как в виде защиты можно подложить небольшую свинью… которая проявит себя в период сдачи налоговой отчетности…

Вот смешно-то будет, если она проявится у легитимных пользователей из-за вашей ошибки в защите, например пропущенном где-то в условиях 'not'
А зачем всё так усложнять?
1) считаем hw-id компьютера клиента
2) делаем запрос на свой сервер — получаем все данные по подписке, связанной с этим hwid

Обмен запросами/ответами между клиентом и сервером зашифрован, например, AES'ом. Обмен ключом и iv для AES между клиентом и сервером по классической схеме с использованием пары RSA ключей, приватный на сервере, публичный получит клиент при первом запросе к серверу авторизации.

Бонусом, на сервере можно хранить особенно чувствительные данные / блоки кода и получать их по уже созданному защищённому соединению.
В характеристиках указано, что дисплей IPS. Но на самом деле, тип матрицы – TFT-TN.

Мило. А что ещё не правильно указано в характеристиках?
Для любителей головоломок, вот такое очень крутое задание в виде квеста от ребят, даже если не ищешь работу интересно.
zoon.ru/job.php

Крутое задание, спасибо!
Этот квест является отличным завершением трудовой пятницы.
А вы могли бы удивить нас примерами благоухающего новья?
Изделие интересное, но ценник вообще конский.
Небесные страницы для точки ?? Хмммм, так какой, говорите, у вас стаж игры в ПВ ??

Information

Rating
Does not participate
Registered
Activity