tag:blogger.com,1999:blog-6794439859342935602023-11-16T06:28:59.262-08:00Way of the ninja-researcherЖораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-679443985934293560.post-5374128658278110672013-07-14T17:44:00.003-07:002013-07-14T17:44:41.781-07:00Переезд блога<div dir="ltr" style="text-align: left;" trbidi="on">
Блог переехал на новый адрес: <a href="http://k0rnev.blogspot.com/" target="_blank">http://k0rnev.blogspot.com</a><br />
<br />
К сожалению нельзя сделать 2 адреса на один блог, поэтому старый блог остаётся таким по прежнему адресу. Не спрашивайте почему я поменял адрес, но суть в том что публиковатся буду теперь там.</div>
Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com0tag:blogger.com,1999:blog-679443985934293560.post-23541336962448607882013-05-11T00:45:00.000-07:002013-05-11T00:53:45.769-07:00DLib Attacher v1.0<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="http://s020.radikal.ru/i723/1305/ac/b13db02cc7d8.png" style="cursor: move;" /></div>
<br />
Ура, товарищи) наконец я выпустил програмку для статического внедрения библиотек. Честно уже надоело хукать в ручную, а алтернативами которыми мне доводилось пользоватся, реально проще закоцать, урезать, перерезать или вырезать, но не как не хукнуть) В общем мотивируясь желанием реализовать правильную работу со спецификой PE, я решил сделать такую тулзу. Конечно пока жуются не все файлы, но буду наращивать функционал по мере возможностей.<br />
<a name='more'></a><br />
Говорю сразу, программа не внедряется в секцию исполняемого кода и мало того не меняется Entry Point. Для этого я использую TLS Callback и отдельно создаю секцию, тем самым не нарушая корректной работы программы.<br />
<br />
В следующих версиях:<br />
- Поддержка архитектуры x64<br />
- Возможно поддержка .dll<br />
- Новые методы внедрения (линковка в таблицу импорта, внедрение в секцию кода и т.д.)<br />
- Ну и возможно подобью совместимость с некоторыми протекторами<br />
<br />
Если есть идеи предлагайте, скачать программу можно у меня в блоге <a href="http://ninja-researcher.blogspot.com/p/blog-page_14.html">отсюда</a><br />
<br /></div>
Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com0tag:blogger.com,1999:blog-679443985934293560.post-4183957515318748182013-03-22T09:43:00.001-07:002013-03-23T01:45:27.308-07:00Полезные советы от гика. Руководство по взлому домофона<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMuGhs1LVnFSbhVdLbOiwYlqQuKQfAhM2Ghf8PtIHUBiRYVcdG2aRV68jCwin4017PgsGmNNvASR5VlNgxbqQautv0XJJ7x4ZLykd0ys-gq9EQNYmRf4aZcLRE7-FbRwyjaLkP2-xRlwA/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMuGhs1LVnFSbhVdLbOiwYlqQuKQfAhM2Ghf8PtIHUBiRYVcdG2aRV68jCwin4017PgsGmNNvASR5VlNgxbqQautv0XJJ7x4ZLykd0ys-gq9EQNYmRf4aZcLRE7-FbRwyjaLkP2-xRlwA/s400/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png" width="400" /></a></div><br />
<a name='more'></a><br />
Я уверен что каждый из нас когда-нибуть да терял ключи от дома или оставлял их где-то, у друга например. В результате если нет запасного набора ключей парой приходится потусоватся под дверью пока кто-нибуть из родных не препрётся домой. Вот и я небыл исключением, похерил где-то ключи, но к счастью была резервная связка, правда в ней небыло ключа от домофона. Нормальный человек в такой ситуации просто бы съездил в любой специализированный киоск да сделал бы дубликат. Однако я ж не такой, ехать куда-то только ради ключа от домофона мне было бонально влом, ведь можно тупо подождать пока кто-нибуть из соседей откроет дверь. Так вот и прошел месяц другой, конечно совсем не гладко. Часто приходилось испытывать негатив со стороны жильцов дома. Например кто-то открыл дверь а я оп за ним зашел и в таком случае получаю как минимум косой взгляд в свой адрес, а как максимум были случаи что меня пытались насильно не пустить за собой, приходилось обьяснять ситуацию. Тоже часто бывало что после того как я проскачу, люди боялись со мной ехать в лифте и все как один под предлогом мол "о! нужно же проверить почту", пропускали лифт :) Но всё же, я ведь не извращенец и не насильник, мне тоже не приятно когда обо мне плохо думают :( В итоге так продолжалось до недавнего времени ...<br />
<br />
Так случилось что я оказался в весьма неприятной ситуации: 3 часа ночи, дома никого нету, попасть домой мешает железная дверь домофона. Помёрзнув полчаса я решился на экстрим, залез на козырёк, от туда на балкон подьезда и т.д. Рисковать жизнью ради того чтобы попасть домой уже не лезло ни в какие рамки. Это и послужило переломным моментом, да я решил исправить ситуацию и нет я не поехал делать дубликат, в голову пришла идея взломать домофон и в эту же ночь дело было сделано :)<br />
<br />
<div style="color: red;"><b>Внимание</b></div>Я расчитываю на то, что мой блог читают нормальные взрослые люди, которые уже переросли школьный возраст, когда имело смысл пакостить и заниматься вредительством. Статья написана как результат личного опыта и из сугубо <u>спортивного интереса</u>.<br />
<br />
<br />
<span style="font-size: large;">Что такое домофон и как это работает </span><br />
<br />
Домофон - это электронное переговорное устройство, которое устанавливается в большинстве случаев на железные двери подъездов с целью защиты подъезда от всяческих нежелательных гостей(бомжей, наркоманов, бродячих животных, любителей справить нужду неприличным образом и т.п.). Опустим технические подробности и начнём с самого важного. Домофоны как и любое маломальски-функциональное устройство имеют какой-то интерфейс для настройки функционала. Обычно такой интерфейс называется "режим программирования", соответственно доступ в этот режим получается в большинстве случаев вводом спец. пароля, либо мастер-ключом. В виду простоты устройства, интерфейс режима программирования доступен напрямую через панель ввода и циферблат. Я думаю понятно что в режиме программирования доступны все настройки домофона в том числе и установка пароля на открытие дверей. Однако так же очевидно что на случай утери пароля или мастер-ключа должны быть предусмотрены аварийные варианты сброса, иначе же не выкидывать устройство :) Но такой сброс обычно выполняется путём физического контакта с устройством (замыкание контакта, кнопки сброса и т.п.). Теперь перейдём к делу ...<br />
<br />
<br />
<span style="font-size: large;">Взлом</span><br />
<br />
И так, под взломом будем понимать получение возможности открытия дверей без использования ключа. Это достигается за счёт использования функционала ввода пароля на открытие дверей, такая стандартная фитча которая присутствует в большинстве моделей домофонов. Понятно что для того чтобы воспользоваться паролем нужно его сперва заполучить. Но разные модели домофонов могут иметь разные реализации интерфейсов настройки, поэтому алгоритм взлома описан в общих чертах.<br />
<br />
1. Перед тем как лезть в тех. часть, можно просто попробывать на своём домофоне пароль от соседних домов. Я не раз замечал что один и тот же пароль спокойно распостранялся на целые кварталы (ЖЭС такой ЖЭС).<br />
<br />
2. Затем если не прокатило, узнаём фирму и модель целевого домофона, затем начинаем гуглить документацию(руководство по эксплуатации) на него или любую инфу которая бы могла нам помочь. Это очень важный момент, поскольку как я сказал разные домофоны работают по разному и только документация может нам поведать ключевую информацию. Хочу заметить что документацию нарулить не так и сложно, правда бывает попадается на иностранном языке, что не всегда является проблемой. Кстати если вы не сможете нарулить доки конкретно под свою модель домофона, можете воспользоваться информацией о похожих моделях от этого же производителя.<br />
<br />
3. Теперь в нарытой инфе ищем информацию о стандартных паролях. Как не странно стандартные пароли часто используются в таких устройствах для входа в режим программирования или для открытия дверей. Конечно всё это должно меняться добросовестными сотрудниками ЖЕС'a, однако знаем мы их добросовестность.<br />
<br />
4. Если стандартный пароль не подошел, то есть еще один вариант захвата пароля, это использование механизма аварийного сброса. Однако чтобы выполнить аварийный сброс обычно требуется открутить саму коробку от двери(но не всегда), в которой с обратной стороны расположен механизм сброса. Обычно это проста дырка в который нужно всунуть отвёртку или тонкий гвоздь, дабы закоротить контакт или нажать кнопку. Тут опять таки требуется разворотить документацию под конкретную модель домофона.<br />
<br />
5. Если вы каким-то чудом попали в режим программирования, то далее следует найти настройки сброса пароля на открытия двери и опять-25 доки вам в руки. Вообще в домофонах есть 2 вида пароля, общий и персональный под конкретную квартиру. Лучше всего конечно использовать персональный пароль установленный на номер квартиры соседа Васи с 1-го этажа, это скроет факт обнаружения взлома домофона и отведёт от вас подозрения :)<br />
<br />
<u>Важный момент</u>, при получении доступа в режим программирования, обязательно согласуйте с документацией свои действия, если вам нужно установить новый пароль то нечего туда лезть не зная где они лежат, режим программирования очень примитивный в плане интерфейса настройки, одно неверное действие и вы можете локнуть домофон всему подьезду.<br />
<br />
<br />
<span style="font-size: large;">Пример взлома домофона ПИРРС-1000</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://l4.3dn.ru/_ph/1/2/100301251.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://l4.3dn.ru/_ph/1/2/100301251.jpg" width="320" /></a></div><br />
Итак разберем домофон ПИРРС 1000, метод его взлома распространяется так же на похожие модели с 4 символьным табло.<br />
<br />
Начнём с того что найдём документацию по домофону, которая легко доступна на одном из сайтов занимающихся продажей данной серии домофонов (ссылка в низу). Полистав страницы документации выяснилось что домофон имеет режим программирования, доступ в который можно получив введя 9999 [*], а затем введя 8-значный пароль.<br />
<br />
<u>Cпособ взлома #1</u><br />
Домофон имеет заводской пароль на вход в режим программирования 12345678. Для того чтобы войти в режим программирования пытаемся ввести следующее:<br />
9999 [*] 12345678<br />
в случае удачи на табло должна появится надпись Pr, которая сообщает о том что вы вошли в режим программирования.<br />
<br />
<u>Cпособ взлома #2</u><br />
Второй способ это аварийный сброс пароля путём замыкания контакта XP1 расположенного на задней стороне коробки. Для того что бы воспользоваться сбросом вам необходимо открутить 4 болта с внутренней стороны. Причём откручивание болтов является самой сложной частью, часто бывает что болты залиты краской или имеют нестандартную головку, открутить которую обычной отвёрткой не получится, в этом случае придётся повозится. Если болты откручены, вынимаем коробку уже с наружной стороны двери. На задней крышке находим дырку с надписью XP1, смело засовываем туда отвёртку и пытаемся нащупать контакт который нужно закоротить. Как только отвёртка станет в нужную позицию, на табло вместо - - - - появится _ _ _ _, это означает что вам нужно ввести новый 8-значный пароль для входа в режим программирования.<br />
<br />
<u>Режим программирования</u><br />
И так в ПИРС можно установить общий пароль или персональный, для того чтобы установить общий пароль жмём следующее:<br />
5, через 2 сек появится 4-значный текущий пароль, вводим свой с незначащими нулями<br />
далее открытие дверей будет осуществляться через: <br />
[*] [4-зн. пароль]<br />
<br />
Если мы хотим поставить индивидуальный пароль, то вводим:<br />
4, через 2 сек появится надпись 0001, вводим 4-значный номер квартиры (с незначащими 0), затем 4-значный пароль<br />
теперь открытие дверей осуществляется через :<br />
[номер_квартиры] [*] [4-зн. пароль]<br />
<br />
На всякий случай напомню что выход из режима программирования осуществляется на [#].<br />
Вот и всё)<br />
<br />
<br />
<span style="font-size: large;"><b>Полезные ссылки</b></span><br />
<br />
<a href="http://cyfral.ru/">http://cyfral.ru</a> - содержит документацию по домофонам "Cyfral"<br />
<a href="http://www.electrum.by/">http://www.electrum.by</a> - содержит документацию по домофонам "Пирс"</div>Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com8tag:blogger.com,1999:blog-679443985934293560.post-48987536884049516532013-03-22T09:36:00.003-07:002013-03-22T09:36:55.569-07:00Возвращение :)<div dir="ltr" style="text-align: left;" trbidi="on">
К сожалению некоторое время блог провисел в оффлайне, я хотел сделать небольшую реконструкцию, но по итогу из-за отсутствия свободного времени забил на него. Но наконец нашел в себе силы и время вновь возобновить работу блога. Теперь по мере возможностей постараюсь наполнить его интересными мыслями и статьями, т.к. мне всегда есть о чём сказать. Спасибо что ещё читаете)</div>
Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com0tag:blogger.com,1999:blog-679443985934293560.post-63694281829607673522012-11-16T00:08:00.000-08:002012-11-16T00:10:39.817-08:00Чистый интернет?!<div dir="ltr" style="text-align: left;" trbidi="on">
Наверно уже все слышали про буржуйские чудеса SOPA, PIPA, ACTA и русского зверя "Единый реестр запрещённых сайтов", собственно моразм крепчал. Сегодня загуглил винду с торрента и на тебе:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZzpspfB_3t0aZ8BxJyBNkRDhq5tNCQ_vq9H9o1NS7MWJ8Y9Ytkhi6ELeWz6Z0k2gY6E3zA_NpYG8nHLA1mk0tNB9B_O6loNEVqBG-vq8L-V1gg_Bs0VkSG8rGTLHapj6ma31WWnsMrZ0/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZzpspfB_3t0aZ8BxJyBNkRDhq5tNCQ_vq9H9o1NS7MWJ8Y9Ytkhi6ELeWz6Z0k2gY6E3zA_NpYG8nHLA1mk0tNB9B_O6loNEVqBG-vq8L-V1gg_Bs0VkSG8rGTLHapj6ma31WWnsMrZ0/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" width="400" /></a></div>
<br />
<a name='more'></a><br />
Так это еще ладно, вон сколько шума наделал <strike>великий российский фаервол</strike> реестр, который якобы должен ограничивать рунет от сайтов содержащих детскую порнографию, инструкции по суециду и создания наркотиков и т.п. Само сабой под его злую корательную лапу попали самые порнографические и наркодилерские сайты типа: lurkmore, rutracker, lib.rus.ec ...(хотя некоторые из сайтов были исключены из реестра из-за шумихи повидимому). Вообщем что и следовало ожидать от такого великолепного инструмента. Но возникает вопрос, что будет дальше? Я то сомниваюсь что эти законопроекты вообще способны хоть как-то изметь текущее положение в лучшую сторону, разве что это выгадно самому правительству но не более того. Поражает и то, что посути все эти файрволы чушь собачья, как они собираютя прикрывать эти сайты, блокируя IP?) Защита от дурака? Наверно уже любой школьник знает как минимум 100500 вариантов обойти такого рода блокировку. Тогда зачем это вообще надо? А как же Proxy, SSH, VPN? Про торренты я вообще молчу. Немогу насчупать логику, хотя бюрократы всегда найдут выход из ситуации, например таким новостям я уже не удевляюсь:<br />
- <a href="http://www.securitylab.ru/news/432078.php">Правительство РФ намерено ввести запрет на торренты</a><br />
- <a href="http://habrahabr.ru/post/158721/">Анонимайзеры под угрозой закрытия</a><br />
... и подобных ссылок можно привести оч. много<br />
<br />
В общем хз что будет дальше такими темпами, я лишь надеюсь что моразм не даёдет до точки кипения, ибо вопросы цензуры и копирайта в интернете за последние годы стали горячей точкой пораждающей такие бредовые фантазии, что порой незнаешь плакать или смеятся. Хотя будет интерестно посмотреть как <strike>костыли</strike> инструменты вроде единого реестра, будут рано или поздно признаны бесполезной тратой бюджета страны.</div>
Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com0tag:blogger.com,1999:blog-679443985934293560.post-13921122736528359282012-08-20T09:15:00.000-07:002012-08-20T14:12:34.862-07:00Добавление и прокачка монстров в MuOnline клиенте<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
Уже давно заметил что многие задаются вопросом: каким образом можно добавить новых монстров в игру? но ответа на него в большинстве случаев не даётся, а если и даётся то в ход идут только альтернативы, типо замени не используемого моба и т.п. А ведь по серверной части всё просто, добавил строчку в Monster.txt и дело в шляпе, но вот с клиентом такое не прокатит. Что не делай, что не подставляй, один хрен вместо желаемого моба появится бычок) Как то давненько и меня заинтересовал этот вопрос, я тогда еще толком неумел обращаться с отладчиком, но всё-таки полез с надеждой найти и изменить лимит загрузки мобов как это делается с лимитом вещей. Соответственно ничего у меня не вышло и я забил) Потом спустя какое-то время я набрался немного знаний и полез опять, как выяснилось механизм загрузки мобов оказался куда сложнее чем я думал. Но добавить новых мобов у меня уже как-никак получилось и мало того протюнинговать их, однако интерес пропал и я опять забил оставив пылится сырой код. Но совсем недавно ко мне вернулся стимул и я допилил код, который сейчас и опубликую. (на этом моменте представьте барабанную дробь)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTvm4GnmKD-pQuySxp8wU_8rKizsds3xm_AU1NeCZ24kLpFycTvXlLYW21NZ8fEVDLP6ij9dQzRVudYe6NtAF2QLcqrvGyA27ver7tgXzAw414bH3dU_wWy6IExM6lcPwHQBUX9WCbIF0/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B92.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTvm4GnmKD-pQuySxp8wU_8rKizsds3xm_AU1NeCZ24kLpFycTvXlLYW21NZ8fEVDLP6ij9dQzRVudYe6NtAF2QLcqrvGyA27ver7tgXzAw414bH3dU_wWy6IExM6lcPwHQBUX9WCbIF0/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B92.png" /></a></div>
<a name='more'></a>В исходнике представлены следующие реализации :<br />
1. Добавление собственных монстров<br />
2. Изменение параметров монстров (размер, тип, цвет и т.п.)<br />
<br />
Есть <b style="color: red;">важный момент</b>, код который я выкидываю в оригинальном виде скорее всего не будет работать на всех версиях main'ов, потому что структура мобов(Unit_Struct) в памяти на разных main'ах может быть разная. Это касается только реализации изменений параметров монстров, на добавление эта структура не влияет. Но ничего страшного, как подогнать структуру под main я поверхностно поясню далее.<br />
<br />
Вот сам код :<br />
<b>MonsLib.h</b> - <a href="http://pastebin.com/N9qLY8kE" target="_blank">link</a><br />
<b>MonsLib.cpp</b> - <a href="http://pastebin.com/608hfj9e" target="_blank">link</a><br />
<b>Hook.h</b> - <a href="http://pastebin.com/2r9mkK2R" target="_blank">link</a><br />
<b>Hook.cpp</b> - <a href="http://pastebin.com/iFUr0fv9" target="_blank">link</a></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
</div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
В исходнике оффсеты и структуры для main'ов 1.03.25(1.03y) JPN и 1.05.50(1.05x+) KOR. Причем тестировался код только на 1.03, оффсеты и структуры для 1.05 я взял со старого исходника, где они работали, но я не тестил их на новом коде, думаю нет причин чтобы они не работали.<br />
<br />
<b>Как это работает</b><br />
<div style="color: #666666;">
<span style="font-size: x-small;">* Названия функций взяты из исходника</span></div>
<br />
Добавление монстров работает достаточно просто, в main'e существует функция, назовём её LoadMonster(id), она вызывается при появлении на экране моба, в качестве аргумента получает его id, затем выполняет какие-то действия и решает каким образом грузить монстра. Именно эта функция решает какая модель будет загружена и кидает вместо новой модели бычка. В ней перехватывается 2 процедуры загрузки бычка(zero-bull), подставляются нужные значения и новый моб успешно загружен. Первая процедура HOpenMonsterModel(id) открывает модель, загружает bmd, текстуры, звуки, выбирает какие специфические параметры нужно сделать для модели и т.п. Затем вызывается вторая процедура HConstructMonsterModel() как я понимаю она уже конфигурирует модель для вывода на экран. Оффсеты этих 2х процедур есть в исходнике.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Изменение монстров немного сложнее, тут уже есть кое какие подводные камни, параметры мобов представлены в памяти в виде некой структуры (в коде Unit_Struct), эта структура содержит всё что касается визуализации модели: тип, цвет, имя, размер, анимации, эффекты, доп. оружие и много чего другого, <u>данная структура используется как для мобов так и для моделей игроков</u>. Как я уже сказал эти индивидуальные параметры мобам вещаются в процедуре HOpenMonsterModel, но изменять в ней параметры конкретного моба было бы очень не удобно, потому что там описываются параметры для разных мобов типо if else. Поэтому я решил вносить изменения в мобов после вызова этой функции и нашел подходящее местов в самом низу LoadMonster(). Там вызывалась некая процедура HSetMonsterNameStyle которая устанавливала для модели стиль имени, а что самое главное, в качестве аргумента получала ID моба и указатель на его структуру Unit_Struct.<br />
<br />
<b>Подводные камни</b><br />
<br />
<u>Проблема переносимости</u><br />
Дело в том что сама структура Unit_Struct в разных main'aх может быть разная, например в 1.03.25(1.03y) JPN и 1.05.50(1.05x+) KOR она отличается. Поэтому подогнать структуру под свой main необходимо самому иначе внешний вид мобов изменятся не будет или частично не будет. Я это делаю через ольгу, указатель получаю из функции HSetMonsterNameStyle, перехожу в память и методом подстановки(тыка) нахожу нужные значения. Это совсем не сложно.<br />
<br />
<u>Распределение памяти</u><br />
Каждая модель в main'е имеет свой Index(ResInx) который передаётся в функцию HLoadBMDModel, этот Index для каждой модели является постоянным и указывает на элемент некого массива структур или классов модели. Первоначально новым монстрам я добавлял Index идущий за последним стандартным мобом, но как оказалось эти индексы могли использоваться другими моделями поэтому и чтобы не трогать чужое пространство я задействовал индексы с конца массива, которые скорее всего не используются. Но массив этот из-за странной реализации постоянно имеет переменный размер(~10к-11к), поэтому пришлось писать кое какие расчёты чтобы не вылазить за границы блока памяти. Вроде такая реализация сбоев пока не давала и по идее должна работать без проблем, однако 100% уверенности нету поэтому и пищу.<br />
<br />
<b>Конфигурация</b><br />
<br />
<u>Добавление монстра</u><br />
Ну тут я думаю всё понятно, структура MonsterAdd_Struct:<br />
dwMobID - id монстра из Monster.txt<br />
lpDir - директория где лежит моб<br />
lpFile - имя файла модели монстра, без .bmd<br />
<br />
<u>Изменение параметров монстра</u><br />
Изменять любых монстров, как новых, так и стандартных. Структура MonsterParam_Struct:<br />
dwMobID - id юнита из Monster.txt<br />
lpName - имя юнита, если NULL то не меняется<br />
bMobType -тип юнита (0,1-unit, 2-monster, 3-can't select, 4-NPC), если NONE то не меняется<br />
bPKStatus - пк статус юнита (0-7), если NONE то не меняется<br />
bMoveOut - эффект, юнит убегает вперёд (0-1), если NONE то не меняется<br />
sItem1ResID - id ресурса модели, если NONE то не меняется<br />
bItem1IsExcl -переливается ли модель как excellent, если NONE то не меняется<br />
bItem1JoinID - join модели юнита к которому прекреплена модель sItem1ResID, если NONE то не меняется<br />
sItem2ResID - id ресурса модели, если NONE то не меняется<br />
bItem2IsExcl - переливается ли модель как excellent, если NONE то не меняется<br />
bItem2JoinID - join модели юнита к которому прекреплена модель sItem1ResID, если NONE то не меняется<br />
float fSize - размер модели(стандартно 1.0), если NULL то не меняется<br />
<br />
Я вывел в конфиг sItem1ResID и sItem2ResID как параметры используемые для вставки в руки мобов оружия, однако ресурсы моделей вещей нужно искать в main'e самому, тоже самое касается подбора необходимого join'а в модели, потому как в разных моделях разные join'ы. Кстати ID ресурсов вещей можно найти там же где и фиксится кол-во их загрузки.<br />
<br />
<b>Небольшая демонстрация</b><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYoAQpyIZsEc2zd-HOEf48dOyQn6z1Z7xk8mD4ZNonLjqhiSeTaeqdTVenbRvEZBvB3zDbomB-9vk9oDLzHyREZt3tmpNOxPIgWWDJBEtiddcITMGc0bFncvDROv5fb9v8BQq75NDJQ70/s1600/1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYoAQpyIZsEc2zd-HOEf48dOyQn6z1Z7xk8mD4ZNonLjqhiSeTaeqdTVenbRvEZBvB3zDbomB-9vk9oDLzHyREZt3tmpNOxPIgWWDJBEtiddcITMGc0bFncvDROv5fb9v8BQq75NDJQ70/s400/1.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Yeti разных размеров</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjWyicMXjY1-Y59GQqOTtDYte22_LCBa420l1T2D7fta3kz73n_ph86eD3G2azagWpivUWs7TDKbn4KRXwMAZI-w_-9oiEH_EZPv0IcgExqCqVs4ebBUrpxZXMvaU1mPnQrq2ZRhXu7x0/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjWyicMXjY1-Y59GQqOTtDYte22_LCBa420l1T2D7fta3kz73n_ph86eD3G2azagWpivUWs7TDKbn4KRXwMAZI-w_-9oiEH_EZPv0IcgExqCqVs4ebBUrpxZXMvaU1mPnQrq2ZRhXu7x0/s400/2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Yeti с разными PC статусами и типом unit</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFn4Eat_JWBl6JdZuPrVT67AS5BcWJa_fhPnvaU0153YYunDraKb5xFQaeMZpPS2Xj4M_jcFcav-Pmv7BzZz1af5wRZKgNoKx1J6VMcyNjFnCZUsgnIDALDmQvd9a9jbVGv_ZFC6zliwc/s1600/3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFn4Eat_JWBl6JdZuPrVT67AS5BcWJa_fhPnvaU0153YYunDraKb5xFQaeMZpPS2Xj4M_jcFcav-Pmv7BzZz1af5wRZKgNoKx1J6VMcyNjFnCZUsgnIDALDmQvd9a9jbVGv_ZFC6zliwc/s400/3.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Модифицированные собачки</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTSQCTMomyOc9czdfy2D2JUejd90DG0_Ucmdahg7Jwg0RRw3gJ5Z0u6q8sMdbP7sZ4FXeLWDTq-a_PH92rXvQsIVLJ8UBw-02RpTCmZ_cXq83PmYCpfjI4_NuzssHcvqvqcpdcJWceqTw/s1600/4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTSQCTMomyOc9czdfy2D2JUejd90DG0_Ucmdahg7Jwg0RRw3gJ5Z0u6q8sMdbP7sZ4FXeLWDTq-a_PH92rXvQsIVLJ8UBw-02RpTCmZ_cXq83PmYCpfjI4_NuzssHcvqvqcpdcJWceqTw/s400/4.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Новый NPC</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqIFyuS5pXyC8Bf0vvyY1Qx_NtngY_i5isT2Smd40geGI4HwficH0i4kqnKIfQWbWH95CYFCpj8tvTpodGYi2f3gaFJf-PqPu26VAMz6QLjE-xxgwwSlF8iPrggE_6VeduN_LsIOEn_A/s1600/5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqIFyuS5pXyC8Bf0vvyY1Qx_NtngY_i5isT2Smd40geGI4HwficH0i4kqnKIfQWbWH95CYFCpj8tvTpodGYi2f3gaFJf-PqPu26VAMz6QLjE-xxgwwSlF8iPrggE_6VeduN_LsIOEn_A/s400/5.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Новый моб Тиранозавр</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX-kJGKXTZKeCz1Cvq8KZVqyxcpRgo5FbLcsp2hOU3LP3IVPxZ5UpOWl0NwvLELqLpM1XZTotgp6ueCjZ_-2yIc2ktKV3rPGYqLIlLTWctjO6FSxHezSo-aho7ZOZjJuRf6IneD1RJnKU/s1600/6.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX-kJGKXTZKeCz1Cvq8KZVqyxcpRgo5FbLcsp2hOU3LP3IVPxZ5UpOWl0NwvLELqLpM1XZTotgp6ueCjZ_-2yIc2ktKV3rPGYqLIlLTWctjO6FSxHezSo-aho7ZOZjJuRf6IneD1RJnKU/s400/6.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Еще Тиранозавр</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqHRn4UfNFVGSRn3d5iIn_gmtFtRvZ-HN1Ecd3qJn2Q_9kYfdsg7NRE9CPoR219wGyvvO4mhHB3ZG-ClqVcluMb0n5OckC_ZOSl0QgPBwClfWPsk_V_3Ruco2y1_GuW0TjjvFIIi0FNAo/s1600/7.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqHRn4UfNFVGSRn3d5iIn_gmtFtRvZ-HN1Ecd3qJn2Q_9kYfdsg7NRE9CPoR219wGyvvO4mhHB3ZG-ClqVcluMb0n5OckC_ZOSl0QgPBwClfWPsk_V_3Ruco2y1_GuW0TjjvFIIi0FNAo/s400/7.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Изменённое оружие и щит у Hommerd'a</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfRaZK3RtvfXhgNKiLtjRR2HEQoL8lHY-PNSWxvQTfA6I1PbT62NLIY4KwLKOnFXIKQdDE_QyLfzfBVCH93QYXH879KO-2fWf-8zyaIcbkfs95OGwtB_fKpOscNUQi1ke03JrOXrO1pWI/s1600/8.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfRaZK3RtvfXhgNKiLtjRR2HEQoL8lHY-PNSWxvQTfA6I1PbT62NLIY4KwLKOnFXIKQdDE_QyLfzfBVCH93QYXH879KO-2fWf-8zyaIcbkfs95OGwtB_fKpOscNUQi1ke03JrOXrO1pWI/s400/8.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Изменённое оружие у Tantalos'a</td></tr>
</tbody></table>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
</div>
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Заключение</b><br />
<br />
Я лишь привёл пример как использовать самое основное, если поковырять найденные процедуры, то можно еще много чего навешать на мобов, звуки, отблески, эффекты, прозрачные текстуры и т.п. Если поизучать структуру Unit_Struct, так же можно мобов обвешивать шмотом, снаряжать их эффектами, аурами, анимациями, менять цвет, делать из них необычных юнитов, превращать в персонажей. Тут всё упрётся лишь в ваши фантизии и желание изучать.<br />
<br />
В общем кастомизируйте свои клиенты и удивляйте игроков, надеюсь мои наработки кому-нибудь пригодятся.</div>
</div>
Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com1tag:blogger.com,1999:blog-679443985934293560.post-81248700850657446992012-08-19T08:51:00.000-07:002012-08-20T09:33:04.105-07:00OllyDbg2.01e Released (18.08.2012)Ура!! наконец вышла долгожданная, новая версия Ольги 2.01e. Конечно ожидалась именно версия 2.2, а не 2.01e, но тем не менее радует то, что проект зашевилися после года застоя. Как говорит сам автор, бонально не было времени, но проект не заброшен и вновь поддерживается. Главным пирогом в релизе является допил интерфейса плагинов, с которым всегда было туго в линейке 2ой версии. Надеюсь теперь не предётся каждый раз за тюнингом лезть в багнутый 1.10. Однако важно заметить, что новое API плагинов отличается от старого, поэтому старые плагины необходимо перекомпилить на новый лад. В общем ждём в будующем сладостей, спасибо Олегу за его старания.Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com0tag:blogger.com,1999:blog-679443985934293560.post-77845959208703270162012-07-27T19:09:00.000-07:002012-08-20T09:34:19.213-07:00Разрущители легенд. Enc\Dec как средство от всех болезней.<div dir="ltr" style="text-align: left;" trbidi="on">
Вчера наткнулся на <a href="http://forum.x-mu.net/topic16196.html">тему</a>, где очередной раз продавали средство лечения протокола(игры MuOnline) от болезней типа MuAutoClicker Elita и т.п. Прочитав "интелектуальную беседу", честное слово меня это рассмешило, прям улыбка на лице сама по себе появилась) Столько шума, но вокруг чего?)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://data.photo.sibnet.ru/upload/imggreat/129554470898.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="187" src="http://data.photo.sibnet.ru/upload/imggreat/129554470898.jpg" width="400" /></a></div>
<a name='more'></a>Дело в том что я когда-то сам работал в этом напровлении. Не так давно(несколько месяцев назад) я писался с Саней(Killbrum) на какие-то темы связанные с защитой игры и разговор защел на темы Enc\Dec. Я в тот момент приблизительно знал что эти файлы связаны с шифрованием но с каким именно и как они работают еще не знал. Входе нашего разговора, Саня мне обьяснил что эти файлы ключи шифрования протокола и что какой-то чувак научился их делать и толкает за много денег. Цена мол была велика потому что все читы грузыщие траффик работают на стандартных ключах, а если им подсунуть нестандартный ключ то траффик им понятен не будет. Меня конечно это заинтересовало, в том плане что если всё верно, то можно наконец избавится от некоторых назойливых читов(на тот момент у меня был сервак). Бросив все дела я ринулся в изучения устройства ключей и алгоритмов шифрования траффика ...<br />
<br />
По итогу разобрав устройства ключа и принцип его загрузки я попытался поизменять значения в ключах, но в результате любых изменений ключи становились негодными. Поэтому чтобы иметь хоть какие-то зацепки я невероятными усилиями откапал какие-то не стандартные ключи и смог под ними войти в игру. Сразу же взялся проверить покатит ли Аванта, у меня
на 2х ПК
она не работала поэтому я кого-то попросил проверить и к моему сожалению Аванта прокатила. Я начал плеватся мол почему! Оказалось протокол шифруется только на половину(пакеты C3\C4) и читам этого дастаточно. Поняв всю бесполезность этих ключей я забил на них.<br />
<br />
Прошло время, я стал работать с протоколом, соответственно начал больше понимать как что устроено и какие места в нём кривые. И тут мне случайно попадается эта статья на Х-Му) Опять раздувается некие чудесные свойства ключей и там же Саня задвигает правильную идею налаживать дополнительное шифрование на весь траффик, на что получает негативный ответ типо идея УГ, стандартные ключи рулят и "слышу звон, не знаю где он". Бгг... только вот на мой взгляд всё обсолютно наоборот) <br />
<br />
Давайте на этом остановимся и разберёмся по подробнее. Насколько подсказывает мой опыт, обмен пакетами в основной своей массе идёт через открытые C1\C2. Тобищь полностью пофиксить читы не выйдет, я это знал и чувствовал сразу, но слова должны иметь под собой какую-то основу, поэтому я проделал тест:<br />
Хукнул в Main'e и Gs'e отправку и получение пакетов и наложил на защифрованные пакеты C3\C4 простейшее дополнительное XOR шифрование, чтобы воссоздать атмосферу нестандартных ключей. Ключики с прошлых тестов я найти на компе не смог, поэтому замутил такую альтернативу. Затем запустил Аванту но пока что на стандартных ключах, чтобы посмотреть как она воздействует на траффик. Оказалось что пакеты предвижения, атаки, отсылки сообщений и пр. всё работает на открытых пакетах C1\C2, которые с успехом жуются читами. Меня это не удивило. Потом была запущена игра уже под дополнительным шифрованием, причём Аванта не запустилась, именно этим явлением обосновывают чудесные свойства ключей, повидимому ниукого из умельцев клепать ключи не возникало желания разобратся доконца) Но я ведь знаю что ключи эти бесполезны, я ведь 5 минут назад своими глазами видел как нешифрованный траффик успешно протекал через чит, пришлось разобратся. Как оказалось Аванта активируется пакетом PMSG_CHARMAPJOINRESULT, который отсылается при входе на персонажа, данный пакет относится к C3 поэтому Аванта его не поняла и не запустилась под шифрованием. Отлично, теперь известно причина сбоя чита, чтобы окончатильно убить легенду о чудесных свойствах ключей я проделал еще 1 опыт. В алгоритме дополнительного шифрования я дописал условие, согласно которому один единственный пакет PMSG_CHARMAPJOINRESULT не будет подвергатся дополнительному шифрованию. И как вы думаете что произошло? Конечно же аванта запустилась и работала на славу, комманды //autokill, //die сработали, однако //autopick не работала)<br />
<br />
Я считаю что легенду о чудестных св-вах ключей ENC\DEC можно считать разрущенной, использование этих ключей даст максимум 30% из того что приписывают к ним. Чтобы получить 100% результат нужно вещать дополнительное шифрование на пакеты C1\C2. Это должно быть не тунелирование как предлагал Саня, а именно допил до того как данные попадают в winsock'овый send.</div>Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com0tag:blogger.com,1999:blog-679443985934293560.post-42154043237017028212012-07-26T17:16:00.000-07:002012-08-20T09:34:55.166-07:00Непобедимое победимо)<div dir="ltr" style="text-align: left;" trbidi="on">
Пару дней назад загорелся старой идеей исправить древный баг MuOnline с неверным отображением значений HP/Mana/Stamina/SD и т.п. Суть бага заключается в том, что под перечисленные атрибуты в памяти выделялись значения размером по 2 байта, тобишь вместится в такую ячейку могло только число от 0 до 65535. Поэтому некоторые цифры засчет переполнения переменных отображались неверно. Этому багу столько же лет сколько и самой MuOnline, его с уверенностью можно назвать самым олдовым багом игры)<br />
<a name='more'></a><br />
<br />
Однако меня всегда терзала эта тупая недороботка и вот найдя время, я собрался духом и занялся изучением этой ошибки. Оказалось что корни уходят в сам протокол, который так же предусматривает передачу 2 байтовых значений, вместо 4. Теперь стало понятно почему исправлением никто вроде как и не занимался) Но как говорится волков боятся в лес не ходить. Решил я попробывать, к таму же такая фитча пригодилась бы для моего сервера, который сейчас в разработке.<br />
<br />
... начал я вечером и к вечеру следующего дня я уже имел следующую картину :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvH6UgKynrSRR88myys_U28VYw1sXSCEvMXDDqBW-rzIYuiyhaHiTnXY3jLMciBBr_R99K5r-PkxT4KtHz4egtAIYXtvom4GmlKyQ8ZJetJMfz0ZA_XE9NAtqYaz76jf-mnFYhuwqvQKE/s1600/Screen(07_25-05_24)-0000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvH6UgKynrSRR88myys_U28VYw1sXSCEvMXDDqBW-rzIYuiyhaHiTnXY3jLMciBBr_R99K5r-PkxT4KtHz4egtAIYXtvom4GmlKyQ8ZJetJMfz0ZA_XE9NAtqYaz76jf-mnFYhuwqvQKE/s640/Screen(07_25-05_24)-0000.jpg" width="640" /></a></div>
<br />
как и предпалогалось реализация вышла не идеальная и требовала ряда тестов и доработак, однако я всётаки сделал это) Именно этот факт меня радовал и подталкивал на долнейший допил сего фикса. Сложность тут заключалась в том что данные о ХП, Мане, Стамин, СД, отсылались сервером разными пакетами, а main в свою очередь использовал значения хранящиеся в 2 байтовой структуры которую расширить нельзя, пришлось вешать горсть костылей что на протокол, что на клиент.<br />
<br />
Одной из таких проблем создал аналогичный баг с уроном. Дело в том что урон тоже подвержен багу с переполнением переменной, 2 байтовое значение урона придя в main отнималось от значения HP, все бы ничего но если урон приходил урезанный, например вместо настоящих 70000, в клиент пришло бы только 5000. Такой ход портил всю картину, какой толк от фикса HP, если он не работает при получении урона. Пришлось ковырнуть и урон ... Как выяснилось чуть позже не напрасно. Я решил исправить баг с уроном тоже. Вообщем еще денёк другой работы и поитогу получилась вот такая картина :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg63eKN-SiIe7w9Vq5VrXaH2L0qtWAnmVpQOEO5N7shyEVX84qLkmstC3gc7gMeYdri3biAcTtfRsRUVwoXqKfDjQ4QSHtT0qgveTfIp9A6mdwbZYEn4MtwvWeC0kA7oOTxRJvtfAGts4Q/s1600/Screen(07_26-02_19)-0001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg63eKN-SiIe7w9Vq5VrXaH2L0qtWAnmVpQOEO5N7shyEVX84qLkmstC3gc7gMeYdri3biAcTtfRsRUVwoXqKfDjQ4QSHtT0qgveTfIp9A6mdwbZYEn4MtwvWeC0kA7oOTxRJvtfAGts4Q/s640/Screen(07_26-02_19)-0001.jpg" width="640" /></a></div>
<br />
Полностью на реализацию этих фитч у меня ушло 3 дня, на исправление этих багов у разрабов из Webzen ушло бы не больше 20-30 минут.<br />
<br /></div>Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com2tag:blogger.com,1999:blog-679443985934293560.post-2630580244796720412012-07-05T09:35:00.000-07:002012-08-20T09:36:35.141-07:00Уязвимость в Magichand MuEditor v2<div dir="ltr" style="text-align: left;" trbidi="on">
Уязвимость обнаружена мною давно, но никак не доходили руки её опубликовать. Вообщем суть уязвимости заключается в том, что сценарий сохранения файлов work/save.php не имеет проверки валидности входящих переменных $_FILE, что позволяет выполнить удалённую загрузку произвольного файла. Данная уязвимость появилась в редакторе 2 версии и до сих пор не исправлена, поэтому не рекомендую ставить нефикшенный движек в публичном доступе.</div>
Жораhttp://www.blogger.com/profile/11086255170548096481noreply@blogger.com1