Исследование ProxyShell 3.1.1. Скоро сдамся :((

Тема в разделе "WASM.RESEARCH", создана пользователем txtusername, 25 фев 2010.

  1. txtusername

    txtusername New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2010
    Сообщения:
    9
    Всем добрый день, первый раз в своей жизни пишу на форумах с вопросом о помощи, но продолжать дальше в одиночку нет сил. Вобщем дела обстоят так, ради спортивного интереса хотел разобрать программу Proxy Shell и очень увлекся этим процессом. Дело дошло то того,что:
    был разобран процесс генерации ключа для Standart версии;
    ---//----- Advansed версия;
    работа программы со Standart ключом

    НО при подключении к интернету адвансед версия программы понимает что ключ не тот, либо там база лежит либо.... не знаю что тогда.
    Видимые варианты решения проблемы:
    Блокировка обращения по адресу не помогает,так как оттуда берется еще и список proxy серверов
    Остается:
    Либо подмена ответа от сервера образно говоря с "0" на "1".
    Либо в качестве тестового режима(без ключа) можно заходить на 3 сайта, отсюда просматривается возможность замены с JNE на JE момента сверки разрешенных сайтов с тем на который пытаются зайти, ну или на JMP что бы работали все сайты.

    Главная проблема в непонятности мне функций которые программа использует для выхода в интернет(их список берется через ollydbg ->search for->names), да и честно говоря никогда не сталкивался с отладкой интернет связи. Так что прошу помоч мне с данным исследованием у кого есть возможность и желание.

    P.S. не работает тупая трассировка программы при наступлении момента, где поидее должен быть осуществлен выход в интернет, она уходит в цикл и непонятно как оттуда выбирается,такое впечатление что сама переходит в другой поток, но при нажатии паузы а потом F9 программа работает нормально. Ну вот вроде и все..
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    >Либо подмена ответа от сервера образно говоря с "0" на "1"
    Но если сервер проверяет ключ, то при несоответствии вполне ожидаемым для него решением было бы не отдавать список proxy, разве нет?
     
  3. txtusername

    txtusername New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2010
    Сообщения:
    9
    Нет, это не так. В "демо" режиме все равно можно заходить на 3 сайта, один из которых определяет ip на котором видно что программа работает и меняет их при нажатии на кнопку(перед этим взяв с сервера). На отрицательный ответ с сервера она пытается удалить этот ключ из реестра, но от этого я ее отучил.
     
  4. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    А у вас есть фаер? Если есть, то можно просто просмотреть куда она коннектится и запретить эти соединения. Либо пойти ещё дальше и посмотреть откуда вызывается этот код и исправить недоразумение.
     
  5. txtusername

    txtusername New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2010
    Сообщения:
    9
    Если прочитать мой первый пост внимательно, то там написано, что блокировка ip не поможет так как при его блокировке не берутся адреса прокси серверов, которые то очень и нужны; на счет места откуда это все вызывается я тоже написал, трасировкой дойти не могу так так сбиdается отладчик, а в функциях которыми программа лезет в интернет я не разбираюсь ни капли и найти их самому не представляется возможным.
     
  6. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Позвольте мне уточнить - Вы блокируете все соединения программы или только к её родному сайту¿?
    Если же она получает лист прокси со своего родного сайта, то всё очень печально.

    case 'Коннектиктся к родному сайту и никуда больше'

    Посмотреть куда именно она подключается при помощи какого-нибудь монитора.
    Скорее всего для получения рег. информации и списка прокси существуют разные скрипты расположенные в разных "папках"
    то есть
    host/getreginfo
    host/getlistprox

    Если же он всё свалил в кучу, то без анализа пакетов не обойтись. :dntknw:
     
  7. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    А можно распакованный exe'шник в студию, ибо лень ковыряться ?

    З.Ы. Получает список она со своего сайта, но внутри самой программы стоит защита.
     
  8. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    При старте программы отправляется запрос:
    Код (Text):
    1. POST /services/post_proxies/ HTTP/1.1
    2. Host: www.proxyshell.com
    3. User-Agent: ......
    4. ......
    5. ps-client: pshis3101
    6. ps-user-id: 47A0749A248B11DF8000
    7. ps-user-key: PEVZGRQLQMJURUDPQBIS
    8. .......
    ps-user-key - это тот ключ который прошел как валидный а дальше абракадабра(можно не разбирать наверное). Далее....

    Список поддерживаемых версий, или вроде того:http://www.proxyshell.com/update/pshis1000.html
    Код (Text):
    1. [last_version=3101]
    2. [last_support_version=3000]
    Непонятно зачем берется эта картинко: http://www.google.com/intl/da/enterprise/images/searchresults.gif

    И наконец ломанувшись на http://www.proxyshell.com/services/get_proxies/
    Получаем облом: "Wrong -1"

    Т.е. защита о 2-х уровнях. То что проканало в программе не пройдет на сервере. В силу отсутствия алгоритма проверки... ну можно конечно поковырять внутренности, но... сильно не уверен что это моможет.
     
  9. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    З.Ы. С ключом ENJLEJRVVRRSEFRZGUGQ получил абракадабру в стиле
    Код (Text):
    1. AJ[GBCEF[AG]Y_@J@Y[D}yZXB^GPGAAEFPIAGPQ~zAXY]B@PGKC]\PICBZQ~zB^P]B@]GAD]ZZAJ@Y[K}yY]D^K[G@@]Y_DJ@Y[K}yZ[B^A[Q]ADF[GEIPYK@~bXDD]Y]A^A\GA@BRZBBKecBBFF_G^J^GAAIPYCH~bXDD]Y]A^BX]]EDRZBBKecABBF[BD]Z^]BF[SK@KecDG]PQ]FEF[FAIPYC@~b^B^A[_]ACFX@FIPYKE~bXGA]Z]]BGQGBCCRQCHBecA@CF[@H]PZ]DJRZBBKecBI@FX@F]Z[D^B^ZICBZ^~zBYP]GCF]C^BX[IHCPY~zBZ]]BG\GAEBFXK@IPYK}yY]D^BX[]BA\GABDRZBBGecAAKF[CB]YGBHJRQC}yYPA^G[GBI@F^AJ@Y[G}yY[K^GZGBDAF]AJ@Y[G}yZYK^J^GAA@FXGIIPY~zAZX]BB\GAG]Z\@JKXQ~zKXGADDF^B^F^SK@~bX@D][]]BG^GFJ@Y[G}yZXA^G]GF^B_[ICBZQ~zB[X]AB\GFC]YQKJ@Y[G}yY_K^BP^]@]Z]CJKXQC}yYPG^AQGBGKFXGJ@Y[K}y_]]BC^GJH]ZYAJKXQC}yZYA^BY_]AEXGKIIPY~zA\GC^A\]]BFRQCHFecFH]Z]E^D^GDFIPYK@~b[BF]P
    Но программа все-равно считает ключ невалидным после перезапуска.

    В зависимости от того, в чем проблема можно эту проблему(см. надоедливые окошки / глупые запреты) нагло выпилять из кода (если проблема только в программе).
     
  10. txtusername

    txtusername New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2010
    Сообщения:
    9
    ООО, ну хоть кто то разбирается в проблеме.

    Самый главный вопрос к тебе, чем ты вытащил пакеты уходящие-приходящие??

    "Wrong -1" это официальный ответ от их сервака??, он же полюбому в программе проверяется, что если там изменить условие перехода на "Success 1"?
    Найти бы в коде программы функции которыми она делает этот обмен с сервером своим стало бы полегче...

    Выпилять запреты? -Да с удовольствием!! только найти бы где она проверяет этот ключ(а вернее ответ от сервера).
    Находил место где она выдает результат что он неправильный с мессаджбоксом все красиво, потом он удалял ключ плохой из реестра. Выдергивал всю процедуру там еще куда всего правда была. Результат: не выдавала окна, не удаляла ключ, НО не работала как надо. То есть еще проверка где то происходила до этого, но где не могу отыскать.
     
  11. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    txtusername
    Просто проблема в целом не интересная.

    Wireshark'ом :)

    Ну да. Этот wrong можно обойти (хотя-бы тем ключом который юзает программа для бесплатного использования) и написать нечто типа "ProxyUpdate". ProxyShell слишком некрасиво ведет себя, вываливая справа сообщения которые мне и нафиг не нужны и не предоставляя возможности их убрать, so - фтопку.

    Найди где формируется запрос, т.е. например тот же "ps-user-key: ". Функция SEND/RECV где-то рядом.

    З.Ы. (для справки)Ты же распаковывал exe-шник надеюсь ?
    Помойму там все очень просто... сейчас лень ковыряться.

    З.З.Ы. Как всегда смотришь в окрестностях "плохого сообщения", например, которое находишь через Search for->all referenced strings (OllyDbg) и смотришь при каких условиях вызывается.
     
  12. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Вчера ложась спать (жаль, что уснуть так и не удалось...) я придумал как словить вашу программу (кстати во второй раз, один раз я уже придумал тоже самое, но потом забыл вам написать).
    Всё очень просто. Если вы говорите, что сумели разобрать алго генерации серийника , то вы наверняка знаете где хранится инфа о регистрации... :). Ну, а дальше у вас есть два пути:

    1) Словить программу на чтении этого значения и больно её ударить после этого линейкой по рукам.
    2) Словить программу на записть этого значения и либо не дать записать плохое значение.

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

    P.S.:
    Интересно сколько секунд автор придумывал алго для серийника??? :)
     
  13. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    А мы точно говорим про одно и тоже, потому, что я не заметил упаковщика :dntknw: мой экзешник жмётся раром в три раза где-то....

    Ещё вариант - найти где она хранит блэк лист и не дать ей туда писать.
     
  14. txtusername

    txtusername New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2010
    Сообщения:
    9
    Так-с....

    Как я понимаю блеклиста нету, а на сервере есть обратный вайтлис, в котором моего ключа понятное дело нету.

    Упаковщика действительно не обнаружено.

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

    Если бы я имел понятие как отслыать или принимать измененную инфу легче бы поменял ее при получении и wrong на success, так как СЕРВЕР ВСЕ РАВНО ВЫДАЕТ ПРОКСИ ДАЖЕ ПРИ ПЛОХОМ СЕРИЙНИКЕ, но вот программа сама не пользуется ими так как получила ответ от сервера,что ключ не тот. Но на 3 сайта с помощью полученных прокси она заходит!!!

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

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

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Ладно, она может и не пользоваться серийником, но вот вывыдить надпись регистеред или нет - это она должна делать?
    Она же выводит мессаджбок, после проверки по инету, вот на него и надо ловит.... где-то рядом будет зловредная процедура.
     
  16. txtusername

    txtusername New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2010
    Сообщения:
    9
    Блинский.... Ну я же писал уже что так не получается. Там есть процедура:
    procedure ебеная_функция()
    1
    2
    3
    3
    4
    ..
    xx - здесь Case 1..16 что ли

    yy - MessageBoxA и т.д.


    ..
    .
    ...

    end()

    Так я ее все вырезал - ЦЕЛИКОМ, да нет окошка с сообщением, ключ из реестра не удалился, но программа уже до этого проверила ключ и не работает!!!
    В эту большую процедуру передаются какие то параматры в результате чего она доходит до мессаджбокса, но она выполняется постоянно!!! из за чего отпадает возможность просмотреть все входные параметры и вычислить нужные и потом посмотреть как в свою очередь получаются они.
     
  17. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Можно оффсет ф-ии??? (не VA).
    Буду дома посмотрю....
     
  18. Wizard109

    Wizard109 New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2006
    Сообщения:
    346
    Z3N
    Странно... у меня был запакован + в "ErrorReport.exe" троян сидел. (скачивал из "неофициальных" источников в которых лежал готовый кейген, может поэтому... хотя в proxyshell.exe ничего "протокольного" нет)

    Кстате 5 сек. назад узнал что новая IDA по F5 вот такую красоту показывает:
    Код (Text):
    1. signed int __thiscall sub_580860(void *this, int a2)
    2. {
    3.   void *v3; // [sp+0h] [bp-4h]@1
    4.  
    5.   v3 = this;
    6.   sub_583A60(a2);
    7.   if ( a2 == *((_DWORD *)v3 + 23) )
    8.   {
    9.     if ( *((_DWORD *)v3 + 24) != 1 || *((_DWORD *)v3 + 25) != -1 )
    10.       sub_57E100(v3);
    11.   }
    12.   return 1;
    13. }
     
  19. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Кажется я понял о чём вы говорили.
    Отнюдь не постоянно. При отсутствии нета она перепрыгивает через проверку.
    присматритесь к калу 56d8d2, после его выполнения в еакс у нас Х число, вычислить изза которого вызывается плохой мессадж бокс не составляет труда, просто жмём ф9.
    Смотрим вверх, перед вызовом процедуры в есикс помещается локальная переменная, по которая является указателем на Х число (может мне кто скажет, это классы? Просто есх напоминает this).
    Смотрим кто же пишет в эту переменную, находим, и так далее.
    Простите, но у меня нет времени разворачивать до победного конца, а дома нета нет :).

    Если процедура колбасится невозможное количество раз и нет сил давить на ф9, то ставите бряк с логирование (позаботитесь об том, чтобы логировались нужные вам значения, оля понимает указатели([ecx])). И когда она брякнется, просто смотрите в лог.