Поиск уязвимостей в мультиселлах - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 04.03.2014, 15:18   #1
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Поиск уязвимостей в мультиселлах

Что делает этот скрипт:
- Берет цену продажи в магазин готовой продукции и сравнивает её суммарной стоимостью всех ингредиентов.
- Если цена продажи в магазин больше, чем суммарные затраты, то при загрузке указывается название мультиселла и Id продукта, где есть уязвимость, а так же пишется информация о суммарной стоимости продукции и ингредиентов.

Такой скрипт критически необходим людям, которые ставят свой серверна шарных исходниках, для проверки своего сервера на наличие уязвимостей в мультиселлах.

В свое время очень помогло мне, когда работал на лавео, сразу с десяток уязвимостей обнаружилось

Код:
package l2p.gameserver.taskmanager.tasks;

import java.util.Arrays;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import l2p.commons.threading.RunnableImpl;
import l2p.gameserver.data.xml.holder.ItemHolder;
import l2p.gameserver.data.xml.holder.MultiSellHolder;
import l2p.gameserver.data.xml.holder.MultiSellHolder.MultiSellListContainer;
import l2p.gameserver.model.base.MultiSellEntry;
import l2p.gameserver.model.base.MultiSellIngredient;
import l2p.gameserver.templates.item.ItemTemplate;

/**
 * @author WoWan-SM
 * ICQ 181-70-70
 * Skype WoWan.SM
 * 
 *	Класс для проверки итемов на корректную цену продажи в магазины
 *	Проверяет цену и количество products в мультиселлах и цену, количество ingridients
 */
public class InspectionItem extends RunnableImpl{

	static long _productPrice = 0;
	static long _ingredientPrice = 0;
	static boolean _isQuestItem = false;
	static boolean _isIgnoreItem = false;
	
	//Список игнорируемых итемов
	/*
	4356, //Laveon 
	4357, //Little Laveon
	9600, //Первая Страница (Hidden First Page)
	9601, //Вторая Страница (Hidden Second Page)
	9602, //Часть Контракта Демона (Demon Contract Fragment)
	4310, //Чек Ясона Хейна (Iason Heine's Bill)
	3472 Blood Medusa
	3473 Blood Werewolf
	3474 Blood Basilisk
	3475 Blood Drevanul
	3476 Blood Succubus
	3477 Blood Dragon
	3478 Beleths Blood
	3479 Manaks Blood Werewolf
	3480 Nia's Blood Medusa
	3481 Gold Dragon
	3482 Gold Wyvern
	3483 Gold Knight
	3484 Gold Giant
	3485 Gold Drake
	3486 Gold Wyrm
	3487 Beleths Gold
	3488 Manaks Gold Giant
	3489 Nia's Gold Wywern
	3490 Silver Unicorn
	3491 Silver Fairy
	3492 Silver Dryad
	3493 Silver Dragon
	3494 Silver Golem
	3495 Silver Undine
	3496 Beleths Silver
	3497 Manaks Silver Dryad
	3498 Nia's Silver Fairy
	5575 Древняя Адена (Ancient Adena)
	5961 Серебряный Василиск Кайла (Kail's Silver Basilisk)
	5962 Золотой Голем Кайла (Kail's Gold Golem)
	5963 Кровавый Дракон Кайла (Kail's Blood Dragon)
	6016 Руда Инферниума (Infernium Ore)
	6021 Плазма Дракона (Dracoplasm)
	6023 Лунная Пыль (Moon Dust)
	6024 Некроплазма (Necroplasm)
	6025 Плазма Демона (Demonplasm)
	6027 Драконья Эссенция (Draconic Essence)
	6028 Пламенная Эссенция (Fire Essence)
	6029 Лунный Камень (Lunargent)
	6030 Полуночное Масло (Midnight Oil)
	6031 Демоническая Эссенция (Demonic Essence)
	6032 Масло Преисподней (Abyss Oil)
	6033 Масло Огня Ада (Hellfire Oil)
	6034 Масло Кошмара (Nightmare Oil)
	7562 Алмаз Иных Миров (Dimensional Diamond)
	9451 Эссенция Династии (Dynastic Essence)
	10413 Эссенция Династии II (Dynastic Essence II)
	14052 Усиливающий Камень Венеры (Noble Enhancement Stone)
	14861 Проклятое Украшение (Cursed Burial Items)
	14873 Шкура Макронианина (Mucrokian Hide)
	14836 Библиография Гигантов, 1-й том (Knowledge of the Giants Anthology, Chapter 1)
	14837 Библиография Гигантов, 2-й том (Knowledge of the Giants Anthology, Chapter 2)
	14838 Библиография Гигантов, 3-й том (Knowledge of the Giants Anthology, Chapter 3)
	14839 Библиография Гигантов, 4-й том (Knowledge of the Giants Anthology, Chapter 4)
	14840 Библиография Гигантов, 5-й том (Knowledge of the Giants Anthology, Chapter 5)
	13796 Ядро Освобожденной Души (Freed Soul)
	13841 Амулет Дракона (Dragonkin Charm)
	
	 */
	final static int[] ignore_item = {-300,-200,7562,6016,6021,6023,6024,6025,6027,6028,6029,6030,6031,6032,6033,6034,5575,5961,5962,5963,13796,13841,14836,14837,14838,14839,14840,9451,10413,3472,3473,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,4356,4357,9600,9601,9602,4310,3488,3492,3497,14861,14873,3840};
	
	private static final Logger	_log	= LoggerFactory.getLogger(InspectionItem.class);

	@Override
	public void runImpl() throws Exception {
		
		Arrays.sort(ignore_item);
		
		int _multisellID = 0;
		MultiSellListContainer list;
		
		for (final int i : MultiSellHolder.entries.keys()) {
			_multisellID = i;
			list = MultiSellHolder.entries.get(_multisellID);
			
			_productPrice = 0;
			_ingredientPrice = 0;
			_isQuestItem = false;
			_isIgnoreItem = false;
			for (final MultiSellEntry j: list.getEntries())
			{
				for (final MultiSellIngredient _ingredient: j.getIngredients())
				{
					if (_ingredient.getItemId() <= 0)
						break;
					
					final ItemTemplate item = ItemHolder.getInstance().getTemplate(_ingredient.getItemId());
					
					if (item == null)
						break;
				
					if (Arrays.binarySearch(ignore_item, _ingredient.getItemId()) >= 0)
					{
						_isIgnoreItem = true;
						break;
					}
					
					if(item.isQuest())
					{
						_isQuestItem = true;
						break;
					}
					
					_ingredientPrice += (item.getReferencePrice() * _ingredient.getItemCount());
				}
				
				for (final MultiSellIngredient _production: j.getProduction())
				{
					if (!_isQuestItem || !_isIgnoreItem)
					{
						final ItemTemplate item = ItemHolder.getInstance().getTemplate(_production.getItemId());
						
						if (item == null)
							break;
						
						_productPrice += (item.getReferencePrice() * _production.getItemCount());
					}
				}
				
				if ((_productPrice  > _ingredientPrice) && !_isQuestItem && !_isIgnoreItem)
				{
					_log.warn("The total price of product " + j.getEntryId() + " bigger then ingredient price. Check multisell ID:" + _multisellID);
					_log.warn("Product price: " + _productPrice + " ingredient price: " + _ingredientPrice);
				}
			}
		}
	}

}
В GameServer.java после последнего ***.getInstance() добавляем:
Код:
ThreadPoolManager.getInstance().schedule(new InspectionItem(), 30000L);
При необходимости можно закомментировать.

https://yadi.sk/d/vfQmyq06Z2J7Y

Последний раз редактировалось WoWan-SM; 04.08.2014 в 11:46.
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 04.03.2014, 15:35   #2
Аватар для desolator
Пользователь

По умолчанию Re: Поиск уязвимостей в мультиселлах

А я тут глазами сижу в блокноте и сравниваю ;D
Спасибо.
desolator вне форума Ответить с цитированием
Непрочитано 04.03.2014, 17:47   #3
Аватар для JavaMan

По умолчанию Re: Поиск уязвимостей в мультиселлах

А какой смысл крутить эту задачу много раз, если можно проверить все мультиселлы один раз при загрузке сервера ?
JavaMan вне форума Ответить с цитированием
Непрочитано 04.03.2014, 17:51   #4
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Поиск уязвимостей в мультиселлах

Цитата:
Сообщение от GabberBaby Посмотреть сообщение
А какой смысл крутить эту задачу много раз, если можно проверить все мультиселлы один раз при загрузке сервера ?
30000L - Это задержка в милисекундах выполнения запланированной задачи (чтобы сервер до конца прогрузился), а не кол-во вызовов, вызывается проверка один раз.

Не путай с scheduleAtFixedDelay(final Runnable r, final long initial, final long delay)
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Непрочитано 04.03.2014, 17:58   #5
Аватар для JavaMan

По умолчанию Re: Поиск уязвимостей в мультиселлах

Цитата:
Сообщение от WoWan-SM Посмотреть сообщение
30000L - Это задержка в милисекундах выполнения запланированной задачи (чтобы сервер до конца прогрузился), а не кол-во вызовов, вызывается проверка один раз.

Не путай с scheduleAtFixedDelay(final Runnable r, final long initial, final long delay)
Точно, забыл что в оригинальных оверах другой ThreadPoolManager.
JavaMan вне форума Ответить с цитированием
Непрочитано 04.03.2014, 19:35   #6
Аватар для RaRus
Пользователь

По умолчанию Re: Поиск уязвимостей в мультиселлах

На лавео, через скрипты рисовали без проблем любой шмот
RaRus вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 04.03.2014, 20:07   #7
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Поиск уязвимостей в мультиселлах

Цитата:
Сообщение от RaRus Посмотреть сообщение
На лавео, через скрипты рисовали без проблем любой шмот
До того как я пришел, там было все очень плачевно, не отрицаю.
__________________
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Непрочитано 04.03.2014, 21:42   #8
Аватар для Deazer

По умолчанию Re: Поиск уязвимостей в мультиселлах

Цитата:
Сообщение от WoWan-SM Посмотреть сообщение
До того как я пришел, там было все очень плачевно, не отрицаю.
Интересно услышать как ты это пофиксил.
Deazer вне форума Ответить с цитированием
Непрочитано 04.03.2014, 22:05   #9
Аватар для Nechaino
Пользователь

По умолчанию Re: Поиск уязвимостей в мультиселлах

Цитата:
Сообщение от Deazer Посмотреть сообщение
Интересно услышать как ты это пофиксил.
Подозреваю что чудом...
Nechaino вне форума Отправить сообщение для Nechaino с помощью Skype™ Ответить с цитированием
Непрочитано 04.03.2014, 22:08   #10
Аватар для WoWan-SM
Герой

Автор темы (Топик Стартер) Re: Поиск уязвимостей в мультиселлах

Цитата:
Сообщение от Deazer Посмотреть сообщение
Интересно услышать как ты это пофиксил.
Запрет на использование всех байпасов, кроме тех, что разрешены.

Да и те что разрешены, добавлены дополнительные условия.
__________________
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск партнера dinonegative Рынок / Marketplace 5 11.05.2013 22:04
[Продам] Поиск шелов и уязвимостей у вас на сайте hose Рынок / Marketplace 62 16.12.2012 01:12
topanons.ru - кидало Winner10 Курилка / Yak floor 122 29.10.2012 15:22
Поиск пути 2.0 n3k0nation Java 7 20.04.2011 17:03
Поиск игроков - некорректно работает. ViAl Серверная часть 7 01.04.2010 14:43


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 13:24. Часовой пояс GMT +3.

Вверх