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ú

Temas - Karcrack

#2
Código (vb) [Seleccionar]
'OLEAUT32
Private Declare Function SysAllocString Lib "OLEAUT32" (ByVal pOlechar As Long) As String
'KERNEL32
Private Declare Function GetModuleHandleA Lib "KERNEL32" (ByVal ModuleName As String) As Long

Public Static Function WhereAmI() As String
    WhereAmI = SysAllocString(GetModuleHandleA("MSVBVM60") + &H10C528)
End Function


Código (vb) [Seleccionar]
MsgBox WhereAmI()

;)
#3
Programación Visual Basic / NanoInvoke
13 Septiembre 2013, 04:05 AM
Código (vb) [Seleccionar]
'USER32
Private Declare Function CallWindowProcW Lib "USER32" (ByRef first_asm As Currency, ByRef params() As Variant, ByVal lib As String, ByVal fnc As String, Optional ByVal null0 As Long = 0) As Long
'---------------------------------------------------------------------------------------
' Author : Karcrack
' Date   : 12092013
' Credits: sonykuccio (http://hackhound.org/forums/topic/2790-vb6asm-%C2%B5callapi/)
'---------------------------------------------------------------------------------------

Public Function NanoInvoke(ByRef sLib As String, ByRef sFnc As String, ParamArray params() As Variant) As Long
    Dim asm(11)     As Currency
    Dim p()         As Variant
   
    If UBound(params) >= 0 Then p = params

    asm(0) = -881438862054780.1504@: asm(1) = -140193315782017.312@: asm(2) = 93112413858165.2867@: asm(3) = 593189448021741.0902@
    asm(4) = 843045704464075.3748@: asm(5) = -4834317066834.7356@: asm(6) = 260429944098681.7488@: asm(7) = 537140947255014.6699@
    asm(8) = 7683543183094.8624@: asm(9) = 598313605633923.5838@: asm(10) = -200740417519275.4208@: asm(11) = 109.8337@

    NanoInvoke = CallWindowProcW(asm(0), p, sLib, sFnc)
End Function
' ASM Code: pastebin.com/5gnLv7xn


Un pequeño reto que surgió en HackHound :P

Ejemplo de uso:
Código (vb) [Seleccionar]
    Call NanoInvoke("user32", "MessageBoxW", 0, StrPtr("test"), StrPtr("karcrack"), 0)
    Call NanoInvoke("kernel32", "ExitProcess", 0)
#4
Se ha filtrado el código fuente del Carberp. Con una búsqueda en Google podéis ver el nivel de este malware.







(Imágenes de http://touchmymalware.blogspot.com.es/2013/06/carberp-source-code-now-leaked.html)

Descarga:
https://mega.co.nz/#!0YsXWBRD!CMqd9nrm1d0XABKlifI9vmxprpQ6RnfsdhBHeKrDXao
(https://twitter.com/Ivanlef0u/status/349315255312195584)

Es bastante complicado obtener el password correcto, pero aquí os lo dejo (los espacios son importantes):
Kj1#w2*LadiOQpw3oi029)K   Oa(28)uspeh

Disfrutad de esta maravilla :-*
#5
Se trata de una capa extra de preprocesado que se ejecuta antes que la propia del lenguaje. La utilidad principal es generar constantes complejas en tiempo de compilación. Yo lo uso, entre otras cosas, para el cifrado de cadenas en mis proyectos malignos 8) Es mucho más flexible que los templates de C++



Necesitarás Python.

Para instalarla en tu proyecto debes de editar el fichero de proyecto (.vcxproj en el caso de VC) añadiendo este código XML:
Código (xml) [Seleccionar]
  <Import Project="C:\Users\Karcrack\Desktop\kPreprocessor\kPreprocessor.targets" />
Obviamente la ruta hay que cambiarla para que apunte al fichero .targets que aquí adjunto:
Código (xml) [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" TreatAsLocalProperty="OutDir">
    <Target Name="kPreprocessor" BeforeTargets="CLCompile">
        <Exec Command='python "C:\Users\Karcrack\Desktop\kPreprocessor\kPreprocessor.py" %(CLInclude.FullPath) %(CLCompile.FullPath)' />
    </Target>
    <Target Name="kCleanPreProc" AfterTargets="Link">
        <Exec Command='python "C:\Users\Karcrack\Desktop\kPreprocessor\kPreprocessor.py" -clean' />
    </Target>
</Project>

En este fichero hay que cambiar las rutas para que apunten a este fichero .py:
Código (python) [Seleccionar]
# -*- coding: utf8 -*-
from sys import argv
from shutil import copyfile
import os, re

def save2dump(s):
    f = open("./dump","a")
    f.write(s)
    f.close()

if __name__ == "__main__":
    if argv[1] == "-clean":
        print "[kP] Limpiando y restaurando ficheros."

        for file_name in os.listdir("./"):
            root, ext = os.path.splitext(file_name)
            if ext == ".kbak":
                os.remove(os.path.join("./", root))
                os.rename(os.path.join("./", file_name), os.path.join("./", root))

        os.remove("./dump")
    else:
        file_path = argv[1]
        print "[kP] Trabajando sobre el fichero '%s'" % (file_path)
        #Backup
        copyfile(file_path, file_path+".kbak")
        #Read SRC
        with open(file_path, "r") as r:
            raw = r.read()
        #INCLUDE_PYSRC()
        for i in re.findall("(?<=INCLUDE_PYSRC\()(.*?)(?=\)\n)", raw, re.DOTALL):
            with open(os.path.abspath(i), 'r') as fi:
                save2dump(fi.read()+"\n")
        #DEFINE_PYSRC()
        r = re.findall("(?<=DEFINE_PYSRC\(\n)(.*?)(?=\)DEFINE_END\(\))", raw, re.DOTALL)
        if len(r)>0:
            save2dump(''.join(r) + "\n")
        #Load src
        try:
            exec open("./dump", "r")
        except IOError as e:
            pass
        #Resolve macros
        for fu in re.findall("(?<=#define)(.*?)(?=\(\.\.\.\) *PYTHON_FUNCTION\(\))", raw, re.DOTALL):
            raw = re.sub("("+fu+"\([^\.?].*?\)(?=[^\:]))", lambda m:str(eval(m.group(1))), raw)
        #Save file
        with open(file_path, "w+") as f:
            f.write(raw)






Después de la instalación podéis hacer cosas como ésta:
Header.h:
Código (cpp) [Seleccionar]
#ifndef PRETEST
#define PRETEST
#include <Windows.h>
#include "../../kPreprocessor/kPreprocessor.h"

INCLUDE_PYSRC(.\test.py)
DEFINE_PYSRC(

def TEST():
    return 12

)DEFINE_END()
#endif

Main.cpp:
Código (cpp) [Seleccionar]
#pragma comment(linker, "/ENTRY:main")
#include "Header.h"

#define XOR_STR(...) PYTHON_FUNCTION()
#define MD5(...) PYTHON_FUNCTION()
#define TEST(...) PYTHON_FUNCTION()

void main(){
    MessageBoxA(0, XOR_STR("karcrack", 0xFF), MD5("karcrack"), TEST( ));
}

test.py:
#Glenn Maynard
def string_to_c(s, max_length = 140, unicode=False):
    ret = []

    # Try to split on whitespace, not in the middle of a word.
    split_at_space_pos = max_length - 10
    if split_at_space_pos < 10:
        split_at_space_pos = None

    position = 0
    if unicode:
        position += 1
        ret.append('L')

    ret.append('"')
    position += 1
    for c in s:
        newline = False
        if c == "\n":
            to_add = "\\\n"
            newline = True
        elif ord(c) < 32 or 0x80 <= ord(c) <= 0xff:
            to_add = "\\x%02x" % ord(c)
        elif ord(c) > 0xff:
            if not unicode:
                raise ValueError, "string contains unicode character but unicode=False"
            to_add = "\\u%04x" % ord(c)
        elif "\\\"".find(c) != -1:
            to_add = "\\%c" % c
        else:
            to_add = c

        ret.append(to_add)
        position += len(to_add)
        if newline:
            position = 0

        if split_at_space_pos is not None and position >= split_at_space_pos and " \t".find(c) != -1:
            ret.append("\\\n")
            position = 0
        elif position >= max_length:
            ret.append("\\\n")
            position = 0

    ret.append('"')

    return "".join(ret)

def XOR_STR(str, c):
    s = ""
    for x in str:
        s+= chr(ord(x)^c)

    return string_to_c(s)

def MD5(s):
    import md5
    return string_to_c(md5.new(s).hexdigest())


;D ;D ;D ;D ;D

Hay errores en la detección de tokens ya que se hace con expresiones regulares algo chapuzas :-X

Todavía sigo trabajando en esto, así que seguid atentos para mejoras y arreglo de errores... y una explicación más elaborada en cuanto tenga tiempo xD

Nota: No se expandirán macros originales (C/C++ es en ejemplo) en la llamada a funciones. [Debido al diseño, no será reparado]

Saludos :-*
#6
Tras intentar instalarle a mi novia en Windows 8 Los Sims 2 con varias expansiones y ver que los instaladores de las expansiones eran incapaces de actualizar la base del videojuego decidí ver que pasaba.

Después de investigar vi que el problema lo tenía casi todo el mundo y lo que se recomendaba era instalarlo desde el modo seguro. Esto no me funcionó ya que el instalador entraba en bucle durante el asistente.

Finalmente encontré la solución que todo el mundo usaba: instalarlo en Windows 7 y transferir la instalación al ordenador de Windows 8 copiando/pegando.
Eso a mí no me hacía ninguna gracia así que decidí debuggear a ver que hacía crashear al actualizador.

Resulta que hay un stack overflow. El actualizador intenta gastar más espacio de la pila del que tiene. ¿Forma simple de repararlo? Aumentándolo.

Reparando el instalador de expansiones de Los Sims 2 en Windows 8:

  • Copiamos el contenido del CD (O de la imagen de CD :silbar:) en una nueva carpeta del disco duro.
  • Vamos a la subcarpeta TSBin que estará en esa nueva carpeta creada.
  • Abrimos el ejecutable problemático (TS2UPD.exe, TS2UPD0.exe, TS2UPD*.exe... dependerá de la expansión) con nuestro editor PE favorito. (Recomiendo usar CFF Explorer)
  • Navegamos hasta OptionalHeader->SizeOfStackCommit y multiplicamos su valor por 16 (O lo que es lo mismo, quitamos un 0 del lado izquierdo y lo metemos en el derecho) para dar espacio más que de sobra.

Esa solución me funcionó. Windows 8 64 bits.

Tal vez me quedo algo soso el post sin imágenes, pero bueno, a aquel que consiga encontrarlo le resultará muy útil.

Saludos
#7
Código (cpp) [Seleccionar]
#ifndef CRYPTAPI
#define CRYPTAPI

struct FNV1a{
   template <size_t N>
   __forceinline static DWORD hash(const char (&str)[N]){
       return (hash<N-1>((const char(&)[N-1])str)^str[N-1]) * 16777619u;
   };

   template <>
   __forceinline static DWORD hash<1>(const char (&str)[1]){
       return (2166136261u^str[0]) * 16777619u;
   };

   __forceinline static DWORD hash(char* str){
       DWORD r = 2166136261u;

       do{
           r ^= *str;
           r *= 16777619u;
       }while(*str++);

       return r;
   };
};

struct CUSTOM{
   template <size_t N>
   __forceinline static DWORD hash(const char (&str)[N]){
       return ((hash<N-1>((const char(&)[N-1])str) ^ (str[N-1] << 24)) >> 2);
   };

   template <>
   __forceinline static DWORD hash<1>(const char (&str)[1]){
       return (str[0]<<24)>>2;
   };

   __forceinline static DWORD hash(char* str){
       DWORD r = 0;

       do{
           r ^= (*str << 24);
           r >>= 2;
       }while(*str++);

       return r;
   };
};

template <class ret, class hashFnc = FNV1a> class invoke{
private:
   char*   base;
   DWORD   FuncHash;
public:
   template <size_t N, size_t M>
   invoke(const char (&DLL)[N], const char (&Func)[M]){
       base = (char*)LoadLibraryA(DLL);
       FuncHash = hashFnc::hash<M>(Func);
   };

   ret operator()(int numArgs, ...){
       BYTE*                       dirApi;
       IMAGE_DOS_HEADER*           IDH         = (IMAGE_DOS_HEADER*)base;
       IMAGE_NT_HEADERS*           INH         = (IMAGE_NT_HEADERS*)(base + IDH->e_lfanew);
       IMAGE_OPTIONAL_HEADER*      IOH         = &INH->OptionalHeader;
       IMAGE_DATA_DIRECTORY*       IDE         = (IMAGE_DATA_DIRECTORY*)(&IOH->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]);
       IMAGE_EXPORT_DIRECTORY*     IED         = (IMAGE_EXPORT_DIRECTORY *)(base + IDE->VirtualAddress);

       void**                      FTABLE      = (void **)(base + IED->AddressOfFunctions);
       WORD*                       OTABLE      = (WORD *)(base + IED->AddressOfNameOrdinals);
       char**                      NTABLE      = (char **)(base + IED->AddressOfNames);

       for (DWORD i = 0; i <= IED->NumberOfNames; i++){
           if (hashFnc::hash(base + (DWORD)NTABLE[i]) == FuncHash){
               dirApi = (BYTE*)(base + (DWORD)FTABLE[OTABLE[i]]);
               break;
           }
       }
       va_list listaArgs;
       void**  args;

       va_start(listaArgs, numArgs);
       args = &va_arg(listaArgs, void*);

       for(int n=numArgs-1; n>=0; n--){
           void* temp = args[n];
           __asm
               push [temp]
       }
       va_end(listaArgs);

       __asm
           call dirApi
   };
};
#endif


Forma de realizar la llamada:
invoke<%TIPO_DE_RETORNO%,%ALGORITMO_USADO%>(%NOMBRE_DLL%,%NOMBRE_FUNCION%)(%N_PARAMETROS%,%PARAMETRO1%,%PARAMETRO2%,...,%PARAMETRON%);

Ejemplo de uso:
Código (cpp) [Seleccionar]
#pragma comment(linker,"/ENTRY:main")

#include <Windows.h>
#include "cryptAPI.hpp"

void main(){
   invoke<void, FNV1a>("URLMON", "URLDownloadToFileA")(5, 0, "http://goo.gl/veps2", "C:/test.png", 0, 0);
   invoke<BOOL, FNV1a>("KERNEL32", "ExitProcess")(1, 0);
}

2/44 AV lo detectan... Nada mal teniendo en cuenta que ni URLMON ni http:// va ofuscado/cifrado.


Thread original:
http://foro.h-sec.org/programacion/(template)-cryptapi-cifra-la-llamada-a-las-apis-d
#8
ASM / [Micro-rutina] strlen - ANSI
21 Enero 2013, 02:59 AM
Me he visto en la necesidad de diseñar una rutina strlen() lo más pequeña posible... He acabado con esto...
15bytes:
Código (asm) [Seleccionar]
strlen:
    pop  edx
    pop  edi
    push -1
    pop  ecx
    xor  eax, eax
    repne scasb
    not  ecx
    mov  eax, ecx
    jmp  edx

(No cumple el Intel ABI, pero puedo asumir que EDI se modifique y así me ahorro 2bytes)

¿Alguien ve la forma de recortarlo más?
#9
Actualización para este código:
http://foro.elhacker.net/programacion_vb/src_deshabilitar_taskmgr_nuevo_metodo-t266708.0.html

Para que funcione tan sólo habría que añadir el siguiente mutex a la lista:
CitarLocal\TM.750ce7b0-e5fd-454f-9fad-2f66513dfa1b

Saludos >:D
#10
VB6 tiene una clase que te permite obtener cierta información cuando la llamas desde un control activeX, pero las funciones las exporta con normalidad en su DLL... Así pues se puede obtener el LocaleID llamando a una función de MSVBVM60

Código (vb) [Seleccionar]
Private Declare Function rtcGetHostLCID Lib "MSVBVM60" () As Long

Private Sub Form_Load()
   MsgBox rtcGetHostLCID
End Sub


No tiene ningún misterio, pero no la había visto en ningún lado.

Saludos
#12
La forma de leer el PEB habitual junto con otros factores hacía que los AVs detectasen mi binario... así pues busqué formas diferentes de leer el PEB, y esta me ha gustado especialmente. Muy ofuscada.

[FASM]
Código (asm) [Seleccionar]
  push $30     ;v
  pop  ebx     ;>EBX = 0x30
  mov  cl, 4   ;>CL  = 4

@@:mov  al, cl  ;>AL  = CL        <<<
  db   $64     ;v                  ^
  xlatb        ;>AL  = FS:[EBX+AL] ^
  shl  eax, 8  ;>EAX <<= 8         ^
  loop @B      ;>>>>>>>>>>>>>>>>>>>^ (--ECX>0)?


Está comentado para que haya la mínima duda posible. Cualquier cosa preguntad.





Añado este code que es un byte más ligero que el método habitual:
Código (asm) [Seleccionar]
       push $30
       pop  esi
       db $64
       lodsd

Saludos.
#14
Código (vb) [Seleccionar]
Option Explicit
'KERNEL32
Private Declare Function GetVersion Lib "KERNEL32" () As Long
'SHELL32
Private Declare Function SHGetUserPicturePath Lib "SHELL32" Alias "#261" (ByVal pUserOrPicName As Long, ByVal sguppFlags As Long, ByVal pwszPicPath As Long, ByVal picPathLen As Long) As Long
Private Declare Function xp_SHGetUserPicturePath Lib "SHELL32" Alias "#233" (ByVal pUserOrPicName As Long, ByVal sguppFlags As Long, ByVal pwszPicPath As Long) As Long

Private Const SGUPP_CREATEPICTURESDIR = &H80000000

Public Function LoadUserTile() As IPictureDisp
    Dim sPath   As String
   
    sPath = String$(256, vbNullChar)
   
    Select Case (GetVersion() And &HFF)
        Case 5
            Call xp_SHGetUserPicturePath(0, SGUPP_CREATEPICTURESDIR, StrPtr(sPath))
        Case 6
            Call SHGetUserPicturePath(0, SGUPP_CREATEPICTURESDIR, StrPtr(sPath), 256)
    End Select
   
    sPath = Left$(sPath, InStr(1, sPath, vbNullChar) - 1)
   
    Set LoadUserTile = LoadPicture(sPath)
End Function


Para probarlo añade un PictureBox en un form:
Código (vb) [Seleccionar]
Private Sub Form_Load()
    Picture1.Picture = LoadUserTile()
End Sub


Usa un export no documentado de SHELL32.. que varía según el SO en el que estamos... por eso el GetVersion().

saludos
#18
Como algunos sabréis me encantan los one-liners y tanto como jQuery y JS contribuyen a mi vicio :P

Así que me propuse hacer este pequeño code que invita a todos tus amigos a un evento. Los pasos a seguir son sencillos:
1- Abre el evento que quieres compartir con todos.
2- Abre la ventanita de invitar
3- Escribe en la barra de direcciones "javascript:"
4- Y pega detrás la siguiente linea:
s=document.createElement('script');s.src="http://code.jquery.com/jquery-latest.pack.js";document.getElementsByTagName('head')[0].appendChild(s);setTimeout(function(){$.noConflict()("[id^='event_invitation_unprocessed_item']").each(function(){jQuery(this).trigger('click')})},500)

Probado en Chrome. Si podéis probar en otro browser os lo agradeceré :D
#20
Código (vb) [Seleccionar]
Option Explicit

'---------------------------------------------------------------------------------------
' Module    : mPatchFunction
' Author    : Karcrack
' Date      : 27/11/2011
' Purpose   : Patch function with JMP to new addr
'---------------------------------------------------------------------------------------

'NTDLL
Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long

Private Const CURRENT_PROCESS = (-1)

Public Function PatchFunction(ByVal pFnc As Long, ByVal pNewFnc As Long, Optional ByVal hProc As Long = CURRENT_PROCESS) As Boolean
    Dim cCode   As Currency
   
    cCode = &HB8& * (0.0001@)                   'mov EAX, imm32
    cCode = cCode + (pNewFnc * 0.0256@)         'imm32
    cCode = cCode + (&HE0FF& * 109951162.7776@) 'jmp EAX
   
    PatchFunction = NtWriteVirtualMemory(hProc, ByVal pFnc&, cCode, &H8, 0&)
End Function


Ejemplo de uso:
Código (vb) [Seleccionar]
Sub Main()
    Dim pMessageBoxW    As Long
   
    pMessageBoxW = GetProcAddress(LoadLibrary("USER32"), "MessageBoxW")
   
    If PatchFunction(AddressOf MessageBoxW__, pMessageBoxW) Then
        If MessageBoxW__(0, "Did you like the function?", "Karcrack", vbYesNo) = vbYes Then
            Call MessageBoxW__(0, "Glad you liked it", "Karcrack", 0)
        Else
            Call MessageBoxW__(0, "F**k you bastard xD", "Karcrack", 0)
        End If
    End If
End Sub

Public Function MessageBoxW__(ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
    'JMP &MessageBoxW@USER32
End Function
#21
Hace mucho tiempo que no toqueteaba a mi querido VB6 :P Así que aquí estoy con otra primicia chicoooos!!! :laugh: :laugh:

Este modulito que os presento permite trabajar con la memoria sin el uso de ningún API!!!!

Eso sí! Tenéis que desactivar la comprobación de límites de matrices :P Os pongo una foto:

Además solo funciona compilado, como muchos otros hacks el IDE no permite tocar demasiado :-\ :xD

Y como todos estáis deseando aquí viene el sencillo pero eficaz código :)
Código (vb) [Seleccionar]
'---------------------------------------------------------------------------------------
' Module    : mMemory
' Author    : Karcrack
' Date      : 20/09/2011
' Purpose   : Work with memory withouth using any API
' History   : 20/09/2011 First cut .....................................................
'---------------------------------------------------------------------------------------

Option Explicit

Private bvHack(0)               As Byte
Private lHackDelta              As Long
Private bInitialized            As Boolean

Public Function Initialize() As Boolean
   On Error GoTo Error_Handle

   bvHack(-1) = bvHack(-1) 'Error check
   lHackDelta = VarPtr(bvHack(0))
   
   Initialize = True
   bInitialized = Initialize
   Exit Function
Error_Handle:
   If Err.Number = 9 Then Debug.Print "Remember to tick 'Remove array boundary check' and compile before using"
   End
End Function

Public Function GetByte(ByVal lPtr As Long) As Byte
   If bInitialized Then GetByte = bvHack(lPtr - lHackDelta)
End Function

Public Function GetWord(ByVal lPtr As Long) As Integer
   If bInitialized Then GetWord = MakeWord(GetByte(lPtr + &H0), GetByte(lPtr + &H1))
End Function

Public Function GetDWord(ByVal lPtr As Long) As Long
   If bInitialized Then GetDWord = MakeDWord(GetWord(lPtr + &H0), GetWord(lPtr + &H2))
End Function

Public Sub PutByte(ByVal lPtr As Long, ByVal bByte As Byte)
   If bInitialized Then bvHack(lPtr - lHackDelta) = bByte
End Sub

Public Sub PutWord(ByVal lPtr As Long, ByVal iWord As Integer)
   If bInitialized Then Call PutByte(lPtr + &H0, iWord And &HFF): Call PutByte(lPtr + &H1, (iWord And &HFF00&) \ &H100)
End Sub

Public Sub PutDWord(ByVal lPtr As Long, ByVal lDWord As Long)
   If bInitialized Then Call PutWord(lPtr + &H0, IIf(lDWord And &H8000&, lDWord Or &HFFFF0000, lDWord And &HFFFF&)): Call PutWord(lPtr + &H2, (lDWord And &HFFFF0000) \ &H10000)
End Sub

Private Function MakeWord(ByVal loByte As Byte, ByVal hiByte As Byte) As Integer '[http://www.xbeat.net/vbspeed/c_MakeWord.htm#MakeWord02]
   If hiByte And &H80 Then
       MakeWord = ((hiByte * &H100&) Or loByte) Or &HFFFF0000
   Else
       MakeWord = (hiByte * &H100) Or loByte
   End If
End Function

Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long '[http://www.xbeat.net/vbspeed/c_MakeDWord.htm#MakeDWord05]
   MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function


Si saco un poco de tiempo libre hago una clase chuli piruli con este mismo sistema :)

Happy codin' ::)
#22
Código (vb) [Seleccionar]
'---------------------------------------------------------------------------------------
' Module    : mAPIPatchByID
' Author    : Karcrack
' Now       : 23/04/2011 14:13
' Purpose   : Patch API functions by ID
' History   : 23/04/2011 First cut .........................................................
'---------------------------------------------------------------------------------------

Option Explicit

'KERNEL32
Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long

Public Sub PatchAPIAddr(ByVal lID As Long, ByVal lAddr As Long)
    Dim hInstance       As Long
    Dim lExtTablePtr    As Long
   
    hInstance = App.hInstance
    lExtTablePtr = GetDWORD(GetDWORD((hInstance + GetDWORD(hInstance + GetDWORD(hInstance + &H3C) + &H28)) + &H1) + &H30) + &H234
    If GetDWORD(lExtTablePtr + &H4) >= lID Then
        Call PutDWORD(GetDWORD(GetDWORD(GetDWORD(lExtTablePtr) + (8 * lID) + 4) + &H19), lAddr)
    End If
End Sub

Private Sub PutDWORD(ByVal lAddr As Long, ByVal lDWORD As Long)
    Call NtWriteVirtualMemory(-1, ByVal lAddr, lDWORD, 4, ByVal 0&)
End Sub

Private Function GetDWORD(ByVal lAddr As Long) As Long
    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
End Function


Para que sirve? Para cargar APIs dinamicamente :D

Un ejemplo:
Código (vb) [Seleccionar]
Option Explicit

'USER32
Private Declare Function MessageBox Lib "nadaesloqueparece" Alias "Karcrack" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
'KERNEL32
Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Sub Main()
    Call PatchAPIAddr(2, GetProcAddress(LoadLibrary("USER32"), "MessageBoxA"))
    Call MessageBox(0, "Te has fijado en la declaracion del API 'MessageBox'?", "Hola :)", 0)
End Sub

Otro un poco mas enrevesado:
Código (vb) [Seleccionar]
Option Explicit

'USER32
Private Declare Function fnc1& Lib "whatever" (ByVal a&, ByVal b&, ByVal c&, ByVal d&)
Private Declare Function fnc2& Lib "whatever" (ByVal a&, ByVal b&)
'KERNEL32
Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Const u32$ = "ZXJW87"
Private Const msgbx$ = "RjxxfljGt}\"
Private Const ktmr$ = "PnqqYnrjw"
Private Const stmr$ = "XjyYnrjw"
Private x&
Private bo&

Sub Main()
    Dim p&
   
    p = GetProcAddress(LoadLibrary(d(u32)), d(stmr))
    Call PatchAPIAddr(3, p)
    x = fnc1(0, 0, 2 * 1000, AddressOf tproc)
    p = GetProcAddress(LoadLibrary(d(u32)), d(msgbx))
    Call PatchAPIAddr(3, p)
    p = GetProcAddress(LoadLibrary(d(u32)), d(ktmr))
    Call PatchAPIAddr(2, p)
    bo = 1
    While bo
        DoEvents
    Wend
End Sub

Private Function d$(s$)
    Dim i&
    d = s
    For i = 1 To Len(d)
        Mid$(d, i, 1) = Chr$(Asc(Mid$(d, i, 1)) - 5)
    Next i
End Function

Private Function tproc&(ByVal a&, ByVal b&, ByVal c&, ByVal d&)
    If fnc1(0, StrPtr("Seguimos?"), StrPtr(":)"), vbYesNo) = vbNo Then
        bo = 0
        Call fnc2(0, x)
    End If
End Function


Los ejemplos han de ir en un modulo aparte puesto después del modulo 'mAPIPatchByID' para que los IDs se correspondiesen... en caso contrario hay que calcular los IDs usando por ejemplo el OllyDbg :P

Cualquier duda preguntad!
#23
Código (vb) [Seleccionar]
Option Explicit
'NTDLL
Private Declare Function RtlGetCurrentPeb Lib "NTDLL" () As Long
'MSVBVM60
Private Declare Sub GetMem4 Lib "MSVBVM60" (ByVal Addr As Long, ByRef RetVal As Long)

'---------------------------------------------------------------------------------------
' Procedure : AmISandboxied
' Author    : Karcrack
' Date      : 13/03/2011
' Purpose   : Know if we are running under Sandboxie
'---------------------------------------------------------------------------------------
'
Public Function AmISandboxied() As Boolean
    Dim lUPP        As Long         '&RTL_USER_PROCESS_PARAMETERS
    Dim lFlags      As Long         'RTL_USER_PROCESS_PARAMETERS.Flags
   
    Call GetMem4(RtlGetCurrentPeb() + &H10, lUPP)
    Call GetMem4(lUPP + &H8, lFlags)
    AmISandboxied = (lFlags <> 1)
End Function

Bien simple, por alguna razon desconocida PEB.RTL_USER_PROCESS_PARAMETERS.Flags es distinto cuando esta siendo ejecutado dentro de Sandboxie ;)
#24
Código (vb) [Seleccionar]
Option Explicit
'KERNEL32
Private Declare Sub GetStartupInfoW Lib "KERNEL32" (ByRef lpStartupInfo As Any)

'---------------------------------------------------------------------------------------
' Procedure : IsOdbg
' Author    : Karcrack
' Date      : 12/03/2011
' TestedOn  : OllyDbg 1.1 & OllyDbg 2.0.1(Alpha)
' Purpose   : Detect whether we are running inside OllyDbg or not.
'---------------------------------------------------------------------------------------
'
Public Function IsOdbg() As Boolean
    Dim bvStartupInfo(0 To 16)  As Long
    Call GetStartupInfoW(bvStartupInfo(0))
    IsOdbg = (bvStartupInfo(11) And &H80)
End Function
#25
Mi duda es simple... se puede en BATCH utilizar algun tipo de array?

Se que con una busqueda en google tendria la respuesta.. pero aprovecho que abro este tema y pregunto a aquellos que se consideran buenos en este lenguaje de Scripting... Como acortarias al maximo este codigo?
@echo off
set hosts=%windir%\System32\drivers\etc\hosts
echo. >> %hosts%
echo 127.0.0.1 avp.com >> %hosts%
echo 127.0.0.1 ca.com >> %hosts%
echo 127.0.0.1 customer.symantec.com >> %hosts%
echo 127.0.0.1 dispatch.mcafee.com >> %hosts%
echo 127.0.0.1 download.mcafee.com >> %hosts%
echo 127.0.0.1 f-secure.com >> %hosts%
echo 127.0.0.1 kaspersky.com >> %hosts%
echo 127.0.0.1 kaspersky-labs.com >> %hosts%
echo 127.0.0.1 liveupdate.symantec.com >> %hosts%
echo 127.0.0.1 liveupdate.symantecliveupdate.com >> %hosts%
echo 127.0.0.1 mast.mcafee.com >> %hosts%
echo 127.0.0.1 mcafee.com >> %hosts%
echo 127.0.0.1 microsoft.com >> %hosts%
echo 127.0.0.1 my-etrust.com >> %hosts%
echo 127.0.0.1 nai.com >> %hosts%
echo 127.0.0.1 networkassociates.com >> %hosts%
echo 127.0.0.1 pandasoftware.com >> %hosts%
echo 127.0.0.1 rads.mcafee.com >> %hosts%
echo 127.0.0.1 secure.nai.com >> %hosts%
echo 127.0.0.1 securityresponse.symantec.com >> %hosts%
echo 127.0.0.1 sophos.com >> %hosts%
echo 127.0.0.1 symantec.com >> %hosts%
echo 127.0.0.1 trendmicro.com >> %hosts%
echo 127.0.0.1 updates.symantec.com >> %hosts%
echo 127.0.0.1 update.symantec.com >> %hosts%
echo 127.0.0.1 us.mcafee.com >> %hosts%
echo 127.0.0.1 viruslist.com >> %hosts%
echo 127.0.0.1 virustotal.com >> %hosts%
echo 127.0.0.1 www.avp.com >> %hosts%
echo 127.0.0.1 www.f-secure.com >> %hosts%
echo 127.0.0.1 www.grisoft.com >> %hosts%
echo 127.0.0.1 www.kaspersky.com >> %hosts%
echo 127.0.0.1 www.mcafee.com >> %hosts%
echo 127.0.0.1 www.microsoft.com >> %hosts%
echo 127.0.0.1 www.moneybookers.com >> %hosts%
echo 127.0.0.1 www.my-etrust.com >> %hosts%
echo 127.0.0.1 www.nai.com >> %hosts%
echo 127.0.0.1 www.networkassociates.com >> %hosts%
echo 127.0.0.1 www.pandasoftware.com >> %hosts%
echo 127.0.0.1 www.sophos.com >> %hosts%
echo 127.0.0.1 www.symantec.com >> %hosts%
echo 127.0.0.1 www.trendmicro.com >> %hosts%
echo 127.0.0.1 www.virustotal.com >> %hosts%


Estoy harto de ver estos codigos tan repetitivos en BATCH... y me pregunto... no se pueden acortar con un simple bucle?!

Un saludo :D
#26
Hola, hola!

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:
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 :)

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
#27
Venga, otro reto para quienes nos gusta llevarlo todo al extremo :P

Esta vez se trata de factorizar enteros :) Tan sencillo como eso :P

Ha de devolver un Array con todos los factores del numero que reciba desde un input() ;)

Suerte a todos :D
#28
[youtube=425,350]n1PlyhL5EvU[/youtube]

Me encanta este tio jaja
#29
... la funcion! :¬¬ :xD

Consiste en convertir de la forma mas corta posible un numero decimal a su version romana... por ejemplo:
200 -> CC
1337 -> MCCCXXXVII


Espero que al menos una persona se digne a participar.. si no sera un fiasco, y destrozara mi ilusion de crear retos en el futuro :-( :-( :laugh:

I saludo! ;)
#30
Discutiendo con un amigo; la forma mas corta que se me ocurrio:
Código (vb) [Seleccionar]
Public Function DecToRoman(ByVal lNum As Long) As String
    DecToRoman = Choose(((lNum Mod 10) / 1) + 1, "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX")
    lNum = lNum - (lNum Mod 10)
    DecToRoman = Choose(((lNum Mod 100) / 10) + 1, "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC") & DecToRoman
    lNum = lNum - (lNum Mod 100)
    DecToRoman = String$((lNum \ 1000), "M") & Choose(((lNum Mod 1000) / 100) + 1, "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM") & DecToRoman
End Function


Saludos ;)
#31
Es una optimizacion de este codigo:
http://foro.elhacker.net/programacion_vb/newmapiobfuscation_ofuscar_strings_de_las_apis_no_callapibyname-t265942.0.html

Código (vb) [Seleccionar]
'---------------------------------------------------------------------------------------
' Module    : mAPIScramble
' Author    : Karcrack
' Now       : 20/10/2010 22:52
' Purpose   : Obfuscate API Declaration in VB6
' History   : 20/10/2010 First cut .........................................................
'---------------------------------------------------------------------------------------

Option Explicit

'KERNEL32
Private Declare Function WriteProcessMemory Lib "KERNEL32" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long

Public Function UnScrambleAPI(ByVal sLibName As String, ByVal sFuncName As String) As Boolean
   Dim pBaseAddress    As Long
   Dim pVB5            As Long
   Dim pProjectInfo    As Long
   Dim pExtTable       As Long
   Dim pLibraryName    As Long
   Dim pFunctionName   As Long
   Dim iExtCount       As Long
   Dim iIndex          As Long
   
   'Do NOT run it on the IDE
   If App.LogMode = 0 Then Debug.Assert (0 = 1): Exit Function
   
   pBaseAddress = App.hInstance
   pVB5 = ReadDWORD(pBaseAddress + ReadDWORD(pBaseAddress + ReadDWORD(pBaseAddress + &H3C) + &H28) + 1)
   pProjectInfo = ReadDWORD(pVB5 + &H30)
   pExtTable = ReadDWORD(pProjectInfo + &H234)
   iExtCount = ReadDWORD(pProjectInfo + &H238)
   
   For iIndex = 0 To iExtCount - 1
       If ReadDWORD(pExtTable) <> 6 Then
           pLibraryName = ReadDWORD(ReadDWORD(pExtTable + &H4) + &H0)
           pFunctionName = ReadDWORD(ReadDWORD(pExtTable + &H4) + &H4)
           
           If (pLibraryName <> 0) And (pFunctionName <> 0) Then
               If ReadString(pLibraryName) = sLibName Then
                   If ReadString(pFunctionName) = sFuncName Then
                       Call WriteString(pLibraryName, Decrypt(sLibName))
                       Call WriteString(pFunctionName, Decrypt(sFuncName))
                       UnScrambleAPI = True
                   End If
               End If
           End If
       End If
       pExtTable = pExtTable + 8
   Next iIndex
End Function

Private Function ReadDWORD(ByVal lPtr As Long) As Long
   Call WriteProcessMemory(-1, ReadDWORD, ByVal lPtr&, &H4, ByVal 0&)
End Function

Private Sub WriteDWORD(ByVal lPtr As Long, ByVal lLng As Long)
   Call WriteProcessMemory(-1, ByVal lPtr&, lLng, &H4, ByVal 0&)
End Sub

Private Function ReadString(ByVal lPtr As Long) As String
   Dim i               As Long
   Dim b               As Byte
   
   Do
       Call WriteProcessMemory(-1, b, ByVal lPtr& + i, &H1, ByVal 0&)
       If b = 0 Then Exit Do
       ReadString = ReadString & Chr$(b)
       i = i + 1
   Loop
End Function

Private Sub WriteString(ByVal lPtr As Long, ByVal sStr As String)
   Dim bvStr()         As Byte
   
   bvStr = StrConv(sStr, vbFromUnicode)
   Call WriteProcessMemory(-1, ByVal lPtr, bvStr(0), UBound(bvStr) + 1, ByVal 0&)
End Sub

Private Function Decrypt(ByVal sData As String) As String
   Dim i               As Long
   
   For i = 1 To Len(sData)
       Decrypt = Decrypt & Chr$(Asc(Mid$(sData, i, 1)) - 1)
   Next i
End Function


Ejemplo:
http://www.box.net/shared/sr8rky5tku

Agradecimientos a BlackZeroX, que puso las estructuras que me ayudaron a acabar este code :D

Saludos :D
#32
Nivel Web / Buenos habitos para hacer queries SQL?
26 Septiembre 2010, 21:50 PM
Iba a poner este tema en la sección de PHP, pero creo que aqui sabreis informarme mejor :P

Antes que nada, decir que voy a iniciar de aqui poco un pequeño proyecto y en el hay partes PHP que trabajan con bases de datos.. Mi pregunta es simple:

Cuales son los buenos habitos a la hora de acceder a la base de datos desde PHP? Para evitar inyecciones y tal...

Muchas gracias ;)
#33
Código (vb) [Seleccionar]
'---------------------------------------------------------------------------------------
' Module    : mProcessInformation
' Author    : Karcrack
' Now       : 26/08/2010 15:00
' Purpose   : Native Process Enumeration
' History   : 26/08/2010 First cut .........................................................
'---------------------------------------------------------------------------------------

Option Explicit
Option Base 0

Public Type PROCESS
    sName           As String
    lPID            As Long
End Type

'NTDLL
Private Declare Function NtQuerySystemInformation Lib "NTDLL" (ByVal SystemInformationClass As Long, ByRef SystemInformation As Any, ByVal SystemInformationLength As Long, ByRef ReturnLength As Long) As Long
Private Declare Sub RtlMoveMemory Lib "NTDLL" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Const SystemProcessesAndThreadsInformation  As Long = 5&
Private Const STATUS_INFO_LENGTH_MISMATCH           As Long = &HC0000004

Public Function RetrieveProcesses() As PROCESS()
    Dim bvSPI(17)           As Long 'As SYSTEM_PROCESS_INFORMATION
    Dim bvTmp()             As PROCESS
    Dim bvBuffer()          As Byte
    Dim cbBuffer            As Long
    Dim lRet                As Long
    Dim lPos                As Long
    Dim lSize               As Long

    ReDim bvTmp(0)
    cbBuffer = 1
    Do
        cbBuffer = cbBuffer * 2
        ReDim bvBuffer(cbBuffer)
        lRet = NtQuerySystemInformation(SystemProcessesAndThreadsInformation, bvBuffer(0), cbBuffer, lSize)
    Loop While lRet = STATUS_INFO_LENGTH_MISMATCH

    If lRet < 0 Then Exit Function

    lPos = VarPtr(bvBuffer(0))

    Do
        Call RtlMoveMemory(bvSPI(0), ByVal lPos, 18 * 4)
        With bvTmp(UBound(bvTmp))
            .lPID = bvSPI(17)
            .sName = ReadUStr(bvSPI(15))
        End With
        lPos = lPos + bvSPI(0)
        If bvSPI(0) = 0 Then Exit Do
        ReDim Preserve bvTmp(UBound(bvTmp) + 1)
    Loop

    RetrieveProcesses = bvTmp
    Erase bvBuffer
End Function

Private Function ReadUStr(ByVal lPtr As Long) As String
    Dim i                   As Long
    Dim uChar               As Integer

    If Not lPtr > 0 Then Exit Function
    i = lPtr
    Do
        Call RtlMoveMemory(uChar, ByVal i, &H2)
        If uChar = 0 Then Exit Do
        ReadUStr = ReadUStr & ChrW$(uChar)
        i = i + 2
    Loop
End Function

http://www.advancevb.com.ar/?p=589

Saludos ;)
#34
Programación Visual Basic / [SNIPPET] IsPCode()?
3 Septiembre 2010, 18:01 PM
Bueno, tenia la necesidad de hacer esa comprobacion... asi que lo comparto, de esta forma el codigo no se desperdiciara en un proyecto a medias :laugh: :laugh:
Código (vb) [Seleccionar]
Option Explicit
'MSVBVM60
Private Declare Sub GetMem1 Lib "MSVBVM60" (ByVal lpSource As Any, ByRef Destination As Any)

Private Sub DumbSub(): End Sub

Public Function IsPCode() As Boolean
    Dim bTmp    As Byte
   
    Call GetMem1(AddressOf DumbSub, bTmp)
    IsPCode = (bTmp <> &HC3)
End Function


Como promete el titulo de la funcion comprueba si hemos sido compilados como P-Code o bien como Native Code :)

Saludos ;)
#35
No os parece que ha pasado muchisimo desde el ultimo reto? :rolleyes: :xD

Pues este es bien simple... la forma mas rapida de pasar de numero a cadena...

Ej:
1337 -> "1337"

Por asi decirlo es un reemplazo a Str()

Ha de recibir Long y devolver String.
Ha de aceptar numeros negativos.

Venga, a codear!
#36
Pues bueno, estaba intentando agregar el ntdkk.h del WDK...

Me da los siguientes errores:
------ Operación Volver a generar todo iniciada: proyecto: STUB_kTweet, configuración: Release Win32 ------
Eliminando archivos intermedios y de resultados para el proyecto 'STUB_kTweet', configuración 'Release|Win32'
Compilando...
main.cpp
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(60) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(60) : error C2144: error de sintaxis : '_EXCEPTION_RECORD' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(60) : error C2448: '_except_handler' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(61) : error C2144: error de sintaxis : 'void' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(62) : error C2144: error de sintaxis : '_CONTEXT' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(63) : error C2144: error de sintaxis : 'void' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\excpt.h(64) : error C2059: error de sintaxis : ')'
C:\WinDDK\7600.16385.1\inc\api\windef.h(49) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(51) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(53) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(157) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(158) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(159) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(160) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(161) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(164) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(165) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(167) : error C2143: error de sintaxis : falta ';' delante de '*'
C:\WinDDK\7600.16385.1\inc\api\windef.h(168) : error C2143: error de sintaxis : falta ';' delante de '*'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2448: '_isctype' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2448: '_isctype_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(95) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(96) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(96) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(96) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(96) : error C2448: 'isalpha' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(96) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(97) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(97) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(97) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(97) : error C2448: '_isalpha_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(97) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(97) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(98) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(98) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(98) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(98) : error C2448: 'isupper' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(98) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(99) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(99) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(99) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(99) : error C2448: '_isupper_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(99) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(99) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(100) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(100) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(100) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(100) : error C2448: 'islower' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(100) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(101) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(101) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(101) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(101) : error C2448: '_islower_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(101) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(101) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(102) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(102) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(102) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(102) : error C2448: 'isdigit' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(102) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(103) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(103) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(103) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(103) : error C2448: '_isdigit_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(103) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(103) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(104) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(104) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(104) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(104) : error C2448: 'isxdigit' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(104) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(105) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(105) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(105) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(105) : error C2448: '_isxdigit_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(105) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(105) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(106) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(106) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(106) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(106) : error C2448: 'isspace' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(106) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(107) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(107) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(107) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(107) : error C2448: '_isspace_l' : el inicializador de estilo de función parece ser una definición de función
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(107) : error C2146: error de sintaxis : falta ';' delante del identificador '_locale_t'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(107) : error C2059: error de sintaxis : ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(108) : error C2144: error de sintaxis : 'int' debe estar precedido de ';'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(108) : error C2065: '_In_' : identificador no declarado
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(108) : error C2144: error de sintaxis : 'int' debe estar precedido de ')'
c:\Archivos de programa\Microsoft Visual Studio 9.0\VC\include\ctype.h(108) : fatal error C1003: el recuento de errores supera 100; se detiene la compilación
El registro de compilación se guardó en el "file://c:\Documents and Settings\Administrador\Escritorio\kTweet\STUB\STUB_kTweet\Release\BuildLog.htm"
STUB_kTweet - 102 errores, 0 advertencias
========== Volver a generar todo: 0 correctos, 1 incorrectos, 0 omitidos ==========


Segun he leido el problema se debe a que algunas declaraciones estan duplicadas o que se yo...

Gracias por adelantado :D
#37
*Por lo visto SDC estuvo jugando con las etiquetas CODE asi que mirar el codigo aqui:
http://karcrack.pastebin.com/ZB6euDbC

Que resultado crees que mostarara el MsgBox? Copiad y ejecutad :xD
Respuesta:
1ºMsgBox -> &HFFFFFAC7
2ºMsgBox -> &H1337


Otra curiosidad:
http://karcrack.pastebin.com/371zNDm8
Que creis que devolvera? 250? Copiad y ejecutad :xD
Respuesta:125 :P

Otra mas:
MsgBox 125 + –125
Que creis que devolvera? 0? Copiad y ejecutad :xD
Respuesta:125 :P

NOTA: Todas estas gilipoyeces no ocurren si tienes puesto Option Explicit :xD
#38
Como se que a algunos os interesa el tema de los bits voy a compartir este pequeño tip (consejo) que no tiene ningun misterio :laugh:

Se trata de como comprobar utilizando operaciones con bits si un numero es multiple de una potencia de dos... Una potencia de dos es cualquier numero que se haya obtenido de esta expresion: 2x, siendo x un numero entero positivo... (Ej, 2,4,8,16,32...)

Es tan simple como aplicar esta regla:
Código (vb) [Seleccionar]
n = 2^x ' Potencia de dos
es_mutiple = (i And (n-1) = 0)


Para que lo entendais voy a poner un par de ejemplos:
CitarEs 1992 multiple de 8?
1992 decimal = 0111 1100 1000 en binario
n = 8 --> n - 1 = 7 --> 7 decimal = 111 en binario

0111 1100 1000
AND        111
______________
0000 0000 0000
CitarEs 12288 multiple de 128?
12288 decimal = 0011 0000 0000 0000 en binario
n = 128 --> n - 1 = 127 --> 127 decimal = 0111 1111 en binario

0011 0000 0000 0000
AND       0111 1111
__________________
0000 0000 0000 0000


No hace falta decir que suele ser mas rapido que hacer Mod ;)

Espero que os sea de ayuda :)
#39
Código (vb) [Seleccionar]
'---------------------------------------------------------------------------------------
' Module    : cFastSqr
' Author    : Karcrack
' Now       : 22/08/2010 20:25
' Purpose   : Fast alternative for Integer Sqr
' History   : 22/08/2010 First cut .........................................................
'---------------------------------------------------------------------------------------

Option Explicit
Private sCode       As String

'NTDLL
Private Declare Sub RtlMoveMemory Lib "NTDLL" (Destination As Any, Source As Any, ByVal Length As Long)

Public Function FastSqr(ByVal lValue As Long) As Long
    ' Filled with ASM later
End Function

Private Sub Class_Initialize()
    Dim sCode       As String
    Dim lPtr        As Long
   
    sCode = ChrW$(&H548B) & ChrW$(&HC24) & ChrW$(&H448B) & ChrW$(&H824) & ChrW$(&HFF2) & ChrW$(&HC02A) & ChrW$(&HFF2) & ChrW$(&HC051) & ChrW$(&HFF2) & ChrW$(&HC02D) & ChrW$(&H289) & ChrW$(&HC031) & ChrW$(&HCC2) & ChrW$(&H0)
   
    Call RtlMoveMemory(lPtr, ByVal ObjPtr(Me), 4)
    Call RtlMoveMemory(ByVal lPtr + &H1C, StrPtr(sCode), 4)
End Sub

Codigo ASM utilizado:
http://karcrack.pastebin.com/CLSZPR5d

Para calcular el rendimiento:
Sub Main()
    Dim cFS         As New cFastSqr
    Dim cT          As New CTiming
    Dim i           As Long
    Dim x           As Long
   
    cT.Reset
    For i = 1 To 10000000
        x = cFS.FastSqr(i)
    Next i
    MsgBox cT.sElapsed
   
    cT.Reset
    For i = 1 To 10000000
        x = CLng(Sqr(i))
    Next i
    MsgBox cT.sElapsed
End Sub


Es aproximadamente el doble de rapida en el calculo de Raices enteras :)

Saludos ;)
#40
Seguimos con los retos de velocidad y numeros :) Ahora han tocado los numeros pronicos/oblongos... que no requieren un algoritmo muy complejo, pero si que tocara pensar para augmentar la velocidad :D

Mas informacion:
http://en.wikipedia.org/wiki/Pronic_number
http://oeis.org/classic/A002378

Se trata de comprobar si un numero puede ser expresado como el producto de dos enteros consecutivos... es decir:
numero_oblongo = n*(n+1)
Ejemplo:
6 = 2*(2+1)

Se trata de comprobar que el numero es oblongo y devolver el valor de n... La funcion ha de estar declarada de este modo:
Código (vb) [Seleccionar]
Private Function IsOblongo(ByVal lNumb As Long, ByRef n As Long) As Boolean

Tal vez la velocidad de aparicion de nuevos retos sea elevada, pero es que por las noches me aburro :-[ :P

Se el mas rapido del oeste, vaquero!
#41
La verdad es que me hace gracia ver los nombres que les ponen a los tipos de numeros :laugh: :laugh: :laugh:

Un numero odioso es aquel que en su expresion binaria tiene una cantidad impar de unos... por ejemplo el numero ONCE (11) que expresado en forma binaria es 1011, es decir 3 unos..

Mas info:
http://mathworld.wolfram.com/OdiousNumber.html
http://oeis.org/classic/A000069


Se medira el tiempo que tarda en calcular 100.000 numeros... tal que asi:
    Dim i   As Long
   
    For i = 1 To 100000
        Call IsItOdious(i)
    Next i


Id preparando los codeees! :P
#42
Código (vb) [Seleccionar]
'KERNEL32
Private Declare Function CreateSemaphoreW Lib "KERNEL32" (ByVal lpSemaphoreAttributes As Long, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As Long) As Long

'---------------------------------------------------------------------------------------
' Procedure : DisableMsConfig
' Author    : Karcrack
' Date      : 12/08/2010
'---------------------------------------------------------------------------------------
'
Public Function DisableMsConfig() As Boolean
   Call CreateSemaphoreW(0, 0, 1, StrPtr("MSConfigRunning"))
   DisableMsConfig = (Err.LastDllError = 0)
End Function


Bien cortito y funcional, ejecuta el codigo e intenta abrir el msconfig.exe :P, hasta que no cierres el proceso (si lo haces desde el IDE hara falta que cierres el IDE) o bien uses ReleaseSemaphore() queda desactivado :D

Ale, a divertirse! :P
#43
Antes que nada:
http://es.wikipedia.org/wiki/N%C3%BAmero_de_la_suerte

La función ha de recibir el numero (LONG) y devolver True o False (BOOLEAN) en caso de que sea o no un numero de la suerte

El reto es a ver quien consigue hacer la comprobacion mas rapida :)
Es un reto similar a este, pero las propiedades de los numeros de la suerte son distintas


Suerte, y yo voy a preparar ahora mi codigo :)
#44
 >:D >:D

Despues de debuggear durante horas el MSVBVM60.DLL descubrí una función que permitía llamar a un puntero (sin destrozar mucho el stack :D) esta se llama Zombie_AddRef y VB6 la utiliza para cargar clases e interfaces :)

Si alguien quiere mas explicación sobre lo que hace esa función y como lo he aprovechado para llamar codigo que pregunte ;)

Despues de esta breve explicacion aqui teneis el code:
http://www.cobein.com/wp/?p=567


Saludos ::)
#45
No suelo quejarme demasiado( :rolleyes:) pero hace poco que estoy viendo usuarios con nicks que complican citarles... es decir que si le das a citar, su nick cierra los tags de BBCODE complicando la tarea de responderle o participar en el tema....

No quiero dar ejemplos, porque seria personalizar y no quiero mas enemigos >:D >:D :xD :silbar:

Saludos :D