Рады видеть вас на Ghost-Club

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

Marcel

Местные
  • Content Count

    52
  • Joined

  • Last visited

Community Reputation

33 Очень хороший

Информация

  • Пол
    Не определился
  1. СНИЖАЕТ НАПРЯЖЕНИЕ: - подчеркивание общности с партнером (сходства целей, интересов, мнений, личностных черт и т.п.) - подчеркивания значимости партнера, его мнения в ваших глазах - вербализация эмоционального состояния: своего и партнера - проявление интереса к проблемам партнера - представление партнеру возможности выговориться - немедленное признание собственной неправоты - предложение конкретного выхода из сложившейся ситуации - обращение к фактам - спокойный уверенный темп речи - поддержание оптимальной дистанции, угла поворота и наклона тела ПОВЫШАЕТ НАПРЯЖЕНИЕ: - подчеркивание различий между собой и партнером - принижение партнера, негативная оценка его личности, приуменьшение вклада партнера в общее дело и преувеличение своего - игнорирование эмоционального состояния, своего и партнера - демонстрация незаинтересованности в проблеме партнера - перебивание партнера - оттягивание момента признания своей неправоты или отрицание ее - поиск виноватых и обвинение партнера - переход на «личности» - резкое убыстрение темпа речи - избегание пространственной близости и контакта глаз ТЕХНИКА ПОДЧЕРКИВАНИЯ ОБЩНОСТИ На тренинге японских менеджеров им через 20 минут после знакомства с группой предлагают написать, что их объединяет с каждым участником группы. Списков должно быть столько, сколько участников в группе, и каждый список должен включать не менее десяти качеств. В ПОДЧЕРКИВАНИИ ОБЩНОСТИ должны быть соблюдены ДВА УСЛОВИЯ: - выявляемые общие черты должны быть скорее приятны партнеру, чем неприятны. То есть характеристики должны восприниматься как достоинства (например, наблюдательность, изобретательность, артистизм) или как своеобразные черты (например, доминантность, лукавство, эксцентричность, индивидуализм и т.п.). Есть некоторые черты, которые не являются недостатками, но воспринимаются как таковые теми, кто ими обладает, например, застенчивость, прямота, усидчивость и т.п. Подчеркивая общность по этим характеристикам, вы рискуете задеть «слабую струну» души. - эти общие черты должны быть релевантны деловой или личной экспертной зонам человека. Например: Мы оба хотим добиться разрешения этой ситуации. Мы оба любим творческих людей. У нас с тобой часто возникают «завиральные» идеи. Что нас объединяет, так это быстрота соображения. Мы обе «хитренькие» и т.п. ТЕХНИКА ПОДЧЕРКИВАНИЯ ЗНАЧИМОСТИ ПАРТНЕРА. ПОДЧЕРКИВАНИЕ ЗНАЧИМОСТИ – это выражение своего восхищения другим человеком, признание его заслуг и достижений. Требования к технике: - конкретность, обусловленность фактами - искренность. ФОРМУЛА техники не «ты мне нравишься», а «мне кажется ценным то, что ты делаешь». Подчеркивание значимости – это не комплимент в расхожем значении этого слова. Подчеркивание значимости – это вариант позитивной констатации, но с некоторым эмоциональным дополнением: «У меня вызывает восхищение…», «…возникает гордость», «… растет уважение к вам» и т.п. Например: - Ты знаешь, твоя идея мне показалась очень ценной. - Я несколько раз вспоминал сегодня, как здорово ты ответил вчера на вопрос из зала. - Я увидел ваши расчеты и просто проникся благоговением! - Да, вот это работа! Супер! - Твоя молниеносность меня поражает! ТЕХНИКА ВЕРБАЛИЗАЦИИ СВОИХ ЧУВСТВ и ЧУВСТВ ПАРТНЕРА Действенными являются следующие ФОРМУЛЫ вербализации собственных чувств: - Я удивлен… - Я огорчен… - Мне неуютно… - Меня задевает.. - У меня вызывает некоторый протест… - Меня тревожит… - Меня угнетает… Например: - Как вы могли не прислать мне рабочих? Я что, сама должна столы перетаскивать? - Ниночка, Я УДИВЛЕН…Как же это могло случиться? Ведь я же… и т.п. - Почему вы никогда заранее не предупреждаете, что придется выйти на работу в выходные? - Зиночка, Я ОГОРЧЕН… Я огорчен, что приходится тебя вызывать, и я еще больше огорчен тем, что тебе не сообщили заранее… - Почему вы сюда приехали? Чему вам здесь учиться? Или вы здесь должны за нами наблюдать?! - Коля, мне очень НЕУЮТНО, когда я слышу такие предположения… очень неуютно… ВЕРБАЛИЗАЦИЯ СОБСТВЕННЫХ ЧУВСТВ – это, собственно, Я-послания. Вербализация собственного состояния выполняет двоякую роль – с одной стороны, информирует нашего партнера о наших чувствах и снижает его напряжение, а с другой стороны – помогает регулировать собственное эмоциональное состояние. Вербализация собственных НЕГАТИВНЫХ чувств может также использоваться как вежливая форма замечания или предложения партнеру прекратить делать то, что вызывает у нас напряжение. Гораздо труднее ВЕРБАЛИЗАЦИЯ ЧУВСТВ ПАРТНЕРА. Формулировки вроде «вы возмущены» или «вы взволнованы» могут спровоцировать усиление негативной реакции. Более эффективна КОСВЕННАЯ вербализация чувств партнера, например: - Я согласен, что это может вызвать протест - Я согласен, что это вызывает дискомфорт - Согласен, что такой поворот дела вызывает неприятные чувства - Да, это ,конечно, огорчительно. В ПРЯМЫХ КОНСТАТАЦИЯХ чувств предпочтительнее использовать термины, которые указывают на бережно-почтительное отношение к партнеру и самому себе. Например, Вместо: «Я не понимаю» лучше сказать « Я удивлен» Вместо «Вы в депрессии» лучше сказать «Вы огорчены» Вместо «Мне неприятно» лучше сказать «Мне неуютно» Вместо «Мне противно» - «Я возмущен» Вместо «Вы нервничаете» лучше сказать «Вас беспокоит» Вместо «Мне обидно» - «Меня задевает» Вместо «Меня бесит» - «У меня вызывает протест» Вместо «Вы злитесь» - «Вы сердитесь» Вместо «Вы боитесь» - «Вы опасаетесь» Выражение НЕГАТИВНЫХ чувств может быть смягчено использованием МЕТАФОР. Карлу Роджерсу помогали, например, такие метафоры: «Мне пришла фантазия, что вы принцесса и вам бы понравилось, если бы все вам подчинялись» или «Я чувствую, что вы выступаете одновременно как судья и обвиняемый по отношению к самому себе, и строго говорите самому себе: «Ты виноват во всем». Вербаизация чувств может совершаться с помощью ФОРМУЛЫ: «Я чувствую себя как…» + метафора, например, - По-моему, вы уже забыли о нашем вчерашнем разговоре! - Я чувствую себя, как школьник, отвечающий у доски. - Вы что, в третий раз собираетесь проверять документы?! Все подвоха ищете? - Я чувствую себя, как подсудимый в зале суда. - Как вы могли так назвать свою фирму? Это рождает такие странные ассоциации… - Я чувствую себя, как Дюймовочка в тюльпане: она упала и барахтается в цветке. МЕТАФОРА должна быть яркой и в то же время мягкой, правдивой и в то же время шутливой, точной и в то же время уважительной. ТИПИЧНЫЕ ОШИБКИ ВЕРБАЛИЗАЦИИ и СПОСОБЫ ИХ ПРЕОДОЛЕНИЯ: 1.Подчеркивание общности в том, что партнер ни в коем случае не хочет за собой признавать («Мы с тобой оба не любим, когда нам прижимают хвост..», «Шеф нас с тобой и за людей не считает…»). Это может восприниматься собеседником как скрытое принижение его личности. Человек хочет принадлежать только к той общности, которая является референтной для него. Подчеркивать общность недостатков или слабостей можно только в том случае, когда это не воспринимается как угроза самооценке. Лучше выбирать формулировки, в которых недостатки выступают как продолжение достоинств («Мы оба нетерпимы к неточностям», «Ну и резкими же мы бываем с тобой!»). 2.Действие с точностью до наоборот при подчеркивание значимости («Вы замечательно это сделали! Я от вас прямо не ожидал!», «Вы сегодня хорошо выступили, не то что обычно!»). Это скрытое принижение личности партнера. Фактически ему передается послание о том, что обычно он находится на гораздо более низком уровне. Следует избегать сравнений человека с ним самим и с ожиданиями в отношении него. Лучше просто сказать: «Вы замечательно это сделали!» или «Вы так удачно выступили сегодня!». 3.Голословные заявления вместо вербализации («Я вас очень хорошо понимаю», «Прекрасно вас понимаю!»). Но до тех пор, пока эмоция не названа, человек может продолжать думать, что его на самом деле поняли неправильно. Кроме того, человеку хочется, чтобы его поняли ровно настолько, насколько он сам хочет быть понятым. Фраза «прекрасно вас понимаю» в этом контексте может вызвать страх разоблачения. Поэтому если состояние собеседника не вполне понятно или вы чувствуете, что в нем происходит борьба разнообразных чувств, то лучше использовать нейтрально-уважительные формулировки с вопросительной интонацией («Вы удивлены?...», «Вы чувствуете себя неуютно?...», «У вас вызывает огорчение?..», «У вас пока нет уверенности в том, что…?» и т.п.). 4.Вербализация негативных чувств и состояний, которые в результате лишь усиливаются («У вас усталый вид», «Вы выглядите такой измученной», «У тебя такой испуганный вид!»). Свежесть, бодрость, подтянутый вид – все это признаки благополучия, свидетельствующие о способности добиваться социального успеха. Усталый вид – признак определенного поражения или уступки трудностям жизни. Обсуждение таких состояний ввергает нас в пучину негатива. Лучше использовать более нейтральные формулировки: «Вы сконцентрированы..», «Вы в напряжении…», «Вы опасаетесь», «Вижу, вы чем-то встревожены..» и т.п. И наконец, в технике ВЕРБАЛИЗАЦИИ чувств речь отнюдь не всегда идет о негативных чувствах. В ситуации, когда кто-то нападает на вас, это может вызвать прилив энергии, воодушевления и даже восхищения. Пример из фильма «Тутси»: Режиссер: Мне так нравится, что вы всегда точно понимаете задачу режиссера! Тутси: Где вы здесь видите режиссера? Режиссер: Как мне нравится, что вы никому не даете спуску! (Е.Сидоренко.Тренинг коммуникативной компетентности в деловом взаимодействии, 2004).СНИЖАЕТ НАПРЯЖЕНИЕ: - подчеркивание общности с партнером (сходства целей, интересов, мнений, личностных черт и т.п.) - подчеркивания значимости партнера, его мнения в ваших глазах - вербализация эмоционального состояния: своего и партнера - проявление интереса к проблемам партнера - представление партнеру возможности выговориться - немедленное признание собственной неправоты - предложение конкретного выхода из сложившейся ситуации - обращение к фактам - спокойный уверенный темп речи - поддержание оптимальной дистанции, угла поворота и наклона тела ПОВЫШАЕТ НАПРЯЖЕНИЕ: - подчеркивание различий между собой и партнером - принижение партнера, негативная оценка его личности, приуменьшение вклада партнера в общее дело и преувеличение своего - игнорирование эмоционального состояния, своего и партнера - демонстрация незаинтересованности в проблеме партнера - перебивание партнера - оттягивание момента признания своей неправоты или отрицание ее - поиск виноватых и обвинение партнера - переход на «личности» - резкое убыстрение темпа речи - избегание пространственной близости и контакта глаз ТЕХНИКА ПОДЧЕРКИВАНИЯ ОБЩНОСТИ На тренинге японских менеджеров им через 20 минут после знакомства с группой предлагают написать, что их объединяет с каждым участником группы. Списков должно быть столько, сколько участников в группе, и каждый список должен включать не менее десяти качеств. В ПОДЧЕРКИВАНИИ ОБЩНОСТИ должны быть соблюдены ДВА УСЛОВИЯ: - выявляемые общие черты должны быть скорее приятны партнеру, чем неприятны. То есть характеристики должны восприниматься как достоинства (например, наблюдательность, изобретательность, артистизм) или как своеобразные черты (например, доминантность, лукавство, эксцентричность, индивидуализм и т.п.). Есть некоторые черты, которые не являются недостатками, но воспринимаются как таковые теми, кто ими обладает, например, застенчивость, прямота, усидчивость и т.п. Подчеркивая общность по этим характеристикам, вы рискуете задеть «слабую струну» души. - эти общие черты должны быть релевантны деловой или личной экспертной зонам человека. Например: Мы оба хотим добиться разрешения этой ситуации. Мы оба любим творческих людей. У нас с тобой часто возникают «завиральные» идеи. Что нас объединяет, так это быстрота соображения. Мы обе «хитренькие» и т.п. ТЕХНИКА ПОДЧЕРКИВАНИЯ ЗНАЧИМОСТИ ПАРТНЕРА. ПОДЧЕРКИВАНИЕ ЗНАЧИМОСТИ – это выражение своего восхищения другим человеком, признание его заслуг и достижений. Требования к технике: - конкретность, обусловленность фактами - искренность. ФОРМУЛА техники не «ты мне нравишься», а «мне кажется ценным то, что ты делаешь». Подчеркивание значимости – это не комплимент в расхожем значении этого слова. Подчеркивание значимости – это вариант позитивной констатации, но с некоторым эмоциональным дополнением: «У меня вызывает восхищение…», «…возникает гордость», «… растет уважение к вам» и т.п. Например: - Ты знаешь, твоя идея мне показалась очень ценной. - Я несколько раз вспоминал сегодня, как здорово ты ответил вчера на вопрос из зала. - Я увидел ваши расчеты и просто проникся благоговением! - Да, вот это работа! Супер! - Твоя молниеносность меня поражает! ТЕХНИКА ВЕРБАЛИЗАЦИИ СВОИХ ЧУВСТВ и ЧУВСТВ ПАРТНЕРА Действенными являются следующие ФОРМУЛЫ вербализации собственных чувств: - Я удивлен… - Я огорчен… - Мне неуютно… - Меня задевает.. - У меня вызывает некоторый протест… - Меня тревожит… - Меня угнетает… Например: - Как вы могли не прислать мне рабочих? Я что, сама должна столы перетаскивать? - Ниночка, Я УДИВЛЕН…Как же это могло случиться? Ведь я же… и т.п. - Почему вы никогда заранее не предупреждаете, что придется выйти на работу в выходные? - Зиночка, Я ОГОРЧЕН… Я огорчен, что приходится тебя вызывать, и я еще больше огорчен тем, что тебе не сообщили заранее… - Почему вы сюда приехали? Чему вам здесь учиться? Или вы здесь должны за нами наблюдать?! - Коля, мне очень НЕУЮТНО, когда я слышу такие предположения… очень неуютно… ВЕРБАЛИЗАЦИЯ СОБСТВЕННЫХ ЧУВСТВ – это, собственно, Я-послания. Вербализация собственного состояния выполняет двоякую роль – с одной стороны, информирует нашего партнера о наших чувствах и снижает его напряжение, а с другой стороны – помогает регулировать собственное эмоциональное состояние. Вербализация собственных НЕГАТИВНЫХ чувств может также использоваться как вежливая форма замечания или предложения партнеру прекратить делать то, что вызывает у нас напряжение. Гораздо труднее ВЕРБАЛИЗАЦИЯ ЧУВСТВ ПАРТНЕРА. Формулировки вроде «вы возмущены» или «вы взволнованы» могут спровоцировать усиление негативной реакции. Более эффективна КОСВЕННАЯ вербализация чувств партнера, например: - Я согласен, что это может вызвать протест - Я согласен, что это вызывает дискомфорт - Согласен, что такой поворот дела вызывает неприятные чувства - Да, это ,конечно, огорчительно. В ПРЯМЫХ КОНСТАТАЦИЯХ чувств предпочтительнее использовать термины, которые указывают на бережно-почтительное отношение к партнеру и самому себе. Например, Вместо: «Я не понимаю» лучше сказать « Я удивлен» Вместо «Вы в депрессии» лучше сказать «Вы огорчены» Вместо «Мне неприятно» лучше сказать «Мне неуютно» Вместо «Мне противно» - «Я возмущен» Вместо «Вы нервничаете» лучше сказать «Вас беспокоит» Вместо «Мне обидно» - «Меня задевает» Вместо «Меня бесит» - «У меня вызывает протест» Вместо «Вы злитесь» - «Вы сердитесь» Вместо «Вы боитесь» - «Вы опасаетесь» Выражение НЕГАТИВНЫХ чувств может быть смягчено использованием МЕТАФОР. Карлу Роджерсу помогали, например, такие метафоры: «Мне пришла фантазия, что вы принцесса и вам бы понравилось, если бы все вам подчинялись» или «Я чувствую, что вы выступаете одновременно как судья и обвиняемый по отношению к самому себе, и строго говорите самому себе: «Ты виноват во всем». Вербализация чувств может совершаться с помощью ФОРМУЛЫ: «Я чувствую себя как…» + метафора, например, - По-моему, вы уже забыли о нашем вчерашнем разговоре! - Я чувствую себя, как школьник, отвечающий у доски. - Вы что, в третий раз собираетесь проверять документы?! Все подвоха ищете? - Я чувствую себя, как подсудимый в зале суда. - Как вы могли так назвать свою фирму? Это рождает такие странные ассоциации… - Я чувствую себя, как Дюймовочка в тюльпане: она упала и барахтается в цветке. МЕТАФОРА должна быть яркой и в то же время мягкой, правдивой и в то же время шутливой, точной и в то же время уважительной. ТИПИЧНЫЕ ОШИБКИ ВЕРБАЛИЗАЦИИ и СПОСОБЫ ИХ ПРЕОДОЛЕНИЯ: 1.Подчеркивание общности в том, что партнер ни в коем случае не хочет за собой признавать («Мы с тобой оба не любим, когда нам прижимают хвост..», «Шеф нас с тобой и за людей не считает…»). Это может восприниматься собеседником как скрытое принижение его личности. Человек хочет принадлежать только к той общности, которая является референтной для него. Подчеркивать общность недостатков или слабостей можно только в том случае, когда это не воспринимается как угроза самооценке. Лучше выбирать формулировки, в которых недостатки выступают как продолжение достоинств («Мы оба нетерпимы к неточностям», «Ну и резкими же мы бываем с тобой!»). 2.Действе с точностью до наоборот при подчеркивание значимости («Вы замечательно это сделали! Я от вас прямо не ожидал!», «Вы сегодня хорошо выступили, не то что обычно!»). Это скрытое принижение личности партнера. Фактически ему передается послание о том, что обычно он находится на гораздо более низком уровне. Следует избегать сравнений человека с ним самим и с ожиданиями в отношении него. Лучше просто сказать: «Вы замечательно это сделали!» или «Вы так удачно выступили сегодня!». 3.Голословные заявления вместо вербализации («Я вас очень хорошо понимаю», «Прекрасно вас понимаю!»). Но до тех пор, пока эмоция не названа, человек может продолжать думать, что его на самом деле поняли неправильно. Кроме того, человеку хочется, чтобы его поняли ровно настолько, насколько он сам хочет быть понятым. Фраза «прекрасно вас понимаю» в этом контексте может вызвать страх разоблачения. Поэтому если состояние собеседника не вполне понятно или вы чувствуете, что в нем происходит борьба разнообразных чувств, то лучше использовать нейтрально-уважительные формулировки с вопросительной интонацией («Вы удивлены?...», «Вы чувствуете себя неуютно?...», «У вас вызывает огорчение?..», «У вас пока нет уверенности в том, что…?» и т.п.). 4.Вербализация негативных чувств и состояний, которые в результате лишь усиливаются («У вас усталый вид», «Вы выглядите такой измученной», «У тебя такой испуганный вид!»). Свежесть, бодрость, подтянутый вид – все это признаки благополучия, свидетельствующие о способности добиваться социального успеха. Усталый вид – признак определенного поражения или уступки трудностям жизни. Обсуждение таких состояний ввергает нас в пучину негатива. Лучше использовать более нейтральные формулировки: «Вы сконцентрированы..», «Вы в напряжении…», «Вы опасаетесь», «Вижу, вы чем-то встревожены..» и т.п. И наконец, в технике ВЕРБАЛИЗАЦИИ чувств речь отнюдь не всегда идет о негативных чувствах. В ситуации, когда кто-то нападает на вас, это может вызвать прилив энергии, воодушевления и даже восхищения. Пример из фильма «Тутси»: Режиссер: Мне так нравится, что вы всегда точно понимаете задачу режиссера! Тутси: Где вы здесь видите режиссера? Режиссер: Как мне нравится, что вы никому не даете спуску! Источник: Е.Сидоренко. Тренинг коммуникативной компетентности в деловом взаимодействии
  2. Компьютерные игры открывают перед нами новые миры. И мир читов — один из них. Сегодня мы вместе пройдем путь от теории к практике и напишем собственный чит. Если ты хочешь научиться взламывать исполняемые файлы, то это может стать неплохим упражнением. Виды читов и применяемые тактики Существуют разные виды читов. Можно разделить их на несколько групп. External — внешние читы, которые работают в отдельном процессе. Если же мы скроем наш external-чит, загрузив его в память другого процесса, он превратится в hidden external. Internal — внутренние читы, которые встраиваются в процесс самой игры при помощи инжектора. После загрузки в память игры в отдельном потоке вызывается точка входа чита. Pixelscan — вид читов, который использует картинку с экрана и паттерны расположения пикселей, чтобы получить необходимую информацию от игры. Network proxy — читы, которые используют сетевые прокси, те, в свою очередь, перехватывают трафик клиента и сервера, получая или изменяя необходимую информацию. Есть три основные тактики модификации поведения игры. Изменение памяти игры. API операционной системы используется для поиска и изменения участков памяти, содержащих нужную нам информацию (например, жизни, патроны). Симуляция действий игрока: приложение повторяет действия игрока, нажимая мышкой в заранее указанных местах. Перехват трафика игры. Между игрой и сервером встает чит. Он перехватывает данные, собирая или изменяя информацию, чтобы обмануть клиент или сервер. Большинство современных игр написаны для Windows, поэтому и примеры мы будем делать для нее же. Пишем игру на C Про читы лучше всего рассказывать на практике. Мы напишем свою небольшую игру, на которой сможем потренироваться. Я буду писать игру на C#, но постараюсь максимально приблизить структуру данных к игре на C++. По моему опыту читерить в играх на C# очень просто. Принцип игры прост: нажимаешь Enter и проигрываешь. Не особо честные правила, да? Попробуем их изменить. Приступим к реверс-инжинирингу Исполняемый файл игры У нас есть файл игры. Но вместо исходного кода мы будем изучать память и поведение приложения. Начнем с поведения игры При каждом нажатии Enter жизни игрока уменьшаются на 15. Начальное количество жизней — 100. Изучать память мы будем при помощи Cheat Engine. Это приложение для поиска переменных внутри памяти приложения, а еще хороший дебаггер. Перезапустим игру и подключим к ней Cheat Engine. Подключение CE к игре Первым делом мы получаем список всех значений 85 в памяти. Все значения, которые нашел CE Нажмем Enter, и показатель жизней будет равен 70. Отсеем все значения. Значение найдено Вот и нужное значение! Изменим его и нажмем Enter для проверки результата. Значение изменено Скрин игры, после того как мы нажали Enter Проблема в том, что после перезапуска игры значение будет уже по другому адресу. Каждый раз отсеивать его нет никакого смысла. Необходимо прибегнуть к сканированию AOB (Array Of Bytes — массив байтов). При каждом новом открытии приложения из-за рандомизации адресного пространства (ASLR)структура, описывающая игрока, будет находиться на новом месте. Чтобы найти ее, необходимо сначала обнаружить сигнатуру. Сигнатура — это набор не меняющихся в структуре байтов, по которым можно искать в памяти приложения. После нескольких нажатий на Enter количество жизней изменилось на 55. Снова найдем нужное значение в памяти и откроем регион, в котором оно находится. Регион памяти Выделенный байт и есть начало нашего int32-числа. 37 00 00 00 — число 55 в десятичной форме. Я скопирую небольшой регион памяти и вставлю в блокнот для дальнейшего изучения. Теперь перезапустим приложение и снова найдем значение в памяти. Снова скопируем такой же регион памяти и вставим в блокнот. Начнем сравнение. Цель — найти байты рядом с этой сигнатурой, которые не будут меняться. Начинаем сравнивать байты Проверим байты перед структурой. Бинго! Как видишь, выделенные байты не изменились, значит, можно попробовать использовать их как сигнатуру. Чем меньше сигнатура, тем быстрее пройдет сканирование. Сигнатура 01 00 00 00 явно будет слишком часто встречаться в памяти. Лучше взять 03 00 00 01 00 00 00. Для начала найдем ее в памяти. Сигнатура не уникальна Сигнатура найдена, но она повторяется. Необходима более уникальная последовательность. Попробуем ED 03 00 00 01 00 00 00. В подтверждение уникальности получим такой результат: Сигнатура уникальна Нам необходимо найти отступ от сигнатуры, чтобы получить ее стартовый адрес, а не адрес жизней. Пока сохраним найденную сигнатуру и отложим на некоторое время. Не беспокойся, мы к ней еще вернемся. Жизненный цикл external Используя функцию OpenProcess, внешние читы получают дескриптор для нужного процесса и вносят необходимые изменения в код (патчинг) или считывают и изменяют переменные внутри памяти игры. Для модификации памяти используются функции ReadProcessMemory и WriteProcessMemory. Так как динамическое размещение данных в памяти мешает записать нужные адреса и постоянно к ним обращаться, можно использовать технику поиска AOB. Жизненный цикл external-чита выглядит так: Найти ID процесса. Получить дескриптор к этому процессу с нужными правами. Найти адреса в памяти. Пропатчить что-то, если нужно. Отрисовать GUI, если он имеется. Считывать или изменять память по мере надобности. Пишем внешний чит для своей игры Для вызова функций WinAPI из C# используется технология P/Invoke. Для начала работы с этими функциями их нужно задекларировать в коде. Я буду брать готовые декларации с сайта pinvoke.net. Первой функцией будет OpenProcess. [Flags] public enum ProcessAccessFlags : uint { All = 0x001F0FFF, Terminate = 0x00000001, CreateThread = 0x00000002, VirtualMemoryOperation = 0x00000008, VirtualMemoryRead = 0x00000010, VirtualMemoryWrite = 0x00000020, DuplicateHandle = 0x00000040, CreateProcess = 0x000000080, SetQuota = 0x00000100, SetInformation = 0x00000200, QueryInformation = 0x00000400, QueryLimitedInformation = 0x00001000, Synchronize = 0x00100000 } [DllImport("kernel32.dll", SetLastError = true)] public static extern IntPtr OpenProcess( ProcessAccessFlags processAccess, bool bInheritHandle, int processId); Следующая функция — ReadProcessMemory. [DllImport("kernel32.dll", SetLastError = true)] public static extern bool ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out IntPtr lpNumberOfBytesRead); Теперь функция для считывания памяти WriteProcessMemory. [DllImport("kernel32.dll", SetLastError = true)] public static extern bool WriteProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int nSize, out IntPtr lpNumberOfBytesWritten); Перед нами встает проблема: для поиска паттерна необходимо собрать все регионы памяти процесса. Для этого нам потребуются функция и структура. Функция VirtualQueryEx: [DllImport("kernel32.dll")] static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength); Структура MEMORY_BASIC_INFORMATION: [StructLayout(LayoutKind.Sequential)] public struct MEMORY_BASIC_INFORMATION { public IntPtr BaseAddress; public IntPtr AllocationBase; public uint AllocationProtect; public IntPtr RegionSize; public uint State; public uint Protect; public uint Type; } Теперь можно приступить к написанию кода для самого чита. Первым делом найдем игру. private static int WaitForGame() { while (true) { var prcs = Process.GetProcessesByName("SimpleConsoleGame"); if (prcs.Length != 0) { return prcs.First().Id; } Thread.Sleep(150); } } Затем откроем дескриптор к нашей игре. private static IntPtr GetGameHandle(int id) { return WinAPI.OpenProcess(WinAPI.ProcessAccessFlags.All, false, id); } Совместим все это в начальном коде. Console.Title = "External Cheat Example"; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Waiting for game process.."); var processId = WaitForGame(); Console.WriteLine($"Game process found. ID: {processId}"); var handle = GetGameHandle(processId); if (handle == IntPtr.Zero) { CriticalError("Error. Process handle acquirement failed.\n" + "Insufficient rights?"); } Console.WriteLine($"Handle was acquired: 0x{handle.ToInt32():X}"); Console.ReadKey(true); Мы найдем ID процесса, затем получим его дескриптор и, если что, выведем сообщение об ошибке. Имплементация CriticalError(string) не так важна. После этого мы уже можем перейти к поиску паттерна в памяти. Создадим общий класс, в котором будут все функции для работы с памятью. Назовем его MemoryManager. Затем сделаем класс MemoryRegion для описания региона памяти. В MEMORY_BASIC_INFORMATION много лишних данных, которые не следует передавать дальше, поэтому я вынес их в отдельный класс. public class MemoryRegion { public IntPtr BaseAddress { get; set; } public IntPtr RegionSize { get; set; } public uint Protect { get; set; } } Это все, что нам нужно: стартовый адрес региона, его размер и его защита. Теперь получим все регионы памяти. Как это делается? Получаем информацию о регионе памяти на нулевом адресе. Проверяем статус и защиту региона. Если все в порядке — добавляем его в список. Получаем информацию о следующем регионе. Проверяем и добавляем его в список. Продолжаем по кругу. public List<MemoryRegion> QueryMemoryRegions() { long curr = 0; var regions = new List<MemoryRegion>(); while (true) { try { var memDump = WinAPI.VirtualQueryEx(_processHandle, (IntPtr) curr, out var memInfo, 28); if (memDump == 0) break; if ((memInfo.State & 0x1000) != 0 && (memInfo.Protect & 0x100) == 0) { regions.Add(new MemoryRegion { BaseAddress = memInfo.BaseAddress, RegionSize = memInfo.RegionSize, Protect = memInfo.Protect }); } curr = (long) memInfo.BaseAddress + (long) memInfo.RegionSize; } catch { break; } } return regions; } После получения регионов просканируем их на наличие нужного нам паттерна. Паттерн состоит из частей двух типов — известного и неизвестного (меняющийся байт): например, 00 ?? ?? FB. Создадим интерфейс для описания этих частей. interface IMemoryPatternPart { bool Matches(byte b); } Теперь опишем ту часть, которая имеет известный байт. public class MatchMemoryPatternPart : IMemoryPatternPart { public byte ValidByte { get; } public MatchMemoryPatternPart(byte valid) { ValidByte = valid; } public bool Matches(byte b) => ValidByte == b; } То же самое провернем со вторым типом. public class AnyMemoryPatternPart : IMemoryPatternPart { public bool Matches(byte b) => true; } Теперь сделаем парсинг паттерна из строки. private void Parse(string pattern) { var parts = pattern.Split(' '); _patternParts.Clear(); foreach (var part in parts) { if (part.Length != 2) { throw new Exception("Invalid pattern."); } if (part.Equals("??")) { _patternParts.Add(new AnyMemoryPatternPart()); continue; } if (!byte.TryParse(part, NumberStyles.HexNumber, null, out var result)) { throw new Exception("Invalid pattern."); } _patternParts.Add(new MatchMemoryPatternPart(result)); } } Как уже делалось выше, проверяем, какой это тип части паттерна, парсим его, если необходимо, и добавляем в список. Надо проверить работу этого метода. var p = new MemoryPattern("01 ?? 02 ?? 03 ?? FF"); Успех! Теперь нам нужно научить наш MemoryManager читать память. public byte[] ReadMemory(IntPtr addr, int size) { var buff = new byte[size]; return WinAPI.ReadProcessMemory(_processHandle, addr, buff, size, out _) ? buff : null; } Сначала я написал красивую функцию с использованием Linq для сканирования памяти. Но ее выполнение заняло много времени. Затем я переписал метод без использования этой технологии, и все заработало в разы быстрее. Результат оптимизированной функции: Быстрое сканирование памяти Результат оригинальной функции: Очень медленное сканирование памяти Теперь поделюсь обретенной на этом этапе мудростью: не бойся оптимизировать свой код. Библиотеки не всегда предоставляют самые быстрые решения. Оригинальная функция: public IntPtr ScanForPatternInRegion(MemoryRegion region, MemoryPattern pattern) { var endAddr = (int) region.RegionSize - pattern.Size; var wholeMemory = ReadMemory(region.BaseAddress, (int) region.RegionSize); for (var addr = 0; addr < endAddr; addr++) { var b = wholeMemory.Skip(addr).Take(pattern.Size).ToArray(); if (!pattern.PatternParts.First().Matches(b.First())) { continue; } if (!pattern.PatternParts.Last().Matches(b.Last())) { continue; } var found = true; for (var i = 1; i < pattern.Size - 1; i++) { if (!pattern.PatternParts[i].Matches(b[i])) { found = false; break; } } if (!found) { continue; } return region.BaseAddress + addr; } return IntPtr.Zero; } Исправленная функция (просто используй Array.Copy()). public IntPtr ScanForPatternInRegion(MemoryRegion region, MemoryPattern pattern) { var endAddr = (int) region.RegionSize - pattern.Size; var wholeMemory = ReadMemory(region.BaseAddress, (int) region.RegionSize); for (var addr = 0; addr < endAddr; addr++) { var buff = new byte[pattern.Size]; Array.Copy(wholeMemory, addr, buff, 0, buff.Length); var found = true; for (var i = 0; i < pattern.Size; i++) { if (!pattern.PatternParts[i].Matches(buff[i])) { found = false; break; } } if (!found) { continue; } return region.BaseAddress + addr; } return IntPtr.Zero; } Эта функция ищет паттерн внутри региона памяти. Следующая функция использует ее для сканирования памяти всего процесса. public IntPtr PatternScan(MemoryPattern pattern) { var regions = QueryMemoryRegions(); foreach (var memoryRegion in regions) { var addr = ScanForPatternInRegion(memoryRegion, pattern); if (addr == IntPtr.Zero) { continue; } return addr; } return IntPtr.Zero; } Добавим две функции для считывания и записи 32-битного числа в память. public int ReadInt32(IntPtr addr) { return BitConverter.ToInt32(ReadMemory(addr, 4), 0); } public void WriteInt32(IntPtr addr, int value) { var b = BitConverter.GetBytes(value); WinAPI.WriteProcessMemory(_processHandle, addr, b, b.Length, out _); } Теперь все готово для поиска паттерна и написания основного кода чита. var playerBase = memory.PatternScan(new MemoryPattern("ED 03 00 00 01 00 00 00")); Находим паттерн в памяти, затем — адрес жизней игрока. var playerHealth = playerBase + 24; Считываем значение жизней: Console.WriteLine($"Current health: {memory.ReadInt32(playerHealth)}"); Почему бы не дать игроку почти бесконечные жизни? memory.WriteInt32(playerHealth, int.MaxValue); И снова считаем жизни игрока для демонстрации. Console.WriteLine($"New health: {memory.ReadInt32(playerHealth)}"); Проверяем Запустим наш чит, потом запустим игру. Все работает Попробуем нажать Enter в «игре». Жизни изменились Чит работает! Пишем свой первый инжектор Есть много способов заставить процесс загрузить наш код. Можно использовать DLL Hijacking, можно SetWindowsHookEx, но мы начнем с самой простой и известной функции — LoadLibrary. LoadLibrary заставляет нужный нам процесс самостоятельно загрузить библиотеку. Нам понадобится дескриптор с необходимыми правами. Начнем подготовку к инжекту. Сначала получим у пользователя имя библиотеки. Console.Write("> Enter DLL name: "); var dllName = Console.ReadLine(); if (string.IsNullOrEmpty(dllName) || !File.Exists(dllName)) { Console.WriteLine("DLL name is invalid!"); Console.ReadLine(); return; } var fullPath = Path.GetFullPath(dllName); Затем запросим у пользователя имя процесса и найдем его ID. var fullPath = Path.GetFullPath(dllName); var fullPathBytes = Encoding.ASCII.GetBytes(fullPath); Console.Write("> Enter process name: "); var processName = Console.ReadLine(); if (string.IsNullOrEmpty(dllName)) { Console.WriteLine("Process name is invalid!"); Console.ReadLine(); return; } var prcs = Process.GetProcessesByName(processName); if (prcs.Length == 0) { Console.WriteLine("Process wasn't found."); Console.ReadLine(); return; } var prcId = prcs.First().Id; У этого кода будут проблемы с процессами с одинаковыми именами. Теперь можно перейти к первому методу инжекта. Имплементируем LoadLibrary инжект Для начала разберем принцип работы данного типа инжектора. Сначала он считывает полный путь до библиотеки с диска. Собирает ее в строку. Затем мы получаем адрес LoadLibraryA(LPCSTR) при помощи GetProcAddress(HMODULE, LPCSTR). Выделяет память для строки внутри приложения, записывает ее туда. После создает поток по адресу LoadLibraryA, передавая путь в аргументе. Для работы укажем импорты OpenProcess, ReadProcessMemory, WriteProcessMemory, GetProcAddress, GetModuleHandle, CreateRemoteThread, VirtualAllocEx. WWW Сигнатуры можно запросто найти на pinvoke.net. Первым делом откроем дескриптор с полным доступом к процессу. var handle = WinAPI.OpenProcess(WinAPI.ProcessAccessFlags.All, false, processID); if (handle == IntPtr.Zero) { Console.WriteLine("Can't open process."); return; } Превратим нашу строку в байты. var libraryPathBytes = Encoding.ASCII.GetBytes(libraryPath); После необходимо выделить память для этой строки. var memory = WinAPI.VirtualAllocEx(handle, IntPtr.Zero, 256, WinAPI.AllocationType.Commit | WinAPI.AllocationType.Reserve, WinAPI.MemoryProtection.ExecuteReadWrite); В функцию передается дескриптор процесса handle: _MAX_PATH (максимальный размер пути в Windows), он равен 256. Указываем, что в память можно записать, считать ее и выполнить. Записываем строку внутрь процесса. WinAPI.WriteProcessMemory(handle, memory, libraryPathBytes, libraryPathBytes.Length, out var bytesWritten); Так как мы будем использовать функцию LoadLibraryA для загрузки библиотеки, нам нужно получить ее адрес. var funcAddr = WinAPI.GetProcAddress(WinAPI.GetModuleHandle("kernel32"), "LoadLibraryA"); Все готово для запуска процесса инжекта. Осталось лишь создать поток в удаленном приложении: var thread = WinAPI.CreateRemoteThread(handle, IntPtr.Zero, IntPtr.Zero, funcAddr, memory, 0, IntPtr.Zero); Инжектор готов, но проверять его будем только после написания простой библиотеки. Пишем основу для internal Переходим на C++! Начнем с точки входа и простого сообщения через WinAPI. Точка входа DLL должна принимать три параметра: HINSTANCE, DWORD, LPVOID. HINSTANCE — ссылается на библиотеку. DWORD — это причина вызова точки входа (загрузка и выгрузка DLL). LPVOID — зарезервированное значение. Так выглядит пустая точка входа библиотеки: #include <Windows.h> BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ) { return 0; } Для начала проверим, почему вызывается точка входа. if(fdwReason == DLL_PROCESS_ATTACH) { } Аргумент fdwReason будет равен DLL_PROCESS_ATTACH, если библиотека только что была подключена к процессу, или DLL_PROCESS_DETACH, если она в процессе выгрузки. Для теста выведем сообщение: if(fdwReason == DLL_PROCESS_ATTACH) { MessageBox(nullptr, "Hello world!", "", 0); } Теперь можем проверить инжектор и эту библиотеку. Запускаем инжектор, вводим имя библиотеки и процесса. Библиотека загружена Теперь напишем простой класс с синглтоном для красоты кода. #pragma once class internal_cheat { public: static internal_cheat* get_instance(); void initialize(); void run(); private: static internal_cheat* _instance; bool was_initialized_ = false; internal_cheat(); }; Теперь сам код. Конструктор по умолчанию и синглтон. internal_cheat::internal_cheat() = default; internal_cheat* internal_cheat::get_instance() { if(_instance == nullptr) { _instance = new internal_cheat(); } return _instance; } Далее простой код точки входа. #include <Windows.h> #include "InternalCheat.h" BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ) { if(fdwReason == DLL_PROCESS_ATTACH) { auto cheat = internal_cheat::get_instance(); cheat->initialize(); cheat->run(); } return 0; } Должен сказать, что на следующую часть ушло больше всего времени. Одна маленькая ошибка привела к огромной трате времени. Но я сделал выводы и объясню тебе, где можно допустить такую ошибку и как ее обнаружить. Нам нужно найти паттерн внутри памяти игры. Для этого сначала мы переберем все регионы памяти приложения, затем просканируем каждый из них. Ниже представлена имплементация получения списка регионов памяти, но только для собственного процесса. Я объяснил принцип ее работы ранее. DWORD internal_cheat::find_pattern(std::string pattern) { auto mbi = MEMORY_BASIC_INFORMATION(); DWORD curr_addr = 0; while(true) { if(VirtualQuery(reinterpret_cast<const void*>(curr_addr), &mbi, sizeof mbi) == 0) { break; } if((mbi.State == MEM_COMMIT || mbi.State == MEM_RESERVE) && (mbi.Protect == PAGE_READONLY || mbi.Protect == PAGE_READWRITE || mbi.Protect == PAGE_EXECUTE_READ || mbi.Protect == PAGE_EXECUTE_READWRITE)) { auto result = find_pattern_in_range(pattern, reinterpret_cast<DWORD>(mbi.BaseAddress), reinterpret_cast<DWORD>(mbi.BaseAddress) + mbi.RegionSize); if(result != NULL) { return result; } } curr_addr += mbi.RegionSize; } return NULL; } Для каждого найденного региона этот код вызывает функцию find_pattern_in_range, которая ищет паттерн в этом регионе. DWORD internal_cheat::find_pattern_in_range(std::string pattern, const DWORD range_start, const DWORD range_end) { auto strstream = istringstream(pattern); vector<int> values; string s; Сначала функция парсит паттерн. while (getline(strstream, s, ' ')) { if (s.find("??") != std::string::npos) { values.push_back(-1); continue; } auto parsed = stoi(s, 0, 16); values.push_back(parsed); } Затем начинает и само сканирование. for(auto p_cur = range_start; p_cur < range_end; p_cur++ ) { auto localAddr = p_cur; auto found = true; for (auto value : values) { if(value == -1) { localAddr += 1; continue; } auto neededValue = static_cast<char>(value); auto pCurrentValue = reinterpret_cast<char*>(localAddr); auto currentValue = *pCurrentValue; if(neededValue != currentValue) { found = false; break; } localAddr += 1; } if(found) { return p_cur; } } return NULL; } Я использовал вектор из int, чтобы хранить данные о паттерне, -1 означает, что там может находиться любой байт. Сделал я это, чтобы упростить поиск паттерна, ускорить его и не переводить один и тот же код из внешнего чита. Теперь несколько слов про ошибку, о которой я говорил ранее. Я постоянно переписывал функцию поиска паттерна, пока не решил взглянуть на функцию поиска регионов памяти. Проблема была в том, что я сравнивал защиту памяти совсем неправильно. Первоначальная версия: if((mbi.State == MEM_COMMIT || mbi.State == MEM_RESERVE) && (mbi.Protect == PAGE_EXECUTE_READ || mbi.Protect == PAGE_EXECUTE_READWRITE)) { } Код принимал только страницы с читаемой/исполняемой памятью и читаемой/записываемой/исполняемой памятью. Остальные же он игнорировал. Код был изменен на такой: if((mbi.State == MEM_COMMIT || mbi.State == MEM_RESERVE) && (mbi.Protect == PAGE_READONLY || mbi.Protect == PAGE_READWRITE || mbi.Protect == PAGE_EXECUTE_READ || mbi.Protect == PAGE_EXECUTE_READWRITE)) { } Эта функция начала находить все нужные страницы памяти. INFO PAGE_READONLY может вызвать критическую ошибку во время записи данных, у нас всегда есть VirtualProtect. Обнаружил же я эту ошибку, когда начал проверять страницы памяти в приложении при помощи Process Hacker и Cheat Engine. Мой паттерн оказался в одном из самых первых регионов памяти с защитой от исполнения, поэтому он никогда не находился. Теперь же, найдя паттерн, мы можем сохранить его в поле нашего класса. void internal_cheat::initialize() { if(was_initialized_) { return; } printf("\n\n[CHEAT] Cheat was loaded! Initializing..\n"); was_initialized_ = true; player_base_ = reinterpret_cast<void*>(find_pattern("ED 03 00 00 01 00 00 00")); printf("[CHEAT] Found playerbase at 0x%p\n", player_base_); } После этого будет вызвана функция internal_cheat::run(), которая и должна выполнять все функции чита. void internal_cheat::run() { printf("[CHEAT] Cheat is now running.\n"); const auto player_health = reinterpret_cast<int*>(reinterpret_cast<DWORD>(player_base_) + 7); while(true) { *player_health = INT_MAX; Sleep(100); } } Мы просто получаем адрес жизней игрока от нашего паттерна и устанавливаем их на максимальное значение (INT_MAX) каждые 100 мс. Проверяем наш чит Запускаем игру, инжектим библиотеку. Чит заинжекчен Попробуем нажать пару раз кнопку Enter. Чит работает Наши жизни не изменяются и все прекрасно работает! Подведем итоги Любой элемент игры, который обрабатывается на нашем компьютере, может быть модифицирован или вовсе удален. К сожалению или к счастью, игровые компании не всегда заботятся об античите, открывая дорогу нам, читерам.
  3. Если голова на плечах присутсвует - не попадешь. Братец мой пол года по плюшу прав катался, все нормально было, проверяли - отпускали. И как-то раз нажрался и за руль, у тут вот его приняли. 5 суток отсидел, в итоге 400.000 отдали чтобы не судили засранца. Было пару месяцев назад.
  4. Знаю Эксперта, ни раз приобретал у него различные гаджеты, мои рекомендации и успехов в продаже!!
  5. DembRь,Как ситуация решилась?
  6. Привет HEZER. Спрос будет гарантирую, выкладывай сканы либо дай мне ссыль в лс
  7. юзал 1 месяц , жестко тормозит и логи ведутся
  8. Как я думаю, операторы не проверяют потом данные которые написаны в заявке, а просто вписывают их. Если это так, то думаю можно договориться с чуваками которые продают симки на стойках, дашь им пару сотен, а они от балды придумают данные для заявки.
  9. Смотрим видео как взяли кардеров! Смотрим с 14 минуты) http://www.youtube.com/watch?v=OXcX0B-0Gao
  10. Кидалы всегда торопят, пока клиент под воздействием аферы. Будьте бдительнее в следующий раз!
  11. В Европе USA стреляет нормально, НО, зависит от бинов. Gold/Platinum не особо катаются, пробуй Classic. Там лимитов нету Вернее катать можно и на 6к (лично видел, как прокатывали, в нашей стране ) Вообще, попробуй покатать MC, из личного наблюдения, ходит лучше чем Visa, не знаю, чем это вызвано, но я убедился в этом. //Я лично не катал, катал мой товарищ, с которым я около года общался по скайп/телефон/icq. Так как он не совсем русский, я ему покупал дампы, и передавал по мейлу. Из этих наблюдений сделаны мои выводы.
  12. скорее это антенки gprs/3g интернета
  13. Мошенник. Кидает людей на хостинг и сервера. предлагает участвовать в различных бизнес проектах чтобы получить деньги. Кинул уже кучу народа на разных схемах. ICQ: 209844658 421187 325453015 244744744 351939547 427587384 ники: mastak stiratell balthost 3gig мыла: [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] кошель: Z303210074407(заблокирован) http://arbitrage.webmoney.ru/asp/claims ... 3359947196 адреса: Финляндия Хельсинки Teollisuuskatu 13 Hakula 12 74113 Эстония Tallinn State/Province: Harjumsa Kivila 10 - 90 Pae 4 -3 Пунане 35-1 Pae 30 Tompea 1 tel: +3725571095 +37255615007 +37258371100 +37253814275 +3725581670 +372588685 +37258045637 IP: 217.159.225.30 82.131.7.150 217.159.225.0 сайты: estserver.com balthost.eu balthost.ee ha-ha.biz 3gig.org профили на форумах: ha-ha.biz hostobzor.ru ru-board.com woweb.ru webhostingtalk.ru forum.ee webhostingtalk.ru ru-board.com oszone.net hostobzor.ru его блядь: rate.ee все сообщники: Mati Merkel Kert Tisler Vend Loosman Jan Aarest Ot Puustaru Raivo Ajleih Koli Pemenas Vladimir Barzenyavichus Timmi Seep Dmitri Golovnev Kiril Buhvin Ilya Morozovskiy Урмас Метсалу Виталий Скворцов Testi Porka Nadezda Gavrilova: 74113 Estonia Tallinn Toompea 4 +37258045637 +372538145555 Fie Svetlana Davarasvili: Estonia Tallinn Veeru 4-95 +3725571095 +37255983103 [email protected]