Сейчас на форуме: zombi-vadim, zds (+4 невидимых) |
eXeL@B —› Программирование —› Программа работает только внутри отладчика |
<< . 1 . 2 . 3 . 4 . >> |
Посл.ответ | Сообщение |
|
Создано: 23 сентября 2013 20:27 · Поправил: Envy12 · Личное сообщение · #1 Есть код: Code:
Первые 2 стркои закоментил тк с ними функция отказывается работать вне отладчика, без них все ок, как в отладчике так и без. В чем тут дело? |
|
Создано: 10 октября 2013 08:33 · Поправил: DenCoder · Личное сообщение · #2 Есть Code:
Смотрим MSDN Code:
Где у тебя указатель на привилегии? Вместо него у тебя PrivilegeCount почему-то. Если переменной PrivilegeCount хотел передать аргумент BufferLength(если б даже и своей очередью), то неправильно. BufferLength - длина структуры TOKEN_PRIVILEGES, в которой массив из одного или более LUID_AND_ATTRIBUTES, а не число привилегий!... Читай внимательно MSDN и переделывай! За это даже оценку не поставишь. Если будешь на полпути, поделюсь исходником ----- IZ.RU | Сообщение посчитали полезным: Envy12 |
|
Создано: 10 октября 2013 08:46 · Личное сообщение · #3 |
|
Создано: 10 октября 2013 09:02 · Поправил: DenCoder · Личное сообщение · #4 |
|
Создано: 10 октября 2013 10:14 · Поправил: Envy12 · Личное сообщение · #5 DenCoder Вот так: Code:
правильно? Я смотрел что там происходит, поставил бряк на входе в процедуру, после messagebox выходит из процедуры и дальше работает. "Знаю" еще парочку других: pure basic, autoit. Глянул другую прогу, оказалось, что CreateToolhelp32Snapshot может работать и без AdjustTokenPrivileges Я не успеваю нажать OK в окне, как процесс уже идет дальше, наверно, что-то не так с адресом возврата. PS Смотрю я это в CE, тк в ольке все нормально работает =\ |
|
Создано: 10 октября 2013 11:38 · Личное сообщение · #6 |
|
Создано: 10 октября 2013 14:18 · Личное сообщение · #7 |
|
Создано: 10 октября 2013 14:52 · Поправил: DenCoder · Личное сообщение · #8 |
|
Создано: 10 октября 2013 15:08 · Поправил: Envy12 · Личное сообщение · #9 DenCoder пишет: А основной поток процесса? Процесс усыпляется перед инжектом? Он должен уснуть после инжекта. Инжект входит в процедуру, вызывается окно, программа переходит в основную процедуру check, без слипа. Процесс уже может находится в слипе, тк в у меня в цикле есть слип, и скорее всего мой инжект срабатывает в момент слипа и следующий слип не работает. |
|
Создано: 10 октября 2013 22:27 · Поправил: DenCoder · Личное сообщение · #10 Envy12 пишет: Он должен уснуть после инжекта.Инжект входит в процедуру, вызывается окно, программа переходит в основную процедуру check, без слипа. С чего ты взял-то? Если CreateRemoteThread используешь, то она создаёт отдельный поток в процессе, а главный продолжает работать. В то время как созданный поток выдаёт тебе MessageBox и входит после него в Sleep, главный поток также продолжает работать. У твоего Sleep, кстати, 3 600 000 задержка - это ж 1 час ждать. Envy12 пишет: у меня в цикле есть слип, и скорее всего мой инжект срабатывает в момент слипа и следующий слип не работает Я так понял, хочешь разобраться по готовому исходнику и наваять что-нить интересное? Смотришь, что будет если так или так поменять в коде? )) Без понимания принипов работы функций вряд ли получится ) Sleep, к примеру, усыпляет только тот поток, из которого вызван. Лучше напиши алгоритм по-русски, что нужно сделать... А вообще, случайно не малварь написать хочешь? ) ----- IZ.RU |
|
Создано: 11 октября 2013 14:23 · Поправил: Envy12 · Личное сообщение · #11 |
|
Создано: 11 октября 2013 14:34 · Поправил: DenCoder · Личное сообщение · #12 Envy12 пишет: Как можно остановить главный поток на время слипа? Envy12 пишет: за исключением поиска процессов. СильнО сказано! По 4 первым символам имени образа не всегда идентифицируешь правильно единственный нужный процесс! Что мешает полное сравнение имени сделать? ----- IZ.RU |
|
Создано: 11 октября 2013 17:58 · Поправил: Envy12 · Личное сообщение · #13 DenCoder пишет: СильнО сказано! По 4 первым символам имени образа не всегда идентифицируешь правильно единственный нужный процесс! Что мешает полное сравнение имени сделать? Это не принципиально, лень матушка мешает. Сделал вот так: Code:
после окна код опять запускается |
|
Создано: 11 октября 2013 18:28 · Личное сообщение · #14 |
|
Создано: 11 октября 2013 19:40 · Личное сообщение · #15 |
|
Создано: 12 октября 2013 14:37 · Личное сообщение · #16 DenCoder > При остановке главного потока остальные не останавятся, поэтому если требуется остановить остальные, то используй их перечисление с помощью того же toolhelp32. NtSuspendProcess: Code:
|
|
Создано: 12 октября 2013 17:42 · Личное сообщение · #17 Dr0p Мы не рассматриваем сейчас андок функс Envy12 пишет: Основной поток стартует после мсг и все. Основной поток никогда не стартует после мсг! Любое созданное окно привязывается только к потоку, который его создал! Читай: ----- IZ.RU |
|
Создано: 12 октября 2013 18:20 · Поправил: Envy12 · Личное сообщение · #18 |
|
Создано: 12 октября 2013 18:41 · Поправил: DenCoder · Личное сообщение · #19 Envy12 пишет: Я могу в хендл функцие дать результат GetCurrentThreadId? нет! ид потока нужно передать в OpenThread(), чтобы получить хендл. Envy12 пишет: А зачем toolhelp32? Ты меня удивляешь - перечисляешь процессы с помощью него и не знаешь, как оно называется? )) Аналогично им можно перечислять кучи, модули и потоки Envy12 пишет: Могу выложить весь код, чтобы вы сами убедились в этом. Давно пора, а то гадать надоедает. Envy12 пишет: DenCoder пишет:Да открой уже процесс, который инжектишь Что там смотреть? Последовательность выполнения, возможные коды ошибок... Другими словами - владел бы отладчиком, топик был бы короче и возможно даже был бы интереснее )) ----- IZ.RU |
|
Создано: 12 октября 2013 18:47 · Личное сообщение · #20 DenCoder пишет: Последовательность выполнения, возможные коды ошибок... Другими словами - владел бы отладчиком, топик был бы короче и возможно даже был бы интереснее )) Я немного владею олей, но как я говорил выше, она в этом случае безполезна. Code:
|
|
Создано: 12 октября 2013 18:54 · Поправил: DenCoder · Личное сообщение · #21 1. Где код инжекта с CreateRemoteThread() ? 2. Envy12 пишет: Я немного владею олей, но как я говорил выше, она в этом случае безполезна. Неверное решение! Поставив бряк на начало потока, созданного функцией CreateRemoteThread(), увидишь правильно ли выполняется. В частности, увидишь, что из Sleep() поток не выходит, пока не истечёт указанное время. А также, увидишь, что логика функции kill1 противоречит логике init, и много чего ещё увидишь... 3. 2 Замечания по SuspendThread(). Во-первых, судя по коду, ты не понял, что усыплять нужно не свой поток, а потоки процесса. Во-вторых, передавать нужно хендл потока, а не его ид. 4. Если необходимо усыпление потоков процесса-жертвы, то сделать это можно ещё до инжекта, но необязательно. ----- IZ.RU |
|
Создано: 12 октября 2013 19:12 · Личное сообщение · #22 DenCoder > Мы не рассматриваем сейчас андок функс Это не функция а сервис, функция это стаб для него.. Она мало того что док, так есчо и опенсорс. Прототип и имя никогда не менялись и никогда не изменятся. Андоком было бы лезть в нэйтивные структуры слепка(сисинфо), они изменяются. Envy12 > А зачем toolhelp32? Я могу в хендл функцие дать результат GetCurrentThreadId? Не могу ответить, так как не знаю что вы пытаетесь сделать, а перечитывать всё лень В любом случае заморозка потоков ну никак не совместима с документированными манипуляциями. У вас будет дедлок, например в загрузчике, так как ваш удалённый поток первым делом в лодер и попадёт, а там синхронизации. Тоже самое относится и к принудительному завершению потоков, это вообще никогда нельзя делать. |
|
Создано: 12 октября 2013 19:26 · Поправил: DenCoder · Личное сообщение · #23 Dr0p пишет: Она мало того что док, так есчо и опенсорс. Её нету даже в хидерах ddk, ни в 2600, ни в 7600 )). Dr0p пишет: Андоком было бы лезть в нэйтивные структуры слепка(сисинфо), они изменяются Это верно, поэтому никто и не предлагает реализацию на NtQuerySystemInformation. Все вроде как согласны с toophelp )) Dr0p пишет: не знаю что вы пытаетесь сделать, а перечитывать всё лень Отвечать зато не лень. И мне было поначалу лень вникать. И могу уверенно сказать, что многим лень, поэтому ответов от других здесь нет. И есть высокая вероятность, что я устану давать подсказки тс, если он не включит полезную часть моска )) Envy12 5. Из всего вышенаписанного следует огромная вероятность, что приведённый выше код должен выполняться в контексте процесса-жертвы. В этом случае адреса переменных, на которые ссылаются инструкции, будут неверны, если перед запуском удалённого потока не сделать поправок. Да и вообще при инжекте код и данные удобнее располагать в одной секции. ----- IZ.RU |
|
Создано: 12 октября 2013 19:38 · Личное сообщение · #24 |
|
Создано: 12 октября 2013 19:53 · Поправил: DenCoder · Личное сообщение · #25 |
|
Создано: 12 октября 2013 19:57 · Поправил: Dr0p · Личное сообщение · #26 DenCoder Не все сервисы можно юзать в дроверах, лишь только часть их поэтому вынесена в экспорт ядра. Нэйтив же позволяет их юзать, стаб для сервиса экспортится. С шадовом подобная ситуация, только ограничений больше - сервисы не экспортятся как стабы, для них есть винапи заглушки. Ну а идентификатор нужен для андок дёрганья нтапи, паблик имеют имя. > экспортируется из ntoskrnl Не экспортится она ядром, я это знал вот щас проверил. |
|
Создано: 12 октября 2013 20:17 · Поправил: DenCoder · Личное сообщение · #27 Dr0p ок, но в sdk её нет Более того If a function is not documented, it may disappear outright at any point in the future, or grow or lose some extra paramters, at which point your application may stop working or break in really interesting ways. If it's not documented, it's definitely not supported and you shouldn't use it. А её реализация основана на том же перечислении потоков (только через PsGetNextProcessThread) и последующем усыплении. Это не трудно самому реализовать и достоинства реализации налицо - работать будет гаранированно на последующих версиях. ----- IZ.RU |
|
Создано: 12 октября 2013 20:29 · Личное сообщение · #28 |
|
Создано: 12 октября 2013 20:36 · Личное сообщение · #29 |
|
Создано: 12 октября 2013 20:39 · Поправил: Dr0p · Личное сообщение · #30 DenCoder Сервис блокировку использует, а вручную не будет такого. Да и про скорость - запрос слепка ооочень долгий. > работать будет гаранированно на последующих версиях. Вот недавно вышла 8-ка, быть может вы подскажите какой там сервис пропал по отношению к 1-м версиям нт и какой прототип изменился. Я вот например не знаю. |
|
Создано: 12 октября 2013 20:57 · Поправил: DenCoder · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . >> |
eXeL@B —› Программирование —› Программа работает только внутри отладчика |