![]() |
eXeL@B —› Вопросы новичков —› Запуск клиент-серверного приложения от другой учетной записи |
Посл.ответ | Сообщение |
|
Создано: 25 июля 2013 21:42 · Личное сообщение · #1 Нужно обмануть программу,которая сообщает серваку имя компа и имя учетной записи пользователя,чтобы обойти бан. Недолго думая, становится ясно что стукачеством она может заниматься при помощи апишек GetComputerName и GetUserName. Однако, поставив бряк на GetUserName и заменив в отладчике логин, прога вываливается с ошибкой. А если зайти под другим логином,то работает. В чем тут подвох, помимо GetUserName есть ещё другие способы узнать настоящее имя пользователя,например через реестр? ![]() |
|
Создано: 25 июля 2013 23:07 · Личное сообщение · #2 |
|
Создано: 30 июля 2013 15:21 · Личное сообщение · #3 OSA Потому что другие (чужие) учетные записи на пароле,на сервере ведутся логи где записывается имя компьютера и имя пользователя, который подключался к БД. CreateProcessAsUser я так понимаю тоже ничего не даст, т.к. это тоже самое что кликнуть ПКМ "Run as ..." Задача другая - фальсифицировать информацию об учетке юзера и имени машины для конкретной программы. Есть у кого подобные наработки? ![]() |
|
Создано: 30 июля 2013 16:18 · Личное сообщение · #4 |
|
Создано: 30 июля 2013 16:21 · Поправил: ZX-CodeR · Личное сообщение · #5 |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 30 июля 2013 17:57 · Личное сообщение · #6 |
|
Создано: 30 июля 2013 18:17 · Личное сообщение · #7 ELF_7719116 пишет: По своему опыту, тут скорее всего подвох - на самом деле DeviceIoControl обычно используют, с привязкой к серийнику диска или нечто подобное. Да ладно,это совершенно точно отпадает. Прога самопальная, написана людьми весьма далекими от кодинга (знают Делфи на уровне студентов), что такое DeviceIoControl они знать не знают. ELF_7719116 пишет: Как заметил ZX-CodeR, без самой самой программы, гадать бессмысленно! А что он с ней делать собрался? Без сервака получишь access violation ELF_7719116 пишет: Слишком примитивно с помощью GetComputerName и GetUserName идентифицировать юзера Я думаю через реестр ещё идет проверка.Может и не одна. На что можно ещё бряки поставить? GetUserName ловится,но потом получаешь ошибку если заменить логин даже таким же числом символов ![]() |
|
Создано: 30 июля 2013 18:33 · Личное сообщение · #8 |
|
Создано: 30 июля 2013 23:06 · Личное сообщение · #9 HEXMature пишет: Потому что другие (чужие) учетные записи на пароле,на сервере ведутся логи где записывается имя компьютера и имя пользователя, который подключался к БД. CreateProcessAsUser я так понимаю тоже ничего не даст, т.к. это тоже самое что кликнуть ПКМ "Run as ..." Задача другая - фальсифицировать информацию об учетке юзера и имени машины для конкретной программы. Есть у кого подобные наработки? Есть утилиты для изменения так называемых Credentials у активных logon-сессий: WCE и mimikatz. Вот только в данном случае это наврятли поможет, т.к. GetComputerName и GetUserName не читают Credentials (я так полагаю). Да и для фальсификации нужно знать из под какой учётки будет "атака": админ/не админ, локальная учётка/доменная учётка. Просто локальные учётки хранятся в SAM (для работы с ними из LSASS.EXE своё API), а доменные учётки в другом месте (msv1_0.dll - там другое API). Если и фальсифицировать GetUserName, то через LSASS.EXE. Может в WCE/mimikatz уже есть что то по данной тематике, но я не помню. ЗЫ. А так наработки по поводу аналога WCE и mimikatz имеются. ![]() |
|
Создано: 31 июля 2013 00:11 · Поправил: DenCoder · Личное сообщение · #10 HEXMature ZX-CodeR пишет: Можно еще траффик проанализировать и если в открытом виде данные идут попробовать их менять. Не можно, а нужно! Первым делом! Знаешь протокол - знаешь откуда отталкиваться. Бери Фиддлер, если http/https, WireShark - если другое, и вперёд. Кроме GetUserName() есть ещё GetUserNameEx(), кстати. Аналогично GetComputerName() - GetComputerNameEx(), ResUtilGetEnvironmentWithNetName(). Также ip-адрес и присвоенный идентификатор в реестре. Гадая, можно и не угадать. Универсальный способ (если протокол не определить) - ставим бряк на ws2_32.dll!send()/sendto()/WSASend()/WSASendTo(), по срабатыванию смотрим call stack, анализируем функции с точками возврата. Всё внимание здесь на буфер, откуда он берётся - локальный или динамически выделяется, где и как заполняется. Установками хард бряков на запись находим функцию-инициализатор содержимого буфера. Ну а там рядом должны быть уже видны и нужные нам функции. Хотя не исключён вариант, что они используются только на старте программы. Таким образом в несколько проходов start debug - stop debug устанавливаем функцию, которая получает имя. Ну а дальше как правило патч вызова. Также HEXMature пишет: Однако, поставив бряк на GetUserName и заменив в отладчике логин, прога вываливается с ошибкой.А если зайти под другим логином,то работает. HEXMature пишет: GetUserName ловится,но потом получаешь ошибку если заменить логин даже таким же числом символов Видимо прога от подменённого имени запрашивает у системы инфу, но так как реальное имя другое - то ничего не получает, кроме NULL, а в проге это не учтено. Поэтому и ACCESS_VIOLATION. Кстати, реальная оплошность разработчиков и на этом можно тоже сыграть. Наверняка, там что-нибудь вроде: Code:
Хотя я не телепат ) ----- IZ.RU ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Запуск клиент-серверного приложения от другой учетной записи |