LU
vb

[duvida Resouvida] Ip Changer

Por lucasjockey, 17 de jan. de 2008 em Resolvidos

tibia
8
3.2k
lucasjockeyL
17 de janeiro de 2008 às 19:25

Estou desenvolvendo um IP Changer em Visual Basic 6.0 para Tibia 8.1.

 

Nele tem 1 form com 1 textbox chamado "Text1" e um botão.

Quando você clica no botão ele trabalha os seguintes comandos:

 

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal Classname As String, ByVal WindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Sub Command1_Click()
Dim hwnd As Long
Dim pid As Long
hwnd = FindWindow(vbNullString, "Tibia")
GetWindowThreadProcessId hwnd, pid
changeip (pid)
End Sub

 

Agora eu coloquei um modulo com uma função chamada "changeip", nele esta assim:

 

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WriteString Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Function changeip(ByVal IDofProcess As Long) As Boolean
Const PROCESS_ALL_ACCESS = &H1F0FFF
Dim ax1 As Long
Dim ax2 As String
Dim phandle As Long
phandle = OpenProcess(PROCESS_ALL_ACCESS, False, IDofProcess)
For ax1 = 1 To Len(Form1.Text1.Text)
ax2 = ax2 & Asc(Mid$(Form1.Text1.Text, ax1, 1))
Next
ax1 = 0
If Not Form1.Text1.Text = "" Then
WriteString phandle, &H763BB8, ax2, 10, 0&
End If
CloseHandle phandle
End Function

 

Esta vendo o ax2, se você colocar uma única letra no textbox, exemplo: "A" ele irá modificar a memória corretamente, mas se você colocar dois "A" ficando "AA" no textbox ele irá transformar os dois caracteres A para dois "65", ficando assim: "6565", o problema é que o programa acaba pensando que "6565" = "¥" e não "AA" na hora de escrever na memória do Tibia.

 

Alguem sabe algum comando que separe os 2 elementos "65"?

 

Exemplo: Substituindo o "|" nessa frase: "65|65"

 

Muito obrigado =D

Editado Janeiro 24 por lucasjockey

bizugoB
21 de janeiro de 2008 às 16:04

duhh o WriteProcessMemory converte a string para byte na memoria, você não pressisa faze-lo, é só por WriteString IP (em formato ansi mesmo) ;)

A não ser que queira fazer por byte em byte, Writebyte LETRA...

lucasjockeyL
23 de janeiro de 2008 às 11:48

O problema eh que quando nomeio lpbuffer como string da na mesma...

Quando coloco 2 caracteres em valor ASC ele mostra valores estranhos...

Pode me mostra como que é o comando WriteString IP, porque no meu não dá como da pra ve, precisa do ID do processo, andress na memória, IP, espaço, número de bytes escritos... e não simplesmente writestring IP...

Vlw ;D

Editado Janeiro 23 por lucasjockey

bizugoB
23 de janeiro de 2008 às 14:56

Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Function WriteString(byval Str as string, byval Address as long)
Dim pHandle As Long
 pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, Process_ID) 'MUDA AKI O PID
If pHandle = 0 Then 'Não foi possivel abrir o processhandle
WriteProcessMemory pHandle, Address, ByVal str & chr(0), len(str)+1, 0&
	CloseHandle pHandle
end function

Editado Janeiro 23 por bizugo

lucasjockeyL
23 de janeiro de 2008 às 18:54

Funciono vei, vlw!

Vlw =)

Editado Janeiro 23 por lucasjockey

6 meses depois...
xdtibia16X
10 de julho de 2008 às 14:42

Aff Não Sou Muito Bom em VBScript.

6 anos depois...
FurabioF
08 de abril de 2015 às 14:35

Movido para a área correta.

5 meses depois...
LumusL
18 de setembro de 2015 às 02:11

Tópico Movido
Este tópico foi movido de "OFF-TopicLinguagens de ProgramaçãoSuporte Linguagens"
para "OFF-TopicLinguagens de ProgramaçãoSuporte LinguagensDúvidas Resolvidas - Suporte Linguagens".