Сейчас на форуме: vsv1 (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Прога ломается только под отладчиком
Посл.ответ Сообщение

Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 марта 2008 10:42
· Личное сообщение · #1

Уважаемые гуру помогите выйти из затупа а?
Есть программа, процедура проверки находится в dll, менял процедуру проверки в другой dll этой же проги и всё прокатило(заработал один из функционалов). В другой же dll - исправляю процедуру - в оле жму F9 - всё ОК! новый функционал работает - СУПЕР!(вроде бы) - выхожу из оли - WinHEX - правлю dll (как и предыдущую) - запускаю прогу - новый функционал НЕ работает! старый да - запускаю пропатченую версию под олей - НЕ работает(хотя видно что процедура исправлена т.е. код процедуры НЕ восстановился)! Отличие этой dll в том что она загружается сразу вместе с exe даже тогда когда под олей идет остановка на OEP(если это она ибо пока полагаюсь на олю) - тут обьясните начинающему когда она подгружается?
Ни dll ни exe не определяются как запакованные и листинг в IDA совпадает с листингом в оле(или это не показатель?).
Мест где можно поправить(и где правил) код много - от выдачи окна "Демо" и успешной работы дальше, до блокирования выдачи окна и успешной работы функционала, все эти места судя по F7 в оле идут последовательно, думал что прога считает как то контрольную сумму dll и приводил сумму к оригиналу - НЕ помогло. Не ужели прога как то накалывая олю и др. PE проги с точкой входа проверяет все эти места в dll ??? Как можно отследить загрузку это dll до остановки олей на точке входа и обращение к этому участку dll?
Помогите советом кто сталкивался? Почему то не думаю что идёт проверка на валидность кода(ибо тогда почему не проверяется другая dll? функционал которой успешно щас работает!) - думаю это как то связано с загрузкой этой dll в память до OEP exeшника.



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 03 марта 2008 11:01
· Личное сообщение · #2

Т.к. проги нет, то приходится тока гадать о защите...

Если у тебя неявная динамическая загрузка длл, то чтобы убедится что прога не проверяет CRC длл файла, можно попробовать запатчить exe таким образом, чтобы:
1) Изменить точку входа на свой код
2) в нем сделать патч в памяти для длл.
3) сделать jmp на OEP.

Если у тебя после этого не будет без отладчика работать, то значит нужно прогу смотреть или придумывать другие варианты...



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 марта 2008 11:27
· Личное сообщение · #3

Спасибо RSI - сейчас попробую. Только в мозгу не умещается выражение - "неявная динамическая загрузка длл"- это делает ос? ибо как прога может загрузить длл если она ещё не выполнялась? Или оля до остановки на оер что то выполняет в проге? Я просто в сомнении прокатит ли такой вариант....




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 03 марта 2008 13:11
· Личное сообщение · #4

Если это длл-то смотря что правил. Возможно, затронул абсолютные смещения-для них релоки править надо. Ещё вариант-погоняй под сайсом или не запускай под олькой, а аттачься ей.



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 03 марта 2008 13:47
· Личное сообщение · #5

Может будет проще, если ты прогу выложишь? Глядишь и подскажут верное решение



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 марта 2008 13:51
· Личное сообщение · #6

Правлю в длл код
CMP eax, 34 на
CMP eax, 35
Я не думаю что этим как то сместил релоки...
Аттачится пробовал - изменений ни каких

Пропатчить НЕ прокатило(видимо не хватает знаний) - там же нет доступа на запись к этому адресу - дайте добры люди пример как патчить эту длл из exe процесса а?




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 03 марта 2008 14:14
· Личное сообщение · #7

Длл запакована видемо. Проверь PeID'ом

-----
invoke OpenFire




Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 марта 2008 14:23
· Личное сообщение · #8

Длл НЕ запаковано - проверял и в том числе PeIDом....



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 марта 2008 16:07
· Личное сообщение · #9

Поставил ВР on new module(dll) и зашел в Entry point этой dll - там какой то код по всей видимости приаттачивающий эту длл к процесу и тут самое удобное место вставить проверку, но вот если она? у меня умений не хватаеет и самым оптимальным тут имхо думаю будет именно способ описанный RSI - помогите примером патча а? или подкинте пару стандартных способ проверки длл самой себя?



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 03 марта 2008 17:21
· Личное сообщение · #10

Krivoy пишет:
Поставил ВР on new module(dll) и зашел в Entry point этой dll - там какой то код по всей видимости приаттачивающий эту длл к процесу и тут самое удобное место вставить проверку, но вот если она? у меня умений не хватаеет и самым оптимальным тут имхо думаю будет именно способ описанный RSI - помогите примером патча а? или подкинте пару стандартных способ проверки длл самой себя?

Зашел в Entry point этой dll и залей все нопами сразу поможет..



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 03 марта 2008 18:12
· Личное сообщение · #11

Krivoy
Ну в общем случае будет так, скажем у тебя точка входа в exe = 0х401000 и место патча длл 0x1001000
1) Ищещь пустое место в конце секции кода ( допустим нашел и его адресс начала = 0х40AAAA ), вот заходишь в PETools и меняешь тоску входа на AAAA ( т.к. 0х40AAAA - ImageBase ( 0x400000 ) )
2) Запускашь Exe в оле и пишешь тип такой код
push 0 \pOldProtect
push 40 |NewProtect = PAGE_EXECUTE_READWRITE
push 1 |Size = 1
push 1001000 | Address
call VirtualProtect
mov byte ptr ds:[1001000], 35 ( патчишь байт )
jmp 401000 - OEP

От руки накидал, по идее должно работать.

Этот код так, для проверки теории, если прокатит и будет работать, то нужно будет call VirtualProtect через таблицу импорта юзать.



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2008 10:44 · Поправил: Krivoy
· Личное сообщение · #12

СПАСИБО RSI!!!
Подозревал что какую то функцию надо вызвать, только не знал какую - проверка теории показала что так не прокатит и VirtualProtect надо юзать через таблицу импорта сразу, ибо так она не запускается так что щас буду гуглить как это делается...

Или Access violation если орет при MOV это что значит? Что функция VirtualProtect не прокатила?



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 04 марта 2008 11:23
· Личное сообщение · #13

А какое значение возвращает VirtualProtect в eax ???

просто если eax = 0, то возможно, дело в параметре pOldProtect, иногда сталкивался что он не должен быть = 0, т.е. если у тебя такая ситуация, то просто измени чтобы он ссылался на ячейку из стека.



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2008 11:49
· Личное сообщение · #14

Ага в eax ноль. Извини конечно RSI, но кто он?
Как я понял нужно что бы вместо нуля должно быть
previous access protection value
иначе ->
If this parameter is NULL or does not point to a valid variable, the function fails
А как узнать previous access protection value ?



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 04 марта 2008 12:27
· Личное сообщение · #15

Его не надо узнавать
это указатель на переменную куда сохранить существующие атрибуты доступа к памяти, чтобы если нажо ты их мог потом восстановить.



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2008 12:41
· Личное сообщение · #16

Чёт, извините, сомневаюсь - в инете везде пишут -
"Функция VirtualProtect позволяет изменить тип доступа к зарезервированной памяти, но не так всё просто надо ещё указать старый тип доступа."

А указателей на переменную я перепробовал щас уже много ...



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 04 марта 2008 12:47
· Личное сообщение · #17

Krivoy
Дай ссылку на ту прогу о которой идет речь ;) Имхо дурака валяешь..



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2008 12:54 · Поправил: Krivoy
· Личное сообщение · #18

Упс сорри - нашел - не бейте - надо - PUSH ESP



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2008 13:26
· Личное сообщение · #19

Еще раз СПАСИБО RSI - всё работает



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 04 марта 2008 15:05
· Личное сообщение · #20

Ну значит, это проверка CRC файла длл

P.S. Хочешь оставь все как есть. или можешь выложить прогу, думаю посмотрят люди на наличие Check CRC.



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2008 16:36
· Личное сообщение · #21

В другой ветке задавал вопросы вроде вежливо, но как только узнали название проги отношение резко поменялось и "добрые" люди послали меня сразу в пеший эротический тур - типа гони бабло будет кряк! Они видимо подумали что я на этом взломе деньги зарабатываю.....

P.S. Кто захочет найдет название по другой моей ветке в этом форуме ибо выложить все равно не смогу - сам ехе метр да длл 2,5 а по названию её с офсайта стянуть можно....

P.P.S Извините модераторы за нарушение правил форума......


 eXeL@B —› Вопросы новичков —› Прога ломается только под отладчиком
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати