O que vamos precisar:
1 x TextBox
- 4 x Buttons
- 1 x ListBox
- 3 x Label
- 2 x Radio Button
- 1 x CheckBox
- 1 x OpenFileDialog
- 2 x Timer (Set both to interval 50, and enable the second one only)
- 1 x GroupBox (Not compulsory)
Como configurar os botões etc...
- Procurar = Button1
- Injectar = Botão 3
- Remova = Button2
- Limpar tudo Button4 =
- Status = Label3
- AutoInject = Timer1
- Status Updater = Timer2
Passo 1 :
Primeiro você vai precisar de configurar o seu GUI. Para fazê-la parecer doce e profissional eu sugiro gastar algum tempo nesta etapa. Tente não usar fontes desleixado / encaracolado com cores aleatórias. Experimente e fazer seus botões alinhados de forma que eles são de fácil acesso junto.
Fundos de imagem geralmente horrível, a menos que você está indo para torná-lo apto para o seu injetor exatamente o uso de cores que combinam e ter certeza que você pode ver seus rótulos ainda. Sugiro também que você desligar o botão de maximizar, é nas propriedades do formulário no lado direito. Abaixo está um exemplo:
Passo 2 :
Agora vamos configurar as opções de salvamento, já que é a coisa easist fazer. Goto Projeto> Propriedades e clique na guia Settings. Faça uma nova configuração chamada injetar, torná-lo uma corda. Faça um outro chamado perto e fazer com que um número inteiro. Pressione CTRL + S para salvar e feche as propriedades.
Passo 3 :
Agora duplo clique no cabeçalho do formulário (onde o título é) que fará uma nova sub Privadas. Nós vamos verificar as configurações nos dizer e então alterar os botões de rádio e caixa de verificação em conformidade. Eu vou explicar o código em um segundo. Copie e cole este em seus sub Form_Load.
Código :
Este código vai verificar se a configuração de seu último definido como auto ou manual, e depois de lá ele vai mudar as caixas de seleção para ajustar a configuração correta. Muito simples. Nós também usamos uma declaração Else na parte inferior por isso, se ele não encontrar nenhuma dessas configurações (por exemplo, é a primeira vez que você abrir o injetor) que vai apenas verificar a primeira opção.
Passo 4 :
O próximo passo é fazer o mesmo para o Fechar após injetar opção. É exatamente o mesmo processo que o anterior com uma simples instrução IF.
Código :
Passo 5 :
A próxima coisa a fazer é salvar as configurações quando verificar ou alterar o estado dos botões de rádio. Fazemos isso através de um duplo clique sobre elas para introduzir o código de novo. Primeiro clique duas vezes no primeiro botão que é para injeção manual. Nós também vamos adicionar alguns códigos para a injetar botão para torná-lo desativado.
Código :
Este código irá salvar a configuração para "auto" que podemos usar quando o formulário é carregado novamente. Também apenas desabilitado o botão Inject porque estamos injetando manualmente. E, finalmente, permitiu que o timer1 porque esse é o temporizador vamos usar para verificar se o processo está sendo executado mais tarde.
Passo 6 :
Nós vamos fazer a mesma coisa para o botão de outro rádio, mas as opções serão oposto.
Código :
Passo 7 :
O bit final desta seção é para a caixa de seleção. Nós só temos que ver se a caixa está marcada ou não, e salvar a configuração.
Código :
Você pode fazer o mesmo para o processo, se você quer, ele tem que ser bastante auto-explicativo agora.
Passo 8 :
Agora temos todas as coisas básicas feito, podemos passar para alguns bits mais aprofundada. Vamos começar com o Timer1. Este temporizador vai verificar se o processo é iniciado e vai injectar se estiver. Este temporizador só vai ser ativado quando o botão de opção para injecção automática está marcada lembre-se.
Código :
Aqui nós estamos indo para primeiro verificar se há qualquer DLL está selecionada. Se não, o resto do código é ignorado. Presumindo que há uma DLL pronta para ser injetada, vamos verificar se o processo é iniciado. Se não, nós imprimimos "À espera de processo" na caixa de status. Se o processo for aberto e pronto, vamos continuar com injeção, parando os temporizadores como eles não são mais necessários e, em seguida, chamamos o Inject função que vamos adicionar mais tarde.
Passo 9 :
Em seguida, precisamos cobrir o segundo temporizador que vamos utilizar para verificar o status de toda a aplicação. A razão por que colocar isso em um temporizador separado é porque queremos o estado para continuar atualizando mesmo se eles estão injetando manualmente, caso em que o Timer1 iria parar de correr, se isso faz qualquer sentido!
Código :
A primeira coisa que fazemos é verificar se o usuário digitou em um processo, se não ele irá parar o timer1 como não há necessidade de deixá-lo correr até que estejamos prontos para injetar. Ele também irá imprimir uma mensagem para o nosso rótulo de status. A próxima coisa a verificar é o DLL. Se não DLL for selecionado, então podemos fazer o mesmo, já que não pode cuntinue até a DLL foi especificado. A terceira coisa a verificar é o processo para ver se a sua execução. Se não, vamos imprimir uma mensagem e parar o timer1. Se tudo estiver configurado corretamente após essas verificações e que o usuário deseja injeção automática, começamos timer1 para que ele possa chamar o Inject função.
Passo 10 :
Podemos aswell declarar todos os nossos booleanos agora para o Inject função e configurar a injeção real. Eu vou admitir que eu não entendo este código! Não é muito importante se você sabe como ele funciona ou não, porém, a menos que botheres que você não entende isso. Isto vai no topo apenas em "Public Class Form1". Nós também declarou um novo dicionário aqui chamado dlls.
Código :
Você vai ver no fundo de nossa função de injetar, usamos uma instrução IF para verificar se para fechar o injector. Simplesmente vamos verificar se a caixa está marcada (um monte de cheques!) E então usar me.close para fechar toda a aplicação.
Passo 11 :
Hora de adicionar códigos nosso botão agora. Vamos começar com o botão Inject. Clique duas vezes para introduzir o código.
Código :
Este é praticamente o mesmo código para o Timer1 mas rearanged para incluir caixas de mensagem. Vamos verificar se o processo está definido, se há qualquer da DLL no ListBox e se o processo está sendo executado. Qualquer erro será exibida uma mensagem de erro.
Passo 12 :
O botão de navegação é o próximo. Clique duas vezes para introduzir o código.
Código :
Estamos indo simplesmente para definir o filtro para o OpenFileDialog para que ele só permite abrir DLL e então podemos mostrar o OpenFileDialog para o usuário a abrir um hack.
Passo 13 :
Para parar o erro bobo de aparecendo quando você navegar e clique em Cancelar, precisamos adicionar este bit para os sub File_OK. Para fazer isso, clique duas vezes o OpenFileDialog e cole este.
Código :
Isso vai levar o nome completo, cortá-la usando algumas funções que ele só mostra o nome do hack.dll. Então, podemos adicioná-lo ao nosso ListBox. Depois disso, podemos também adicionar a dll ao nosso dicionário. Fazemos isso com uma função simples dlls.Add segurando o nome de arquivo curto eo caminho completo depois.
Passo 14 :
O próximo é o botão Remover. Este código é um pouco confuso de entender, a menos que você é bom em matemática!
Código :
Primeiro vamos verificar se uma dll é ainda selecionado, caso contrário, ele traz de volta uma mensagem de erro. Em seguida, reiniciar o OpenFileDialog para parar todos os outros erros. Depois que podem facilmente remover a DLL do nosso dicionário usando a chave que é o mesmo que o que estava no ListBox. Então nós temos que fazer um pouco de matemática para determinar qual dll na lista de remover. A função de contagem e os SelectedItems funcionar tanto início em valores diferentes, o que torna muito confuso para fazer isso. Uma vez que temos o Índice de direito, podemos remover o item com items.remove.
Passo 15 :
O último é o botão Limpar tudo, seus realmente para a frente e requer apenas duas linhas de código. Com uma função simples, podemos apagar tudo do ListBox e com outro que pode redefinir a dicionário.
Código :
Passo 16 :
O passo final é adicionar o código para passar por cada DLL e injetá-lo separadamente. Para fazer isso vamos usar um para cada afirmação, que irá percorrer nosso dicionário e injetar cada valor, usando o nosso caminho completo para a DLL. Você vai ver duas vezes no seu código a frase "injetar código aqui, que é onde você precisa colocar esse próximo pedaço de código.
Código :
Passo 17 :
Este é o passo final para obter o seu trabalho injector. Ir Ferramentas> Opções> Projetos e Soluções> Geral e marque "Mostrar configurações avançadas construir". Então goto Construir> Configuration Manager. No uma depuração, clique na caixa suspensa e ir New> plataforma x86. Agora você pode usar esta plataforma para sua depuração e liberação e, em seguida, clique em fechar.
E aí está, um trabalho totalmente multi-dll injector. Obrigado pela leitura e espero tê-lo ajudado em seu caminho em Visual Basic!
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Não vou colocar SCAN porque é no BAIXAKI e é Coonfiavel.
Por Favor Agredeçe
[P]ower
1 x TextBox
- 4 x Buttons
- 1 x ListBox
- 3 x Label
- 2 x Radio Button
- 1 x CheckBox
- 1 x OpenFileDialog
- 2 x Timer (Set both to interval 50, and enable the second one only)
- 1 x GroupBox (Not compulsory)
Como configurar os botões etc...
- Procurar = Button1
- Injectar = Botão 3
- Remova = Button2
- Limpar tudo Button4 =
- Status = Label3
- AutoInject = Timer1
- Status Updater = Timer2
Passo 1 :
Primeiro você vai precisar de configurar o seu GUI. Para fazê-la parecer doce e profissional eu sugiro gastar algum tempo nesta etapa. Tente não usar fontes desleixado / encaracolado com cores aleatórias. Experimente e fazer seus botões alinhados de forma que eles são de fácil acesso junto.
Fundos de imagem geralmente horrível, a menos que você está indo para torná-lo apto para o seu injetor exatamente o uso de cores que combinam e ter certeza que você pode ver seus rótulos ainda. Sugiro também que você desligar o botão de maximizar, é nas propriedades do formulário no lado direito. Abaixo está um exemplo:
Passo 2 :
Agora vamos configurar as opções de salvamento, já que é a coisa easist fazer. Goto Projeto> Propriedades e clique na guia Settings. Faça uma nova configuração chamada injetar, torná-lo uma corda. Faça um outro chamado perto e fazer com que um número inteiro. Pressione CTRL + S para salvar e feche as propriedades.
Passo 3 :
Agora duplo clique no cabeçalho do formulário (onde o título é) que fará uma nova sub Privadas. Nós vamos verificar as configurações nos dizer e então alterar os botões de rádio e caixa de verificação em conformidade. Eu vou explicar o código em um segundo. Copie e cole este em seus sub Form_Load.
Código :
- Código:
If My.Settings.inject = "auto" Then
RadioButton1.Checked = True
ElseIf My.Settings.inject = "manual" Then
RadioButton2.Checked = True
Else
RadioButton1.Checked = True
End If
Este código vai verificar se a configuração de seu último definido como auto ou manual, e depois de lá ele vai mudar as caixas de seleção para ajustar a configuração correta. Muito simples. Nós também usamos uma declaração Else na parte inferior por isso, se ele não encontrar nenhuma dessas configurações (por exemplo, é a primeira vez que você abrir o injetor) que vai apenas verificar a primeira opção.
Passo 4 :
O próximo passo é fazer o mesmo para o Fechar após injetar opção. É exatamente o mesmo processo que o anterior com uma simples instrução IF.
Código :
- Código:
If My.Settings.close = 1 Then
CheckBox1.Checked = True
Else
CheckBox1.Checked = False
End If
Passo 5 :
A próxima coisa a fazer é salvar as configurações quando verificar ou alterar o estado dos botões de rádio. Fazemos isso através de um duplo clique sobre elas para introduzir o código de novo. Primeiro clique duas vezes no primeiro botão que é para injeção manual. Nós também vamos adicionar alguns códigos para a injetar botão para torná-lo desativado.
Código :
- Código:
My.Settings.inject = "auto"
My.Settings.Save()
My.Settings.Reload()
Button3.Enabled = False
Timer1.Start()
Este código irá salvar a configuração para "auto" que podemos usar quando o formulário é carregado novamente. Também apenas desabilitado o botão Inject porque estamos injetando manualmente. E, finalmente, permitiu que o timer1 porque esse é o temporizador vamos usar para verificar se o processo está sendo executado mais tarde.
Passo 6 :
Nós vamos fazer a mesma coisa para o botão de outro rádio, mas as opções serão oposto.
Código :
- Código:
My.Settings.inject = "manual"
My.Settings.Save()
My.Settings.Reload()
Button3.Enabled = True
Timer1.Stop()
Passo 7 :
O bit final desta seção é para a caixa de seleção. Nós só temos que ver se a caixa está marcada ou não, e salvar a configuração.
Código :
- Código:
If CheckBox1.Checked = True Then
My.Settings.close = 1
Else
My.Settings.close = 0
End If
My.Settings.Save()
My.Settings.Reload()
Você pode fazer o mesmo para o processo, se você quer, ele tem que ser bastante auto-explicativo agora.
Passo 8 :
Agora temos todas as coisas básicas feito, podemos passar para alguns bits mais aprofundada. Vamos começar com o Timer1. Este temporizador vai verificar se o processo é iniciado e vai injectar se estiver. Este temporizador só vai ser ativado quando o botão de opção para injecção automática está marcada lembre-se.
Código :
- Código:
If ListBox1.Items.Count > 0 Then
Dim TargetProcess As Process() = Process.GetProcessesByName(TextBox1.Text)
If TargetProcess.Length = 0 Then
Label3.Text = ("Waiting for " + TextBox1.Text + ".exe")
Label3.ForeColor = Color.Red
Else
Dim ProcID As Integer = Process.GetProcessesByName(TextBox1.Text)(0).Id
Timer1.Stop()
Timer2.Stop()
'INJECT CODE HERE
End If
End If
Aqui nós estamos indo para primeiro verificar se há qualquer DLL está selecionada. Se não, o resto do código é ignorado. Presumindo que há uma DLL pronta para ser injetada, vamos verificar se o processo é iniciado. Se não, nós imprimimos "À espera de processo" na caixa de status. Se o processo for aberto e pronto, vamos continuar com injeção, parando os temporizadores como eles não são mais necessários e, em seguida, chamamos o Inject função que vamos adicionar mais tarde.
Passo 9 :
Em seguida, precisamos cobrir o segundo temporizador que vamos utilizar para verificar o status de toda a aplicação. A razão por que colocar isso em um temporizador separado é porque queremos o estado para continuar atualizando mesmo se eles estão injetando manualmente, caso em que o Timer1 iria parar de correr, se isso faz qualquer sentido!
Código :
- Código:
If TextBox1.Text = "" Then
Label3.Text = "Waiting for process to be set."
Label3.ForeColor = Color.Red
Timer1.Stop()
ElseIf ListBox1.Items.Count = 0 Then
Label3.Text = "Waiting for DLL path."
Label3.ForeColor = Color.Red
Timer1.Stop()
Else
Dim TargetProcess As Process() = Process.GetProcessesByName(TextBox1.Text)
If TargetProcess.Length = 0 Then
Label3.Text = ("Waiting for " + TextBox1.Text + ".exe")
Label3.ForeColor = Color.Red
Else
If RadioButton1.Checked = True Then
Timer1.Start()
End If
End If
End If
A primeira coisa que fazemos é verificar se o usuário digitou em um processo, se não ele irá parar o timer1 como não há necessidade de deixá-lo correr até que estejamos prontos para injetar. Ele também irá imprimir uma mensagem para o nosso rótulo de status. A próxima coisa a verificar é o DLL. Se não DLL for selecionado, então podemos fazer o mesmo, já que não pode cuntinue até a DLL foi especificado. A terceira coisa a verificar é o processo para ver se a sua execução. Se não, vamos imprimir uma mensagem e parar o timer1. Se tudo estiver configurado corretamente após essas verificações e que o usuário deseja injeção automática, começamos timer1 para que ele possa chamar o Inject função.
Passo 10 :
Podemos aswell declarar todos os nossos booleanos agora para o Inject função e configurar a injeção real. Eu vou admitir que eu não entendo este código! Não é muito importante se você sabe como ele funciona ou não, porém, a menos que botheres que você não entende isso. Isto vai no topo apenas em "Public Class Form1". Nós também declarou um novo dicionário aqui chamado dlls.
Código :
- Código:
Dim allocAddress As Integer = VirtualAllocEx(hProcess, 0, dllBytes.Length, &H1000, &H4)
If allocAddress = Nothing Then Return False '//if the memory allocation failed then we gotta quit.
Dim kernelMod As Integer = GetModuleHandle("kernel32.dll") '//kernel holds the LoadLibrary function, and its loaded to a constant address space, so we can find the load address in our own processes memory and assume it will be the same in the target process.
Dim loadLibAddr = GetProcAddress(kernelMod, "LoadLibraryA") '//find the address of LoadLibrary in kernel.
If kernelMod = 0 OrElse loadLibAddr = 0 Then Return False
WriteProcessMemory(hProcess, allocAddress, dllBytes, dllBytes.Length, 0) '// write the dll location as bytes to the process memory in the location we allocated earlier, we'll use this address when we call LoadLibrary so it knows where to load the dll from
Dim libThread As Integer = CreateRemoteThread(hProcess, 0, 0, loadLibAddr, allocAddress, 0, 0) '//call the LoadLibrary function in the target process and pass the location of our DLL to it (actually, we just pass the address to where it should read it from, it does the
rest)
If libThread = 0 Then
Return False '// couldn't create the thread, quit now
Else
WaitForSingleObject(libThread, 5000) '//give the process 5 seconds to finish using the LoadLibrary function if it needs it
CloseHandle(libThread) '//close our handle to the thread.
End If
CloseHandle(hProcess) '//close our handle to the process
Label3.Text = "DLL injected successfully."
If CheckBox1.Checked = True Then
Me.Close()
End If
Label3.ForeColor = Color.Green
Return True
End Function
Você vai ver no fundo de nossa função de injetar, usamos uma instrução IF para verificar se para fechar o injector. Simplesmente vamos verificar se a caixa está marcada (um monte de cheques!) E então usar me.close para fechar toda a aplicação.
Passo 11 :
Hora de adicionar códigos nosso botão agora. Vamos começar com o botão Inject. Clique duas vezes para introduzir o código.
Código :
- Código:
If ListBox1.Items.Count > 0 Then
If TextBox1.Text <> "" Then
Dim TargetProcess As Process() = Process.GetProcessesByName(TextBox1.Text)
If TargetProcess.Length = 0 Then
MsgBox(TextBox1.Text + ".exe is not running.", MsgBoxStyle.Critical, "Error")
Else
Timer1.Stop()
Dim ProcID As Integer = Process.GetProcessesByName(TextBox1.Text)(0).Id
'INJECT CODE HERE
End If
Else
MsgBox("You haven't specificed a process.", MsgBoxStyle.Critical, "Error")
End If
Else
MsgBox("You need to select a dll file to inject.", MsgBoxStyle.Critical, "Error")
End If
Este é praticamente o mesmo código para o Timer1 mas rearanged para incluir caixas de mensagem. Vamos verificar se o processo está definido, se há qualquer da DLL no ListBox e se o processo está sendo executado. Qualquer erro será exibida uma mensagem de erro.
Passo 12 :
O botão de navegação é o próximo. Clique duas vezes para introduzir o código.
Código :
- Código:
OpenFileDialog1.Filter = "DLL (*.dll) |*.dll"
OpenFileDialog1.ShowDialog()
Estamos indo simplesmente para definir o filtro para o OpenFileDialog para que ele só permite abrir DLL e então podemos mostrar o OpenFileDialog para o usuário a abrir um hack.
Passo 13 :
Para parar o erro bobo de aparecendo quando você navegar e clique em Cancelar, precisamos adicionar este bit para os sub File_OK. Para fazer isso, clique duas vezes o OpenFileDialog e cole este.
Código :
- Código:
Dim FileName As String = OpenFileDialog1.FileName.Substring(OpenFileDialog1.FileName.LastIndexOf("\"))
Dim DllFileName As String = FileName.Replace("\", "")
ListBox1.Items.Add(DllFileName)
dlls.Add(DllFileName, OpenFileDialog1.FileName)
Isso vai levar o nome completo, cortá-la usando algumas funções que ele só mostra o nome do hack.dll. Então, podemos adicioná-lo ao nosso ListBox. Depois disso, podemos também adicionar a dll ao nosso dicionário. Fazemos isso com uma função simples dlls.Add segurando o nome de arquivo curto eo caminho completo depois.
Passo 14 :
O próximo é o botão Remover. Este código é um pouco confuso de entender, a menos que você é bom em matemática!
Código :
- Código:
If ListBox1.SelectedIndex >= 0 Then
OpenFileDialog1.Reset()
dlls.Remove(ListBox1.SelectedItem)
For i As Integer = (ListBox1.SelectedItems.Count - 1) To 0 Step -1
Dim i2 As Integer = i + 2
ListBox1.Items.Remove(ListBox1.SelectedItems(i))
Next
End If
Primeiro vamos verificar se uma dll é ainda selecionado, caso contrário, ele traz de volta uma mensagem de erro. Em seguida, reiniciar o OpenFileDialog para parar todos os outros erros. Depois que podem facilmente remover a DLL do nosso dicionário usando a chave que é o mesmo que o que estava no ListBox. Então nós temos que fazer um pouco de matemática para determinar qual dll na lista de remover. A função de contagem e os SelectedItems funcionar tanto início em valores diferentes, o que torna muito confuso para fazer isso. Uma vez que temos o Índice de direito, podemos remover o item com items.remove.
Passo 15 :
O último é o botão Limpar tudo, seus realmente para a frente e requer apenas duas linhas de código. Com uma função simples, podemos apagar tudo do ListBox e com outro que pode redefinir a dicionário.
Código :
- Código:
ListBox1.Items.Clear()
dlls.Clear()
Passo 16 :
O passo final é adicionar o código para passar por cada DLL e injetá-lo separadamente. Para fazer isso vamos usar um para cada afirmação, que irá percorrer nosso dicionário e injetar cada valor, usando o nosso caminho completo para a DLL. Você vai ver duas vezes no seu código a frase "injetar código aqui, que é onde você precisa colocar esse próximo pedaço de código.
Código :
- Código:
For Each inj As KeyValuePair(Of String, String) In dlls
Inject(ProcID, inj.Value)
Next
Passo 17 :
Este é o passo final para obter o seu trabalho injector. Ir Ferramentas> Opções> Projetos e Soluções> Geral e marque "Mostrar configurações avançadas construir". Então goto Construir> Configuration Manager. No uma depuração, clique na caixa suspensa e ir New> plataforma x86. Agora você pode usar esta plataforma para sua depuração e liberação e, em seguida, clique em fechar.
E aí está, um trabalho totalmente multi-dll injector. Obrigado pela leitura e espero tê-lo ajudado em seu caminho em Visual Basic!
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Não vou colocar SCAN porque é no BAIXAKI e é Coonfiavel.
Por Favor Agredeçe
[P]ower
Última edição por [P]ower em Sáb Ago 25, 2012 1:21 pm, editado 4 vez(es)