[Pauscal] FakeSize

Iniciado por Yuki, Febrero 26, 2015, 11:51:39 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Les dejo este código que traduje hace tiempo, lo que hace es spoofear el peso de un archivo.

Código: php


$ADV-

' Unión que convierte una matriz de byte en cadena.

Unión StrAndIntToArrayByte,Str:Cadena,Bite[]:Byte

' Estructuras.

Estruc SECURITY_ATTRIBUTES, _
  nLength:Entero, _
  lpSecurityDescriptor:Entero, _
  bInheritedHandle:Booleano

Estruc OVERLAPPED, _
Internal, _
InternalHigh, _
offset, _
OffsetHigh, _
hEvent:Entero

' APIS
Proc SetFilePointer(,:Entero,Referencia:Entero,:Entero):Entero,"Kernel32"
Proc CreateFile(Referencia:Cadena,,:Entero,Referencia:SECURITY_ATTRIBUTES,,,:Entero):Entero,"Kernel32" "CreateFileA"
Proc ReadFile(,Referencia:Entero,:Entero,Referencia:Entero,Referencia:OVERLAPPED):Booleano,"Kernel32"
Proc WriteFile(,,:Entero,Referencia:Entero,Referencia:OVERLAPPED):Booleano,"Kernel32"
Proc DeviceIoControl(hDevice:Entero,dwIoControlCode:Entero,Referencia lpInBuffer:Entero,nInBufferSize:Entero,Referencia lpOutBuffer:Entero,nOutBufferSize:Entero,Referencia lpBytesReturned:Entero,lpOverlapped:Entero):Booleano,"Kernel32.dll"
Proc GetFileSize(:Entero,Referencia:Entero):Entero,"Kernel32"
Proc CloseHandle(hObject:Entero):Booleano,"Kernel32"
Proc SetEndOfFile(hFile:Entero):Booleano,"Kernel32"

Const FSCTL_SET_SPARSE = &000900C4
Const FILE_SHARE_READ = &1, FILE_SHARE_WRITE = &2
Const GENERIC_READ = &80000000, GENERIC_WRITE = &40000000
Const OPEN_EXISTING = 3,CREATE_NEW = 1
Const INVALID_HANDLE = -1

' // Alternative Space by Yuki!
Proc Espacio(Longitud:Entero):Cadena
   Var Ptr:StrAndIntToArrayByte
   ReDim Ptr.Bite,Longitud
   Devolver Ptr.Str
FinProc

' "VarPtr"
Proc CadPtr(Referencia lpStr:Cadena):Entero
  Var @Dir:Entero
  Dir@=lpStr@
  Devolver Dir
FinProc

Proc FakeSize(Referencia ArchivoBase,ArchivoFinal:Cadena)
Var Origen,Destino,FSize,bReturn:Entero,Buffer:Cadena
Resultado = Verd
Origen = CreateFile(ArchivoBase,GENERIC_READ,FILE_SHARE_READ,Nulo,OPEN_EXISTING,0,0)
FSize = GetFileSize(Origen,Nulo)
Buffer = Espacio(FSize)
ReadFile(Origen, CadPtr(Buffer), FSize, 0, Nulo)
CloseHandle(Origen)
Destino = CreateFile(ArchivoFinal,GENERIC_WRITE,FILE_SHARE_WRITE,Nulo,CREATE_NEW,0,0)
WriteFile(Destino, CadPtr(Buffer), FSize, 0, Nulo)
bReturn = DeviceIoControl(Destino, FSCTL_SET_SPARSE, 0, 0, 0, 0, 0, 0)
Si bReturn = INVALID_HANDLE Entonces
Salir
FinSi
SetFilePointer(Destino,1073741824, 0, 0)
SetEndOfFile(Destino)
CloseHandle(Destino)
FinProc