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

 eXeL@B —› Вопросы новичков —› Ollydbg create thread
Посл.ответ Сообщение

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

Создано: 10 июля 2016 15:12
· Личное сообщение · #1

Не смог найти на русском языке доходчиво.

Как в ollydbg создать thread, отправить а после выполнить jmp на нужную инструкцию.И что бы выполнялись оба процесса?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 10 июля 2016 16:11
· Личное сообщение · #2

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



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

Создано: 10 июля 2016 16:15
· Личное сообщение · #3

Я нуб осваивающий "гайды по крекингу" каким лоадером?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 10 июля 2016 16:21
· Личное сообщение · #4

ясно, вопрос отплыл
это в гайдах по крекингу учат треды в ольке создавать?

а в чём состоит суть задачи?



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

Создано: 10 июля 2016 20:40 · Поправил: UberM
· Личное сообщение · #5

Не , в гайдах по крекингу я понял как практически использовать комманды (jmp,call,mov,add,inc) ассемблера, в ollydbg , увидел как меняются регистры , флаги.

Теперь пишу программу,одну уже написал (встроил шеллкод CreateProcessA calc.exe) в putty ,с другим шеллкодом не проканало,хотя он поидее создает поток сам, теперь хочу найти универсальный способ вставки шеллкода в PE.

-=AkaBOSS=- если платно проконсультируешь велком ПМ




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 11 июля 2016 00:11
· Личное сообщение · #6

UberM пишет:
встроил шеллкод CreateProcessA calc.exe

ок. я так понимаю парсером импорта тут и не пахнет - адрес CreateProcessA статично задан (в другой версии винды он будет отличаться и код работать не будет).
для того чтобы выполнить свой код, нужно либо создавать тред из внешней программы, либо перехватывать управление самому.

в смысле - ты ведь так или иначе патчишь память, почему бы не пропатчить еще немного?
найди код, который выполняется очень часто. например - цикл сообщений окна.
там последовательно крутятся вызовы функций GetMessage, TranslateMessage и DispatchMessage.
тут-то и можно будет встроиться, а в процессе выполнения своего кода либо установить флаг выполненной задачи, либо пропатчить всё обратно, восстановив исходные байты.
смотри только чтоб потом адрес возврата в середину восстановленной инструкции не упёрся.

Добавлено спустя 24 минуты
для новичка возможно будет проще начать встраивать код с помощью автоассемблера CheatEngine
там можно просто писать вещи типа:

Code:
  1. [enable] // в этой секции пишется код при включённой опции внедрения
  2. alloc(my_shellcode_memory,1024) // аллокает страницу памяти в целевом процессе, 1024 - размер в байтах
  3. label(myhook_return) // указываем имя метки в памяти, к которой сможет обращаться ассемблер
  4.  
  5. "mytestsubject.exe"+12CDE: // указываем адрес на который будет производиться вывод автоассемблера
  6.   jmp my_shellcode_memory // передаём управление на свой код
  7. myhook_return: // а вот и та самая метка, сюда мы вернём управление когда оно нам больше не будет нужно
  8.  
  9. my_shellcode_memory:
  10.    // пиши что хочешь, поток твой... главное - правильно выбрать адрес для перехвата)
  11.       mov eax, 6677FFFF // не забудь что перед возвращением нужно эмулировать выполнение того кода, вместо которого было вписано "jmp my_shellcode_memory"
  12.   jmp myhook_return а в конце просто возвращаем управление туда где взяли
  13.  
  14. [disable] // а в этой секции нужно избавляться от того, что натворили в предыдущей
  15. "mytestsubject.exe"+12CDE: 
  16.    mov eax, 6677FFFF // db B8 FF FF 77 66
  17.  
  18. dealloc(my_shellcode_memory) // и освобождаем выбранную память


на полноценное решение такой подход не тянет, но для новичка - самое оно, имхо.



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

Создано: 11 июля 2016 09:12
· Личное сообщение · #7

-=AkaBOSS=- Спасибо тебе огромное !!! Много для себя понял в Cheat Engine

Такой еще вопрос.

вот встраиваю WinExec.

addres 1 cmd.exe ASCII
PUSH addres 1
CALL WinExec

выполняется CMD.EXE

Теперь хочу выполнить cmd.exe /c mkdir 123

Но после Analyze code (CTRL+A)

получается такое


Пробовал делать 2 push'а - не выполняется , как тут решить?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 11 июля 2016 14:25 · Поправил: -=AkaBOSS=-
· Личное сообщение · #8

UberM пишет:
Пробовал делать 2 push'а - не выполняется , как тут решить?

зачем 2-то? просто олька из своих соображений строку перенесла - она так поступает со всем, что длиннее 16 байт (ограничение колонки HEX)




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

Создано: 11 июля 2016 17:51
· Личное сообщение · #9

-=AkaBOSS=- что может быть? После перезагрузки WinExec превращается в 5 инструкций которые не читаются CHAR $ всякие...А до перезагрузки все ОК , как с этим бороться?






Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 11 июля 2016 18:11 · Поправил: -=AkaBOSS=-
· Личное сообщение · #10

Ctrl+A не помогает? тогда правый клик - Analisys - Remove analisys from module

у тебя адрес инжекта изменился кажись, и колл уходит в пустоту.
есть два вида коллов:
1. имеет в качестве операнда смещение относительно следующей инструкции.
это как раз тот, которым ты апишку вызываешь:
Code:
  1. 45CFA6:  db E8 8F24BE75
  2. 45CFAB: ;получается 0x45CFAB+0x75BE248F=0x7603F43A, и чёт мне кажется, что там не кернел32

чтобы каждый раз не вычислять для каждого колла относительное смещение, применяют второй тип
2. операнд - регистр, адрес или комплексное выражение указывающее на ячейку памяти, содержащую адрес для перехода. например:
Code:
  1.  
  2.  call eax
  3.  call dword [eax]
  4.  call dword [0x402048]
  5.  call dword [ebp+eax*4]

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




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 11 июля 2016 18:12
· Личное сообщение · #11

UberM
От модератора: Используйте сервис для загрузки изображений!

http://hostingkartinok.com
http://fastpic.ru

ну нельяз такие большие постить, на весь экран, либо обрезайте их.

-----
[nice coder and reverser]




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

Создано: 11 июля 2016 18:30
· Личное сообщение · #12

Hellspawn

OK

-=AkaBOSS=-

Сделал вот как:

MOV EAX,WinExec
CALL EAX

После перезагрузки компа заместо WinExec стоит адрес который не существует )=

как узнать адрес win exec?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 11 июля 2016 18:42 · Поправил: -=AkaBOSS=-
· Личное сообщение · #13

надо узнать базовый адрес кернел32 - его hModule
оттуда уже можно использовать RVA - смещение относительно базового адреса загрузки модуля
например, модуль загружен по адресу 0x12340000, и мы имеем нужный RVA - 0x5678
узнали базовый адрес, прибавили RVA - получили собственно то что хотели - 0x12345678
а если при перезагрузке модуль загрузился, например, по адресу 0x9870000, мы получим адрес 0x9875678

теперь переходим к проблеме - как получить базовый адрес? в системе для этого изначально служит функция GetModuleHandle. ей передаёшь имя модуля, она возвращает его hModule = базовый адрес.
вроде просто? а вот и нет. потому что функция эта тоже находится в кернел32, базы которого мы изначально не имеем.

Добавлено спустя 7 минут
я еще не упомянул о том, что RVA апи функции в другой версии винды будет недействителен, и единственный верный способ - это найти базу нужного модуля, и просканировать его таблицу экспорта (кури доки по структуре PE файлов, я это перепечатывать не хочу)

вот так и выходит, что куда ни сунься - без базовых адресов никуда ты не уплывёшь в чужом процессе.
а значит - весь план коту под хвост. или нет

ну и вдогонку
чтобы найти базу модулей, обычно читают списки модулей в PEB.LoaderData.
это я так, чтоб было о чём гугл спросить =)

можно еще раскручивать цепочку SEH, поднимаясь до самого верха. принято считать, что самый крайний обработчик исключений принадлежит кернел32.

почитай ВОТ ЭТО, там неплохо объяснены основы.. хоть и не с первого раза доходит)

а на этапе разборок с TEB-PEB очень поможет XNTSV



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

Создано: 11 июля 2016 19:14
· Личное сообщение · #14

-=AkaBOSS=-

Спасибо огромное , пошел разбираться с PE... Уж очень интересная штука ассемблер)



Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

Создано: 13 июля 2016 13:20
· Личное сообщение · #15

С помощью плагина ODbgScript просто резервируется место для параметров
нужной функции, а также организуется сам вызов этой функции.


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


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