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

#91
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 :-*
#92
Claro. De hecho ya existen aproximaciones usando antivirus online unido a un motor polimórfico. :)
#93
No he podido probarlo porque estoy lejos del IDE, pero una recomendación es que uses VarType() en lugar de TypeName() para trabajar con constantes en lugar de cadenas :)
#94
Los VARIANT siguen esta estructura:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms221627(v=vs.85).aspx

Las cadenas son BSTR:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx
Y para obtener el puntero a su estructura real debes usar StrPtr().

Los tipos que utiliza VB6 en memoria se conocen como OLETypes. Internamente VB6 hace uso de funciones de OLEAUT32 para trabajar con ellos. Aquí tienes más información sobre éstos:
http://www.roblocher.com/whitepapers/oletypes.aspx

Saludos
#96
Se está exagerando bastante... Otros países ya lo tienen implantado hace tiempo. Es necesario que un juez acepte la "escucha" igual que en muchos otros procesos de investigación que atacan a la privacidad.
#97
Cita de: x64Core en 31 Mayo 2013, 08:35 AM
Y por cierto, en que momento no hay un handle a la base del proceso?
If App.PrevInstance Then: End
Yo lo dudo.
No confundas PrevInstance con hInstance.
#98
¿De qué navegador se trata?
#99
La extensión del fichero resultante debe ser .MP3 y tendrá el aspecto que menciona Nox:

-----
|PE |
-----
|mp3|
-----


El explorar de Windows sabe que programa ejecutar con la extensión mp3; el reproductor. El reproductor buscará la cabecera a lo largo de todo el fichero ya que ésta puede estar en cualquier lugar.

Para ejecutar el PE hay que forzar al explorar de Windows a tratar como ejecutable el fichero .mp3. Para esto se suele utilizar un enlace (.lnk) con una linea de comando que "convence" al explorer de que es un ejecutable.

Saludos
#100
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 :-*