Сейчас на форуме: asfa, bartolomeo (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Найти переменную и место, где она меняется |
Посл.ответ | Сообщение |
|
Создано: 07 февраля 2012 02:28 · Личное сообщение · #1 Пытаюсь использовать OllyDbg Нужно найти переменну, в которой записывается уникальное значение, id пользователя. Переменная - локальная переменная функции, поэтому поиск в памяти прогами вроде ArtMoney не помогает. Как это сделать? Пытался сделать trace и condition EAX=ID_пользователя, да только он походу показывает trace только в режиме выполнения по шагам, а не вобще... ![]() |
|
Создано: 07 февраля 2012 02:35 · Поправил: F_a_u_s_t · Личное сообщение · #2 |
|
Создано: 07 февраля 2012 03:26 · Личное сообщение · #3 Т.е. переменная находится в стеке по отрицательному смещению, вроде sub_49D9D5 proc near ... var_1A98 = dword ptr -1A98h ... Создается и используется в процедуре, а по выходу из нее уничтожается. Может быть можно установить брейк на изменение значения регистра, так или иначе она туда попадает, возможно ли такое? Значение переменной уникальное. ![]() |
|
Создано: 07 февраля 2012 09:16 · Личное сообщение · #4 |
|
Создано: 07 февраля 2012 09:34 · Личное сообщение · #5 |
|
Создано: 07 февраля 2012 10:22 · Личное сообщение · #6 |
|
Создано: 07 февраля 2012 12:19 · Личное сообщение · #7 logo2004, ну смотри, нам пофиг в какой функции оно делается, эта переменная высчитывается и инициализируется. Нам главное что она будет по нужному нам адресу. Кароче заходишь в интересующую функцию тебе. Дальше по f8 проходишь место примерно такое: Code:
вместо 30 может быть любое число. И ставишь хардварный бряк на нужную переменную. Потом запускаешь и ждёшь. ![]() |
|
Создано: 07 февраля 2012 12:29 · Личное сообщение · #8 |
|
Создано: 07 февраля 2012 12:50 · Личное сообщение · #9 |
|
Создано: 07 февраля 2012 12:58 · Личное сообщение · #10 logo2004 пишет: смещение относительно esp тоже не известно. ненадо знать смещение, если не знаешь процедуры. Можно узнать лишь реальный адресс, и его брякнуть. Будет очень много лишних срабатываний, но это лучше чем ничего. И ловить. Можешь прошёлкать конечно часа 2, но в конце концов найти нужник(точнее нужное место) ![]() |
|
Создано: 07 февраля 2012 22:56 · Личное сообщение · #11 |
|
Создано: 07 февраля 2012 23:43 · Личное сообщение · #12 |
|
Создано: 08 февраля 2012 02:03 · Личное сообщение · #13 logo2004, как это нет адреса? Кстати локальные переменные не уничтожаются!!!! Если они делались чем-нить типо add esp,100h После выполнения функции , данные в стеке сохраняются, но ненадолго, т.к. следующие функции задействует эту память в своих целях. ваще-то как то идёт рассуждение о вращении сферического коня в вакууме. Пора бы софтину выложить. ![]() |
|
Создано: 08 февраля 2012 12:04 · Поправил: tundra37 · Личное сообщение · #14 Переведу желание logo2004 нормально: есть известная величина ID пользователя и надо найти куда оно пишется. Видимо потом он желает поисследовать алгоритм сравнения. logo2004 Типичная новичковская ошибка: вместо того что описать реальную проблему, описывается проблема возникшая при реализации собственных идей. В данном случае можно-таки извратится, если конечно прога не слишком много времени ЦПУ занимает: надо поставить условный бряк по чтению на диапазон памяти(что-то я не нашел как в Олли это сделать, но раньше пользовался) . Но это метод "из пушки по воробьям". Гораздо удобнее брякнутся в процедуре, где этот ID используется и ловить там. Быстрее будет. А еще лучше протрассировать эту процедуру. Но это уже не для новичков. Поэтому желательно про прогу рассказать. А то вдруг окажется, что это онлайн логон, ID сравнивается на сервере и вы его никогда в памяти не найдете. Dart Sergius пишет: Кстати локальные переменные не уничтожаются!!!! Только возможно, в целях безопасности, ID трется сразу после использования. ![]() |
|
Создано: 08 февраля 2012 13:22 · Личное сообщение · #15 tundra37 и как вы себе это представляете? не поверю чтобы програмеры начали писать что-то типо такого Code:
да и оператор delete в с++ не затирает данные, а только ставит у себя флаг что данные больше не используются и их можно отдать под другие цели. А если это выделили в стеке - то эта переменная вскоре просто затрётся последующими функциями. ![]() |
|
Создано: 08 февраля 2012 18:51 · Личное сообщение · #16 Dart Sergius Что касается ID, то смысла его затирать нет. А вот ключ шифрования трется и это не от кракеров, а чтобы не утек через память. Против новичков и артмани - отличное средство. А вообще товарищ глупости творит: раз ID он знает, значит он его где-то взял - например в реестре или в зареганной проге на одном из окошек. Отсюда и надо плясать. Элементарно Ватсон ![]() ![]() |
|
Создано: 08 февраля 2012 19:48 · Личное сообщение · #17 ID знаю. Взломал игру несколько лет назад, а теперь вышла обновленная версия, старый патч не работает. Скорее всего, ID точно также хранится в локальной переменной функции. Только я вот забыл последовательность действий, которой я тогда нашел место, где используется переменная. > Гораздо удобнее брякнутся в процедуре, где этот ID используется и ловить там. А как ее найти-то? > После выполнения функции , данные в стеке сохраняются, но ненадолго, т.к. следующие функции задействует эту память в своих целях. А это идея, если она все таки не затирается другими функциями, и нужная функция все время вызывается при одном и том же значении esp, можно попробовать >А еще лучше протрассировать эту процедуру Как? ![]() |
|
Создано: 08 февраля 2012 20:54 · Личное сообщение · #18 |
|
Создано: 08 февраля 2012 22:42 · Личное сообщение · #19 |
|
Создано: 08 февраля 2012 23:07 · Личное сообщение · #20 |
|
Создано: 08 февраля 2012 23:16 · Личное сообщение · #21 |
|
Создано: 09 февраля 2012 01:46 · Личное сообщение · #22 > а ты ставь запись в лог при срабатывании и иди поспи. перед этим пришлось бы кликнуть на юзера, а как сделать это, если прога зависла > IDA пошустрее - не не слышал. Ну, я этот вывод сделал на основании того, что в OllyDbg в режиме трассироваки программа вобще намертво зависает, а в IDA, хоть и в режиме заедающей пластинки, музыка играет, и развернуть приложение можно, хотя видно там было только черный экран и курсор, с Olly вобще не разворачивалось. >Как как, ставь бряк на то что выводит этот текст. А вот чем выводится это вопрос, игра может быть на дирексе, на опен гл, гди. Без разницы, id не отображается, а отправляется в TCP пакете на сервер, текстом. А это идея, спасибо. Можно поставить break на send и условие поиска строки этого id в буфере. Теперь вопрос, как составить условие на поиск подстроки в IDA? ![]() |
|
Создано: 09 февраля 2012 02:20 · Личное сообщение · #23 logo2004 Значит делаешь так ищешь какую api функцию юзает та=воя прога чтобы отправлять данные. ставишь условный бряк на неё с записью в лог о параметрах. запускаешь радуешься что у тебя ничего не виснет выходишь и смотришь лог. В одном из пакетов будет твой id. Смотришь откуда была вызвана функция(это тоже в логах пишется) Идёшь туда и ревёрсишь это место с помощью IDA. И у ты считай нашёл место генерации idю(подсказка : обычно отправление данных заносится в отдельую функцию, так что придётся ещё побрякатся на этой функции(тоже с записью в лог), и отыскать искомую процедуру, которая генерит твой id. Нерадивые(или просто ленивые и не особо заботившиеся о безопасности) разрабы генерят и сразу же отправляют, так что процедура генерации и отправки будет буквально в паре байт друг от друга. Успеха. ![]() |
|
Создано: 09 февраля 2012 09:31 · Личное сообщение · #24 |
![]() |
eXeL@B —› Вопросы новичков —› Найти переменную и место, где она меняется |