Всем добрый день, первый раз в своей жизни пишу на форумах с вопросом о помощи, но продолжать дальше в одиночку нет сил. Вобщем дела обстоят так, ради спортивного интереса хотел разобрать программу Proxy Shell и очень увлекся этим процессом. Дело дошло то того,что: был разобран процесс генерации ключа для Standart версии; ---//----- Advansed версия; работа программы со Standart ключом НО при подключении к интернету адвансед версия программы понимает что ключ не тот, либо там база лежит либо.... не знаю что тогда. Видимые варианты решения проблемы: Блокировка обращения по адресу не помогает,так как оттуда берется еще и список proxy серверов Остается: Либо подмена ответа от сервера образно говоря с "0" на "1". Либо в качестве тестового режима(без ключа) можно заходить на 3 сайта, отсюда просматривается возможность замены с JNE на JE момента сверки разрешенных сайтов с тем на который пытаются зайти, ну или на JMP что бы работали все сайты. Главная проблема в непонятности мне функций которые программа использует для выхода в интернет(их список берется через ollydbg ->search for->names), да и честно говоря никогда не сталкивался с отладкой интернет связи. Так что прошу помоч мне с данным исследованием у кого есть возможность и желание. P.S. не работает тупая трассировка программы при наступлении момента, где поидее должен быть осуществлен выход в интернет, она уходит в цикл и непонятно как оттуда выбирается,такое впечатление что сама переходит в другой поток, но при нажатии паузы а потом F9 программа работает нормально. Ну вот вроде и все..
>Либо подмена ответа от сервера образно говоря с "0" на "1" Но если сервер проверяет ключ, то при несоответствии вполне ожидаемым для него решением было бы не отдавать список proxy, разве нет?
Нет, это не так. В "демо" режиме все равно можно заходить на 3 сайта, один из которых определяет ip на котором видно что программа работает и меняет их при нажатии на кнопку(перед этим взяв с сервера). На отрицательный ответ с сервера она пытается удалить этот ключ из реестра, но от этого я ее отучил.
А у вас есть фаер? Если есть, то можно просто просмотреть куда она коннектится и запретить эти соединения. Либо пойти ещё дальше и посмотреть откуда вызывается этот код и исправить недоразумение.
Если прочитать мой первый пост внимательно, то там написано, что блокировка ip не поможет так как при его блокировке не берутся адреса прокси серверов, которые то очень и нужны; на счет места откуда это все вызывается я тоже написал, трасировкой дойти не могу так так сбиdается отладчик, а в функциях которыми программа лезет в интернет я не разбираюсь ни капли и найти их самому не представляется возможным.
Позвольте мне уточнить - Вы блокируете все соединения программы или только к её родному сайту¿? Если же она получает лист прокси со своего родного сайта, то всё очень печально. case 'Коннектиктся к родному сайту и никуда больше' Посмотреть куда именно она подключается при помощи какого-нибудь монитора. Скорее всего для получения рег. информации и списка прокси существуют разные скрипты расположенные в разных "папках" то есть host/getreginfo host/getlistprox Если же он всё свалил в кучу, то без анализа пакетов не обойтись.
А можно распакованный exe'шник в студию, ибо лень ковыряться ? З.Ы. Получает список она со своего сайта, но внутри самой программы стоит защита.
При старте программы отправляется запрос: Код (Text): POST /services/post_proxies/ HTTP/1.1 Host: www.proxyshell.com User-Agent: ...... ...... ps-client: pshis3101 ps-user-id: 47A0749A248B11DF8000 ps-user-key: PEVZGRQLQMJURUDPQBIS ....... ps-user-key - это тот ключ который прошел как валидный а дальше абракадабра(можно не разбирать наверное). Далее.... Список поддерживаемых версий, или вроде того:http://www.proxyshell.com/update/pshis1000.html Код (Text): [last_version=3101] [last_support_version=3000] Непонятно зачем берется эта картинко: http://www.google.com/intl/da/enterprise/images/searchresults.gif И наконец ломанувшись на http://www.proxyshell.com/services/get_proxies/ Получаем облом: "Wrong -1" Т.е. защита о 2-х уровнях. То что проканало в программе не пройдет на сервере. В силу отсутствия алгоритма проверки... ну можно конечно поковырять внутренности, но... сильно не уверен что это моможет.
З.Ы. С ключом ENJLEJRVVRRSEFRZGUGQ получил абракадабру в стиле Код (Text): 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 Но программа все-равно считает ключ невалидным после перезапуска. В зависимости от того, в чем проблема можно эту проблему(см. надоедливые окошки / глупые запреты) нагло выпилять из кода (если проблема только в программе).
ООО, ну хоть кто то разбирается в проблеме. Самый главный вопрос к тебе, чем ты вытащил пакеты уходящие-приходящие?? "Wrong -1" это официальный ответ от их сервака??, он же полюбому в программе проверяется, что если там изменить условие перехода на "Success 1"? Найти бы в коде программы функции которыми она делает этот обмен с сервером своим стало бы полегче... Выпилять запреты? -Да с удовольствием!! только найти бы где она проверяет этот ключ(а вернее ответ от сервера). Находил место где она выдает результат что он неправильный с мессаджбоксом все красиво, потом он удалял ключ плохой из реестра. Выдергивал всю процедуру там еще куда всего правда была. Результат: не выдавала окна, не удаляла ключ, НО не работала как надо. То есть еще проверка где то происходила до этого, но где не могу отыскать.
txtusername Просто проблема в целом не интересная. Wireshark'ом Ну да. Этот wrong можно обойти (хотя-бы тем ключом который юзает программа для бесплатного использования) и написать нечто типа "ProxyUpdate". ProxyShell слишком некрасиво ведет себя, вываливая справа сообщения которые мне и нафиг не нужны и не предоставляя возможности их убрать, so - фтопку. Найди где формируется запрос, т.е. например тот же "ps-user-key: ". Функция SEND/RECV где-то рядом. З.Ы. (для справки)Ты же распаковывал exe-шник надеюсь ? Помойму там все очень просто... сейчас лень ковыряться. З.З.Ы. Как всегда смотришь в окрестностях "плохого сообщения", например, которое находишь через Search for->all referenced strings (OllyDbg) и смотришь при каких условиях вызывается.
Вчера ложась спать (жаль, что уснуть так и не удалось...) я придумал как словить вашу программу (кстати во второй раз, один раз я уже придумал тоже самое, но потом забыл вам написать). Всё очень просто. Если вы говорите, что сумели разобрать алго генерации серийника , то вы наверняка знаете где хранится инфа о регистрации... . Ну, а дальше у вас есть два пути: 1) Словить программу на чтении этого значения и больно её ударить после этого линейкой по рукам. 2) Словить программу на записть этого значения и либо не дать записать плохое значение. В первом варианте можно не удалять "плохой" вызов, а сделать так, чтобы программа отсылала инфу что она демо - просто это не вызовет подозрений с той стороны сервера. P.S.: Интересно сколько секунд автор придумывал алго для серийника???
А мы точно говорим про одно и тоже, потому, что я не заметил упаковщика мой экзешник жмётся раром в три раза где-то.... Ещё вариант - найти где она хранит блэк лист и не дать ей туда писать.
Так-с.... Как я понимаю блеклиста нету, а на сервере есть обратный вайтлис, в котором моего ключа понятное дело нету. Упаковщика действительно не обнаружено. Ключ от программы хранится в реестре, в известном ключе. Считка его производится в самом старте программы, а вот отправка в любое время при подключенном интернете. Если бы я имел понятие как отслыать или принимать измененную инфу легче бы поменял ее при получении и wrong на success, так как СЕРВЕР ВСЕ РАВНО ВЫДАЕТ ПРОКСИ ДАЖЕ ПРИ ПЛОХОМ СЕРИЙНИКЕ, но вот программа сама не пользуется ими так как получила ответ от сервера,что ключ не тот. Но на 3 сайта с помощью полученных прокси она заходит!!! Алго для серийника выцеплен за 2 дня, подавляющее большинство времени из которого ушло на поиск отладчика и восстановление в памяти основ работы с ним. Вся проблема в том, что программа использует какие то нестандартные функции для выхода в интернет, отсюда сложность в получении пакетов от сервера с дальнейшим направлнием программы на путь истинный.
Ладно, она может и не пользоваться серийником, но вот вывыдить надпись регистеред или нет - это она должна делать? Она же выводит мессаджбок, после проверки по инету, вот на него и надо ловит.... где-то рядом будет зловредная процедура.
Блинский.... Ну я же писал уже что так не получается. Там есть процедура: procedure ебеная_функция() 1 2 3 3 4 .. xx - здесь Case 1..16 что ли yy - MessageBoxA и т.д. .. . ... end() Так я ее все вырезал - ЦЕЛИКОМ, да нет окошка с сообщением, ключ из реестра не удалился, но программа уже до этого проверила ключ и не работает!!! В эту большую процедуру передаются какие то параматры в результате чего она доходит до мессаджбокса, но она выполняется постоянно!!! из за чего отпадает возможность просмотреть все входные параметры и вычислить нужные и потом посмотреть как в свою очередь получаются они.
Z3N Странно... у меня был запакован + в "ErrorReport.exe" троян сидел. (скачивал из "неофициальных" источников в которых лежал готовый кейген, может поэтому... хотя в proxyshell.exe ничего "протокольного" нет) Кстате 5 сек. назад узнал что новая IDA по F5 вот такую красоту показывает: Код (Text): signed int __thiscall sub_580860(void *this, int a2) { void *v3; // [sp+0h] [bp-4h]@1 v3 = this; sub_583A60(a2); if ( a2 == *((_DWORD *)v3 + 23) ) { if ( *((_DWORD *)v3 + 24) != 1 || *((_DWORD *)v3 + 25) != -1 ) sub_57E100(v3); } return 1; }
Кажется я понял о чём вы говорили. Отнюдь не постоянно. При отсутствии нета она перепрыгивает через проверку. присматритесь к калу 56d8d2, после его выполнения в еакс у нас Х число, вычислить изза которого вызывается плохой мессадж бокс не составляет труда, просто жмём ф9. Смотрим вверх, перед вызовом процедуры в есикс помещается локальная переменная, по которая является указателем на Х число (может мне кто скажет, это классы? Просто есх напоминает this). Смотрим кто же пишет в эту переменную, находим, и так далее. Простите, но у меня нет времени разворачивать до победного конца, а дома нета нет . Если процедура колбасится невозможное количество раз и нет сил давить на ф9, то ставите бряк с логирование (позаботитесь об том, чтобы логировались нужные вам значения, оля понимает указатели([ecx])). И когда она брякнется, просто смотрите в лог.