ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 12.09.2009, 15:48
Аватар для AHJIoKeR
AHJIoKeR
Новичок
Регистрация: 11.09.2009
Сообщений: 9
Провел на форуме:
29897

Репутация: 0
По умолчанию

Да хотябы не продолжение, а начало изменить чтобы можно было GGC запустить в отладчике)
Кстати, а скоро будет решение данной гадости?

Последний раз редактировалось AHJIoKeR; 12.09.2009 в 15:54..
 
Ответить с цитированием

  #12  
Старый 12.09.2009, 16:34
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию

Цитата:
Сообщение от Dosia  
да, добавлена антиотладка, походу у статьи будет продолжение ...
насколько я понимаю гарена палит трассировку и делает переход не на ту точку на которую надо )
по моим скудным познаниям предполагаю что надо где то сменить переход или убрать проверку
 
Ответить с цитированием

  #13  
Старый 12.09.2009, 22:32
Аватар для AHJIoKeR
AHJIoKeR
Новичок
Регистрация: 11.09.2009
Сообщений: 9
Провел на форуме:
29897

Репутация: 0
По умолчанию

to svesve
мб ты решишь эту проблему?
 
Ответить с цитированием

  #14  
Старый 13.09.2009, 00:07
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию

я в дизассемблировании и отладки вообще не шарю )
 
Ответить с цитированием

Низкоуровневое исследование post 4 of 4
  #15  
Старый 13.09.2009, 18:26
Аватар для Dosia
Dosia
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме:
1313455

Репутация: 249
По умолчанию Низкоуровневое исследование post 4 of 4

g) Уберем flood защиту из чата

Тут нам требуется знание API функций которые отвечают за получение содержимого элемента управления: GetWindowText GetDlgItemText
Функция GetWindowText копирует текст строки заголовка определяемого окна (если оно имеет ее) в буфер. Если определяемое окно - элемент управления, текст элемента управления копируется.
Параметры:
hWnd, он же handle:Идентифицирует окно или элемент управления, содержащее текст;
lpString:Указывает на буфер, который примет текст.
nMaxCount:Устанавливает максимальное число символов для копирования в буфер. Если текст превышает это ограничение, он усекается.

Функция GetDlgItemText Извлекает заголовок или текст, связанный с органом управления в диалоговом окне.
В оле уже загружена “Garena.exe”, но отладчик не запущен на выполнение, мы находимся на точке входа в программу, жмем на листинге правой кнопкой “Search for” -> “Name (label) in current module” или жмем “Ctrl+N”. Начинаем набор текста (активное окно – окно отладчика): “GetWindowText”, функция найдена “GetWindowTextW”, кликаем на строчку, вызываем контекстное меню, жмем “Set breakpoint on every reference”, только что мы поставили точку останова каждом вызове этой функции. В строке состояния (нижний левый угол) оля отобразила нам количество установленных точек останова. На “GetDlgItemText” брейкпоинт ставить не будем, так как забегая вперед, могу сказать, что она нам не понадобится.
Жмем “F9” – начинаем выполнение программы. Останавливаемся на брейпоинтах – убираем их нажав “F2” или вызвав контекстное меню и так до тех пор, пока мы не войдем в какую либо комнату, так как нас интересует только вызов этой функции при отправке сообщения из компонента в котором мы набираем текст (текстового поля) . И так мы сидим в комнате, набираем сообщение в окне чата, жмем кнопку “Отправить” , после чего сразу же всплывает окно отладчика, Трассируем программу по “F8”, оказываемся тут:
Исходя из снятия предыдущих ограничений мне показался этот код очень интересным:
по адресу: 41FC64 наблюдаем установку условного перехода командой “TEST AL,AL”, а прямо за ним (41FC66) и сам переход “JE” (на рисунке красный прямоугольник). Именно этот переход и играет решающую роль при проверке печаталось ли это сообщение ранее, если AL будет равен 0,то переход будет выполнен и наше сообщение увидят остальные пользователи, иначе нам сообщат что мы, похоже, флудеры. смотрим выше установки флага “Z”, ведь команда “TEST” устанавливает именно его, видим вызов по адресу: 41FC5F (синий прямоугольник на рисунке), кликаем левой кнопкой мыши на вызове, жмем “Enter” и мы внутри. Опять же слудует заметить что процедура вызывается из нескольких мест : “Local calls from 0041D7BC, 0041FC5F”, спасибо оле. Но мы помним что нам нужно найти где именно в этой процедуре устанавливается значение регистра AL, причем оно будет установлено в 1, в то время как нам требуется 0. Поставим точку останова на адрес этой процедуры, нажав “F2”, запускаем программу на выполнение – жмем “F9”. В окне гарены печатаем сообщение, которое будет повтором ранее отправленного нами (чтобы получить предупреждение о недопустимости флуда), после чего жмем “Отправить”. Успешно прервались, трассируем по "F8”, в поисках установки регистра AL (кода вроде: “MOV AL,1”). Трассировать пришлось не долго:


На скрине видно, что по адресу: 41B290 происходит установка регистра AL равным 1, что является не приемлимым, так как нам нужен 0, кликнем по команде (“MOV AL,1”),нажмем “space bar”,исправим команду на “MOV AL,0” или “XOR AL,AL” (выполняет операцию логического исключающего ИЛИ над операндами: бит результата равен 1, если значения соответствующих битов операндов различны, в остальных случаях бит результата равен 0), жмем “assemble”. После исправленной команды регистр AL больше нигде не устанавливается (через несколько команд идет возврат управления и это отчетливо видно), так что можно смело жать “F9”. Ниже по адресу: 41B2B5 видим команду “XOR AL,AL” устанавливающую регистр AL равным 0 или попросту очищающим его, это происходит в случае если мы привилегированные пользователи, но теперь и в случае если мы обыкновенные юзеры в AL будет помещаться 0 ;D

//Хочу обратить ваше внимание, что это не способ решения, можно было также исправить переходы и т.д. Но это более правильный метод.

Тестим – все ок, но вот незадача, если мы печатаем текст слишком быстро, то нам сообщают что мы флудим.
Если внимательно посмотреть на листинг, то можно было заметить:


Но проверку с помощью таймера (пол секунды (500 милисекунд, как окажется чуть позже)) – 1 сообщение, на скрине красный прямоугольник) мы найдем другим способом:
На листинге (дизассемблированный код) жмем “Ctrl+N”, набираем текст: “GetTickCount” (регистр символов не имеет значения). Эта функция нам уже встречалась и я давал её описание выше. Почему мы ищем именно её? потому что как правило именно с её помощью замеряют интервалы времени, нам ведь надо отмерить 1 секунду, не так ли? Кликнем по функции, жмем правую кнопку мыши, “Set breakpoint on every reference”, после чего продолжаем выполнение программы (если оно прервано), попутно убирая уже сработавшие бряки. Основной и еще какие то левые таймеры. Переходим к окну игрового клиента, печатаем текст (любой), жмем “Отправить”, прерываемся:


Идем к началу функции (416B20) и видим что она вызывается по адресу 41FBE7, переходим по адресу “Gtrl+G” на листинге -> “41FBE7” -> “OK”. Вуаля, мы оказываемся именно там, где и планировалось. по адресу: 41FBE7 вызов функции проверки – прошел ли таймаут или мы слишком рано пытаемся отправить сообщение? Далее по адресу: 41FBEC видим проверку “TEST AL,AL”, значит функция опять устанавливает регистр AL, как и в предыдущем случае, потом идет условный переход (41FBEE), если AL = 0 то мы перейдем, и наше сообщение будет проверятся на повтор, но это мы уже исправли ;D
Идем в функцию (416B20), изучаем код:
сразу после вызова функции, по адресу видим сравнение регистра EAXс 1F4h = 500d вот она наша проверка, ниже по адресу 416B41 в AL перемещается значение регистра BL, после чего из стека считывается число в регистр EBX и идет RETN. Таким образом AL больше нигде не устанавливается. Теперь нас даже особо не интересует проверка по адресу: 416B37 где BL сравнивается с самим собой и если он равен 0 то перехода с адреса: 416B39 на адрес: 416B3F не случится. Мы можем:
1) исправить значение устанавливаемое в регистр по адресу: 416B41MOV AL,BL” в “MOV AL,0” или “XOR AL,AL”.
2) Исправить таймаут по которому идет сравнение по адресу: 416B2FCMP EAX,1F4” в “CMP EAX,0
3) Исправить условный переход по адресу: 41FBEEJE SHORT 0041FC5A” на безусловный “JMP SHORT 0041FC5A”.
Как сохранить внесенные в код изменения смотреть в конце статьи.

h) Уберем ограничение на запуск одной копии программы


Тут мы поступим очень просто – будем трассировать программу по “F8” (благо делать это нам придется не долго). Запускаем гарену(без отладчика), нам нужна уже работающий экземпляр приложения, чтобы посмотреть на его реакцию. Грузим в олю гарену, после чего жмем “F8”, Трассируем по “F8” до адреса: 55F3D4, как только мы на этом адресе нажмем “F8”, чтобы перейти к следующей инструкции, окно уже запущенной без отладчика гарены получит фокус и/или начнет мигать. Следовательно по этому вызову приложение проверило, запущен ли один его экземпляр или нет. Переходим в функцию нажав “Enter” по адресу: 55F3D4, ставим точку останова (бряк) на первую команду в функции (как? рассматривалось ранее):


После чего жмем “Ctrl+F2” – отладчик перезагрузит программу и мы снова окажемся на точке входа. Жмем “F9”, прерываемся на брейкпоинте и продолжаем трассировку программы по “F8”, при выполнении вызова по адресу: 42E5C1 показалось окно уже запущенного клиента, входим в вызов нажимая “Enter”, изучаем код:


в стек помещаются параметры для последующего вызова функции “SendMessage”:
function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
Посылает сообщение оконной функции указанного окна. Возвpат из функции осуществляется только после обpаботки сообщения.

Таким образом по этому вызову приложение посылает команду “всплыть” уже запущенному экземпляру, следовательно проверка на запуск второго экземпляра уже была проведена, но где? Перезагрузим программу (“Ctrl+F2”)и начнем трассировку (“F8”) с установленного нами бряка: по адресу 42D9C0 видим условный переход, который может передать управление на адрес 42E5C1, что у нас по адресу 42E5C1? Смотри выше – вызов процедуры которая установит фокус на окно уже запущенного экземпляра программы с помощью функции “ SendMessage”. Похоже мы нашли этот переход ;D
Смотрим какая команда задает переход , это “TEST AL,AL” (42D9B9), выше вызов, скорее всего в нем то и устанавливается значение регистра AL. заходим в вызов нажав “Enter”:


Видим что там происходит вызов функции OpenMutex:
Функция возвращает HANDLE (дескриптор - указатель на структуру, файл ил процесс )существующего окна.
Параметры:
DWORD fdwAccess, // access flag
BOOL fInherit, // inherit flag
LPCTSTR lpszMutexName // address of mutex-object name //
);

Можно посмотреть на параметры которые были помещены в стек для вызова функции пройдя от адреса: 4369A0 (начало функции) до адреса: 4369AF (вызов OpenMutex) по “F8”.


По адресу: 4369B7 видим “TEST EAX,EAX”, после него идет установка флага регистра AL командой SETNE, если результатом логического ”И” – “TEST” явился флаг “Z” = 0, то в AL будет помещено “01”, если “Z”=1 то AL будет установлен в “00” и после выхода из функции на мы не перейдем по условному переходу (42D9C0 ) и программа запустится.
Проверим это, запустим программу на выполнение, предварительно поставив бряк на адресе: 4369B9, прервавшись мы поменяем значение флага “Z” на обратное, дважды щелкнув по нему. После чего команда “SETNE AL” как и планировалось установит значение AL в “00”.
Таким образом, мы можем:
1) Вместо команды “SETNE AL” (4369B9) установить “MOV AL,0
2) Занопать (забить командами NOP) условный переход по адресу: 42D9C0
Вариантов у нас много, но я указал основные.

7) Как сохранить сделанные в коде изменения

Жмем правую кнопку мыши на листинге, вызывая контекстное меню, выбираем:
Copy to executable” -> “All modifications”, после чего нас спросят действительно ли мы хотим копировать все изменения сделанные в коде программы, жмем “Copy all”, в появившемся окне жмем правую кнопку, вызывая всплывающее меню, выбираем “Save file”, указываем имя файла и его местоположение, после чего жмем “Сохранить”.

8) Полезные ссылки:

Win32Asm Tutorial
Win32Asm Tutorial #2
Win32Asm Tutorial #3
Intel Pentium Instruction Set Reference
Снимаем таймер подключения в Garena Client

В принципе это все материалы которые были использованы в ходе создания данной статьи.

9) Хотелось бы сказать:


О найденных ошибках и неточностях просьба писать в ПМ, скажу сразу, что указанные на скринах адреса могут отличатся от адресов которые вы получите на практике, но на принцип нахождения и устранения ограничения это не влияет.

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

Кому интересно, можете найти полностью рабочую версию со всеми выше описанными изменениями (и многими другими, которые не попали в статью: функции админа (которые в прочем не все работают) и т.д.) тут (Последнее обновление: 10.02.10) Размер: Garena.rar (9.85 MB) (в связи с тем что данная версия гарены не последняя, в архиве находится вся папка Garena, чтобы не было проблем из - за различия файлов).
//Обновление от 10.02.10: Убран автоапдейт
  1. rapidshare.ру
  2. dump.ру
  3. multiupload.ком

Запускайте отладчик, смотрите что к чему, сравнивайте исходный файл игрового клиента и мою версию. Pass: antichat.ru.

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

© DoctorDraD aka Dosia

Последний раз редактировалось Dosia; 10.02.2010 в 21:11..
 
Ответить с цитированием

  #16  
Старый 13.09.2009, 23:20
Аватар для AHJIoKeR
AHJIoKeR
Новичок
Регистрация: 11.09.2009
Сообщений: 9
Провел на форуме:
29897

Репутация: 0
По умолчанию

Уберем таймер на вход в комнату
-----
Получаю наг1 перехржу в отладчик, f12,alt+f9, возвращаюсь в ггц жму отмена, кстати там нет "ОК", иду в отладчик а там все как после паузы стояло, так и стоит, единственно бряк создался, но на адрес:


меня не кинуло. Где я ошибся?

Последний раз редактировалось AHJIoKeR; 13.09.2009 в 23:25..
 
Ответить с цитированием

  #17  
Старый 14.09.2009, 18:16
Аватар для Dosia
Dosia
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
Провел на форуме:
1313455

Репутация: 249
По умолчанию

Ты не ошибся, статья не была переработана, переработаю ориентировочно до 17.09.09, так как произошли изменения в коде программы, то сабж не совсем корректен. О переиздании сообщу.

Последний раз редактировалось Dosia; 15.09.2009 в 11:03..
 
Ответить с цитированием

  #18  
Старый 14.09.2009, 22:40
Аватар для [EYFORIYA]
[EYFORIYA]
Новичок
Регистрация: 27.04.2009
Сообщений: 15
Провел на форуме:
196032

Репутация: 24
По умолчанию

где полное описание найти изменений
я так понял пинг стало видно в цифрах и защита от флуда отдыхает и лимит на комнаты тожэ естественно нету а еще чего кто заметил)
 
Ответить с цитированием

  #19  
Старый 14.09.2009, 23:04
Аватар для AHJIoKeR
AHJIoKeR
Новичок
Регистрация: 11.09.2009
Сообщений: 9
Провел на форуме:
29897

Репутация: 0
По умолчанию

to [EYFORIYA]:
а хз) я крякнутую скачал для того чтобы зглянуть работает ли она с новыми обновлениями, работает, но сообщение на голд выдает(наг1), так как изменились адреса, да и мессага тож), но юзать готовую не оч охото, сам процесс оч интересен!
to Dosia:
а можно еще убрать ограничение в хайлвлрумах, думаю это возможно?кста жду ночи=)
 
Ответить с цитированием

  #20  
Старый 15.09.2009, 13:01
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию

ТС респект однозначно, внимательно слежу за темой,очень интересно.
Как говориться Пиши ЕсЧО
 
Ответить с цитированием
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аккаунт от игрового клиента Garena. Ne1s0n Разное - Покупка, продажа, обмен 2 11.06.2009 23:11



TEST QR: []
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ