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

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

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

Создано: 09 февраля 2007 14:08
· Личное сообщение · #1

Здр.
Вот я опять со своими баранами, в общем базонезависимый код у меня на С++ не получаеться писать, поэтому взялся за асм, вот что вышло :
.386
.MODEL Flat, STDCALL
;--------------------------------------------------------------------- ---
; Functions
;--------------------------------------------------------------------- ---
; 0x77D7057D - MessageBoxA
; 0x7C80CCA9 - ExitThread
;--------------------------------------------------------------------- ---

;--------------------------------------------------------------------- ---
; libs
;--------------------------------------------------------------------- ---
includelib c:masm32libuser32.lib
includelib c:masm32libkernel32.lib

;--------------------------------------------------------------------- ---
; D A T A
;--------------------------------------------------------------------- ---
.DATA
MyMessageBox DWORD 2010580349 ; MessageBoxA
MyExitThread DWORD 2088815785 ; ExitThread
.CODE
start:
push 0
push 0
push 0
push 0
call MyMessageBox

PUSH 0
call MyExitThread
end start

в опкодах это вот что значит :
6A 00 ; push 0
6A 00 ; push 0
6A 00 ; push 0
6A 00 ; push 0
E8 70 F5 96 77 ; Call user32.messageboxa
6A 00 ; push 0
E8 95 BC 40 7C ; call kernel32.exitthread ( нужен, я ведь внедряю поток, и его надо както завершить )

Вот, до внедрения подрубаюсь олькой к процессу (notepad.exe) но там он просто пишет "Access violation when executing [F790F57D] - use блабла" так вот, вроде у меня всё норм почему трэд останавливаеться ? и кстати в окне (в ольке) CPU потока почему то пусто =
а в списке потоков вот что :
Threads, item 0
Ident=000006DC
Entry=7C810856
Data block=7FFDE000
Last error=ERROR_SUCCESS (00000000)
Status=Active
Priority= 32 + 0
User time= 0.0000 s
System time= 0.0000 s



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

Создано: 09 февраля 2007 14:12
· Личное сообщение · #2

совсем забыл : www.everfall.com/paste/id.php?8dg2e66libpl как внедряюсь



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

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

Объясни на пальцах, что ты пытаешься сделать, а то влом искать предыдущие посты. По ссылке, этот код - должен работать только на одной машине (где винды одинаковые, да и после перезагрузки очень маловероятно, но адрес может поменяться), а непроще ли просто взять, да и найти адресс функции нужной в заголовке библиотеки - тогда на всех машинах будет работать???

-----
Само плывет в pуки только то, что не тонет.




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

Создано: 09 февраля 2007 15:42
· Личное сообщение · #4

DrFits я делаю инжект в процесс notepad.exe , инжектирую то что написал на асме. Я проверял адреса функций одинаковы, ладно пусть хоть на моей только машине. то что инжект код работает это точно, потому что до того как на асме писать код я инжектил просто сишную функцию с тупым ret-ом и всё работало, теперь я написал базонезависимый ( как мне кажеться ) код, и внедряю его в процесс, но он гад падает, хотя инжектируемый код сам по себе рабочий ( адреса правильные + я сорцы кинул можешь проверить ) , так вот вопрос в том , почему падает процесс ?
И ещё поток показываеться как STATUS_SUCCESS .
Делал инжект как в дебаженный процесс (подрубался олькой ) так и в простой.



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

Создано: 09 февраля 2007 15:53 · Поправил: Модератор
· Личное сообщение · #5

[провокацию флуда удалил Bitfry]

Угу, почитал почитал и вроде дето багу увидел. Внедряешся то ты правильно, а вот код как писали на васме действительно то не базонезависен.
Потамучто в опкодах E8 XXXXXXXX
а ХХХХХХХХ это смещение от данного адреса до адреса месаджбокса, естественно когда ты заинжектиш код в другой процесс смещение изменится.

Это как я понял описаную проблему call EAX те в помощ, где EAX==addr messagebox



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

Создано: 09 февраля 2007 16:02
· Личное сообщение · #6

WoLFeR повторяю все E8 XXXXXXXX верны !!! не веришь, скомпилирую asm код и проверь.



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

Создано: 09 февраля 2007 17:39 · Поправил: Модератор
· Личное сообщение · #7

[бла-бла-бла удалил Bitfry]

ClickF1 пишет:
повторяю все E8 XXXXXXXX

Они верны в скомпиленом шелле а в адресном пространстве процеса в который произошел инжект они уже будут не верными

Дывай код только перед месажбоксом int 3 поставь



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

Создано: 09 февраля 2007 18:11
· Личное сообщение · #8


...
char shellcode[]=
"x6Ax00" // PUSH 0 MB_OK
"x6Ax00" // PUSH 0 Caption_NULL
"x6Ax00" // PUSH 0 Text_NULL
"x6Ax00" // PUSH 0 HWND_NULL

"xB8x7Dx05xD7x77" // mov eax, 0x77D7057D ( EIP+MessageBox )
"xFFxD0" // call eax

"x6Ax00" // PUSH 0 dwExitCode_0
"xB8xA9xCCx80x7C" // mov eax, 0x7C80CCA9 ( EIP+ExitThread )
"xFFxD0"; // call eax
/*
; 0x77D7057D - MessageBoxA
; 0x7C80CCA9 - ExitThread
*/
...

EIP+AIP_FUNC_ADDR
P.S Всё приходит с опытом



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

Создано: 09 февраля 2007 18:29 · Поправил: WoLFeR
· Личное сообщение · #9

почитай про адресацию, разьяснит некоторые моменты



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

Создано: 09 февраля 2007 18:33
· Личное сообщение · #10

Обязательно прочту, тема закрыта.


 eXeL@B —› Программирование —› SHELLCODE на примере
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати