function _DecHex( Dc : Integer) : String;
begin
 Result := Copy('0123456789abcdef',Dc+1,1);
end;

function DecHex( Dec : Integer) : String;
var Di,D1,D2 : integer;
begin
 Di := 0; D1 := 0; D2 := 0;
 While Di < Dec Do
  Begin
    d1 := d1 + 1;
    Di := d1 * 16 - 1;
  end;
 If d1 > 0 Then
   d1 := d1 - 1;
 D2 := Dec - d1 * 16;
 Result := _DecHex(D1) + _DecHex(D2);
end;

procedure ParseString (S : TStringList; SS : String; SSS : String );
var i,l : integer;
begin
  i := Pos(SSS, SS);
  l := Length(ss);
  If l > 1 Then
   begin
     If i = 0 Then
       S.Add(ss);
     If i>0 Then
      begin
        s.Add(Copy(ss, 1, i - 1));
        ParseString(S, Copy(ss, i + 1, l - i + 1), SSS)
      end;
   end;
end;

var SL,SF : TStringList; SS, SSS : String; i : integer;
begin
 SS := '';
 SSS := '';
 SL := TStringList.Create;
 SF := TStringList.Create;
 SS := RegKeyStrParamRead ('HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems','Windows');
 ParseString (SL, SS, ' ');
 for i := 0 to SL.Count - 1 do
  Begin
    SS := SL[i];
    If Pos('ServerDll=base',SS) > 0 Then
     Begin
       If SS <> 'ServerDll=basesrv,1' Then
        Begin
          AddToLog('Infected "SubSystem" value : ' + SS);
          if MessageDLG('Fix "SybSustem" parametrs  ?', mtConfirmation, mbYes+mbNo, 0) = 6 then
           Begin
             SSS := SL[i];
             SL[i] := 'ServerDll=basesrv,1';
             AddToLog('User select "Fix" option.');
           end;
        end;
     end;
  end;
 SS := '';
 for i := 0 to SL.Count - 1 do
  Begin
    SS := SS + SL[i];
    If SL.Count - 1 > i Then
      SS := SS + ' ';
   end;
 If SSS <> '' Then
  Begin
    i := Pos(',',SSS);
    If i = 0 Then
      i := Length(SSS);
    SSS := Copy(SSS, Pos('=',SSS) + 1, i - Pos('=',SSS)-1);
    AddToLog('Infection name : ' + SSS + '.dll');
    SetAVZGuardStatus(True);
    If FileExists('%WinDir%' + '\system32\' + SSS + '.dll') = true then
      DeleteFile('%WinDir%' + '\system32\' + SSS + '.dll');
    SF.Add('REGEDIT4');
    SF.Add('');
    SF.Add('[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems]');
    SSS := '"Windows"=hex(2):';
    for i := 1 to Length(SS) do 
      SSS := SSS + DecHex(Ord(Copy(SS,i,1))) + ',';
    SSS := SSS + '00';
    SF.Add(SSS);
    SF.SaveToFile(GetAVZDirectory + 'fix.reg');
    ExecuteFile('reg.exe','IMPORT "' + GetAVZDirectory + 'fix.reg"', 1, 10000, true);
    SaveLog(GetAVZDirectory + 'SubSystems.log');
    RebootWindows(false);
  end;
 SL.Free; SF.Free;
End.