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

 eXeL@B —› Программирование —› Отладка удаленного потока
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 февраля 2011 16:53
· Личное сообщение · #1

Всем привет,

у меня такая проблема: Инжектю кусок кода в стиле шел-кода в експлорер. Потом создаю через CreateRemoteThread() удаленный поток. Созданный поток получает управление и тут експлорер падает и перезапускается. Вобщем что-то где-то коряво работает.

Мой вопрос: Как, чем и можно ли вообще отлаживать уже именно этот созданный поток??? OllyDbg???
Конечно можно отладить сам инжектируемый код чтоб работал ровно а потом уже его инжектить, но хотелось-бы
именно поток.




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 22 февраля 2011 17:24
· Личное сообщение · #2

зацикливай поток и аттачся к процессу.

-----
Nulla aetas ad discendum sera


| Сообщение посчитали полезным: Sunzer


Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 22 февраля 2011 17:25
· Личное сообщение · #3

Можно поставить бряк на StartAddress до вызова CreateRemoteThread в том же OllyDbg.

-----
Следуй за белым кроликом




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 февраля 2011 18:14
· Личное сообщение · #4

Flint пишет:
зацикливай поток и аттачся к процессу


Вот именно отсюда пожалуйста поподробнее.
Что именно, как когда? Куда тыкать?

Короче ставлю бряк на CreateRemoteThread() так?
а дальнейшие действия???




Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 февраля 2011 18:20
· Личное сообщение · #5

А нельзя замороженый поток создать, к нему приаттачиться, и дебажить?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 22 февраля 2011 18:21 · Поправил: ajax
· Личное сообщение · #6

kap00stik
В начале шелл кода типа EB FE (jump на себя), потом аттачься чем хочешь к процессу, и отлаживай.
Sunzer
Был бы смысл

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 22 февраля 2011 18:26
· Личное сообщение · #7

Int 3.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 22 февраля 2011 18:36
· Личное сообщение · #8

Clerk
При наличии отладчика режима ядра Иногда вещи не совместимы с варей, а на реальном компе - нах-нах, еще закачки загадит
kap00stik
При зацикливании тормоза могут быть, предупреждаю.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 февраля 2011 18:41
· Личное сообщение · #9

Clerk пишет:
Int 3.


вот это то что надо, спасибо всем!




Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 февраля 2011 18:47
· Личное сообщение · #10

ajax пишет:
При зацикливании тормоза могут быть, предупреждаю.


invoke Sleep, -1 ?



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 февраля 2011 19:18 · Поправил: kap00stik
· Личное сообщение · #11

Так ну в общем с отладкой разобрались. Отладили так сказать, во время отладки у меня чуть не выпрыгнули глаза
Короче такое дело, этот код работал безотказно на XP SP2 и 3. После долгого перерыва опять зачасались руки и решил погадить немного. Откопал етот сурс, компилю его теперь уже под Win 7 все ок, при запуске вылетает експлорер (ну вы уже знаете)

Лажу код, прохожу нахождение kernel32.dll базы все нормально. (адрес: 0х75870000)
Нахожу адрес GetProcAddress(), (адресс функции: 0х75876C5B) сохраняю его для далнейшего пользования
но оставляю его в регистре EAX.

pushe на стэк адрес базы и адресс строки с именем функции которую хочу найту и вызываю
GetProcAddress()
вот тут-то и начинается самое интересное:
Процесс терминируетса, acess violation при вызове адреса из EAX. (он какого-то хера стал не 0х75876C5B а 0xFFFFFFFF).

Проделывал сию операцию много раз, результат один и тот-же.
Непосредственно перед вызовом, лучше сказать во время вызова адресс вызываемой функции заменяетса прямо у меня на глазах с 0х75876C5B на 0xFFFFFFFF.
Вопрос: кто или что шутит со мной такие шутки???
При этом при всем этот-же код опять-таки работает под win xp без проблем.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 22 февраля 2011 19:19 · Поправил: ELF_7719116
· Личное сообщение · #12

Sunzer
за
himself: jmp himself
разговор был, если я правильно понял. Цпу на полную грузит(по крайней мере если поток на ядро и ядер в процессоре больше одного то как таковых тормозов не будет)
kap00stik
Трасиш F8 в ольке, доходиш до CALL EAX, F8 И EAX=-1 вместо GetProc...? Просто так регист не может измениться!




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 22 февраля 2011 20:01 · Поправил: neomant
· Личное сообщение · #13

kap00stik, выкладывай что-ли кодом где у тебя исключение вываливается, а то со слов нихрена не понять.

-----
Следуй за белым кроликом





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

Создано: 22 февраля 2011 22:16
· Личное сообщение · #14

kap00stik пишет:
кто или что шутит со мной такие шутки???


Видимо другой шел-код от одного из твоих товарищей....



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 февраля 2011 23:09 · Поправил: kap00stik
· Личное сообщение · #15

Ну вот я и разобрался.
Дело в том что функция возвращавшая мне Kernel Image Base адрес возвращает мне какойто левый адрес.
Выходит что код, не плохо послуживший мне под win xp отказывается это делать под win 7, ну и походу под висту.
использовал PEB метод описанный здесь:
http://www.hick.org/code/skape/papers/win32-shellcode.pdf

Вопрос: ну и что теперь делать с этим Windows 7 ???
Как окапаться на нем?
Надо еще два другие SEH i topstack метода поробовать.

А может кто уже сталкивался с этим под семеркой???
Всмысле как писать базонезависимый код работающий также в win vista и 7???



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 22 февраля 2011 23:45 · Поправил: Clerk
· Личное сообщение · #16

kap00stik
В начале про термины. То что вы назвали шелл'кодом это код с плавающей базой судя по всему. Реальный шелл получает управление при переполнении локальных буферов, его не вызывают через создание удалённых потоков. У вас же пикод, таким образом размер его не критичен(для шелла он критичен). Отсюда нужно и плясать. Незачем брать кернел из загрузчика(в 7 там вроде уже kernelbase), он должен быть найден средствами нэйтива. Тоесть LdrGetDllHandle() etc. Не следует людей путать

> как писать базонезависимый код работающий также в win vista и 7???
Также как и привязанный к базе и работающий в 7, только оформлять надлежащим образом. Так как пикод не морфится, то можно и фиксапы использовать. Выполнить релокацию вручную. В более полноценном варианте используется загрузка из памяти, а весь функционал представляет собой длл.



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 февраля 2011 01:51
· Личное сообщение · #17

Clerk пишет:
В начале про термины. То что вы назвали шелл'кодом это код с плавающей базой судя по всему. Реальный шелл получает управление при переполнении локальных буферов, его не вызывают через создание удалённых потоков. У вас же пикод, таким образом размер его не критичен(для шелла он критичен).


Спасибо за поправку, но я помоему говорил что код толко в стиле shell кода.
А насчет терминов ты прав, надо называть вещи своими именами (если конечно знаеш их имена :s6

Clerk пишет:
Незачем брать кернел из загрузчика(в 7 там вроде уже kernelbase)


Вот тут нихрена не понял, ты имееш в виду что программа носитель сама находит все адреса, прописывает их в placeholder'ы в инжектируемом коде и потом его инжектит? Типа чтобы внедренный код попу не морщил с поиском адресов а сразу принимался за работу? (В принципе если нихера не разберусь, то пожалуй так я и сделаю)

P.S. Ребят я не русский, не пинайте меня



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

Создано: 23 февраля 2011 08:03
· Личное сообщение · #18

В начале шеллкода ставь int 3, в софтайсе делай i3here on и отлаживай сколько влезет. Проверено, работает.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 23 февраля 2011 09:38
· Личное сообщение · #19

kap00stik
Незачем брать кернел из загрузчика(в 7 там вроде уже kernelbase), он должен быть найден средствами нэйтив
Он говорит что в Windows 7 кроме kernel32.dll откуда вы берете свои API, есть kernelbase.dll(туда перенесена часть процедур). Нейтив - использовать ntdll.dll для получения низкоуровневых функций(в kernel32 лежат "wrappers" т.е. обвертки низкоуровневых API). Например GetModuleHandle() есть обвертка LdrGetDllHandle(). Впрочем Native API требуют unicode строки и заполнения специальных структур, удобно ли вам их будет использовать, незнаю. Вообще как уже кто-то успел сказать, Win 7 не самая лучшая ось для реверсера.



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 февраля 2011 14:21 · Поправил: kap00stik
· Личное сообщение · #20

ELF_7719116 пишет:
Он говорит что в Windows 7 кроме kernel32.dll откуда вы берете свои API, есть kernelbase.dll(туда перенесена часть процедур).

Вот этого я не знал (век живи, век учись), надо покопаться в ней, только один хрен не понимаю, зачем перенесенны, и почему тогда только часть процедур... (ну это походу одному ms известно).
Вот именно это походу и делает мой старый код не работоспособным. Потому-что например LoadLibraryA() я в семерке в kernel32.dll уже не нашел Ну чтоже, гимороя добавляется.

ELF_7719116 пишет:
Нейтив - использовать ntdll.dll для получения низкоуровневых функций(в kernel32 лежат "wrappers" т.е. обвертки низкоуровневых API). Например GetModuleHandle() есть обвертка LdrGetDllHandle(). Впрочем Native API требуют unicode строки и заполнения специальных структур, удобно ли вам их будет использовать, незнаю.


Да это-то в принципе понятно, только гимороя шибко много.

ELF_7719116 пишет:
Вообще как уже кто-то успел сказать, Win 7 не самая лучшая ось для реверсера.

Мдаааа, походу так есть, но если что то я не реверсер. Просто как уже писал, после долгого перерыва (лет 5-6) захотелось опять покодить, кинулся, а не один софт из времен win xp под семеркой не работает


Aaaaaaaaaaaaaaaaaaaaaaaaaa.
Ну вот я и нашел все ответы на свои вопросы, кому будет интересно смотреть здесь:
blog.harmonysecurity.com/2009/06/retrieving-kernel32s-base-address.html

Ну тем не менее всем спасибо!


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


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