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

#81
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Pero ahora porque en vez de buffer.Addrange no está escrito buffer.Add? Porque con Addrange hay que agregar normalmente dos posiciones cosa que no puedo apreciar en el código.

El prototipo de Add() es:

Código: csharp
public void Add(
T item
)


El prototipo de AddRange() es:

Código: csharp
public void AddRange(
IEnumerable<T> collection
)


se utiliza AddRange() porque es la forma de agregar elementos de una colección en lugar de agregar uno por uno dichos elementos.


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Pero ahora que sentido tiene esto?
   buffer.AddRange(new byte[] {
            0,//Null 1byte
            });

Déjenme saber si lo entendí bien: al final de la lista se crea un vector que contiene un elemento, a saber, 0?

Lo que hace AddRange() es añadir "cada elemento" de una colección al final de otra. No se agrega un vector, se agrega cada elemento del vector.


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
con que propósito?

En el "Ares Chat Protocol - Ares 2.1.7.3041" todos los mensajes tienen 3 bytes al principio y el resto es diferente a cada protocolo:
Código: text

2 bytes -> data length
1 byte -> proto id
x bytes -> data


"data" son los bytes del protocolo. Veamos el formato del protocolo para el login:
Código: text

Proto ID: MSG_CHAT_CLIENT_LOGIN (2)
Direction: client to server
Function: login handshake packet when first joining a room

16 bytes -> guid
2 bytes -> file count
1 byte -> null
2 bytes -> data port
4 bytes -> node ip address
2 bytes -> node port
4 bytes -> null * 4
x bytes -> user name
1 byte -> null
x bytes -> client version
1 byte -> null
4 bytes -> local ip address
4 bytes -> external ip address
1 byte -> client features
1 byte -> current uploads
1 byte -> maximum uploads allowed
1 byte -> current queued users
1 byte -> user age
1 byte -> user gender
1 byte -> user country code
x bytes -> user location
1 byte -> null



Vemos que al final el protocolo especifica que se requiere un byte "null". Comunmente un byte null se entiende como un byte con todos los bits a cero.

Una instancia de tipo byte con valor 0 en C# es una forma de crear este byte null.

Saludos
#82
Dudas y pedidos generales / Re:Duda sobre API de Windows
Septiembre 22, 2016, 11:17:13 AM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
¿El API de Windows, o las funciones de la libreria windows.h solo me serviran para la creacion de programas tipo GUI? Es decir ¿solo usare el api para crear un interface grafica?

Recuerdo que una pregunta similar se había realizado en otro hilo:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

La WinAPI o Windows API brinda muchas más características que las relacionadas a Interfaz de Usuario (Windows UI API). A continuación paso unos enlaces que enumeran muchas de las características conocidas de la WinAPI:

Windows API Index:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Windows API en Wikipedia:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
En caso de que si ¿No seria mas simple usar Visual C++ y no tener que escribir tanto codigo para crear una simple ventana? ¿O tambien necesito saber win api si uso Visual C++?

Es más sencillo claro!

Las ventanas creadas con el designer de Visual Studio (o Visual C++) se conocen como Windows Forms y utilizan clases y características del Framework .NET con sintaxis de C++. Esta interfaz entre C++ y el Framework .NET se conoce como  Managed C++ o C++/CLI y NO se utiliza la WinAPI de forma directa. Programas creados de esta forma se conocen como Windows Forms applications (GUIs que utilizan el CLR del Framework .NET).

Si quieres crear un programa con interfaz de usuario utilizando la WinAPI y no el Framework .NET, entonces debes codificar (escribir código) el diseño de las ventanas. Programas creados de esta forma se conocen como Windows Desktop Applications.

Saludos
#83
Dudas y pedidos generales / Re:Análisis de Sb0t - Parte 1
Septiembre 20, 2016, 02:25:39 PM
Código: csharp
set { this.socket_health = value ? 0 : 10; }


value es el valor que se obtiene cuando haces this.SocketConnected = valor en este caso.

?: se conoce como "?: operator", "conditional operator" o "ternary operator". Este operador cumple la función de un if que devuelve un resultado. Tiene el siguiente formato:

Código: text
condition ? first_expression : second_expression;


Si condition es true, entonces se evalúa first_expression y se retorna el resultado (obteniendo this.socket_health = 0 en este caso). Pero si condition es false, entonces se evalúa second_expression y se retorna el resultado (obteniendo this.socket_health = 10 en este caso).


Con esto debes deducir que SocketConnected solo provee la lógica de negocios para tratar con datos que realmente son almacenados en el atributo socket_health.


Fuente:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos
#84
Dudas y pedidos generales / Re:Análisis de Sb0t - Parte 1
Septiembre 20, 2016, 12:35:00 PM
Dentro de la clase que estas analizando, AresClient, se define la propiedad SocketConnected (línea 616):

Código: csharp
public bool SocketConnected
{
  get { return this.socket_health < 10; }
  set { this.socket_health = value ? 0 : 10; }
}


this hace referencia a la "actual" instancia de una clase al momento de ejecutar el código. Si tuvieras muchas instancias AresClient, this es diferente por cada instancia. Entonces this.SocketConnected se traduce como "la propiedad SocketConnected de la actual instancia de AresClient".

if (this.SocketConnected ...) ejecuta el get de la propiedad SocketConnected.

Saludos
#85
Dudas y pedidos generales / Re:Análisis de Sb0t - Parte 1
Septiembre 20, 2016, 02:49:41 AM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Que significano los corchetes en la línea 82?
private byte[] avatar = new byte[] { };

Melse refiero a estos corchetes { }

new byte[] { } es una de las tantas formas de crear un array sin elementos (vacío). A continuación te muestro diferentes formas de crear un array de strings vacío:

Código: csharp
var array_vacio1 = new String[0];
var array_vacio2 = new String[0]{};
var array_vacio3 = new String[]{};
String[] array_vacio4 = {};
var array_vacio5 = Enumerable.Empty<string>().ToArray();
var array_vacio6 = new List<string>().ToArray();
var array_vacio7 = Array.CreateInstance(typeof(string), 0);


Cuando creas un array (o cualquier clase colección que implemente IEnumerable o un Add extension method), puedes inicializar el objeto con elementos. Por ejemplo, para el siguiente código:

Código: csharp
var array_de_bytes = new byte[]
{
  1,
  2
};


se crea un objeto de tipo Array llamado array_de_bytes, se deduce una longitud de dos, y se inicializa con dos elementos, estos elementos entre corchetes son conocidos como "Collection initializers". Y para el siguiente:

Código: csharp
var array_de_bytes = new byte[] {};


se crea un objeto de tipo Array llamado array_de_bytes, se deduce una longitud de cero, y se inicializa con cero elementos. Y para:

Código: csharp
var array_de_bytes = new byte[5];


se crea un objeto de tipo Array llamado array_de_bytes, se declara una longitud de cinco, y se inicializa con cero elementos.

fuente:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


Saludos
#86
Probando las tres formas:

(1)El index es cero
Código: javascript
window.frames[0].document.body.style.background = "blue"


(2)Igual
Código: javascript
$('body', $('#algo')[0].contentWindow.document).text('cambiado')

o utilizando contents():
Código: javascript
$('body', $('#algo').contents()).text('cambiado');


(3)Igual
Código: javascript
$('#algo').contents().find('body').text('cambiado')



Si esto no funciona, entonces debe ser que estas probando tu código sin un servidor. Si ese es el caso, el problema radica en una política de seguridad que implementa el navegador llamada "Same-origin policy". Para poder seguir ejecutando tu código en local y sin un servidor, entonces debes configurar tu navegador para desbloquear esa restricción. Por ejemplo, en google chrome debes utilizar el parámetro --disable-web-security al iniciar.

Saludos
#87
Un makeefile simple se compone de reglas. Las reglas tienen el siguiente formato:

Código: text
target ... : prerequisites ...
        recipe


Las partes componentes de una regla, y su significado, son:
- target es el nombre de un archivo o de una acción.
- prerequisite es un archivo necesario para crear target.
- recipe es una acción (o un conjunto de acciones) a ejecutar. Un recipe comienza con una tabulación y no con espacios.


Para tu objetivo puedes hacer lo siguiente:

Código: text
a.out : foo.c bar.c defs.h objeto.o /dir/to/archive/archive.a -lsome_dynamic_lib
cc -lsome_dynamic_lib foo.c bar.c objeto.o /dir/to/archive/archive.a


* Si esta es la primera regla en el makefile, entonces será la que se ejecutará por defecto al ejecutar make.

Esta regla especifica que:
* Si no existe a.out, entonces ejecutar el recipe
* Si existe a.out, pero los prerequisites (foo.c bar.c defs.h objeto.o /dir/to/archive/archive.a -lsome_dynamic_lib) han cambiado su fecha de modificación, entonces ejecutar el recipe.

Mi recipe es un comando común de cc. Como no especifico el parámetro -o, entonces cc crea el ejecutable a.out.

Hay muchas más funcionalidades que pueden facilitar la tarea de escribir reglas (GNU Make brinda muchas más).

Manual de GNU Make:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos
#88
Dudas y pedidos generales / Re:Lío con los Puerto udp tcp
Septiembre 15, 2016, 02:06:29 AM
65535 es un límite en el número de conexiones o de escuchas impuesto por estos protocolos de capa de transtorte (layer 4 del modelo OSI).

Resalto la palabra "límite" ya que el hecho de que se puedan realizar hasta 65535 conexiones (en realidad el límite es menos) no implica que el ordenador "tenga" "sesenta y tantos mil puertos".

En este contexto, el ordenador no tiene puertos, el puerto es solamente un número y no un recurso.

Tanto UDP como TCP especifican que, a los datos que serán transmitidos en un paquete, se le agregará una cabecera con un formato específico. El formato de esa cabecera incluye, entre otros campos, el campo de puerto origen y el de puerto destino. Los dos campos, el de puerto origen y el de puerto destino, tienen un tamaño de 16 bits; sabiendo que un puerto no puede ser negativo, 2^16 es igual a 65536 pero si comenzamos a contar desde 0 (este número es reservado), tenemos que el máximo valor del campo de puerto es 65535.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
puedes cambiar que para http en vez de ser el 80 sea otro para ssh en vez del 23 sea tb otro etc...

Si, no existe restricción.

El hecho de asociar el puerto 80 con el protocolo HTTP, por ejemplo, proviene de una lista llamada "well-known ports" o "system ports". La lista de "well-known ports" asocia puertos a servicios comunmente utilizados; algunas asociaciones no son oficialmente reconocidas por la IANA (Internet Assigned Numbers Authority).

Fuentes:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


Saludos
#89
(1)
la forma de definir una funcion es:

Código: text

function <nombre> {
  ...
}


observa que no hay paréntesis en la definición.

(2)
Si utilizas $@ dentro de una función, entonces $@ hace referencia a los parámetros de la función y no los parámetros del script. Si quieres acceder a los parámetros pasados al script, dentro de la función, entonces debes pasar $@ como parámetro:

Código: bash
buscar $@


(3)
Es mejor que utilices "$@" y no $@. Cuando haces "$@", esto es igual a "$1" "$2" "$3"... . Por el otro lado, $@ se expande a $1 $2 $3 ... , osea que los parámetros no se enuentran entre comillas, y eso puede llevar a resultados no deseados con parámetros que se encuentren entre comillas. Por ejemplo, si suponemos que ejecutamos un script con parámetros de la siguiente forma:

Código: bash

./script a "b c"


con "$@" se expande a:
a y b c

pero con $@ se expande a:
a y b y c

el cual no suele ser el resultado deseado.


El siguiente tiene en cuenta lo anteriormente dicho:

Código: bash

#!/bin/bash

function buscar {
  for i in "$@"; do
    echo $i
  done
}

buscar "$@"


o, si quieres seguir utilizando la variable vec:

Código: bash

#!/bin/bash

function buscar {
  vec=("$@")
  for i in "${vec[@]}"; do
    echo $i
  done
}

buscar "$@"


Saludos
#90
Los posibles nombres suelen ser .text para la mayoría de los ejecutables y CODE para aquellos generados con los linkers de Borland.

En general, la sección ejecutable llamada "code section" se la conoce viendo los campos BaseOfCode y AddressOfEntryPoint (principalmente el AddressOfEntryPoint) en el "Optional Header" del archivo PE y posteriormente buscando el "Section Header" que especifique un rango de RVAs que contenga a esos valores (este rango se determina con los campos VirtualAddress y VirtualSize).

Un ejemplo,

Si AddressOfEntryPoint = 1510 entonces se busca el section header que contenga dicho valor en el intervalo:

[VirtualAddress, VirtualAddress + VirtualSize)

en mi caso, mi sección .text tiene los valores VirtualAddress = 1000 y VirtualSize = 3748, entonces el intervalo de RVAs de esta sección es:

[1000, 4748)

con esto sabemos que el "entry point" se encuentra en la sección .text del ejecutable.

Saludos
#91
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Ahora una consulta. Cada mozo va a tener un dispositivo con su propia copia de la db? no te conviene tener una db sola en un servidor y pegarle por una api?

Así debería ser,

Saludos
#92
Nunca he investigado sobre la implementación de clusters en sistemas como Windows 8 pero en Windows Server 2008 R2 y 2012 R2 una aplicación puede utilizar las APIs del mecanismo "failover cluster"
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos
#93
Para referirte al elemento actual, puedes utilizar "this" o el JQuery object "$(this)":

Código: javascript
$(".nameUser").click(function() {
     var id = this.id;
});


Saludos
#94
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Bueno, ya lo solucioné, me había equivocado en la modificación de SizeOfImage y VirtualAddress

me marcaba 35000 y con la operación confundí la alineación y coloque 40000, en vez de su multiplo siguiente 36000 y lo mismo me pasó con VirtualAddress, pero tengo una duda sobre unas secciones

Para encontrar VirtualAddress, ¿es sumando "VirtualAddress + VirtualSize" o es sumando "VirtualAddress + SizeOfRawData"?

Es la suma del VirtualSize y el VirtualAddress de la sección anterior, alineado al múltiplo mayor inmediato, o igual, de SectionAligment.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Para encontrar SizeOfRawData, ¿es alineando la cantidad que yo agrego y ya, verdad?, por ejemplo

si mi sección tiene 0x15 y FileAlignment es 0x200 entonces sería 0x15 alinear 0x200 = 0x200 --- o también si fuera 0x240 alinear 0x200 = 0x400 y asi sucesivamente, cierto?, SizeOfRawData solo se obtiene verificando tus datos y FileAlignment, nada mas, ¿cierto?

SizeOfRawData lo encuentras en el section header correspondiente a dicha sección.

SectionAlignment (que se encuentra en el optional header) especifica el tamaño mínimo en bytes que tendrá el cuerpo de una sección en memoria, pero si (VirtualAddress + VirtualSize) de dicha sección es mayor, entonces el tamaño de la sección en memoria será (VirtualAddress + VirtualSize) redondeado al múltiplo mayor inmediato del SectionAligment.

FileAlignment (que se encuentra en el optional header) especifica el tamaño mínimo en bytes que tendrá el cuerpo de una sección en el archivo, pero si el tamaño del cuerpo de la sección es mayor a FileAlignment, debe ser un múltiplo de este. Los bytes de alineación son ceros. Esto se muestra en la especificación del IMAGE_OPTIONAL_HEADER.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

SizeOfRawData (que se encuentra en el section header correspondiente a dicha sección) almacena este tamaño, múltiplo de FileAlignment, del cuerpo de la sección. Osea que también se tiene en cuenta los bytes en cero. Esto se muestra en la especificación del IMAGE_SECTION_HEADER.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Osea que la respuesta es SI.


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
También trate de meter código asm u opcodes del asm, y buscando encontre que se debe reacomodar ImageBase y AddressOfEntryPoint... ya los encontre, supuestamente se suman y ahí es donde se inicia el código... pero no se que hacer después

ya que tengo ImageBase y AddressOfEntryPoint, ¿que se debe hacer, o como se modifica eso?

No es necesario cambiar el ImageBase cuando agregas código.

Si necesitas calcular el nuevo AddressOfEntryPoint debes seguir estos pasos:
    * Como sabemos, PointerToRawData (que se encuentra en el section header correspondiente a dicha sección) indica el file-offset donde comienza el cuerpo de la sección. Nos movemos a este offset en el archivo.
    * Desde este punto, hasta el punto donde se encuentra la primera instrucción de nuestro nuevo entry point, calculamos la cantidad de bytes (offset del entry-point con respecto al comienzo del cuerpo de la sección). A esto le llamaremos "delta".
    delta = <offset del entry-point en el archivo> - section.PointerToRawData
    * Como sabemos, VirtualAddress (que se encuentra en el section header correspondiente a dicha sección) es el address relativo al ImageBase (que se encuentra en el optional header) que apunta al primer byte de la sección, entonces obtenemos este valor y lo sumamos con "delta".
    optional.AddressOfEntryPoint = section.VirtualAddress + delta

NOTA: Si se quiere saber a que sección pertenece el AddressOfEntryPoint, se debe analizar cada section header y encontrar aquél donde:
    section.VirtualAddress <= optional.AddressOfEntryPoint <  (section.VirtualAddress + section.VirtualSize) redondeado al múltiplo mayor inmediato del SectionAligment

Fuente:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Un comentario interesante:

Cita de: Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software
According to the Windows PE specification, VirtualSize should contain the total size of the section when loaded into memory, and SizeOfRawData should contain the size of data on disk. The Windows loader uses the smaller of VirtualSize and SizeOfRawData to map the section data into memory. If the SizeOfRawData is larger than VirtualSize, only VirtualSize data is copied into memory; the rest is ignored.

Como las secciones se cargan en memoria en el orden de su VirtualAddress, y no en el orden como se encuentran sus section headers, es importante que los VirtualAddress sean calculados correctamente para que no se solapen las secciones.


Para el tema de RunPE, basado en el PoC "LoadEXE: Dynamic Forking of Win32 EXE – Tan Chew Keong", sabemos que se crea un proceso en modo suspendido y con el API GetThreadContext() se obtiene el "thread context", osea los valores de los registros, del "primary thread" del proceso nuevo. La mágia se encuentra en los valores de los registros de ese contexto:
- [EAX] apunta al entry-point
- [EBX] apunta al PEB (Process Environment Block), con lo que [EBX+8] apunta al base-address del proceso suspendido.

Esto lo puedes ver en el siguiente código:

- ImageBase = El resultado devuelto por VirtualAllocEx(), que puede o no ser igual a OptionalHeader.ImageBase
   You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

- EAX = ImageBase + OptionalHeader.AddressOfEntryPoint
   You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

- [EBX + 8] = PEB.ImageBaseAddress = OptionalHeader.ImageBase
   You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos
#95
Perdón por desvirtuar el tema,

pero algunas de tus ideas no cumplen con un buen diseño de una base de datos:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
- Una Tabla con Tres Columnas [ID, Nombre Bar, Localización Bar].

Si la base de datos es local al dispositivo en el cual se encuentra funcionando la aplicación, entonces solo tendrás un registro que contiene la información del bar al que pertenece el dispositivo. Además, si tienes más de un dispositivo con la misma aplicación entonces tendrás este registro en cada uno de los mismos.

En un principio no está mal que una tabla tenga solamente un registro, pero que muchas bases de datos tengan el mismo registro no es algo bueno. Si el objetivo es que todos los dispositivos compartan los mismos datos, entonces los datos deberían ser almacenados y obtenidos a través de un servicio RESTful o Webservice funcionando en el bar o en un servidor común para todos los bares.


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
- Una Tabla para cada Bar creado con "x" columnas para almacenar los Productos [ID, SinCategoria, Cervezas, Comidas...].

En lo posible, no agreges columnas, distribuye los datos en registros y táblas relacionadas (o foráneas). Un mejor diseño podría ser:
- Productos [ID, ID de Marca , Descripción, Stock]
- Marcas de Productos [ID, Descripción]
- Categoría de producto [ID, ID de Categoría padre, Descripción]


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
- Una Tabla para cada Bar creado con 4 columnas para cada Mesa creada [ID, Mesa1(Pedido), Mesa1(CantidaPedido), Mesa1(Pagado), Mesa1(CantidadPagado)].

Igual que lo anterior, un diseño podría ser:
- Mesa [ID, Descripción]
- Atención [ID (para encontrar la suma de pedidos en una atención), ID de Mesa, fecha, Descripción]
- Pedido [ID, ID de atención, hora]
- Productos Por Pedido [ID, ID de pedido, ID de producto, Cantidad]


De esta forma se obtiene una base de datos con diseños flexibles y escalables. Estas ideas son parte de los "Fundamentos de la normalización de bases de datos":

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos
#96
Otra forma de hacer los mismo:

Código: dos
@echo off

SETLOCAL
SET EXIST_GOOGLE=false
SET EXIST_MOZILLA_FIREFOX=false

IF EXIST "%ProgramFiles(x86)%\Google" SET EXIST_GOOGLE=true
IF EXIST "%ProgramFiles%\Google" SET EXIST_GOOGLE=true
IF %EXIST_GOOGLE%==true (
    start ChromePass.exe
) ELSE (
    echo Chrome Not found!
)

IF EXIST %ProgramFiles(x86)%\Mozilla Firefox SET EXIST_MOZILLA_FIREFOX=true
IF EXIST %ProgramFiles%\Mozilla Firefox SET EXIST_MOZILLA_FIREFOX=true
IF %EXIST_MOZILLA_FIREFOX%==true (
    start PasswordFox.exe
) ELSE (
    echo Firefox Not found!
)

pause > NUL
exit \B 0


Saludos
#97
Android brinda soporte nativo para la gestión de base de datos sqlite a través de las APIs contenidas en android.database.sqlite (You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login). Pero si quieres un desarrollo mejor organizado puedes utilizar un ORM Framework como OrmLite o greenDAO.

Una introducción en español a OrmLite:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Código de ejemplo básico para utilizar relaciones con OrmLite:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos
#98
Hola, perdón por responder algo tarde.

No logro interpretar tu muestra del stack, por eso voy a ir paso por paso.


Si, por ejemplo, ejecutas:

Código: asm
push 0xFFFFFF01
push 0xFFFFFF02


En este momento tenemos:

Código: text

    +----------
low |0xFFFFFF02 <------+ DWORD PTR [ESP + 0x00]
    |
    |0xFFFFFF01 <------+ DWORD PTR [ESP + 0x04]
    |
    |
    |
    |
high|
    +----------


NOTA: solo uso DWORD PTR para denotar que se referencia a registros de 32 bits.

Al ejecutar un CALL e inmediatamente un PUSH tenemos:

Código: text

    +----------
low |Valor insertado por PUSH <-----+ DWORD PTR [ESP + 0x00]
    |
    |Valor insertado por CALL
    |
    |0xFFFFFF02 <-------------------+ DWORD PTR [ESP + 0x08]
    |
    |0xFFFFFF01 <-------------------+ DWORD PTR [ESP + 0x0C]
high|
    +----------


"Valor insertado por CALL" es la dirección de memoria de la instrucción que se encuentra después de la instrucción CALL.

Al ejecutar POP tenemos:

Código: text

    +----------
low |
    |
    |Valor insertado por CALL <-----+ DWORD PTR [ESP + 0x00]
    |
    |0xFFFFFF02 <-------------------+ DWORD PTR [ESP + 0x04]
    |
    |0xFFFFFF01 <-------------------+ DWORD PTR [ESP + 0x08]
high|
    +----------


Para la pregunta ¿Quedaría igual que la primera figura? la respuesta es no. Como se puede ver, hay un registro adicional en [ESP + 0x00] que es "Valor insertado por CALL".

Si "comparar" es una función, entonces necesitas del "Function prologue" al principio:

Código: asm

; Function prologue
push ebp                         ; or PUSH BP         in 16 bits
mov ebp,esp                      ; or MOV BP,SP       in 16 bits


y el "Function epilogue" al final:

Código: asm
; Function epilogue
leave                            ; mov esp,ebp / pop ebp
ret


y además, en lugar de usar un "Effective Address" con ESP, sería mejor hacerlo con EBP ya que de esta forma los direccionamientos a los argumentos de las funciones son fijos.

Saludos
#99
El error dice que no puedes referenciar difectamente un método que no es estático dentro de otro que sí lo es. El compilador de java muestra este error porque si bien ha encontrado la definición de los métodos setTitle(), setBounds(), setDefaultCloseOperation() y setVisible() tanto en la clase javax.swing.JFrame como de aquellas a las que esta extiende (por ejemplo, java.awt.Frame y java.awt.Window) no se puede invocar dichos métodos si los mismos no son estáticos o no son llamados a través de una instancia de la clase javax.swing.JFrame (o de la clase que extienda a la misma).

Debes crear una instancia de tu clase grafica, y después llamar a los anteriores métodos en esa instancia:

Código: java
grafica instancia = new grafica();

instancia.setTitle("Programica");
instancia.setBounds(400, 200, 250, 300);
instancia.setDefaultCloseOperation(EXIT_ON_CLOSE);

//Hace visible la ventana, si no lo hacemos no veremos la aplicacion
instancia.setVisible(true);


Saludos
#100
Primero quiero aclarar unos conceptos:

* Un reproductor o un editor de texto es un programa o aplicación.

* El disco duro es solo uno de muchos medios de almacenamiento posible.

* Archivo es un concepto referido a una cadena de bytes. Sin embargo esto no implica que dichos bytes se almacenen de forma ordenada en una unidad de almacenamiento.

Suponiendo que tienes un programa en ejecución (esto se conoce como "proceso"), si el mismo desea crear un archivo entonces debe acceder, de alguna forma, a las funciones para tratar con archivos que brinda el sistema operativo (estas funciones son conocidas como "system calls" o "llamadas al sistema" y proveen interfaces a diferentes abstracciones). Cada una de las llamadas al sistema que brinda el sistema operativo utiliza las funcionalidades que brinda algún subsistema del mismo.

En particular, las llamadas al sistema relacionadas con la gestión de archivos acceden, de alguna forma, a un subsistema conocido como "filesystem" o "sistema de archivos". El sistema de archivos es el que provee realmente los métodos para tratar con archivos, directorios e información de control almacenada en un medio de almacenamiento.

La forma en que se almacenan los archivos en el medio de almacenamiento difiere entre sistemas de archivos, pero básicamente se requiere una estructura específica para el almacenamiento y la utilización de punteros.

En definitiva, cuando un programa solicita la creación o lectura de un archivo, por ejemplo, el sistema operativo utiliza la abstracción brindada por el sistema de archivos para crear el mismo.


Toda la información digital se almacena o distribuye como 0's y 1's, incluso los programas.

Los programas son interpretados por el procesador, pero el resto de la información debe ser interpretada por los programas o por el sistema operativo. Tanto los programas, el sistema operativo, y el procesador manejan la información, almacenada como 0's y 1's, de una forma estructurada u ordenada. Esta estructuración se conoce como "format" o "formato".

Particularmente, la especificación de formato para los bytes que se almacenan como archivos se conoce como "file format" o "formato de archivo". Por otro lado las especificaciones de formato para las instrucciones que interpreta el procesador son conocidas como "opcode format" o " instruction set architecture (ISA)".

Un archivo .mp3 es un conjunto de bytes ordenados bajo el formato de la especificación "MPEG-1 and/or MPEG-2 Audio Layer III". Este formato es uno de varios utilizados para el audio coding.

Un archivo de texto no tiene un formato de archivo, son solo bytes que representan caracteres. Sin embargo existen muchas formas de representar estos caracteres como bytes, y es por eso que se utiliza un "character encoding" o "sistema de codificación de caracteres" como, por ejemplo, UTF-8 o ASCII.

Saludos