Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 20 Enero 2011, 22:23 pm



Título: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 20 Enero 2011, 22:23 pm
Hola, hola! (http://ribap.files.wordpress.com/2009/11/krusty-el-payaso.gif)

Ya hace mucho que no acabo ningún proyecto en VB6... tengo una gran cantidad a medias... y se me ocurrió reanudar el Karcrack Project Crypter...
Más información sobre el proyecto:
Código:
http://foro.elhacker.net/programacion_vb/sourceactualizado_karcrack_project_crypter_encripta_tus_proyectos_en_vb-t221869.0.html
http://foro.elhacker.net/analisis_y_diseno_de_malware/karcrack_project_crypter_v21_kpc-t256127.0.html

Y se me ocurrió que la mejor forma de saber que necesita la gente a la hora de hacer indetectables sus proyectos era iniciar una lluvia de ideas (http://es.wikipedia.org/wiki/Lluvia_de_ideas) :)

Simplemente propongan :P Por ahora tengo esta lista:
  • Ofuscación de APIs (Varios métodos, un par secretos :P)
  • Cifrado de cadenas (Varios métodos, se me ocurrió añadir la posibilidad de usar algoritmos propios)
  • Cifrado de APIs (AKA Invoke/Zombie_Invoke/CallByName/CallByHash...)
  • Ofuscación de funciones (GoTo y añadir basurilla :P)
  • Cambio 'avanzado' de opciones del proyecto :rolleyes:

Alguna sugerencia?! Un saludo :D


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: _katze_ en 20 Enero 2011, 23:59 pm
y que otros metodos se pueden hacer pero atraves de code....yo ni idea de esto pero creo q los av's t colocan firma tambien donde compilas el proyecto seria modificar esto,agregar variantes al split,LOF y demas q tienen firmass... :S


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: BlackZeroX en 21 Enero 2011, 00:54 am
.
Solo se me ocurrio una.

 * dividir la funcione donde se encuentren sentencias if then, Select Case, u otras, pero sin perder la congruencia de la misma.

es decir:

Código
  1. Private Sub Form_Load()
  2. Dim i       As Integer
  3. Dim str_v   As String
  4.    If Caca_Malware(6, 6, 6) = Pedos_frijoleros(6, 9) Then
  5.        str_v = o4215(i)
  6.    Else
  7.        str_v = awuiwiche(45) + i
  8.    End If
  9.  
  10.    MsgBox str_v
  11. End Sub
  12.  

Pasarlo a funciones:

Código
  1.  
  2. Private Sub Form_Load()
  3. Dim i       As Integer
  4. Dim str_v   As String
  5.    Call compareifthen(str_v, i)
  6.    MsgBox str_v
  7. End Sub
  8.  
  9. Private Sub compareifthen(ByRef str_v As String, ByRef i As String)
  10.    If Caca_Malware(6, 6, 6) = Pedos_frijoleros(6, 9) Then
  11.        Call icacamalware_frijolero(str_v, i)
  12.    Else
  13.        Call strv_wilwuicho
  14.    End If
  15. End Sub
  16. Private Sub icacamalware_frijolero(ByRef str_v As String, ByRef i As Integer) ' // esto es trivial pero bueno
  17.    str_v = o4215(i)
  18. End Sub
  19. Private Sub strv_wilwuicho(ByRef str_v As String, ByRef i As Integer) ' // esto es trivial pero bueno
  20.    str_v = awuiwiche(45) + i
  21. End Sub
  22.  
  23.  

Nota: En mi forma de pensar este tema es OFF-Topic, citando las reglas (http://foro.elhacker.net/programacion_visual_basic/reglas_del_foro_iexclleed_todos-t93618.0.html;msg441483#msg441483) le pese a quien le pese.

Dulces Lunas!¡.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: raul338 en 21 Enero 2011, 01:06 am
Y que pasa con lo basico de todo protector, ofuscacion de variables? Es una pequeña trabita mas, pero es pesada al menos :xD

Nota: En mi forma de pensar este tema es OFF-Topic, citando las reglas (http://foro.elhacker.net/programacion_visual_basic/reglas_del_foro_iexclleed_todos-t93618.0.html;msg441483#msg441483) le pese a quien le pese.
Para mi deberia ir mejor en criptografia, pero nose :rolleyes:


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: BlackZeroX en 21 Enero 2011, 01:15 am
Para mi deberia ir mejor en criptografia, pero nose :rolleyes:

Foro Libre, hay nadie no vera feo.

Dulces Luans!¡.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: LeandroA en 21 Enero 2011, 04:09 am
Muy buena iniciativa Karcrack, realmente no se me ocurren muchas ideas para aportar si no mas bien preguntas, yo con el tema de mi proyecto estoy investigando un poco de todo esto de la indetectabilidad, la pregunta es si vos vas a utilizar Ofuscación de APIs, que garantía hay de que esto pueda ser seguro con todas las apis, me refiero al funciona miento, osea algunas apis utilizan byref, y otras byval para los parámetros, si no me equivoco cuando es byref se utiliza VarPtr entonces el crypter seria capaz de reconocer cada parámetro de cada api y hacer que esto funcione automaticamente?

por otro lado no seria mejor hacerlo sobre un ejecutable, en vez desde el proyecto? (Pregunto por que no se)
si uno crearía un crypter "indetectable" y enveviera el .exe dentro de si mismo (con alguna encriptacion) ,luego lo extrae y lo ejecuta inyectandolo dentro del mismo crypter, esto podría ser detectado?

bueno por el momento me vienen esas intrigas.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Elemental Code en 21 Enero 2011, 06:18 am
va a sonar loco pero yo me saque de ensima unas firmas una vez haciendo lo siguiente:

Que siempre haya un form:
al parecer al avast no le gusta que ejecutes codigo desde el sub_main sin mostrar forms.

Que tenga un icono personalizado:
NO PREGUNTEN, cambie el icono de vb y panda no lo detecto.

y este es el mas loco de todos.
Cifre las cadenas estaticas :S
si cuando me tengo que abrir a mi mismo para usar un stub o algo asi lo hago de la sig forma:

Código
  1. MySelf = "exe." & StrReverse(App.EXEName) & "\" & StrReverse(App.Path)

Por alguna razon, Kaspersky le parece menos sospechoso esto que decirle

Código
  1. MySelf = app.path & "\" & app.exename & ".exe"


ahora yo pregunto, el nombre con el que se declara una constante para usar alguna api o funcion

ej:
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8
Private Const INTERNET_RAS_INSTALLED As Long = &H10
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40

influye en algo?

este... no se me ocurre mas nada.
Cuando me caiga la ficha de algo mas vuelvo.

PD: hay alguna diferencia para un av en compilarlo en P.code o codigo nativo?


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 21 Enero 2011, 14:30 pm
@_katze_:
Me parece una buena idea el reemplazo automatizado de funciones/metodos como Split, App.Exename... etc :)

@BlackZeroX▓▓▒▒░░:
Es interesante, pero me parece que a la hora de generar el algoritmo se liarian las cosas :-\

@raul338:
Es la parte que mas rabia me da de los ofuscadores, cambiar los nombres de las variables por aswWdsa1sA no sirve para nada, como mucho quita las firmas estáticas que ya tengas en tu proyecto... Y ademas, puedes decirle al compilador que no mete los nombres de variables en el fichero compilado, asi que esa opcion ya esta en mi lista :P

@LeandroA:
Es relativamente sencillo automatizar el cifrado de las APIs (El metodo de Invoke/CallByName...) siempre que tengas la declaracion, aunque tambien habria que fijarse un poquito en como se llama a la función, ya que a pesar de que en la declaracion este ByRef el usuario puede especificar ByVal...
Respecto a lo de crear un crypter... no le veo intereses, lo que mola es modificar el código y dejarlo indetectable :)

@Elemental Code:
Los AVs han abusado muchísimo con sus firmas y detecciones heurísticas, de tal forma que un proyecto vació de VB6 ya es detectado por varios AVs... Lo del formulario es cierto, pero eso es un falso positivo... si que es cierto que algunos AVs detectan el uso de ciertas combinaciones como: Sub Main() + App.Path, pero eso se solucionaria con la idea de _katze_ :)
Respecto a las constantes, hasta donde yo se no aparecen los nombres, solo los de las variables, pero como he dicho antes eso se puede modificar ;)
Y por último, sí, existe diferencia al compilar en P-CODE o N-CODE y también si vas modificando otros parámetros de la compilación... esto es debido a que el fichero compilado varia, y por lo tanto la detección también

@Todos: Gracias por la ayuda :-*

@Mods: Si veis necesario moverlo hacedlo... Lo puse aquí porque es donde más programadores de VB6 lo podrán ver... Ademas no lo veo Off-Topic, por que se están debatiendo temas relacionados con el lenguaje de programación VB6, este subforo no es solo para preguntar y pegar codes :P

Un saludo :)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: _katze_ en 22 Enero 2011, 00:55 am
creo q deveriamos abrir un topic y hacer variaciones de funciones que simulen a las mismas para ir ganando tiempo al proyecto hacer split y etc y q las mejorcitas c vallan agregando...


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 22 Enero 2011, 01:07 am
No te preocupes _katze_, ya me encargo yo de la programación :P Esto no es ningún proyecto comunitario ni nada así, solo necesito algunas ideas que nos interesen a los programadores de VB6 :xD


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: _katze_ en 22 Enero 2011, 01:49 am
pero seria bueno como reto jejeje y no digo q sea comunitario


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: xpro en 22 Enero 2011, 12:51 pm
Para mi beneficio, te diría que buscaras alternativas a las típicas cadenas que todos usamos, como por ejemplo..

El típico Split, se podría crear una función nueva o alguna alternativa a esto ( que no sea el resource, que salta kav. ). Por otra parte se podría intentar aquello de ejecutar las strings desde memoria..

Lo de ofuscar las api's, pues es una muy buena idea espero que funcione perfectamente. Por otro lado, puesto que este programa casi siempre se utiliza para ofuscar el code de crypters ( generalmente ), buscaría alguna manera de ofuscar los ya imposible de Fuddear runpe's.. y bueno, poco más te puedo decir creo que cualquier idea que se te ocurra a tí siempre será mucho mejor que lo que yo pueda decir.

Un saludo !


PD: Aquí, yo al menos en vb6 te echaba de menos..


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: The Swash en 24 Enero 2011, 04:21 am
Bueno Karcrack, digamos que puedo dar una pequeña idea que no reemplazaria al ofuscamiento de API pero depronto sea útil.

Recuerdo que hace un tiempo cuando usaba VB (pasado) un día Avira detectaba DllFunctionCall, que justamente iba en el invoke, al modificar la libreria MSVBVM60 uno de sus caracteres Avira se iba, pero todo quedaba no funcional.

Pero resulta que la declaración de esa DLL no se ocupa hasta llamar la función entonces digamos que se puede hacer algo al abrir el ejecutable, sería cambiar en la declaración la libreria por xDDD.DLL un ejemplo, y cuando ejecuten el archivo llamar a un pequeño Copy(Encryptado("MSVBVM60.DLL"),"xDDD.DLL").

Te recalco algunas funciones que en si son detectadas
Split - Kaspersky
LOF - Avira, A-squared
App.Path + App.ExeName + ".exe", Avira creo.

Strings detectadas como "Stub", "HKCU../CurrentVersion/Run"

Espero de algo te sirva, Animo con eso Karcrack!

Como te digo es una pequeña experiencia que quizás sirva.
Un saludo y gran iniciativa como siempre Karcrack!

PD: Que detalle el de Kruzty  ;D


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: mixer en 25 Enero 2011, 21:56 pm
Ideas para considerar:

- Agregar funciones alternativas a Split, LOF y Apertura, lectura de archivos.
- Que pueda agregar una buena cantidad de API reales pero inofensivas, o API falsas
- Varios modulos o forms con código Basura
- Reemplazar cadenas de Constantes
- Algo que muchos AV detectan la asignacion de valores constantes  podriamos ofuscarlo un poco

Por ejemplo si me detecta Var1 = &H4
puedo usar:

Var2 = &H4 + 15
Var1 = Var2 - 15

al final Var1 tomará el mismo valor. Con esos sacas a Nod, MSEssentials y varios más.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 25 Enero 2011, 22:03 pm
Es interesante la ofuscación de constantes :) Aunque lo de agregar módulos/funciones basura no me gusta la verdad... para mi es importante que el codigo resultante tenga una lectura tan sencilla como estaba antes... aunque lo que dices de meter APIs a diestro y siniestro puede ser útil :)

Ah! Otra idea que tuve es permitir el cambio de convención a la hora de llamar a las APIs, es decir, en vez de importarlas directamente desde el código (DllFunctionCall) hacerlo desde la IAT (TypeLiBrary)

Ya tengo una buena lista :) Creo que este fin de semana empezaré con los algoritmos :)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: F3B14N en 26 Enero 2011, 16:07 pm
Buenas, algo chiquito pero bueno seria, remplazar cualquier valor numérico por su equivalente string, pero llamando a la funcion Val() para que retorne lo que se necesita:

bB(0) = &H1 >>> bB(0) = Val("&H1")
call dd(1,2) >>> call dd(Val("&H1"),Val("&H2")
, y agregarle la posibilidad de cifrar ese string tambien :P

Despues estaria muy bueno agregale algo que limpie la ***** que agrega VB6, jugar con las estructuras que utilizo BlackZero (sino me equivoco), lo pensé hace tiempo, y creo que seria posible.

Que anden bien, Saludos  :)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 26 Enero 2011, 16:52 pm
Despues estaria muy bueno agregale algo que limpie la ***** que agrega VB6, jugar con las estructuras que utilizo BlackZero (sino me equivoco), lo pensé hace tiempo, y creo que seria posible.
Ese tipo de modificaciones serian sobre el fichero compilado y en este proyecto me intereso en el codigo :)

Por cierto, estuve haciendo un poco de research :P y lanzo una buenisima idea para aquel que tenga tiempo :P... Desde el header de un fichero compilado de VB6 se puede acceder a las cadenas de las APIs importadas, se cifran, se modifica tambien el header para que haga al Loader de VB6 ejecutar una pequeña shellcode que descifrará las cadenas de las APIs... para que quede mas claro:
  • Abrimos el fichero compilado
  • Leemos la cabecera del VB6 y recorremos las cadenas de las APIs cifrando cada una
  • Inyectamos una shellcode en uno de los muchos huecos que quedan en el ejecutable
  • Modificamos la cabecera del VB6 para que haga ejecutar al Loader nuestra shellcode primero
  • La shellcode se encargará de descifrar las cadenas y saltar al EntryPoint original que había en el header del VB6

De esta forma las APIs serian descifradas en Runtime y en Scantime nuestras APIs serian irreconocibles :)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: 79137913 en 26 Enero 2011, 19:40 pm
HOLA!!!

MMM, no se si es una buena idea pero otra forma no seria:

CODIGO ORIGINAL:
Código
  1. Private Sub Form_Load()
  2.        MsgBox "hola"
  3. End Sub


CODIGO OFUSCADO:
Código
  1. Private Sub Form_Load()
  2. Dim hola As Boolean
  3.    hola = False ' por las dudas XD
  4.    If hola Then
  5. hola:
  6.        MsgBox "hola"
  7.    End If
  8.    GoTo hola
  9. End Sub

Espero una respuesta para ver si sirvio o no.

GRACIAS POR LEER!!!


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: F3B14N en 26 Enero 2011, 19:47 pm
Ese tipo de modificaciones serian sobre el fichero compilado y en este proyecto me intereso en el codigo :)

Por cierto, estuve haciendo un poco de research :P y lanzo una buenisima idea para aquel que tenga tiempo :P... Desde el header de un fichero compilado de VB6 se puede acceder a las cadenas de las APIs importadas, se cifran, se modifica tambien el header para que haga al Loader de VB6 ejecutar una pequeña shellcode que descifrará las cadenas de las APIs... para que quede mas claro:
  • Abrimos el fichero compilado
  • Leemos la cabecera del VB6 y recorremos las cadenas de las APIs cifrando cada una
  • Inyectamos una shellcode en uno de los muchos huecos que quedan en el ejecutable
  • Modificamos la cabecera del VB6 para que haga ejecutar al Loader nuestra shellcode primero
  • La shellcode se encargará de descifrar las cadenas y saltar al EntryPoint original que había en el header del VB6

De esta forma las APIs serian descifradas en Runtime y en Scantime nuestras APIs serian irreconocibles :)

Es facil para los que saben como hacer shellcodes, yo sé muy pocas instrucciones y por ahi me quedo.. :-(


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: BlackZeroX en 26 Enero 2011, 20:19 pm
.
@Karcrack.

Se podria usar parte del codigo de [Zero] ( End Analisis de Malware lo publico ). Eso lo podria hacer quien supiera ASM para que ese pequeño "Stub" no pesara tanto.

Dulces Lunas!¡.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 26 Enero 2011, 20:30 pm
@F3B14N: Con unos cuantos MOVs para recorrer la estructura y un par de XORs seria suficiente... ademas de un acceso momentaneo al PEB para sacar el BaseAddress :P

@79137913: Nuestro querido IDE de VB6 es mas listo de lo que parece, y hace algunas comprobaciones antes de compilar, para quitar código innecesario, así que no habría comparación sino que directamente saltaria al GoTo, aún así es una idea interesante... pero me gusta más hacerlo así:
Original:
Código
  1. Sub Main()
  2.    Call doSomething
  3. End Sub
Ofuscado:
Código
  1. Sub Main()
  2.    If Rnd() + 1 Then
  3.        Call doSomething
  4.    End If
  5. End Sub

Prefiero agregar la referencia a Rnd() que a GoTo ya que la referencia de GoTo se utiliza en uno de mis métodos para llamar punteros... :)

@BlackZeroX▓▓▒▒░░: No se muy bien a que te refieres, lo que yo he planteado (cifrar las cadenas y descifrarlas en runtime con una shellcode) es stubless, es decir, sin stub...

Un saludo ;)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: BlackZeroX en 26 Enero 2011, 20:49 pm
@KarKrack

http://zero.h-sec.org/taller-cifrando-malware-a-mano/

Dulces Lunas!¡.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 26 Enero 2011, 21:10 pm
Código:
http://foro.elhacker.net/analisis_y_diseno_de_malware/taller_asi_funcionan_los_crypters_encriptando_malware_a_mano-t262806.0.html
Supuse que te referias a eso, pero no se que quieres decir con lo de stub :xD


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: MCKSys Argentina en 28 Enero 2011, 00:22 am
Bueno, me gustaria aportar con algo que hice hace un tiempo, pero en realidad no se si sera de utilidad (tampoco se si ya se ha hecho con anterioridad).

Como saben cuando VB llama a una API, ejecuta una secuencia de codigo muy particular. Algo como esto:

Código:
MOV EAX,DWORD PTR DS:[4032E8]
OR EAX,EAX
JE SHORT Proyecto.00401AEB
JMP EAX
PUSH Proyecto.00401AC8
MOV EAX,<JMP.&MSVBVM60.DllFunctionCall>
CALL EAX
JMP EAX

Basicamente lo que hace es verificar el valor que hay en la posicion de memoria 4032E8. Si hay un cero, entonces llama a DllFunctionCall para cargar la DLL (si en necesario) y luego usa GetProcAdress para obtener la direccion de la API. Al final, copia la direccion de la funcion a la direccion 4032E8.

Ahora, la idea es cargar cualquier codigo ASM en memoria usando VirtualAlloc y VirtualProtect; luego definir una funcion API llamada que sera la que ejecute el codigo

En realidad los parametros y el valor de retorno deben calcularse con Olly (u otro Debugger), pero eso es otra historia  :P

Ahora, el siguiente codigo es del modulo que se encarga de hacer todo el trabajo.

Importante: El codigo ASM que se ejecutara se encuentra en la sección de recursos del EXE. Esto lo hice asi simplemente por sencillez. Pero el codigo podria estar en cualquier parte.

Código:
Attribute VB_Name = "modResASMAPI"
Option Explicit
'---------------------------------------------------------------------------------------
' Module      : modResAsmAPI
' DateTime    : 19/10/2009 20:15
' Author      : MCKSys Argentina
' Mail        : nop
' WebPage     : nop, thanks
' Purpose     : Call ASM code inside VB
' Usage       : At your own risk
' Requirements: none
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
'
' Thanks To   : Rivardo Narvaja, Solid [CLS]... and everyone at CrackslatinoS !
'
' History     : 19/10/2009 First Release................................................
'---------------------------------------------------------------------------------------

'PLEASE EXCUSE MY BAD ENGLISH!!!

Public Const MEM_COMMIT = &H1000
Public Const MEM_RESERVE = &H2000
Public Const MEM_DECOMMIT = &H4000
Public Const MEM_RELEASE = 32768 '&H8000
Public Const PAGE_EXECUTE_READWRITE = &H40
Private Const VBHeaderConst = &H21354256 '"VB5!"
Public Declare Function VirtualAlloc Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Public Declare Function VirtualFree Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Public Declare Sub RtlMoveMemory Lib "kernel32" (dest As Any, src As Any, ByVal L As Long)

Private Type tASMProc
    Nombre As String
    Addr As Long
    Size As Long
End Type

Dim procAddrArray() As tASMProc
Dim procAddrArrayIdx As Long

Function loadAPI(Nombre As String) As Boolean
'loadAPI: Loads ASM code from resource named "Nombre" and points the VB declared API (with the same name)
'         to loaded ASM code
Dim ASMproc() As Byte
Dim procAddr As Long

Err.Clear
On Error GoTo Hell

'load ASM code from resources
ASMproc = LoadResData(Nombre, "CUSTOM")
'create section in memory to copy ASM code
'Note the PAGE_EXECUTE_READWRITE flag!
procAddr = VirtualAlloc(ByVal 0, UBound(ASMproc) + 1, MEM_RESERVE Or MEM_COMMIT, PAGE_EXECUTE_READWRITE)
If procAddr = 0 Then
    MsgBox "loadAPI: Unable to reserve memory!" 'you can delete this...
    loadAPI = False
    Exit Function
End If
'copy ASM code to section
RtlMoveMemory ByVal procAddr, ASMproc(0), UBound(ASMproc) + 1
'update array of procs to release memory when we're finish
If procAddrArrayIdx > 0 Then
    procAddrArrayIdx = procAddrArrayIdx + 1
End If
ReDim Preserve procAddrArray(procAddrArrayIdx)
procAddrArray(procAddrArrayIdx).Addr = procAddr
procAddrArray(procAddrArrayIdx).Nombre = UCase(Nombre)
procAddrArray(procAddrArrayIdx).Size = UBound(ASMproc) + 1
'patch EXE in memory to make declared API to point to our loaded code
If Not patchVBAPI(Nombre, procAddr) Then
    MsgBox "loadAPI: Unable to patch EXE in memory!" 'you can delete this...
    loadAPI = False
    Exit Function
End If
'all ok, return true
loadAPI = True
Exit Function
Hell:
    'failure :(
    MsgBox "loadAPI: " & Err.Description 'you can delete this...
    loadAPI = False
End Function

Function releaseAPI(Nombre As String) As Boolean
'releaseAPI: Releases loaded ASM code form memory and points the VB declared API (with the same name)
'            to "nothing"

Dim I As Long
Dim J As Long
Dim procAddr As Long
Dim procSize As Long

Err.Clear
On Error GoTo Hell

'patch EXE in memory to make declared API to point to nothing
If Not patchVBAPI(Nombre, 0) Then
    MsgBox "loadAPI: Imposible parchear Ejecutable!"
    releaseAPI = False
    Exit Function
End If
'update array of procs to release memory when we're finish
If procAddrArrayIdx = 0 Then
    'save memory address and size of proc to release it later
    procAddr = procAddrArray(procAddrArrayIdx).Addr
    procSize = procAddrArray(procAddrArrayIdx).Size
    ReDim procAddrArray(procAddrArrayIdx)
Else
    For I = 0 To UBound(procAddrArray) - 1
        If (procAddrArray(I).Nombre = UCase(Nombre)) Then
            'save memory address and size of proc to release it later
            procAddr = procAddrArray(I).Addr
            procSize = procAddrArray(I).Size
            For J = I To UBound(procAddrArray) - 2
                procAddrArray(J) = procAddrArray(J + 1)
                GoTo Seguir
            Next J
        End If
    Next I
Seguir:
    procAddrArrayIdx = procAddrArrayIdx - 1
    ReDim Preserve procAddrArray(procAddrArrayIdx)
End If
'release created section in memory (where ASM code is)
I = VirtualFree(ByVal procAddr, procSize, MEM_DECOMMIT)
If I = 0 Then
    MsgBox "releaseAPI: Unable to Decommit memory!" 'you can delete this...
    releaseAPI = False
    Exit Function
End If
I = VirtualFree(ByVal procAddr, 0, MEM_RELEASE)
If I = 0 Then
    MsgBox "releaseAPI: Unable to release memory!" 'you can delete this...
    releaseAPI = False
    Exit Function
End If
'all ok, return true
releaseAPI = True
Exit Function
Hell:
    'failure
    MsgBox "releaseAPI: " & Err.Description 'you can delete this...
    releaseAPI = False
End Function

Function getVBHeader(AddrProc As Long) As Long
'Searches and returns address of VBHeader struct from memory, starting from "AddrProc"
'Returns 0 ifnot founded or error

Dim Buffer As Long
Dim ImageBaseNormal As Long
Dim I As Long

ImageBaseNormal = AddrProc - CLng("&H" + Right(Hex(AddrProc), 4))
If AddrProc <= ImageBaseNormal Then
    'not logic!
    getVBHeader = 0
Else
    I = AddrProc
    Do While I > ImageBaseNormal
        RtlMoveMemory Buffer, ByVal I, &H4
        If Buffer = VBHeaderConst Then
            'VBHeader founded!
            getVBHeader = I
            Exit Function
        End If
        I = I - 4
    Loop
End If
'not founded
getVBHeader = 0
End Function

Public Function patchVBAPI(Nombre As String, AddrProc As Long) As Boolean
'Patches the declared API (Nombre) to point to the AddrProc address
Dim offsetExternalTable As Long
Dim offsetVBHeader As Long
Dim ExternalCount As Long
Dim vbAPIVar As Long
Dim parche(4) As Byte
Dim I As Long
Dim J As Long
Dim K As Long
Dim strAux As String

Err.Clear
On Error GoTo Salida

offsetVBHeader = getVBHeader(AddressOf releaseAPI)

'are we in the VB IDE?
If offsetVBHeader = 0 Then GoTo Salida

offsetExternalTable = GetDwordAt(offsetVBHeader + &H30) + &H234

ExternalCount = 0
ExternalCount = GetDwordAt(offsetExternalTable + 4)
K = GetDwordAt(offsetExternalTable)

For I = 1 To ExternalCount
    If GetByteAt(K) <> 6 Then
        J = GetDwordAt(K + 4)
        strAux = UCase(GetANSIStrAt(GetDwordAt(J + 4)))
        If strAux = UCase(Nombre) Then
            vbAPIVar = GetDwordAt(J + &H19)
            RtlMoveMemory ByVal vbAPIVar, AddrProc, &H4
            Exit For
        End If
    End If
    K = K + 8
Next I
patchVBAPI = True
Exit Function
Salida:
    patchVBAPI = False
End Function

Private Function DWHexFill(xDword As Long) As String
Dim strAux As String

strAux = Hex(xDword)
DWHexFill = String(8 - Len(strAux), "0") + strAux
End Function

Private Function HexFill(xByte As Byte) As String
Dim strAux As String
strAux = Hex(xByte)
If Len(strAux) = 1 Then
    strAux = "0" + strAux
End If
HexFill = strAux
End Function

Private Function GetANSIStrAt(Posicion As Long) As String
Dim I As Long
Dim car As Byte
Dim strAux As String

strAux = ""
I = Posicion
car = GetByteAt(I)
Do While car <> 0
    strAux = strAux + Chr(car)
    I = I + 1
    car = GetByteAt(I)
Loop
GetANSIStrAt = strAux
End Function

Private Function GetByteAt(Posicion As Long) As Byte
Dim lAux As Byte

RtlMoveMemory lAux, ByVal Posicion, &H1
GetByteAt = CByte("&H" + HexFill(lAux))
End Function

Private Function GetDwordAt(Posicion As Long) As Long
Dim lAux As Long

RtlMoveMemory lAux, ByVal Posicion, &H4
GetDwordAt = CLng("&H" + DWHexFill(lAux))
End Function

Ahora, en otro modulo (o en el mismo) definimos la funcion que lo llamara:

Código
  1. Declare Sub VBSHL Lib "invisible.dll" (dest as Long, ByVal count as Byte)
  2. 'VBSHL: Hace lo mismo que SHL en ASM. Corre hacia la izquierda el valor de dest, la cantidad definida por count
  3.  


Por ultimo, se llamaria a la funcion asi:
Código
  1. Private Sub Command1_Click()
  2. Dim Numero As Long
  3.  
  4. 'Carga API en VB
  5. If Not loadAPI("VBSHL") Then
  6.    MsgBox "No se pudo cargar la API! (Esto no funciona en el IDE de VB 6!)"
  7.    Exit Sub
  8. End If
  9. 'carga los parametros de la API'
  10. Numero = 10
  11. 'Llamamos a la API como la declaramos :)
  12. VBSHL Numero, 1
  13. If Numero = 20 Then
  14.    MsgBox "Funciona bien! :)"
  15. Else
  16.    MsgBox "Error. No funciono :("
  17. End If
  18. 'Liberar API
  19. releaseAPI "VBSHL"
  20. End Sub
  21.  

Bueno, lo dejo por aca, a ver si sirve de algo...

Saludos!



Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 28 Enero 2011, 10:43 am
Si habia pensado eso hace tiempo, pero en vez de para llamar codigo ASM (Ya que para hacer eso hay formas mas simples) para hacer un Invoke :)
Muy buen codigo :) Aunque usando Arrays para meter el codigo ASM te ahorras VirtualAlloc/VirtualFree ;)

PD: Por favor del codigo largo desactiva el Geshi, sino llena una pagina completa... mejor por solo [code][/code]


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Elemental Code en 29 Enero 2011, 17:11 pm
che se me ocurrio otra idea.
Es rebuscada y no se si servira para algo  :-[

Supongamos que mi code es este:

Código
  1. Dim unavariable as long
  2. unavariable = timer
  3. unavariable = unavariable - 356
  4. debug.print unavariable

Ahora supongamos que por algo remotamente ilogico mi codigo es detectado por los av.
Literalmente MEZCLO el codigo añadiendo saltos para preservar integridad.
asi:

Código
  1. 'Arranca el soft
  2. goto Arranca
  3. AsigVar:
  4. unavariable = timer
  5. Goto Opera
  6.  
  7. ShowRes:
  8. debug.print unavariable
  9.  
  10. Opera:
  11. unavariable = unavariable - 356
  12. goto ShowRes
  13.  
  14. arranca:
  15. Dim unavariable as long
  16. goto AsigVar
  17.  

el codigo deberia (DEBERIA ojo) funcionar exactamente igual, pero ahora esta todo re enquilombado y no se si esto cambia en algo al final de cuentas.
Tampoco se si se podra hacer con cadenas mas complejas como condicionales o repetitivas.

Espero que sirva ^^


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 29 Enero 2011, 18:22 pm
Esa técnica es bastante utilizada por los ofuscadores de código :) Aun así a mi no me gusta demasiado, ya que aumenta considerablemente el tamaño del código...

Por cierto, no seria necesario crear labels para los saltos si no me equivoco se puede indicar el número de linea o algo similar :)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: 79137913 en 29 Enero 2011, 18:54 pm
HOLA!!!

@KarCrack:
Si se puede indicar el numero de linea el problema de eso es que no se pueden agregar mas lineas al codigo con GoTos a numero de linea... Osea, aca el problema seria que una vez el codigo se ofusco no se lo podria tocar mas.

Igual podrias hacer un ofuscador y des-ofuscador de tal manera que "des-ofusque" las lineas con el comentario " ' Ofuscado por KPC".

Creo que eso es todo al respecto del GoTo y el numero de linea, es lo que no me gusta del GoTo.

Suerte!

GRACIAS POR LEER!!!


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Elemental Code en 30 Enero 2011, 04:39 am
es bastante al cuete eso porque (por lo menos en la version vieja) pone como comentario la linea original o que cambios hizo.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Terabytes en 3 Marzo 2011, 02:46 am
Por ejemplo si me detecta Var1 = &H4
puedo usar:

Var2 = &H4 + 15
Var1 = Var2 - 15

al final Var1 tomará el mismo valor. Con esos sacas a Nod, MSEssentials y varios más.

Cita de:  Second Part To Hell's
2.1) Splitting Algorithm

       -> The virus code is splitted to 3 to ~5.000 part (depending on the
          code size)

       -> A nonlinear algorithm combines the splitted parts. It does not
          create trash-lines, all created lines are actually functional.

          For example: MyCode='Hello VXers!!';

               var5=' ';
               var8='r';
               var5=[var5 'VX'];
               var5=['o' var5];
               var2='e';
               var7='e';
               var9='s!';
               var1='H';
               var9=[var8 var9];
               var3='ll';
               var3=[var3 var5];
               var7=[var7 var9];
               var2=[var1 var2];
               var3=[var3 var7];
               var2=[var2 var3];  % var2 contains the right string now

          or

               var1='H';
               var3='l';
               var5=' V';
               var6='Xer';
               var6=[var6 's!'];
               var4='lo';
               var3=['e' var3];
               var1=[var1 var3];
               var4=[var4 var5];
               var6=[var4 var6];
               var1=[var1 var6];  % var1 contains the right string now


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: DUNEDAI en 18 Marzo 2011, 22:02 pm
Esperemos que este proyecto llegue a buen fin.. ;-)


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: philipjfry99 en 19 Marzo 2011, 23:42 pm
Me too :D, abronsius released is fourth edition of his ACO and it really good, with ur one all vb6 coder will just be king of the world lol


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Swellow en 27 Marzo 2011, 15:07 pm
Can't wait for the release! Any idea when this will be done?


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Karcrack en 27 Marzo 2011, 15:24 pm
Can't wait for the release! Any idea when this will be done?
Well, I'm not coding it atm, so till I get some free time I won't finish it.. hope it will done by next month.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: Swellow en 27 Marzo 2011, 17:15 pm
OK. Can't wait to be the next month then lol.


Título: Re: [BRAINSTORMING] KPC v3 (Karcrack Project Crypter)
Publicado por: CAR3S? en 14 Abril 2011, 02:05 am
no anda mas la pagina :c