-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пробежимся по обычным обфускаторам не включая eval которые итак очень легко снимаются через
Вообщем то что бы деобфусцировать скрипты нужно понять как работают обфускаторы.
//За свою жизнь я повидал очень много обфускаторов и абсолютно всех их можно снять.
Как же работает обфускатор?
Возьмемся за базовые функции обфа :
Заменить инвойки методов ex: World.GetMapName() -> World["GetMapName"]()
Заменить все int/double подобные из десятичной системы исчисления в 16-тичную.
Ремапп переменных (var yourvariable -> var _0x5353535)
Зашифровать все строки предварительно добавив методы расшифровки их при инициализации JS в non-function поле.
"Склеить" вызовы функций/инициализацию переменных через ,
Теперь давайте посмотрим как выглядит код после обфускатора
(для дефолтной деобфускации я прогоняю любую джс через
Что ж, действительно строка зашифрована.
Давайте пройдемся до метода _0x6695xc что бы понять что там происходит.
Как видим _0x6695xc является ссылкой на _0xae71a7.
Что ж, не проблема, давайте пройдемся до _0xae71a7.
_0xae71a7 опять ссылка на какую то функцию / переменную.
Что ж, давайте попробуем ещё раз.
Пройдемся до _0x1569.
А вот _0x1569 уже функция которая достает строки из массива.
Давайте анализируем код функции.
Функция возвращает _0x6695x5 которая получается из _0x50d4[_0x6695x3] но перед этим происходит смещение _0x6695x3 по "оффсету" - 0x6a;
_0x50d4 является массивом ссылок на расшифрованные строки
Теперь мы знаем, что _0x6695xc(0xbc) = _0x50d4[0xbc - 0x6a].
Перегоним hex в dec что бы было удобнее анализировать код.
0x6a = 106
т.е _0x6695xc(0xbc) = _0x50d4[82].
-> Ураааа, мы деобфусцировали первую строку.
Не совсем.
Если посмотреть на остальные функции обфускатора, то сам массив проходит функцию обфускатора в которой его элементы меняются местами.
Давайте разберем эту функцию, но сначала начнем с того, что я вас спрошу как можно инициализировать функцию?
90% скажут
9% скажут то что выше и
и оставшийся процент знает, что можно сделать функцию, которая будет вызывать сама себя.
в своем деобфускаторе я назвал такие функции AUTO_CALLED.
Давайте посмотрим как она выглядит.
Такая функция сама себя вызовет.Она не имеет имени, просто вызывается сама по себе.
В функциях обфускатора есть такая функция.Она вызывается сама по себе в non-function пространстве.
После нее сам массив принимает другой вид.Можно было бы разобрать что она делает, но зачем?
Давайте просто скопируем в скрипт эту функцию вместе с массивом и посмотрим на массив после вызова этой функции.
//также эта функция вызывает другую функцию обфускатора так что ее мы тоже захватим с собой.
Давайте напишем функцию которая выведет массив после этой функции.
(у меня нет вт кряка на компе,я юзаю либу nashorn для запуска скриптов с Java так что у меня print)
Получим на выходе :
Теперь давайте посмотрим что лежит в _0x50d4[82].
Как видим в 82 айди лежит GetMapName и получаем в итоге World["GetMapName"]()
Давайте ради теста расшифруем ещё 2 строки.
UI[_0xae71a7(0xf6)](_0xae71a7(0xf5)) ->
UI[_0xae71a7(246)](_0xae71a7(245)) -> вспоминаем про оффсет (-0x6a=106) те
UI[_0xae71a7(246-106)](_0xae71a7(245-106)) -> вспоминаем что делает наша функция ->
UI[_0x50d4[140]](_0x50d4[139]) т.е
UI["AddTextBox"]("Password");
**У меня есть идея для отличного обфускатора на динамичных массивах, кастом ремапом функций, динамичных функциях - call`ах, если кто то хочет отдать мне 5к что бы я сделал его, то добро пожаловать ко мне на страничку вк https://vk.com/retry_later
На этом тред подходит к концу.
Удачных деобфускаций, главное помнить, что деобфускацию нужно юзать только для крекинга и сливов, а не для паст в свои мега корды.
GLHF =)
Пожалуйста, авторизуйтесь для просмотра ссылки.
Вообщем то что бы деобфусцировать скрипты нужно понять как работают обфускаторы.
//За свою жизнь я повидал очень много обфускаторов и абсолютно всех их можно снять.
Как же работает обфускатор?
Возьмемся за базовые функции обфа :
Заменить инвойки методов ex: World.GetMapName() -> World["GetMapName"]()
Заменить все int/double подобные из десятичной системы исчисления в 16-тичную.
Ремапп переменных (var yourvariable -> var _0x5353535)
Зашифровать все строки предварительно добавив методы расшифровки их при инициализации JS в non-function поле.
JavaScript:
//код добавленный обфускатором
function decrypt(){
}
decrypt(); // non function invoke
//ваш код
function js() {
//
}
JavaScript:
UI["AddTextbox"]("Username"), UI["AddTextbox"]("Password")
Теперь давайте посмотрим как выглядит код после обфускатора
(для дефолтной деобфускации я прогоняю любую джс через
Пожалуйста, авторизуйтесь для просмотра ссылки.
что бы уже мой деобфускатор занялся расшифровкой строк)
JavaScript:
var _0xb3ab = ["PrintChat", "Throw", "closest_wall", "atan2", "], ", "next_tick_ang", "AddCheckbox", "Runleft", "SetColor", "Jump+Throw", "AddColorPicker", "Jump+Half throw", "userid", "move_on_key_wall", "GetEyePosition", "Run+Jump+Throw", "GetEntityFromUserID", "GetInt", "SetValue", "sqrt", "cos", "sort", ", \"", "run", "CreateMove", "StringCustom", "Flashbang", "Name:", "setmenu", "497972iHWETO", "113pfvaWM", "awp", "on_local_connect", "1313092nQxNUz", "2460080qPgBWg", "CBasePlayer", "moved_base", "Draw", "GetProp", "AddDropdown", "Show nades on all map", "user", "resume", "29cyLiNr", "smoke grenade", "ForceJump", "1736ARBxhR", "High explosive grenade", "push", "Helpers", "run_start", "locations.js", "TickInterval", "player_connect_full", "filter", "Grenade helper", "m_vecViewOffset[2]", "\", ", "FilledRect", "JAVASCRIPT", "Print location", "TextSize", "Wallbang helper", "molotov", "GetMapName", "AddHotkey", "Move:", "toString", "SetMovement", "incendiary grenade", "Misc", "Script items", "AddLabel", "+attack", "IsHotkeyActive", "Curtime", "GetString", "Username", "m_vecVelocity[0]", "running", "SetAngles", "GetLocalPlayer", "draw123", "Activate helper", "check_visibility", "scar 20", "PrintColor", "-attack2", "GetViewAngles", "Line color", "ExecuteCommand", "Text color", "Run+Throw", "abs", "GetWeapon", "SetEnabled", "GetColor", "sin", "ssg 08", "m_vecOrigin", "helpersetup", "draw", "length", "WorldToScreen", "max", "flashbang", "times", "\x0A[\"", "wallbang", "+attack2", "Ticks:", "Tickcount", "ignore_input", "g3sg1", "String", "Line", "8294", "59431aqmSgd", "hypot", "GetValue", "DT_CSPlayer", "Password", "AddTextbox", " Helpers", "Custom color", "RegisterCallback", "FilledCircle", "Show wallbang on all map", "FadedCircle", "Runright", "],\x0A", " Add locations", "1780FjpEfJ", "Icon color", "Weapon type:", "GetScreenSize", "1jWyIif", "736ZdkWMy", "Half throw", "locations", "GetRenderOrigin", "checkDelays", "start_tick", "move_on_key", "high explosive grenade", "IsLocalPlayer", "-attack", "GetName", "func", "48151hJTXJR", "closest", "attacked", "shift", "Molotov", "Smoke", "AddSliderInt", "", "[", "]", "\"", "\",", " \"", "[\"", "],", "toLowerCase", "I", "J", "K", "S", "r8 revolver", "dealge", "|", "GetServerString", "PI", "delay", "prototype", "splice", "forEach", "Run+JumpThrow", "check_visibility_wall"];
var _0x50d4 = [_0xb3ab[0], _0xb3ab[1], _0xb3ab[2], _0xb3ab[3], _0xb3ab[4], _0xb3ab[5], _0xb3ab[6], _0xb3ab[7], _0xb3ab[8], _0xb3ab[9], _0xb3ab[10], _0xb3ab[11], _0xb3ab[12], _0xb3ab[13], _0xb3ab[14], _0xb3ab[15], _0xb3ab[16], _0xb3ab[17], _0xb3ab[18], _0xb3ab[19], _0xb3ab[20], _0xb3ab[21], _0xb3ab[22], _0xb3ab[23], _0xb3ab[24], _0xb3ab[25], _0xb3ab[26], _0xb3ab[27], _0xb3ab[28], _0xb3ab[29], _0xb3ab[30], _0xb3ab[31], _0xb3ab[32], _0xb3ab[33], _0xb3ab[34], _0xb3ab[35], _0xb3ab[36], _0xb3ab[37], _0xb3ab[38], _0xb3ab[39], _0xb3ab[40], _0xb3ab[41], _0xb3ab[42], _0xb3ab[43], _0xb3ab[44], _0xb3ab[45], _0xb3ab[46], _0xb3ab[47], _0xb3ab[48], _0xb3ab[49], _0xb3ab[50], _0xb3ab[51], _0xb3ab[52], _0xb3ab[53], _0xb3ab[54], _0xb3ab[55], _0xb3ab[56], _0xb3ab[57], _0xb3ab[58], _0xb3ab[59], _0xb3ab[60], _0xb3ab[61], _0xb3ab[62], _0xb3ab[63], _0xb3ab[64], _0xb3ab[65], _0xb3ab[66], _0xb3ab[67], _0xb3ab[68], _0xb3ab[69], _0xb3ab[70], _0xb3ab[71], _0xb3ab[72], _0xb3ab[73], _0xb3ab[74], _0xb3ab[75], _0xb3ab[76], _0xb3ab[77], _0xb3ab[78], _0xb3ab[79], _0xb3ab[80], _0xb3ab[81], _0xb3ab[82], _0xb3ab[83], _0xb3ab[84], _0xb3ab[85], _0xb3ab[86], _0xb3ab[87], _0xb3ab[88], _0xb3ab[89], _0xb3ab[90], _0xb3ab[91], _0xb3ab[92], _0xb3ab[93], _0xb3ab[94], _0xb3ab[95], _0xb3ab[96], _0xb3ab[97], _0xb3ab[98], _0xb3ab[99], _0xb3ab[100], _0xb3ab[101], _0xb3ab[102], _0xb3ab[103], _0xb3ab[104], _0xb3ab[105], _0xb3ab[106], _0xb3ab[107], _0xb3ab[108], _0xb3ab[109], _0xb3ab[110], _0xb3ab[111], _0xb3ab[112], _0xb3ab[113], _0xb3ab[114], _0xb3ab[115], _0xb3ab[116], _0xb3ab[117], _0xb3ab[118], _0xb3ab[119], _0xb3ab[120], _0xb3ab[121], _0xb3ab[122], _0xb3ab[123], _0xb3ab[124], _0xb3ab[125], _0xb3ab[126], _0xb3ab[127], _0xb3ab[128], _0xb3ab[129], _0xb3ab[130], _0xb3ab[131], _0xb3ab[132], _0xb3ab[133], _0xb3ab[134], _0xb3ab[135], _0xb3ab[136], _0xb3ab[137], _0xb3ab[138], _0xb3ab[139], _0xb3ab[140], _0xb3ab[141], _0xb3ab[142], _0xb3ab[143], _0xb3ab[144], _0xb3ab[145], _0xb3ab[146], _0xb3ab[147], _0xb3ab[148], _0xb3ab[149], _0xb3ab[150], _0xb3ab[151]];
var _0x1569 = function (_0x6695x3, _0x6695x4) {
_0x6695x3 = _0x6695x3 - 0x6a;
var _0x6695x5 = _0x50d4[_0x6695x3];
return _0x6695x5
};
var _0xae71a7 = _0x1569;
(function (_0x6695x7, _0x6695x8) {
var _0x6695x9 = _0x1569;
while (!![]) {
try {
var _0x6695xa = -parseInt(_0x6695x9(0x100)) * -parseInt(_0x6695x9(0x9a)) + -parseInt(_0x6695x9(0x99)) + -parseInt(_0x6695x9(0xf1)) + parseInt(_0x6695x9(0xa7)) * -parseInt(_0x6695x9(0x79)) + parseInt(_0x6695x9(0x9d)) * parseInt(_0x6695x9(0x6c)) + -parseInt(_0x6695x9(0x6d)) * parseInt(_0x6695x9(0xaa)) + parseInt(_0x6695x9(0x9e));
if (_0x6695xa === _0x6695x8) {
break
} else {
_0x6695x7[_0xb3ab[48]](_0x6695x7[_0xb3ab[152]]())
}
} catch (_0x251d4e) {
_0x6695x7[_0xb3ab[48]](_0x6695x7[_0xb3ab[152]]())
}
}
}(_0x50d4, 0xb55b2), UI[_0xae71a7(0xf6)](_0xae71a7(0xc9)), UI[_0xae71a7(0xf6)](_0xae71a7(0xf5)), UI[_0xae71a7(0xc4)](_0xae71a7(0xf7)), UI[_0xae71a7(0x82)](_0xae71a7(0xad)), UI[_0xae71a7(0xbd)](_0xae71a7(0xcf)), UI[_0xae71a7(0x82)](_0xb3ab[55]), UI[_0xae71a7(0x82)](_0xae71a7(0xa4)), UI[_0xb3ab[6]](_0xae71a7(0xba)), UI[_0xb3ab[6]](_0xae71a7(0xfb)), UI[_0xae71a7(0x82)](_0xae71a7(0xf8)), UI[_0xae71a7(0x86)](_0xb3ab[91]), UI[_0xae71a7(0x86)](_0xae71a7(0x101)), UI[_0xae71a7(0x86)](_0xae71a7(0xd5)), UI[_0xae71a7(0x84)](_0xae71a7(0xc2), _0xae71a7(0xb7), _0xae71a7(0xc3), _0xb3ab[91], [0xff, 0xff, 0xff, 0xff]), UI[_0xb3ab[8]](_0xae71a7(0xc2), _0xae71a7(0xb7), _0xae71a7(0xc3), _0xae71a7(0x101), [0xff, 0xff, 0xff, 0xff]), UI[_0xae71a7(0x84)](_0xae71a7(0xc2), _0xae71a7(0xb7), _0xae71a7(0xc3), _0xae71a7(0xd5), [0xff, 0xff, 0xff, 0xff]), UI[_0xae71a7(0xc4)](_0xae71a7(0xff)), UI[_0xae71a7(0x82)](_0xb3ab[60]), UI[_0xae71a7(0xa3)](_0xb3ab[134], [_0xb3ab[153], _0xae71a7(0xab), _0xb3ab[154], _0xae71a7(0x96), _0xae71a7(0xe8)]), UI[_0xae71a7(0xf6)](_0xae71a7(0x97)), UI[_0xae71a7(0xa3)](_0xae71a7(0xbe), [_0xae71a7(0x7d), _0xae71a7(0xd8), _0xae71a7(0x85), _0xb3ab[15], _0xae71a7(0x6e), _0xae71a7(0x87), _0xae71a7(0x83), _0xae71a7(0xfd), _0xae71a7(0xe8)]), UI[_0xb3ab[155]](_0xb3ab[110], 0x0, 0xc8));
function helpersetup() {
var _0x6695xc = _0xae71a7,
_0x6695xd = _0xb3ab[156],
_0x6695xe = _0xb3ab[156],
_0x6695xf = _0x6695xc(0xa5),
_0x6695x10 = _0x6695xc(0xf0),
_0x6695x11 = World[_0x6695xc(0xbc)](),
_0x6695x12 = Local[_0x6695xc(0xd4)](),
_0x6695x13 = Entity[_0x6695xc(0xcd)](),
_0x6695x14 = UI[_0x6695xc(0xf3)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0xb3ab[71], _0x6695xc(0x6a)),
_0x6695x15 = Entity[_0x6695xc(0x8a)](_0x6695x13),
_0x6695x16 = UI[_0x6695xc(0xc8)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0xb3ab[27]),
_0x6695x17 = UI[_0x6695xc(0xc8)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0xb3ab[71], _0x6695xc(0xc9)),
_0x6695x18 = UI[_0x6695xc(0xc8)](_0x6695xc(0xc2), _0xb3ab[59], _0x6695xc(0xc3), _0x6695xc(0xf5)),
_0x6695x16 = UI[_0x6695xc(0xc8)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0xb3ab[71], _0x6695xc(0x97)),
_0x6695x19 = UI[_0xb3ab[119]](_0x6695xc(0xc2), _0x6695xc(0xb7), _0xb3ab[71], _0x6695xc(0xbe)),
_0x6695x1a = UI[_0x6695xc(0xf3)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0x6695xc(0xea));
if (_0x6695x14 == 0x0) {
_0x6695xd = _0x6695xc(0xbb)
} else {
if (_0x6695x14 == 0x1) {
_0x6695xd = _0xb3ab[144]
} else {
if (_0x6695x14 == 0x2) {
_0x6695xd = _0x6695xc(0xa8)
} else {
if (_0x6695x14 == 0x3) {
_0x6695xd = _0x6695xc(0xe5)
} else {
_0x6695x14 == 0x4 && (_0x6695xd = _0x6695xc(0xe8))
}
}
}
};
_0x6695xf == _0x6695x17 && _0x6695x10 == _0x6695x18 ? (UI[_0xb3ab[95]](_0x6695xc(0xc2), _0x6695xc(0xb7), _0xb3ab[71], _0xb3ab[123], 0x1), UI[_0x6695xc(0xdb)](_0xb3ab[70], _0x6695xc(0xb7), _0xb3ab[71], _0x6695xc(0xad), 0x1), UI[_0xb3ab[95]](_0xb3ab[70], _0x6695xc(0xb7), _0xb3ab[71], _0x6695xc(0xc9), 0x0), UI[_0x6695xc(0xdb)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0xb3ab[121], 0x0)) : (UI[_0xb3ab[18]](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0x6695xc(0xad), 0x0), UI[_0x6695xc(0xdb)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0xb3ab[71], _0xb3ab[123], 0x0), UI[_0x6695xc(0xdb)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0x6695xc(0xad), 0x0), UI[_0x6695xc(0xdb)](_0x6695xc(0xc2), _0xb3ab[59], _0x6695xc(0xc3), _0x6695xc(0xc9), 0x1), UI[_0xb3ab[95]](_0x6695xc(0xc2), _0xb3ab[59], _0x6695xc(0xc3), _0xb3ab[121], 0x1));
if (_0x6695x19 == 0x0) {
_0x6695xe = _0x6695xc(0x7d)
} else {
if (_0x6695x19 == 0x1) {
_0x6695xe = _0x6695xc(0xd8)
} else {
if (_0x6695x19 == 0x2) {
_0x6695xe = _0x6695xc(0x85)
} else {
if (_0x6695x19 == 0x3) {
_0x6695xe = _0x6695xc(0x8b)
} else {
if (_0x6695x19 == 0x4) {
_0x6695xe = _0x6695xc(0x6e)
} else {
if (_0x6695x19 == 0x5) {
_0x6695xe = _0x6695xc(0x87)
} else {
if (_0x6695x19 == 0x6) {
_0x6695xe = _0x6695xc(0x83)
} else {
if (_0x6695x19 == 0x7) {
_0x6695xe = _0x6695xc(0xfd)
} else {
_0x6695x19 == 0x8 && (_0x6695xe = _0x6695xc(0xe8))
}
}
}
}
}
}
}
};
UI[_0xb3ab[119]](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0x6695xc(0xb8)) && (Cheat[_0x6695xc(0xd2)]([0x0, 0xc8, 0x0, 0xff], _0x6695xc(0xe7) + _0x6695x11 + _0xb3ab[57] + _0xb3ab[157] + _0x6695x15 + _0xb3ab[4] + _0xb3ab[157] + _0x6695x12[_0x6695xc(0xbf)]() + _0xb3ab[158] + _0x6695xc(0x92) + _0x6695xd + _0xb3ab[57] + _0xb3ab[159] + _0x6695x16 + _0xb3ab[160] + _0xb3ab[161] + _0x6695xe + _0x6695xc(0xb5) + _0x6695x1a + _0x6695xc(0xfe)), Cheat[_0x6695xc(0x7c)](_0xb3ab[162] + _0x6695x11 + _0x6695xc(0xb5) + _0xb3ab[157] + _0x6695x15 + _0x6695xc(0x80) + _0xb3ab[157] + _0x6695x12[_0xb3ab[67]]() + _0xb3ab[158] + _0x6695xc(0x92) + _0x6695xd + _0xb3ab[57] + _0xb3ab[159] + _0x6695x16 + _0xb3ab[160] + _0xb3ab[161] + _0x6695xe + _0x6695xc(0xb5) + _0x6695x1a + _0xb3ab[163]), UI[_0x6695xc(0x8e)](_0x6695xc(0xc2), _0x6695xc(0xb7), _0x6695xc(0xc3), _0xb3ab[60], 0x0))
}
function setmenu() {
var _0x6695x1c = _0xae71a7;
UI[_0x6695x1c(0xf3)](_0xb3ab[70], _0xb3ab[59], _0x6695x1c(0xc3), _0xb3ab[49]) ? (UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xff), 0x1), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xb8), 0x1), UI[_0x6695x1c(0xdb)](_0xb3ab[70], _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0x6a), 0x1), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0x6695x1c(0xc3), _0x6695x1c(0x97), 0x1), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xbe), 0x1), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0x6695x1c(0xc3), _0x6695x1c(0xea), 0x1), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0xb3ab[83], 0x1), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0xb3ab[55], 0x1), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0xb3ab[62], 0x1), UI[_0x6695x1c(0xdb)](_0xb3ab[70], _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xf8), 0x1)) : (UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0x6695x1c(0xc3), _0x6695x1c(0xff), 0x0), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xb8), 0x0), UI[_0x6695x1c(0xdb)](_0xb3ab[70], _0xb3ab[59], _0xb3ab[71], _0xb3ab[134], 0x0), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0x97), 0x0), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0xb3ab[71], _0x6695x1c(0xbe), 0x0), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xea), 0x0), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0xb3ab[59], _0xb3ab[71], _0x6695x1c(0xcf), 0x0), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xb3), 0x0), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0xba), 0x0), UI[_0xb3ab[95]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0xb3ab[124], 0x0)), UI[_0x6695x1c(0xf3)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0xb3)) && UI[_0x6695x1c(0xf3)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xad)) == !![] ? UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0xb3ab[71], _0x6695x1c(0xa4), 0x1) : UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xa4), 0x0), UI[_0x6695x1c(0xf3)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0xba)) && UI[_0x6695x1c(0xf3)](_0xb3ab[70], _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0xad)) == !![] ? UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xfb), 0x1) : UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0x6695x1c(0xc3), _0x6695x1c(0xfb), 0x0), UI[_0xb3ab[119]](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xf8)) && UI[_0xb3ab[119]](_0x6695x1c(0xc2), _0xb3ab[59], _0xb3ab[71], _0x6695x1c(0xad)) == !![] ? (UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0xb3ab[91], 0x1), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0xb3ab[59], _0x6695x1c(0xc3), _0xb3ab[133], 0x1), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0xd5), 0x1)) : (UI[_0x6695x1c(0xdb)](_0xb3ab[70], _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0xb3ab[91], 0x0), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0x6695x1c(0xc3), _0x6695x1c(0x101), 0x0), UI[_0x6695x1c(0xdb)](_0x6695x1c(0xc2), _0x6695x1c(0xb7), _0xb3ab[71], _0x6695x1c(0xd5), 0x0))
}
Cheat[_0xae71a7(0xf9)](_0xb3ab[37], _0xae71a7(0x98));
const weapon_console_name = {
'incendiary grenade': _0xae71a7(0xc1),
'high explosive grenade': _0xae71a7(0x74),
'molotov': _0xae71a7(0xbb),
'smoke grenade': _0xae71a7(0xa8),
'flashbang': _0xae71a7(0xe5)
},
wallbang_console_name = {
'awp': _0xb3ab[108],
'scar 20': _0xae71a7(0xe8),
'g3sg1': _0xae71a7(0xe8),
'ssg 08': _0xae71a7(0xe8),
'dealge': _0xae71a7(0xe8),
'r8 revolver': _0xb3ab[108]
};
Render[_0xb3ab[128]] = function (_0x6695x1f, _0x6695x20, _0x6695x21, _0x6695x22) {
var _0x6695x23 = _0xae71a7;
const _0x6695x24 = _0x6695x22[0x3] / _0x6695x21;
var _0x6695x25 = 0x0;
for (; _0x6695x25 <= _0x6695x21; _0x6695x25++) {
Render[_0x6695x23(0xfa)](_0x6695x1f, _0x6695x20, _0x6695x25, [_0x6695x22[0x0], _0x6695x22[0x1], _0x6695x22[0x2], _0x6695x22[0x3] - _0x6695x24 * _0x6695x25])
}
}, _locations = require(_0xae71a7(0xaf));
var locations = _locations[_0xae71a7(0x6f)],
map_cache = [],
weapon = Entity[_0xae71a7(0x77)](Entity[_0xae71a7(0xda)](Entity[_0xae71a7(0xcd)]()));
if (weapon == _0xae71a7(0xc1)) {
weapon = _0xae71a7(0xbb)
};
map_cache = locations[_0xb3ab[54]](function (_0x6695x29) {
var _0x6695x2a = _0xae71a7;
return _0x6695x29[0x0] == World[_0x6695x2a(0xbc)]() && _0x6695x29[0x3][_0xb3ab[164]]() == weapon_console_name[weapon]
});
function get_icon(_0x6695x2c) {
var _0x6695x2d = _0xae71a7,
_0x6695x2e = _0xb3ab[156];
switch (_0x6695x2c) {
case _0x6695x2d(0x74):
_0x6695x2e = _0xb3ab[165];
break;
case _0x6695x2d(0xa8):
_0x6695x2e = _0xb3ab[166];
break;
case _0x6695x2d(0xbb):
_0x6695x2e = _0xb3ab[167];
break;
case _0x6695x2d(0xc1):
_0x6695x2e = _0xb3ab[167];
break;
case _0x6695x2d(0xde):
_0x6695x2e = _0xb3ab[168];
break;
case _0x6695x2d(0x9b):
_0x6695x2e = _0xb3ab[168];
break;
case _0xb3ab[169]:
_0x6695x2e = _0xb3ab[168];
break;
case _0xb3ab[170]:
_0x6695x2e = _0xb3ab[168];
break;
case _0x6695x2d(0xed):
_0x6695x2e = _0xb3ab[168];
break;
case _0x6695x2d(0xd1):
_0x6695x2e = _0xb3ab[168];
break;
default:
_0x6695x2e = _0xb3ab[156];
break
};
return _0x6695x2e
}
function draw() {
var _0x6695x30 = _0xae71a7;
if (UI[_0x6695x30(0xf3)](_0x6695x30(0xc2), _0x6695x30(0xb7), _0xb3ab[71], _0xb3ab[124])) {
var _0x6695x31 = UI[_0x6695x30(0xdc)](_0x6695x30(0xc2), _0x6695x30(0xb7), _0x6695x30(0xc3), _0x6695x30(0xd7)),
_0x6695x32 = UI[_0x6695x30(0xdc)](_0xb3ab[70], _0x6695x30(0xb7), _0x6695x30(0xc3), _0x6695x30(0x101)),
_0x6695x33 = UI[_0x6695x30(0xdc)](_0x6695x30(0xc2), _0x6695x30(0xb7), _0x6695x30(0xc3), _0x6695x30(0xd5))
} else {
var _0x6695x31 = [0x6b, 0x75, 0xff, 0xff],
_0x6695x32 = [0x6b, 0x75, 0xff, 0xff],
_0x6695x33 = [0xff, 0xff, 0xff, 0xff]
};
if (UI[_0x6695x30(0xf3)](_0x6695x30(0xc2), _0xb3ab[59], _0xb3ab[71], _0x6695x30(0xb3)) && UI[_0xb3ab[119]](_0x6695x30(0xc2), _0x6695x30(0xb7), _0xb3ab[71], _0xb3ab[49]) == !![]) {
var _0x6695x34 = Entity[_0x6695x30(0x77)](Entity[_0x6695x30(0xda)](Entity[_0x6695x30(0xcd)]()));
if (_0x6695x34 == _0x6695x30(0xc1)) {
_0x6695x34 = _0xb3ab[63]
};
map_cache = locations[_0xb3ab[54]](function (_0x6695x35) {
var _0x6695x36 = _0x6695x30;
return _0x6695x35[0x0] == World[_0x6695x36(0xbc)]() && _0x6695x35[0x3][_0xb3ab[164]]() == weapon_console_name[_0x6695x34]
});
if (map_cache[_0x6695x30(0xe2)] == 0x0) {
return
};
for (var _0x6695x37 in map_cache) {
var _0x6695x38 = Render[_0x6695x30(0xe3)]([map_cache[_0x6695x37][0x1][0x0], map_cache[_0x6695x37][0x1][0x1], map_cache[_0x6695x37][0x1][0x2] - 0x41]);
if (!map_cache[_0x6695x37][0x7] && !UI[_0x6695x30(0xf3)](_0x6695x30(0xc3), _0xb3ab[40])) {
continue
};
var _0x6695x39 = angle_to_vec(map_cache[_0x6695x37][0x2][0x0], map_cache[_0x6695x37][0x2][0x1]),
_0x6695x3a = map_cache[_0x6695x37][0x1];
_0x6695x39 = Render[_0x6695x30(0xe3)]([_0x6695x3a[0x0] + _0x6695x39[0x0] * 0x190, _0x6695x3a[0x1] + _0x6695x39[0x1] * 0x190, _0x6695x3a[0x2] + _0x6695x39[0x2] * 0x190]);
var _0x6695x3b = calc_dist(Entity[_0x6695x30(0x70)](Entity[_0x6695x30(0xcd)]()), map_cache[_0x6695x37][0x1]),
_0x6695x3c = Render[_0xb3ab[61]](map_cache[_0x6695x37][0x4], 0x8),
_0x6695x3d = Render[_0x6695x30(0xb9)](map_cache[_0x6695x37][0x5], 0x8);
Render[_0x6695x30(0x95)](_0x6695x38[0x0] + 0x15, _0x6695x38[0x1] - 7.85, 0x6, get_icon(_0x6695x34), [_0x6695x32[0x0], _0x6695x32[0x1], _0x6695x32[0x2], 0xff], 0x5), Render[_0x6695x30(0x95)](_0x6695x38[0x0] + 0x1e, _0x6695x38[0x1] - 6.85, 0x6, _0xb3ab[171], [_0x6695x32[0x0], _0x6695x32[0x1], _0x6695x32[0x2], 0xff], 0x8), Render[_0x6695x30(0x95)](_0x6695x38[0x0] + 0x1e, _0x6695x38[0x1] - 1.85, 0x6, _0xb3ab[171], [_0x6695x32[0x0], _0x6695x32[0x1], _0x6695x32[0x2], 0xff], 0x8), Render[_0x6695x30(0xb6)](_0x6695x38[0x0] + 0xa, _0x6695x38[0x1] - _0x6695x3c[0x1] / 1.5, _0x6695x3c[0x0] + 0x1c, _0x6695x3c[0x1] + 0xa, [0x0, 0x0, 0x0, 0x7d]), shadow(_0x6695x38[0x0] + 0x20, _0x6695x38[0x1] - 1.85, 0x0, map_cache[_0x6695x37][0x4], ![], undefined, [_0x6695x31[0x0], _0x6695x31[0x1], _0x6695x31[0x2], 0xff], 0x8);
if (_0x6695x3b > 0x46) {
continue
};
Render[_0x6695x30(0xb6)](_0x6695x39[0x0] + 0xa, _0x6695x39[0x1] - _0x6695x3c[0x1] / 1.5, _0x6695x3c[0x0] > _0x6695x3d[0x0] ? _0x6695x3c[0x0] + 0x7 : _0x6695x3d[0x0] + 0x5, _0x6695x3c[0x1] > _0x6695x3d[0x1] ? _0x6695x3c[0x1] + 0xf : _0x6695x3d[0x1] + 0xf, [0x0, 0x0, 0x0, 0x7d]), shadow(_0x6695x39[0x0] + 0xc, _0x6695x39[0x1] - 0x5, 0x0, map_cache[_0x6695x37][0x4], ![], undefined, [_0x6695x31[0x0], _0x6695x31[0x1], _0x6695x31[0x2], 0xff], 0x8), shadow(_0x6695x39[0x0] + 11.6, _0x6695x39[0x1] + 0x7, 0x0, map_cache[_0x6695x37][0x5], ![], undefined, [_0x6695x31[0x0], _0x6695x31[0x1], _0x6695x31[0x2], 0xff], 0x8), Render[_0x6695x30(0xfc)](_0x6695x39[0x0], _0x6695x39[0x1], 0x8, Math[_0xb3ab[93]](_0x6695x39[0x0] - Render[_0x6695x30(0x6b)]()[0x0] / 0x2) + Math[_0x6695x30(0xd9)](_0x6695x39[0x1] - Render[_0xb3ab[135]]()[0x1] / 0x2) <= 0x3 ? [0x0, 0xff, 0x0, 0x64] : [0xff, 0x0, 0x0, 0xff]), Render[_0x6695x30(0xfa)](_0x6695x39[0x0], _0x6695x39[0x1], 0x7, [0x0, 0x0, 0x0, 0x46]), Render[_0x6695x30(0xef)](Render[_0x6695x30(0x6b)]()[0x0] / 0x2, Render[_0x6695x30(0x6b)]()[0x1] / 0x2, _0x6695x39[0x0], _0x6695x39[0x1], [_0x6695x33[0x0], _0x6695x33[0x1], _0x6695x33[0x2], 0xeb])
}
}
}
Render[_0xae71a7(0xfc)] = function (_0x6695x3e, _0x6695x3f, _0x6695x40, _0x6695x41) {
var _0x6695x42 = _0xae71a7;
const _0x6695x43 = _0x6695x41[0x3] / _0x6695x40;
var _0x6695x44 = 0x0;
for (; _0x6695x44 <= _0x6695x40; _0x6695x44++) {
Render[_0x6695x42(0xfa)](_0x6695x3e, _0x6695x3f, _0x6695x44, [_0x6695x41[0x0], _0x6695x41[0x1], _0x6695x41[0x2], _0x6695x41[0x3] - _0x6695x43 * _0x6695x44])
}
};
function check_visibility() {
var _0x6695x46 = _0xae71a7;
if (map_cache[_0x6695x46(0xe2)] == 0x0 || World[_0xb3ab[172]]() == _0xb3ab[156]) {
return
};
var _0x6695x47 = Entity[_0x6695x46(0xcd)]();
eye_angles = Local[_0xb3ab[88]](), head = Entity[_0x6695x46(0xa2)](_0x6695x47, _0x6695x46(0x9f), _0xb3ab[99]), offset = Entity[_0xb3ab[38]](_0x6695x47, _0xb3ab[35], _0x6695x46(0xb4)), head = vector_add(head, [0x0, 0x0, offset[0x0]]);
for (var _0x6695x48 in map_cache) {
var _0x6695x49 = Trace[_0xb3ab[115]](_0x6695x47, head, map_cache[_0x6695x48][0x1]);
if (map_cache[_0x6695x48][0x7] == undefined) {
map_cache[_0x6695x48][_0x6695x46(0xac)](_0x6695x49[0x1] == 0x1)
} else {
map_cache[_0x6695x48][0x7] = _0x6695x49[0x1] == 0x1
}
}
}
function fix_move(_0x6695x4b, _0x6695x4c, _0x6695x4d) {
var _0x6695x4e = _0xae71a7,
_0x6695x4f = function (_0x6695x53) {
return _0x6695x53 / 0xb4 * Math[_0xb3ab[173]]
},
_0x6695x50, _0x6695x51, _0x6695x52;
if (_0x6695x4c[0x1] < 0x0) {
_0x6695x50 = 0x168 + _0x6695x4c[0x1]
} else {
_0x6695x50 = _0x6695x4c[0x1]
};
if (_0x6695x4b[0x1] < 0x0) {
_0x6695x51 = 0x168 + _0x6695x4b[0x1]
} else {
_0x6695x51 = _0x6695x4b[0x1]
};
if (_0x6695x51 < _0x6695x50) {
_0x6695x52 = Math[_0x6695x4e(0xd9)](_0x6695x51 - _0x6695x50)
} else {
_0x6695x52 = 0x168 - Math[_0x6695x4e(0xd9)](_0x6695x50 - _0x6695x51)
};
return [Math[_0x6695x4e(0x90)](_0x6695x4f(_0x6695x52)) * _0x6695x4d[0x0] + Math[_0x6695x4e(0x90)](_0x6695x4f(_0x6695x52 + 0x5a)) * _0x6695x4d[0x1], Math[_0x6695x4e(0xdd)](_0x6695x4f(_0x6695x52)) * _0x6695x4d[0x0] + Math[_0xb3ab[97]](_0x6695x4f(_0x6695x52 + 0x5a)) * _0x6695x4d[0x1], 0x0]
}
function move_forward(_0x6695x55) {
var _0x6695x56 = _0xae71a7,
_0x6695x57 = Local[_0x6695x56(0xd4)](),
_0x6695x58 = [0x1c2, 0x0, 0x0],
_0x6695x59 = fix_move(_0x6695x55, _0x6695x57, _0x6695x58);
UserCMD[_0x6695x56(0xc0)](_0x6695x59), UserCMD[_0x6695x56(0xcc)](_0x6695x55, ![])
}
function move_right(_0x6695x5b) {
var _0x6695x5c = _0xae71a7,
_0x6695x5d = Local[_0x6695x5c(0xd4)](),
_0x6695x5e = [0x0, 0x1c2, 0x0],
_0x6695x5f = fix_move(_0x6695x5b, _0x6695x5d, _0x6695x5e);
UserCMD[_0x6695x5c(0xc0)](_0x6695x5f), UserCMD[_0xb3ab[80]](_0x6695x5b, ![])
}
function move_left(_0x6695x61) {
var _0x6695x62 = _0xae71a7,
_0x6695x63 = Local[_0x6695x62(0xd4)](),
_0x6695x64 = -0x1c2,
_0x6695x65 = [0x0, _0x6695x64, 0x0],
_0x6695x66 = fix_move(_0x6695x61, _0x6695x63, _0x6695x65);
UserCMD[_0x6695x62(0xc0)](_0x6695x66), UserCMD[_0x6695x62(0xcc)](_0x6695x61, ![])
}
var delays = [];
function Delay(_0x6695x69, _0x6695x6a, _0x6695x6b) {
var _0x6695x6c = _0xae71a7;
this[_0xb3ab[174]] = _0x6695x69, this[_0x6695x6c(0xa6)] = Globals[_0xb3ab[75]]() + _0x6695x69, this[_0x6695x6c(0x78)] = _0x6695x6a, this[_0x6695x6c(0xe6)] = 0x0, this[_0xb3ab[104]] = _0x6695x6b || 0x1, delays[_0x6695x6c(0xac)](this)
}
Delay[_0xb3ab[175]][_0xb3ab[23]] = function () {
var _0x6695x6d = _0xae71a7;
return this[_0x6695x6d(0x78)](), this[_0x6695x6d(0xe6)]++, this[_0xb3ab[42]] += this[_0xb3ab[174]], this[_0xb3ab[106]] >= this[_0x6695x6d(0xe4)]
};
function checkDelays() {
var _0x6695x6f = _0xae71a7;
currTime = Globals[_0x6695x6f(0xc7)](), delays[_0xb3ab[177]](function (_0x6695x70, _0x6695x71) {
var _0x6695x72 = _0x6695x6f;
currTime >= _0x6695x70[_0x6695x72(0xa6)] && _0x6695x70[_0x6695x72(0x93)]() && delays[_0xb3ab[176]](_0x6695x71, 0x1)
})
}
function stop_attack() {
var _0x6695x74 = _0xae71a7;
Cheat[_0x6695x74(0xd6)](_0xb3ab[146])
}
function stop_attack2() {
var _0x6695x76 = _0xae71a7;
Cheat[_0x6695x76(0xd6)](_0x6695x76(0x76)), Cheat[_0x6695x76(0xd6)](_0x6695x76(0xd3))
}
function move_on_key() {
var _0x6695x78 = _0xae71a7;
if (UI[_0x6695x78(0xf3)](_0x6695x78(0xc2), _0xb3ab[59], _0x6695x78(0xc3), _0x6695x78(0xb3)) && UI[_0x6695x78(0xf3)](_0x6695x78(0xc2), _0xb3ab[59], _0x6695x78(0xc3), _0xb3ab[49]) == !![]) {
if (map_cache[_0xb3ab[102]] == 0x0) {
return
};
if (!UI[_0x6695x78(0xc6)](_0x6695x78(0xc3), _0x6695x78(0xcf))) {
this[_0x6695x78(0xcb)] = ![], this[_0x6695x78(0xec)] = ![], this[_0x6695x78(0x72)] = 0x0, this[_0x6695x78(0x81)] = [], this[_0x6695x78(0x7b)] = ![], this[_0x6695x78(0xa0)] = ![], this[_0x6695x78(0xae)] = 0x0;
return
};
if (this[_0x6695x78(0x81)] == null) {
this[_0x6695x78(0x81)] = []
};
if (this[_0x6695x78(0xec)]) {
UserCMD[_0x6695x78(0xcc)](this[_0x6695x78(0x81)], ![]);
return
};
this[_0x6695x78(0x81)][_0x6695x78(0xe2)] && UserCMD[_0x6695x78(0xcc)](this[_0x6695x78(0x81)], ![]);
if (this[_0x6695x78(0x7b)] == null) {
this[_0x6695x78(0x7b)] = ![]
};
if (this[_0x6695x78(0x72)] == null) {
this[_0xb3ab[142]] = 0x0
};
if (this[_0x6695x78(0xcb)] == null) {
this[_0xb3ab[79]] = ![]
};
if (this[_0x6695x78(0x7a)] == null) {
this[_0x6695x78(0x7a)] = []
};
if (this[_0xb3ab[112]] == null) {
this[_0x6695x78(0xec)] = ![]
};
if (this[_0xb3ab[50]] == null) {
this[_0x6695x78(0xae)] = 0x0
};
var _0x6695x79 = Entity[_0xb3ab[140]](Entity[_0x6695x78(0xcd)]()),
_0x6695x7a = map_cache[_0x6695x78(0x91)](function (_0x6695x7b, _0x6695x7c) {
return calc_dist(_0x6695x79, _0x6695x7b[0x1]) - calc_dist(_0x6695x79, _0x6695x7c[0x1])
})[0x0];
this[_0x6695x78(0x7a)][_0x6695x78(0xe2)] && (_0x6695x7a = this[_0x6695x78(0x7a)]);
if (calc_dist(_0x6695x79, _0x6695x7a[0x1]) > 0xc8 && !this[_0x6695x78(0xec)]) {
return
};
var _0x6695x7d = move_to_target(_0x6695x7a[0x1]);
if (_0x6695x7d || this[_0x6695x78(0xcb)]) {
if (_0x6695x7a[0x5] == _0x6695x78(0x7d)) {
Cheat[_0x6695x78(0xd6)](_0x6695x78(0xc5)), this[_0x6695x78(0x7b)] = !![], this[_0x6695x78(0xec)] = !![], this[_0x6695x78(0x81)] = _0x6695x7a[0x2], new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x64, stop_attack)
} else {
if (_0x6695x7a[0x5] == _0xb3ab[92]) {
if (!this[_0x6695x78(0x7a)][_0x6695x78(0xe2)]) {
this[_0x6695x78(0x7a)] = _0x6695x7a
};
this[_0xb3ab[142]] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]());
this[_0x6695x78(0xcb)] = !![];
if (this[_0x6695x78(0xae)] == 0x0) {
this[_0xb3ab[50]] = Globals[_0xb3ab[111]]()
};
move_forward(_0x6695x7a[0x2]), this[_0x6695x78(0xcb)] && Globals[_0x6695x78(0xeb)]() - this[_0x6695x78(0xae)] > _0x6695x7a[0x6] && (!this[_0xb3ab[151]] && (Cheat[_0xb3ab[90]](_0x6695x78(0xc5)), new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x64, stop_attack)), Globals[_0x6695x78(0xeb)]() - this[_0x6695x78(0xae)] > _0x6695x7a[0x6] + 0x8 && (this[_0x6695x78(0xcb)] = ![], this[_0x6695x78(0x7b)] = ![], this[_0x6695x78(0x7a)] = [], this[_0x6695x78(0xec)] = !![], this[_0xb3ab[5]] = _0x6695x7a[0x2], this[_0x6695x78(0xae)] = 0x0))
} else {
if (_0x6695x7a[0x5] == _0x6695x78(0xfd)) {
if (!this[_0x6695x78(0x7a)][_0x6695x78(0xe2)]) {
this[_0x6695x78(0x7a)] = _0x6695x7a
};
this[_0x6695x78(0x72)] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]());
this[_0x6695x78(0xcb)] = !![];
if (this[_0xb3ab[50]] == 0x0) {
this[_0x6695x78(0xae)] = Globals[_0xb3ab[111]]()
};
move_right(_0x6695x7a[0x2]), this[_0x6695x78(0xcb)] && Globals[_0x6695x78(0xeb)]() - this[_0xb3ab[50]] > _0x6695x7a[0x6] - 0x2 && (!this[_0x6695x78(0x7b)] && (Cheat[_0x6695x78(0xd6)](_0x6695x78(0xc5)), new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0xb3ab[52]]() / 0x64, stop_attack)), Globals[_0x6695x78(0xeb)]() - this[_0xb3ab[50]] > _0x6695x7a[0x6] + 0x8 && (this[_0x6695x78(0xcb)] = ![], this[_0x6695x78(0x7b)] = ![], this[_0x6695x78(0x7a)] = [], this[_0x6695x78(0xec)] = !![], this[_0x6695x78(0x81)] = _0x6695x7a[0x2], this[_0xb3ab[50]] = 0x0))
} else {
if (_0x6695x7a[0x5] == _0x6695x78(0x83)) {
if (!this[_0x6695x78(0x7a)][_0x6695x78(0xe2)]) {
this[_0x6695x78(0x7a)] = _0x6695x7a
};
this[_0x6695x78(0x72)] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]());
this[_0x6695x78(0xcb)] = !![];
if (this[_0x6695x78(0xae)] == 0x0) {
this[_0x6695x78(0xae)] = Globals[_0x6695x78(0xeb)]()
};
move_left(_0x6695x7a[0x2]), this[_0xb3ab[79]] && Globals[_0x6695x78(0xeb)]() - this[_0xb3ab[50]] > _0x6695x7a[0x6] - 0x2 && (!this[_0x6695x78(0x7b)] && (Cheat[_0x6695x78(0xd6)](_0x6695x78(0xc5)), new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x64, stop_attack)), Globals[_0xb3ab[111]]() - this[_0x6695x78(0xae)] > _0x6695x7a[0x6] + 0x8 && (this[_0x6695x78(0xcb)] = ![], this[_0xb3ab[151]] = ![], this[_0x6695x78(0x7a)] = [], this[_0x6695x78(0xec)] = !![], this[_0x6695x78(0x81)] = _0x6695x7a[0x2], this[_0xb3ab[50]] = 0x0))
} else {
if (_0x6695x7a[0x5] == _0x6695x78(0x85)) {
UserCMD[_0x6695x78(0xa9)](), Cheat[_0x6695x78(0xd6)](_0x6695x78(0xc5)), this[_0x6695x78(0x81)] = _0x6695x7a[0x2], this[_0x6695x78(0xec)] = !![], this[_0xb3ab[151]] = !![], new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x1, stop_attack)
} else {
if (_0x6695x7a[0x5] == _0xb3ab[15]) {
if (!this[_0x6695x78(0x7a)][_0xb3ab[102]]) {
this[_0x6695x78(0x7a)] = _0x6695x7a
};
this[_0x6695x78(0x72)] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]());
var _0x6695x7e = angle_to_vec(_0x6695x7a[0x2][0x0], _0x6695x7a[0x2][0x1]);
_0x6695x7e = vec_mul_fl(_0x6695x7e, 0x82), this[_0x6695x78(0xcb)] = !![], move_forward(_0x6695x7a[0x2]);
var _0x6695x7f = vector_sub(vector_add(_0x6695x7e, _0x6695x7a[0x1]), Entity[_0x6695x78(0x70)](Entity[_0x6695x78(0xcd)]())),
_0x6695x80 = Math[_0xb3ab[118]](_0x6695x7f[0x0], _0x6695x7f[0x1]);
_0x6695x80 < 0x50 && (UserCMD[_0x6695x78(0xa9)](), Cheat[_0x6695x78(0xd6)](_0xb3ab[73]), this[_0x6695x78(0x7b)] = !![], this[_0x6695x78(0xcb)] = ![], this[_0x6695x78(0x7a)] = [], this[_0x6695x78(0xec)] = !![], this[_0xb3ab[5]] = _0x6695x7a[0x2], new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x64, stop_attack))
} else {
if (_0x6695x7a[0x5] == _0xb3ab[178]) {
if (!this[_0x6695x78(0x7a)][_0xb3ab[102]]) {
this[_0x6695x78(0x7a)] = _0x6695x7a
};
this[_0x6695x78(0x72)] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]());
var _0x6695x7e = angle_to_vec(_0x6695x7a[0x2][0x0], _0x6695x7a[0x2][0x1]);
_0x6695x7e = vec_mul_fl(_0x6695x7e, 0x3c), this[_0x6695x78(0xcb)] = !![], move_forward(_0x6695x7a[0x2]);
var _0x6695x7f = vector_sub(vector_add(_0x6695x7e, _0x6695x7a[0x1]), Entity[_0x6695x78(0x70)](Entity[_0x6695x78(0xcd)]())),
_0x6695x80 = Math[_0x6695x78(0xf2)](_0x6695x7f[0x0], _0x6695x7f[0x1]);
_0x6695x80 < 0x32 && (UserCMD[_0xb3ab[45]](), Cheat[_0xb3ab[90]](_0xb3ab[73]), this[_0x6695x78(0x7b)] = !![], this[_0x6695x78(0xcb)] = ![], this[_0x6695x78(0x7a)] = [], this[_0x6695x78(0xec)] = !![], this[_0x6695x78(0x81)] = _0x6695x7a[0x2], new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x64, stop_attack))
} else {
if (_0x6695x7a[0x5] == _0x6695x78(0x6e)) {
this[_0x6695x78(0x72)] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]()), Cheat[_0xb3ab[90]](_0xb3ab[73]), Cheat[_0xb3ab[90]](_0x6695x78(0xe9)), Globals[_0xb3ab[111]]() - this[_0x6695x78(0x72)] > 0x18 && (new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0x6695x78(0xb0)]() / 0x12c, stop_attack2), this[_0x6695x78(0x7b)] = !![], this[_0x6695x78(0xec)] = !![], this[_0x6695x78(0x81)] = _0x6695x7a[0x2])
} else {
_0x6695x7a[0x5] == _0x6695x78(0x87) && (this[_0x6695x78(0x72)] == 0x0 && (this[_0x6695x78(0x72)] = Globals[_0x6695x78(0xeb)]()), Cheat[_0x6695x78(0xd6)](_0x6695x78(0xc5)), Cheat[_0x6695x78(0xd6)](_0xb3ab[109]), Globals[_0xb3ab[111]]() - this[_0x6695x78(0x72)] > 0x1e && (new Delay(Global[_0x6695x78(0xb0)]() * 0x2 - Global[_0xb3ab[52]]() / 0x12c, stop_attack2), this[_0x6695x78(0x7b)] = !![], UserCMD[_0xb3ab[45]](), this[_0x6695x78(0xec)] = !![], this[_0x6695x78(0x81)] = _0x6695x7a[0x2]))
}
}
}
}
}
}
}
}
} else {
this[_0xb3ab[79]] = ![], this[_0xb3ab[150]] = [], this[_0xb3ab[112]] = ![], this[_0x6695x78(0x72)] = 0x0, this[_0x6695x78(0xa0)] = ![], this[_0x6695x78(0xae)] = 0x0
}
}
}
function on_local_connect() {
var _0x6695x82 = _0xae71a7;
Entity[_0x6695x82(0x75)](Entity[_0x6695x82(0x8c)](Event[_0xb3ab[17]](_0x6695x82(0x88)))) && (map_cache = locations[_0xb3ab[54]](function (_0x6695x83) {
return _0x6695x83[0x0] == World[_0xb3ab[64]]()
}))
}
function getAngles(_0x6695x85, _0x6695x86) {
var _0x6695x87 = _0xae71a7;
return newPos = vector_sub(_0x6695x86, _0x6695x85), xyDist = Math[_0x6695x87(0x8f)](newPos[0x0] * newPos[0x0] + newPos[0x1] * newPos[0x1]), yaw = Math[_0x6695x87(0x7f)](newPos[0x1], newPos[0x0]) * 0xb4 / Math[_0xb3ab[173]], pitch = Math[_0x6695x87(0x7f)](-newPos[0x2], xyDist) * 0xb4 / Math[_0xb3ab[173]], roll = 0x0, angles = [pitch, yaw, roll], angles
}
function vector_sub(_0x6695x89, _0x6695x8a) {
return [_0x6695x89[0x0] - _0x6695x8a[0x0], _0x6695x89[0x1] - _0x6695x8a[0x1], _0x6695x89[0x2] - _0x6695x8a[0x2]]
}
function degreesToRadians(_0x6695x8c) {
return _0x6695x8c * Math[_0xb3ab[173]] / 0xb4
}
function angle_to_vec(_0x6695x8e, _0x6695x8f) {
var _0x6695x90 = _0xae71a7,
_0x6695x91 = degreesToRadians(_0x6695x8e),
_0x6695x92 = degreesToRadians(_0x6695x8f),
_0x6695x93 = Math[_0x6695x90(0xdd)](_0x6695x91),
_0x6695x94 = Math[_0x6695x90(0x90)](_0x6695x91),
_0x6695x95 = Math[_0xb3ab[97]](_0x6695x92),
_0x6695x96 = Math[_0x6695x90(0x90)](_0x6695x92);
return [_0x6695x94 * _0x6695x96, _0x6695x94 * _0x6695x95, -_0x6695x93]
}
function vector_add(_0x6695x98, _0x6695x99) {
return newVec = [_0x6695x98[0x0] + _0x6695x99[0x0], _0x6695x98[0x1] + _0x6695x99[0x1], _0x6695x98[0x2] + _0x6695x99[0x2]], newVec
}
function shadow(_0x6695x9b, _0x6695x9c, _0x6695x9d, _0x6695x9e, _0x6695x9f, _0x6695xa0, _0x6695xa1, _0x6695xa2) {
var _0x6695xa3 = _0xae71a7;
_0x6695x9f ? (Render[_0x6695xa3(0x95)](_0x6695x9b + _0x6695xa2 / 0x7, _0x6695x9c + _0x6695xa2 / 0x7, _0x6695x9d, _0x6695x9e, [0x0, 0x0, 0x0, 0xff], _0x6695xa0), Render[_0xb3ab[25]](_0x6695x9b, _0x6695x9c, _0x6695x9d, _0x6695x9e, _0x6695xa1, _0x6695xa0)) : (Render[_0x6695xa3(0xee)](_0x6695x9b + _0x6695xa2 / 0x7, _0x6695x9c + _0x6695xa2 / 0x7, _0x6695x9d, _0x6695x9e, [0x0, 0x0, 0x0, 0xff], _0x6695xa2), Render[_0x6695xa3(0xee)](_0x6695x9b, _0x6695x9c, _0x6695x9d, _0x6695x9e, _0x6695xa1, _0x6695xa2))
}
function vec_mul_fl(_0x6695xa5, _0x6695xa6) {
return [_0x6695xa5[0x0] * _0x6695xa6, _0x6695xa5[0x1] * _0x6695xa6, _0x6695xa5[0x2] * _0x6695xa6]
}
function calc_dist(_0x6695xa8, _0x6695xa9) {
return x = _0x6695xa8[0x0] - _0x6695xa9[0x0], y = _0x6695xa8[0x1] - _0x6695xa9[0x1], z = _0x6695xa8[0x2] - _0x6695xa9[0x2], Math[_0xb3ab[19]](x * x + y * y + z * z)
}
function move_to_target(_0x6695xab, _0x6695xac) {
var _0x6695xad = _0xae71a7,
_0x6695xae = Entity[_0x6695xad(0xcd)](),
_0x6695xaf = Entity[_0x6695xad(0x70)](_0x6695xae);
_0x6695xaf[0x2] = Entity[_0x6695xad(0x8a)](_0x6695xae)[0x2];
var _0x6695xb0 = [_0x6695xab[0x0] - _0x6695xaf[0x0], _0x6695xab[0x1] - _0x6695xaf[0x1], _0x6695xab[0x2] - _0x6695xaf[0x2]],
_0x6695xb1 = Local[_0x6695xad(0xd4)]()[0x1],
_0x6695xb2 = [],
_0x6695xb3 = 0x14;
_0x6695xb2[0x0] = (Math[_0x6695xad(0xdd)](_0x6695xb1 / 0xb4 * Math[_0xb3ab[173]]) * _0x6695xb0[0x1] + Math[_0x6695xad(0x90)](_0x6695xb1 / 0xb4 * Math[_0xb3ab[173]]) * _0x6695xb0[0x0]) * _0x6695xb3, _0x6695xb2[0x1] = (Math[_0xb3ab[97]](_0x6695xb1 / 0xb4 * Math[_0xb3ab[173]]) * _0x6695xb0[0x0] + Math[_0x6695xad(0x90)](_0x6695xb1 / 0xb4 * Math[_0xb3ab[173]]) * -_0x6695xb0[0x1]) * _0x6695xb3, _0x6695xb2[0x2] = 0x0;
var _0x6695xb4 = Math[_0x6695xad(0x8f)](_0x6695xb0[0x0] * _0x6695xb0[0x0] + _0x6695xb0[0x1] * _0x6695xb0[0x1] + _0x6695xb0[0x2] * _0x6695xb0[0x2]),
_0x6695xb5 = Entity[_0x6695xad(0xa2)](_0x6695xae, _0x6695xad(0xf4), _0xb3ab[78]),
_0x6695xb6 = Math[_0x6695xad(0x8f)](_0x6695xb5[0x0] * _0x6695xb5[0x0] + _0x6695xb5[0x1] * _0x6695xb5[0x1] + _0x6695xb5[0x2] * _0x6695xb5[0x2]);
return UserCMD[_0x6695xad(0xc0)](_0x6695xb2), _0x6695xb4 < (_0x6695xac ? _0x6695xac : 0x1) && (_0x6695xb6 < 0x2 || _0x6695xac)
}
var map_cache_wall = [],
weapon = Entity[_0xae71a7(0x77)](Entity[_0xb3ab[94]](Entity[_0xae71a7(0xcd)]()));
if (weapon == _0xb3ab[69]) {
weapon = _0xae71a7(0xbb)
};
map_cache_wall = locations[_0xae71a7(0xb2)](function (_0x6695xb8) {
return _0x6695xb8[0x0] == World[_0xb3ab[64]]() && _0x6695xb8[0x3][_0xb3ab[164]]() == wallbang_console_name[weapon]
});
function draw123() {
var _0x6695xba = _0xae71a7;
if (UI[_0xb3ab[119]](_0x6695xba(0xc2), _0x6695xba(0xb7), _0x6695xba(0xc3), _0x6695xba(0xf8))) {
var _0x6695xbb = UI[_0xb3ab[96]](_0x6695xba(0xc2), _0x6695xba(0xb7), _0x6695xba(0xc3), _0x6695xba(0xd7)),
_0x6695xbc = UI[_0x6695xba(0xdc)](_0x6695xba(0xc2), _0xb3ab[59], _0x6695xba(0xc3), _0x6695xba(0x101)),
_0x6695xbd = UI[_0xb3ab[96]](_0x6695xba(0xc2), _0x6695xba(0xb7), _0x6695xba(0xc3), _0x6695xba(0xd5))
} else {
var _0x6695xbb = [0x6b, 0x75, 0xff, 0xff],
_0x6695xbc = [0x6b, 0x75, 0xff, 0xff],
_0x6695xbd = [0xff, 0xff, 0xff, 0xff]
};
if (UI[_0x6695xba(0xf3)](_0x6695xba(0xc2), _0xb3ab[59], _0x6695xba(0xc3), _0xb3ab[62]) && UI[_0xb3ab[119]](_0x6695xba(0xc2), _0x6695xba(0xb7), _0x6695xba(0xc3), _0x6695xba(0xad)) == !![]) {
var _0x6695xbe = Entity[_0x6695xba(0x77)](Entity[_0xb3ab[94]](Entity[_0x6695xba(0xcd)]()));
if (_0x6695xbe == _0xb3ab[69]) {
_0x6695xbe = _0xb3ab[63]
};
map_cache_wall = locations[_0x6695xba(0xb2)](function (_0x6695xbf) {
var _0x6695xc0 = _0x6695xba;
return _0x6695xbf[0x0] == World[_0x6695xc0(0xbc)]() && _0x6695xbf[0x3][_0xb3ab[164]]() == wallbang_console_name[_0x6695xbe]
});
if (map_cache_wall[_0x6695xba(0xe2)] == 0x0) {
return
};
for (var _0x6695xc1 in map_cache_wall) {
var _0x6695xc2 = Render[_0xb3ab[103]]([map_cache_wall[_0x6695xc1][0x1][0x0], map_cache_wall[_0x6695xc1][0x1][0x1], map_cache_wall[_0x6695xc1][0x1][0x2] - 0x41]);
if (!map_cache_wall[_0x6695xc1][0x7] && !UI[_0x6695xba(0xf3)](_0x6695xba(0xc3), _0x6695xba(0xfb))) {
continue
};
var _0x6695xc3 = angle_to_vec(map_cache_wall[_0x6695xc1][0x2][0x0], map_cache_wall[_0x6695xc1][0x2][0x1]),
_0x6695xc4 = map_cache_wall[_0x6695xc1][0x1];
_0x6695xc3 = Render[_0x6695xba(0xe3)]([_0x6695xc4[0x0] + _0x6695xc3[0x0] * 0x190, _0x6695xc4[0x1] + _0x6695xc3[0x1] * 0x190, _0x6695xc4[0x2] + _0x6695xc3[0x2] * 0x190]);
var _0x6695xc5 = calc_dist_wall(Entity[_0x6695xba(0x70)](Entity[_0x6695xba(0xcd)]()), map_cache_wall[_0x6695xc1][0x1]),
_0x6695xc6 = Render[_0x6695xba(0xb9)](map_cache_wall[_0x6695xc1][0x4], 0x8),
_0x6695xc7 = Render[_0x6695xba(0xb9)](map_cache_wall[_0x6695xc1][0x5], 0x8);
Render[_0x6695xba(0x95)](_0x6695xc2[0x0] + 0x15, _0x6695xc2[0x1] - 7.85, 0x6, get_icon(_0x6695xbe), [_0x6695xbc[0x0], _0x6695xbc[0x1], _0x6695xbc[0x2], 0xff], 0x5), Render[_0x6695xba(0x95)](_0x6695xc2[0x0] + 0x1e, _0x6695xc2[0x1] - 6.85, 0x6, _0xb3ab[171], [_0x6695xbc[0x0], _0x6695xbc[0x1], _0x6695xbc[0x2], 0xff], 0x8), Render[_0x6695xba(0x95)](_0x6695xc2[0x0] + 0x1e, _0x6695xc2[0x1] - 1.85, 0x6, _0xb3ab[171], [_0x6695xbc[0x0], _0x6695xbc[0x1], _0x6695xbc[0x2], 0xff], 0x8), Render[_0x6695xba(0xb6)](_0x6695xc2[0x0] + 0xa, _0x6695xc2[0x1] - _0x6695xc6[0x1] / 1.5, _0x6695xc6[0x0] + 0x1c, _0x6695xc6[0x1] + 0xa, [0x0, 0x0, 0x0, 0x7d]), shadow(_0x6695xc2[0x0] + 0x20, _0x6695xc2[0x1] - 1.85, 0x0, map_cache_wall[_0x6695xc1][0x4], ![], undefined, [_0x6695xbb[0x0], _0x6695xbb[0x1], _0x6695xbb[0x2], 0xff], 0x8);
if (_0x6695xc5 > 0x46) {
continue
};
Render[_0xb3ab[58]](_0x6695xc3[0x0] + 0xa, _0x6695xc3[0x1] - _0x6695xc6[0x1] / 1.5, _0x6695xc6[0x0] > _0x6695xc7[0x0] ? _0x6695xc6[0x0] + 0x7 : _0x6695xc7[0x0] + 0x5, _0x6695xc6[0x1] > _0x6695xc7[0x1] ? _0x6695xc6[0x1] + 0xf : _0x6695xc7[0x1] + 0xf, [0x0, 0x0, 0x0, 0x7d]), shadow(_0x6695xc3[0x0] + 0xc, _0x6695xc3[0x1] - 0x5, 0x0, map_cache_wall[_0x6695xc1][0x4], ![], undefined, [_0x6695xbb[0x0], _0x6695xbb[0x1], _0x6695xbb[0x2], 0xff], 0x8), shadow(_0x6695xc3[0x0] + 11.6, _0x6695xc3[0x1] + 0x7, 0x0, map_cache_wall[_0x6695xc1][0x5], ![], undefined, [_0x6695xbb[0x0], _0x6695xbb[0x1], _0x6695xbb[0x2], 0xff], 0x8), Render[_0x6695xba(0xfc)](_0x6695xc3[0x0], _0x6695xc3[0x1], 0x8, Math[_0x6695xba(0xd9)](_0x6695xc3[0x0] - Render[_0x6695xba(0x6b)]()[0x0] / 0x2) + Math[_0x6695xba(0xd9)](_0x6695xc3[0x1] - Render[_0x6695xba(0x6b)]()[0x1] / 0x2) <= 0x3 ? [0x0, 0xff, 0x0, 0x64] : [0xff, 0x0, 0x0, 0xff]), Render[_0xb3ab[126]](_0x6695xc3[0x0], _0x6695xc3[0x1], 0x7, [0x0, 0x0, 0x0, 0x46]), Render[_0x6695xba(0xef)](Render[_0xb3ab[135]]()[0x0] / 0x2, Render[_0x6695xba(0x6b)]()[0x1] / 0x2, _0x6695xc3[0x0], _0x6695xc3[0x1], [_0x6695xbd[0x0], _0x6695xbd[0x1], _0x6695xbd[0x2], 0xeb])
}
}
}
function check_visibility_wall() {
var _0x6695xc9 = _0xae71a7;
if (map_cache_wall[_0xb3ab[102]] == 0x0 || World[_0xb3ab[172]]() == _0xb3ab[156]) {
return
};
var _0x6695xca = Entity[_0x6695xc9(0xcd)]();
eye_angles = Local[_0xb3ab[88]](), head = Entity[_0xb3ab[38]](_0x6695xca, _0x6695xc9(0x9f), _0x6695xc9(0xdf)), offset = Entity[_0x6695xc9(0xa2)](_0x6695xca, _0xb3ab[35], _0x6695xc9(0xb4)), head = vector_add(head, [0x0, 0x0, offset[0x0]]);
for (var _0x6695xcb in map_cache_wall) {
var _0x6695xcc = Trace[_0xb3ab[115]](_0x6695xca, head, map_cache_wall[_0x6695xcb][0x1]);
if (map_cache_wall[_0x6695xcb][0x7] == undefined) {
map_cache_wall[_0x6695xcb][_0x6695xc9(0xac)](_0x6695xcc[0x1] == 0x1)
} else {
map_cache_wall[_0x6695xcb][0x7] = _0x6695xcc[0x1] == 0x1
}
}
}
function move_on_key_wall() {
var _0x6695xce = _0xae71a7;
if (UI[_0x6695xce(0xf3)](_0x6695xce(0xc2), _0xb3ab[59], _0x6695xce(0xc3), _0x6695xce(0xba)) && UI[_0x6695xce(0xf3)](_0x6695xce(0xc2), _0xb3ab[59], _0x6695xce(0xc3), _0x6695xce(0xad)) == !![]) {
if (map_cache_wall[_0x6695xce(0xe2)] == 0x0) {
return
};
if (!UI[_0x6695xce(0xc6)](_0x6695xce(0xc3), _0x6695xce(0xcf))) {
this[_0x6695xce(0xcb)] = ![], this[_0x6695xce(0xec)] = ![], this[_0xb3ab[5]] = [];
return
};
if (this[_0x6695xce(0x81)] == null) {
this[_0x6695xce(0x81)] = []
};
if (this[_0xb3ab[112]]) {
UserCMD[_0x6695xce(0xcc)](this[_0x6695xce(0x81)], ![]);
return
};
this[_0x6695xce(0x81)][_0xb3ab[102]] && UserCMD[_0x6695xce(0xcc)](this[_0x6695xce(0x81)], ![]);
if (this[_0x6695xce(0xcb)] == null) {
this[_0xb3ab[79]] = ![]
};
if (this[_0x6695xce(0x7e)] == null) {
this[_0x6695xce(0x7e)] = []
};
if (this[_0x6695xce(0xec)] == null) {
this[_0xb3ab[112]] = ![]
};
var _0x6695xcf = Entity[_0x6695xce(0x70)](Entity[_0x6695xce(0xcd)]()),
_0x6695xd0 = map_cache_wall[_0x6695xce(0x91)](function (_0x6695xd1, _0x6695xd2) {
return calc_dist_wall(_0x6695xcf, _0x6695xd1[0x1]) - calc_dist_wall(_0x6695xcf, _0x6695xd2[0x1])
})[0x0];
this[_0x6695xce(0x7e)][_0x6695xce(0xe2)] && (_0x6695xd0 = this[_0x6695xce(0x7e)]);
if (calc_dist_wall(_0x6695xcf, _0x6695xd0[0x1]) > 0xc8 && !this[_0xb3ab[112]]) {
return
};
var _0x6695xd3 = move_to_target(_0x6695xd0[0x1]);
_0x6695xd3 || this[_0x6695xce(0xcb)] ? _0x6695xd0[0x5] == _0xb3ab[108] && (this[_0x6695xce(0xec)] = !![], this[_0x6695xce(0x81)] = _0x6695xd0[0x2]) : this[_0x6695xce(0xec)] = ![]
}
}
function on_local_connect() {
var _0x6695xd4 = _0xae71a7;
Entity[_0xb3ab[145]](Entity[_0x6695xd4(0x8c)](Event[_0x6695xd4(0x8d)](_0x6695xd4(0x88)))) && (map_cache_wall = locations[_0xb3ab[54]](function (_0x6695xd5) {
var _0x6695xd6 = _0x6695xd4;
return _0x6695xd5[0x0] == World[_0x6695xd6(0xbc)]()
}))
}
function getAngles(_0x6695xd7, _0x6695xd8) {
var _0x6695xd9 = _0xae71a7;
return newPos = vector_sub(_0x6695xd8, _0x6695xd7), xyDist = Math[_0xb3ab[19]](newPos[0x0] * newPos[0x0] + newPos[0x1] * newPos[0x1]), yaw = Math[_0x6695xd9(0x7f)](newPos[0x1], newPos[0x0]) * 0xb4 / Math[_0xb3ab[173]], pitch = Math[_0xb3ab[3]](-newPos[0x2], xyDist) * 0xb4 / Math[_0xb3ab[173]], roll = 0x0, angles = [pitch, yaw, roll], angles
}
function vector_sub(_0x6695xda, _0x6695xdb) {
return [_0x6695xda[0x0] - _0x6695xdb[0x0], _0x6695xda[0x1] - _0x6695xdb[0x1], _0x6695xda[0x2] - _0x6695xdb[0x2]]
}
function degreesToRadians(_0x6695xdc) {
return _0x6695xdc * Math[_0xb3ab[173]] / 0xb4
}
function angle_to_vec(_0x6695xdd, _0x6695xde) {
var _0x6695xdf = _0xae71a7,
_0x6695xe0 = degreesToRadians(_0x6695xdd),
_0x6695xe1 = degreesToRadians(_0x6695xde),
_0x6695xe2 = Math[_0x6695xdf(0xdd)](_0x6695xe0),
_0x6695xe3 = Math[_0x6695xdf(0x90)](_0x6695xe0),
_0x6695xe4 = Math[_0x6695xdf(0xdd)](_0x6695xe1),
_0x6695xe5 = Math[_0x6695xdf(0x90)](_0x6695xe1);
return [_0x6695xe3 * _0x6695xe5, _0x6695xe3 * _0x6695xe4, -_0x6695xe2]
}
function vector_add(_0x6695xe6, _0x6695xe7) {
return newVec = [_0x6695xe6[0x0] + _0x6695xe7[0x0], _0x6695xe6[0x1] + _0x6695xe7[0x1], _0x6695xe6[0x2] + _0x6695xe7[0x2]], newVec
}
function shadow(_0x6695xe8, _0x6695xe9, _0x6695xea, _0x6695xeb, _0x6695xec, _0x6695xed, _0x6695xee, _0x6695xef) {
var _0x6695xf0 = _0xae71a7;
_0x6695xec ? (Render[_0x6695xf0(0x95)](_0x6695xe8 + _0x6695xef / 0x7, _0x6695xe9 + _0x6695xef / 0x7, _0x6695xea, _0x6695xeb, [0x0, 0x0, 0x0, 0xff], _0x6695xed), Render[_0x6695xf0(0x95)](_0x6695xe8, _0x6695xe9, _0x6695xea, _0x6695xeb, _0x6695xee, _0x6695xed)) : (Render[_0x6695xf0(0xee)](_0x6695xe8 + _0x6695xef / 0x7, _0x6695xe9 + _0x6695xef / 0x7, _0x6695xea, _0x6695xeb, [0x0, 0x0, 0x0, 0xff], _0x6695xef), Render[_0x6695xf0(0xee)](_0x6695xe8, _0x6695xe9, _0x6695xea, _0x6695xeb, _0x6695xee, _0x6695xef))
}
function vec_mul_fl(_0x6695xf1, _0x6695xf2) {
return [_0x6695xf1[0x0] * _0x6695xf2, _0x6695xf1[0x1] * _0x6695xf2, _0x6695xf1[0x2] * _0x6695xf2]
}
function calc_dist_wall(_0x6695xf4, _0x6695xf5) {
var _0x6695xf6 = _0xae71a7;
return x = _0x6695xf4[0x0] - _0x6695xf5[0x0], y = _0x6695xf4[0x1] - _0x6695xf5[0x1], z = _0x6695xf4[0x2] - _0x6695xf5[0x2], Math[_0x6695xf6(0x8f)](x * x + y * y + z * z)
}
function move_to_target(_0x6695xf7, _0x6695xf8) {
var _0x6695xf9 = _0xae71a7,
_0x6695xfa = Entity[_0x6695xf9(0xcd)](),
_0x6695xfb = Entity[_0xb3ab[140]](_0x6695xfa);
_0x6695xfb[0x2] = Entity[_0x6695xf9(0x8a)](_0x6695xfa)[0x2];
var _0x6695xfc = [_0x6695xf7[0x0] - _0x6695xfb[0x0], _0x6695xf7[0x1] - _0x6695xfb[0x1], _0x6695xf7[0x2] - _0x6695xfb[0x2]],
_0x6695xfd = Local[_0x6695xf9(0xd4)]()[0x1],
_0x6695xfe = [],
_0x6695xff = 0x14;
_0x6695xfe[0x0] = (Math[_0x6695xf9(0xdd)](_0x6695xfd / 0xb4 * Math[_0xb3ab[173]]) * _0x6695xfc[0x1] + Math[_0x6695xf9(0x90)](_0x6695xfd / 0xb4 * Math[_0xb3ab[173]]) * _0x6695xfc[0x0]) * _0x6695xff, _0x6695xfe[0x1] = (Math[_0x6695xf9(0xdd)](_0x6695xfd / 0xb4 * Math[_0xb3ab[173]]) * _0x6695xfc[0x0] + Math[_0xb3ab[20]](_0x6695xfd / 0xb4 * Math[_0xb3ab[173]]) * -_0x6695xfc[0x1]) * _0x6695xff, _0x6695xfe[0x2] = 0x0;
var _0x6695x100 = Math[_0x6695xf9(0x8f)](_0x6695xfc[0x0] * _0x6695xfc[0x0] + _0x6695xfc[0x1] * _0x6695xfc[0x1] + _0x6695xfc[0x2] * _0x6695xfc[0x2]),
_0x6695x101 = Entity[_0xb3ab[38]](_0x6695xfa, _0x6695xf9(0xf4), _0x6695xf9(0xca)),
_0x6695x102 = Math[_0x6695xf9(0x8f)](_0x6695x101[0x0] * _0x6695x101[0x0] + _0x6695x101[0x1] * _0x6695x101[0x1] + _0x6695x101[0x2] * _0x6695x101[0x2]);
return UserCMD[_0xb3ab[68]](_0x6695xfe), _0x6695x100 < (_0x6695xf8 ? _0x6695xf8 : 0x1) && (_0x6695x102 < 0x2 || _0x6695xf8)
}
function Main() {
var _0x6695x104 = _0xae71a7;
Cheat[_0x6695x104(0xf9)](_0x6695x104(0xa1), _0x6695x104(0xe0)), Cheat[_0xb3ab[125]](_0x6695x104(0xa1), _0x6695x104(0xce)), Cheat[_0x6695x104(0xf9)](_0x6695x104(0x94), _0xb3ab[179]), Cheat[_0x6695x104(0xf9)](_0x6695x104(0xa1), _0x6695x104(0xe1)), Cheat[_0x6695x104(0xf9)](_0x6695x104(0x94), _0x6695x104(0xd0)), Cheat[_0xb3ab[125]](_0xb3ab[24], _0x6695x104(0x73)), Cheat[_0x6695x104(0xf9)](_0x6695x104(0x94), _0x6695x104(0x89)), Cheat[_0xb3ab[125]](_0x6695x104(0xb1), _0x6695x104(0x9c)), Cheat[_0x6695x104(0xf9)](_0x6695x104(0x94), _0x6695x104(0x71))
}
Main()
Код:
_0x6695x11 = World[_0x6695xc(0xbc)]()
Давайте пройдемся до метода _0x6695xc что бы понять что там происходит.
Код:
var _0x6695xc = _0xae71a7
Что ж, не проблема, давайте пройдемся до _0xae71a7.
JavaScript:
var _0xae71a7 = _0x1569;
Что ж, давайте попробуем ещё раз.
Пройдемся до _0x1569.
JavaScript:
var _0x1569 = function (_0x6695x3, _0x6695x4) {
_0x6695x3 = _0x6695x3 - 0x6a;
var _0x6695x5 = _0x50d4[_0x6695x3];
return _0x6695x5
};
Давайте анализируем код функции.
Функция возвращает _0x6695x5 которая получается из _0x50d4[_0x6695x3] но перед этим происходит смещение _0x6695x3 по "оффсету" - 0x6a;
_0x50d4 является массивом ссылок на расшифрованные строки
Теперь мы знаем, что _0x6695xc(0xbc) = _0x50d4[0xbc - 0x6a].
Перегоним hex в dec что бы было удобнее анализировать код.
Пожалуйста, авторизуйтесь для просмотра ссылки.
0xbc = 1880x6a = 106
т.е _0x6695xc(0xbc) = _0x50d4[82].
-> Ураааа, мы деобфусцировали первую строку.
Не совсем.
Если посмотреть на остальные функции обфускатора, то сам массив проходит функцию обфускатора в которой его элементы меняются местами.
Давайте разберем эту функцию, но сначала начнем с того, что я вас спрошу как можно инициализировать функцию?
90% скажут
JavaScript:
function f() {
}
JavaScript:
var b = function() {
}
в своем деобфускаторе я назвал такие функции AUTO_CALLED.
Давайте посмотрим как она выглядит.
JavaScript:
(function (arg1, arg2) {
}(/*args*/0, 0));
В функциях обфускатора есть такая функция.Она вызывается сама по себе в non-function пространстве.
JavaScript:
(function (_0x6695x7, _0x6695x8) {
var _0x6695x9 = _0x1569;
while (!![]) {
try {
var _0x6695xa = -parseInt(_0x6695x9(0x100)) * -parseInt(_0x6695x9(0x9a)) + -parseInt(_0x6695x9(0x99)) + -parseInt(_0x6695x9(0xf1)) + parseInt(_0x6695x9(0xa7)) * -parseInt(_0x6695x9(0x79)) + parseInt(_0x6695x9(0x9d)) * parseInt(_0x6695x9(0x6c)) + -parseInt(_0x6695x9(0x6d)) * parseInt(_0x6695x9(0xaa)) + parseInt(_0x6695x9(0x9e));
if (_0x6695xa === _0x6695x8) {
break
} else {
_0x6695x7[_0xb3ab[48]](_0x6695x7[_0xb3ab[152]]())
}
} catch (_0x251d4e) {
_0x6695x7[_0xb3ab[48]](_0x6695x7[_0xb3ab[152]]())
}
}
}(_0x50d4, 0xb55b2))
Давайте просто скопируем в скрипт эту функцию вместе с массивом и посмотрим на массив после вызова этой функции.
//также эта функция вызывает другую функцию обфускатора так что ее мы тоже захватим с собой.
JavaScript:
var _0xb3ab = ["PrintChat", "Throw", "closest_wall", "atan2", "], ", "next_tick_ang", "AddCheckbox", "Runleft", "SetColor", "Jump+Throw", "AddColorPicker", "Jump+Half throw", "userid", "move_on_key_wall", "GetEyePosition", "Run+Jump+Throw", "GetEntityFromUserID", "GetInt", "SetValue", "sqrt", "cos", "sort", ", \"", "run", "CreateMove", "StringCustom", "Flashbang", "Name:", "setmenu", "497972iHWETO", "113pfvaWM", "awp", "on_local_connect", "1313092nQxNUz", "2460080qPgBWg", "CBasePlayer", "moved_base", "Draw", "GetProp", "AddDropdown", "Show nades on all map", "user", "resume", "29cyLiNr", "smoke grenade", "ForceJump", "1736ARBxhR", "High explosive grenade", "push", "Helpers", "run_start", "locations.js", "TickInterval", "player_connect_full", "filter", "Grenade helper", "m_vecViewOffset[2]", "\", ", "FilledRect", "JAVASCRIPT", "Print location", "TextSize", "Wallbang helper", "molotov", "GetMapName", "AddHotkey", "Move:", "toString", "SetMovement", "incendiary grenade", "Misc", "Script items", "AddLabel", "+attack", "IsHotkeyActive", "Curtime", "GetString", "Username", "m_vecVelocity[0]", "running", "SetAngles", "GetLocalPlayer", "draw123", "Activate helper", "check_visibility", "scar 20", "PrintColor", "-attack2", "GetViewAngles", "Line color", "ExecuteCommand", "Text color", "Run+Throw", "abs", "GetWeapon", "SetEnabled", "GetColor", "sin", "ssg 08", "m_vecOrigin", "helpersetup", "draw", "length", "WorldToScreen", "max", "flashbang", "times", "\x0A[\"", "wallbang", "+attack2", "Ticks:", "Tickcount", "ignore_input", "g3sg1", "String", "Line", "8294", "59431aqmSgd", "hypot", "GetValue", "DT_CSPlayer", "Password", "AddTextbox", " Helpers", "Custom color", "RegisterCallback", "FilledCircle", "Show wallbang on all map", "FadedCircle", "Runright", "],\x0A", " Add locations", "1780FjpEfJ", "Icon color", "Weapon type:", "GetScreenSize", "1jWyIif", "736ZdkWMy", "Half throw", "locations", "GetRenderOrigin", "checkDelays", "start_tick", "move_on_key", "high explosive grenade", "IsLocalPlayer", "-attack", "GetName", "func", "48151hJTXJR", "closest", "attacked", "shift", "Molotov", "Smoke", "AddSliderInt", "", "[", "]", "\"", "\",", " \"", "[\"", "],", "toLowerCase", "I", "J", "K", "S", "r8 revolver", "dealge", "|", "GetServerString", "PI", "delay", "prototype", "splice", "forEach", "Run+JumpThrow", "check_visibility_wall"];
var _0x50d4 = [_0xb3ab[0], _0xb3ab[1], _0xb3ab[2], _0xb3ab[3], _0xb3ab[4], _0xb3ab[5], _0xb3ab[6], _0xb3ab[7], _0xb3ab[8], _0xb3ab[9], _0xb3ab[10], _0xb3ab[11], _0xb3ab[12], _0xb3ab[13], _0xb3ab[14], _0xb3ab[15], _0xb3ab[16], _0xb3ab[17], _0xb3ab[18], _0xb3ab[19], _0xb3ab[20], _0xb3ab[21], _0xb3ab[22], _0xb3ab[23], _0xb3ab[24], _0xb3ab[25], _0xb3ab[26], _0xb3ab[27], _0xb3ab[28], _0xb3ab[29], _0xb3ab[30], _0xb3ab[31], _0xb3ab[32], _0xb3ab[33], _0xb3ab[34], _0xb3ab[35], _0xb3ab[36], _0xb3ab[37], _0xb3ab[38], _0xb3ab[39], _0xb3ab[40], _0xb3ab[41], _0xb3ab[42], _0xb3ab[43], _0xb3ab[44], _0xb3ab[45], _0xb3ab[46], _0xb3ab[47], _0xb3ab[48], _0xb3ab[49], _0xb3ab[50], _0xb3ab[51], _0xb3ab[52], _0xb3ab[53], _0xb3ab[54], _0xb3ab[55], _0xb3ab[56], _0xb3ab[57], _0xb3ab[58], _0xb3ab[59], _0xb3ab[60], _0xb3ab[61], _0xb3ab[62], _0xb3ab[63], _0xb3ab[64], _0xb3ab[65], _0xb3ab[66], _0xb3ab[67], _0xb3ab[68], _0xb3ab[69], _0xb3ab[70], _0xb3ab[71], _0xb3ab[72], _0xb3ab[73], _0xb3ab[74], _0xb3ab[75], _0xb3ab[76], _0xb3ab[77], _0xb3ab[78], _0xb3ab[79], _0xb3ab[80], _0xb3ab[81], _0xb3ab[82], _0xb3ab[83], _0xb3ab[84], _0xb3ab[85], _0xb3ab[86], _0xb3ab[87], _0xb3ab[88], _0xb3ab[89], _0xb3ab[90], _0xb3ab[91], _0xb3ab[92], _0xb3ab[93], _0xb3ab[94], _0xb3ab[95], _0xb3ab[96], _0xb3ab[97], _0xb3ab[98], _0xb3ab[99], _0xb3ab[100], _0xb3ab[101], _0xb3ab[102], _0xb3ab[103], _0xb3ab[104], _0xb3ab[105], _0xb3ab[106], _0xb3ab[107], _0xb3ab[108], _0xb3ab[109], _0xb3ab[110], _0xb3ab[111], _0xb3ab[112], _0xb3ab[113], _0xb3ab[114], _0xb3ab[115], _0xb3ab[116], _0xb3ab[117], _0xb3ab[118], _0xb3ab[119], _0xb3ab[120], _0xb3ab[121], _0xb3ab[122], _0xb3ab[123], _0xb3ab[124], _0xb3ab[125], _0xb3ab[126], _0xb3ab[127], _0xb3ab[128], _0xb3ab[129], _0xb3ab[130], _0xb3ab[131], _0xb3ab[132], _0xb3ab[133], _0xb3ab[134], _0xb3ab[135], _0xb3ab[136], _0xb3ab[137], _0xb3ab[138], _0xb3ab[139], _0xb3ab[140], _0xb3ab[141], _0xb3ab[142], _0xb3ab[143], _0xb3ab[144], _0xb3ab[145], _0xb3ab[146], _0xb3ab[147], _0xb3ab[148], _0xb3ab[149], _0xb3ab[150], _0xb3ab[151]];
var _0x1569 = function (_0x6695x3, _0x6695x4) {
_0x6695x3 = _0x6695x3 - 0x6a;
var _0x6695x5 = _0x50d4[_0x6695x3];
return _0x6695x5
};
var _0xae71a7 = _0x1569;
(function (_0x6695x7, _0x6695x8) {
var _0x6695x9 = _0x1569;
while (!![]) {
try {
var _0x6695xa = -parseInt(_0x6695x9(0x100)) * -parseInt(_0x6695x9(0x9a)) + -parseInt(_0x6695x9(0x99)) + -parseInt(_0x6695x9(0xf1)) + parseInt(_0x6695x9(0xa7)) * -parseInt(_0x6695x9(0x79)) + parseInt(_0x6695x9(0x9d)) * parseInt(_0x6695x9(0x6c)) + -parseInt(_0x6695x9(0x6d)) * parseInt(_0x6695x9(0xaa)) + parseInt(_0x6695x9(0x9e));
if (_0x6695xa === _0x6695x8) {
break
} else {
_0x6695x7[_0xb3ab[48]](_0x6695x7[_0xb3ab[152]]())
}
} catch (_0x251d4e) {
_0x6695x7[_0xb3ab[48]](_0x6695x7[_0xb3ab[152]]())
}
}
}(_0x50d4, 0xb55b2));
JavaScript:
function printArray()
{
for(int i = 0; i < _0x50d4.length; i++) {
//print _0x50d4[i] + " id -> " i;
}
}
Получим на выходе :
Форматирование (BB-код):
Weapon type: 0
GetScreenSize 1
1jWyIif 2
736ZdkWMy 3
Half throw 4
locations 5
GetRenderOrigin 6
checkDelays 7
start_tick 8
move_on_key 9
high explosive grenade 10
IsLocalPlayer 11
-attack 12
GetName 13
func 14
48151hJTXJR 15
closest 16
attacked 17
PrintChat 18
Throw 19
closest_wall 20
atan2 21
], 22
next_tick_ang 23
AddCheckbox 24
Runleft 25
SetColor 26
Jump+Throw 27
AddColorPicker 28
Jump+Half throw 29
userid 30
move_on_key_wall 31
GetEyePosition 32
Run+Jump+Throw 33
GetEntityFromUserID 34
GetInt 35
SetValue 36
sqrt 37
cos 38
sort 39
, " 40
run 41
CreateMove 42
StringCustom 43
Flashbang 44
Name: 45
setmenu 46
497972iHWETO 47
113pfvaWM 48
awp 49
on_local_connect 50
1313092nQxNUz 51
2460080qPgBWg 52
CBasePlayer 53
moved_base 54
Draw 55
GetProp 56
AddDropdown 57
Show nades on all map 58
user 59
resume 60
29cyLiNr 61
smoke grenade 62
ForceJump 63
1736ARBxhR 64
High explosive grenade 65
push 66
Helpers 67
run_start 68
locations.js 69
TickInterval 70
player_connect_full 71
filter 72
Grenade helper 73
m_vecViewOffset[2] 74
", 75
FilledRect 76
JAVASCRIPT 77
Print location 78
TextSize 79
Wallbang helper 80
molotov 81
GetMapName 82
AddHotkey 83
Move: 84
toString 85
SetMovement 86
incendiary grenade 87
Misc 88
Script items 89
AddLabel 90
+attack 91
IsHotkeyActive 92
Curtime 93
GetString 94
Username 95
m_vecVelocity[0] 96
running 97
SetAngles 98
GetLocalPlayer 99
draw123 100
Activate helper 101
check_visibility 102
scar 20 103
PrintColor 104
-attack2 105
GetViewAngles 106
Line color 107
ExecuteCommand 108
Text color 109
Run+Throw 110
abs 111
GetWeapon 112
SetEnabled 113
GetColor 114
sin 115
ssg 08 116
m_vecOrigin 117
helpersetup 118
draw 119
length 120
WorldToScreen 121
max 122
flashbang 123
times 124
[" 125
wallbang 126
+attack2 127
Ticks: 128
Tickcount 129
ignore_input 130
g3sg1 131
String 132
Line 133
8294 134
59431aqmSgd 135
hypot 136
GetValue 137
DT_CSPlayer 138
Password 139
AddTextbox 140
Helpers 141
Custom color 142
RegisterCallback 143
FilledCircle 144
Show wallbang on all map 145
FadedCircle 146
Runright 147
],
148
Add locations 149
1780FjpEfJ 150
Icon color 151
Как видим в 82 айди лежит GetMapName и получаем в итоге World["GetMapName"]()
Давайте ради теста расшифруем ещё 2 строки.
UI[_0xae71a7(0xf6)](_0xae71a7(0xf5)) ->
UI[_0xae71a7(246)](_0xae71a7(245)) -> вспоминаем про оффсет (-0x6a=106) те
UI[_0xae71a7(246-106)](_0xae71a7(245-106)) -> вспоминаем что делает наша функция ->
UI[_0x50d4[140]](_0x50d4[139]) т.е
UI["AddTextBox"]("Password");
**У меня есть идея для отличного обфускатора на динамичных массивах, кастом ремапом функций, динамичных функциях - call`ах, если кто то хочет отдать мне 5к что бы я сделал его, то добро пожаловать ко мне на страничку вк https://vk.com/retry_later
На этом тред подходит к концу.
Удачных деобфускаций, главное помнить, что деобфускацию нужно юзать только для крекинга и сливов, а не для паст в свои мега корды.
GLHF =)