elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1] 2 3 4
1  Programación / Programación General / Qué lenguaje me conviene para trabajar con datos de un sitio web? en: 20 Marzo 2016, 15:30 pm
Buenas,

Tengo un proyecto donde necesito obtener información de un sitio web que no provee un API, por ende necesito obtener la información mediante peticiones y parsear los datos constantemente.

El sitio básicamente es un mercado en línea, básicamente la interacción sería algo así: App: Web dame los items en venta según X criterios.
Web: item1, item2, ..., itemN
App: selecciona los que le convienen, pujar por X items.

Si se dan cuenta la aplicación estará constantemente haciendo cosas similares a lo anterior y necesito un lenguaje que cumpla con lo siguiente:

  • Buen manejo de concurrencia
  • Buen manejo de datos
  • Soporte de librerías para web requests
  • Tiempo moderado de aprendizaje y desarrollo
  • De preferencia un lenguaje moderno


Me gustaría un lenguaje como Scala, Go o D, pero me gustaría enfatizar en que cada milisegundo es realmente importante para mi aplicación y en lo posible necesito las sugerencias respecto al lenguaje que más me convenga.

Gracias.
2  Programación / ASM / Duda con suma de números binarios! en: 22 Octubre 2013, 03:27 am
Buenas, he estado estudiando arquitectura, el formato IEEE-754, y demás y me ha surgido la siguiente duda:

Teniendo los números binarios con parte fraccionaria en punto fijo:
1000011,10001100110110110110110... (periódico)
Y:
1001111,10001001

Alguien podría darme luces? necesito sumarlos pero no sé como debo proceder con el periodo,

Muchas gracias.
3  Programación / Ingeniería Inversa / [Tutorial] XComp 0.98 unpacking! en: 11 Julio 2013, 01:14 am
Bueno señores pues como es común que cada mes la lista de CracksLatinos publica una lista de "retos" sobre los cuales hay que trabajar y posteriormente resolver, este mes escogí al azar uno de los 2 retos de unpacking y aquí les dejo el tutorial.

Descarga - Dropbox

Saludos.
4  Sistemas Operativos / GNU/Linux / Problema con retraso del teclado. en: 10 Octubre 2012, 19:45 pm
Buenas,

Tengo un pequeño problema casi sin importancia respecto al teclado utilizando Linux en general pero actualmente utilizo Fedora 17 x86_64.

Mi problema radica en que suelo escribir con cierta rapidez y me suele ocurrir lo siguiente:

FRase - Cuando debería ser Frase. Irónicamente parece que hay algún retraso entre el cambio de mayúscula a minúscula.
Esto no me pasó casi nunca cuando utilizaba Windows.

Agradecería cualquier sugerencia.

Saludos.
5  Programación / Java / [Duda] Interfaces (objetos). en: 8 Septiembre 2012, 21:19 pm
Buenas tardes,

Tengo una duda muy puntal respecto a las interfaces en java, las interfaces vienen siendo abstracción pura. Según mi concepto obligan a implementar métodos definidos en esta a clases que implementen la interfaz.

Mi duda surge en:
¿Si tengo una clase que implementa una interfaz, pero en dicha clase creo un método que no está definido en la interfaz funcionaría? o me veo límitado a los métodos de la interfaz?.

Con un ejemplo real:
Interfaz:
Código
  1. public interface IList<E> {
  2. public void add(E target);
  3. public boolean isEmpty();
  4. public boolean isFull();
  5. public boolean contains (E target);
  6. public void set (int index, E target);
  7. public E get(int index);
  8. public E remove(int index);
  9. public boolean remove (E target);
  10. public void print();
  11. }

Clase que implementa la interfaz:
Código
  1. public class CList<E> implements IList<E> {
  2.  
  3. private E[] data;
  4. private int size;
  5.  
  6. public void add(int index, E target){
  7. if ((index > 0) && (index < size)){
  8. if(isFull())
  9. stretch();
  10. for (int i = index; i <= size; i++)
  11. data[i+1]= data[i];
  12. data[index]= target;
  13. size++;
  14. }
  15. }
  16.  
  17. public boolean isEmpty(){
  18. return size==0;
  19. }
  20.  
  21. public boolean isFull(){
  22. return data.length == size;
  23. }
  24.  
  25. private void stretch(){
  26. E[]temp = (E[]) new Object[data.length*2];
  27. for (int  i=0; i<data.length; i++)
  28. temp[i]= data[i];
  29. data=temp;
  30. }
  31.  
  32. public void add(E target){
  33. if(isFull())
  34. stretch();
  35. data [size]= target;
  36. size++;
  37. }
  38.  
  39. public E get(int index){
  40. if (index >0 && index< size)
  41. return data[index];
  42. return null;
  43. }
  44.  
  45. public void set(int index, E target){
  46. if((index >= 0)&& (index< size))
  47. data[index]= target;
  48. }
  49.  
  50. public CList(){
  51. data = (E[]) new Object[1];
  52. size=0;
  53. }
  54.  
  55. public boolean contains (E target){
  56. for(int i = 0; i < size; i++){
  57. if(data[i].equals(target))
  58. return true;
  59. }
  60. return false;
  61. }
  62.  
  63. public E remove(int index){
  64. if (index>=0 && index < size){
  65. E element= data[index];
  66. for (int i= index; i<size-1; i++)
  67. data[i]=data[i+1];
  68. size--;
  69. return element;
  70. }
  71. return null;
  72. }
  73.  
  74. public boolean remove (E target){
  75. for (int i=0; i<size; i++){
  76. if (data[i].equals(target)){
  77. E element= remove(i);
  78. size--;
  79. return true;
  80. }
  81. }
  82. return false;
  83. }
  84.  
  85. public void print(){
  86. if(! isEmpty()){
  87. for (int i= 0; i<size; i++)
  88. System.out.print(data[i] + " ");
  89. }
  90. }
  91.  
  92. public boolean removeAll(E target){
  93. boolean resultado = true;
  94. int cont = 0;
  95. if (!isEmpty()){
  96. while(resultado){
  97. cont++;
  98. resultado = remove(target);
  99. }
  100. if (cont > 1)
  101. return true;
  102. }
  103. return false;
  104. }
  105.  
  106. public static void main(String[] args ){
  107. IList<String> lista=new CList<String>();
  108. lista.print();
  109. lista.add("B");
  110. lista.add("F");
  111. lista.add("A");
  112. lista.add("Z");
  113. lista.add("W");
  114. lista.add("P");
  115. lista.add("R");
  116. lista.add("A");
  117. lista.add("S");
  118. lista.add("A");
  119. lista.add("P");
  120. lista.print();
  121. System.out.println(lista.removeAll("A"));
  122. lista.print();
  123. }
  124. }

Claramente se puede notar al compilar un error por no encontrar el símbolo de la función "removeAll". Si declaro el método en la interfaz funciona sin ningún pero, entonces sólo quiero asegurarme de que la interfaz me limita los métodos que puede tener mi clase como "públicos".

Ahora mismo comprobé que si instancio la clase utilizando su mismo tipo de dato así:

Código
  1. CList<String> lista = new CList<String>;

El problema desaparece y todo recae en crear un objeto del tipo Interfaz e instanciarlo con una clase que contiene métodos que la interfaz no contiene.

¿Estoy en lo correcto?
¿Por qué el error de la primera forma de instanciar la clase?

De poder entrar en detalle lo agradecería.

Muchas gracias,
Iván Portilla.
6  Programación / Ingeniería Inversa / Estudio y desempacado de RDG PolyPack en: 11 Junio 2012, 10:43 am
Hola,

Hoy les traigo un pequeño análisis que le hice a este packer y bueno, también lo desempacamos!
Es mi primer unpacking y espero sepan disculparme los errores técnicos que dicho documento pueda tener.

Disfrutadlo!

Descarga:
Código:
https://dl.dropbox.com/u/26610132/Estudio%20y%20desempaquetado%20RDG%20PolyPack%20por%20The%20Swash.rar

Un saludo,
Iván Portilla.
7  Seguridad Informática / Análisis y Diseño de Malware / [PoC] Infección con TLS en: 9 Junio 2012, 07:40 am
Hola,

Bueno chicos vengo a compartir con vosotros la primera entrada que hago en un blog el cual ahora administro y escribo, vamos esta sigue siendo mi comunidad pero es la primera entrada que hago. Espero les sea de utilidad y bueno a leer :)

Esta entrada es sobre algo que me llevó un poco de esfuerzo y unos cuantos días de pruebas y pruebas para que funcione. Se trata sobre el "Thread Local Storage" que es un directorio de los ejecutables de Microsoft Windows que hace parte de la estructura PE.

¿Que nos dice la documentación oficial sobre el Thread Local Storage?
Cito traduciendo:
Citar
La sección ".tls" proporciona soporte al PE y COFF de almacenamiento local de subprocesos estáticos. TLS es una clase de almacenamiento especial que Windows soporta con el que objetos de datos no son automáticos (estáticos), sin embargo es local a cada hilo que se ejecuta. Por lo tanto cada hilo puede tener un valor diferente para cada variable declarada mediante el uso de TLS.

Si nos apoyamos en lo que conocemos, podemos decir simplemente que es una rutina que sirve para inicializar los valores de objetos estáticos. Dichos valores se deben inicializar antes de la ejecución del programa y he aquí el porqué se ejecutan antes que el punto de entrada del ejecutable.

Miremos su "estructura" y con seguridad veremos algo que aprovechar:
Código
  1. struct Thread_Local_Storage
  2. {
  3.    DWORD: RawDataStartVA;
  4.    DWORD: RawDataEndVA;
  5.    DWORD: AddressOfIndex
  6.    DWORD: AddressOfCallBacks;
  7.    DWORD: SizeOfZeroFill;
  8. }

Hablemos de algunos campos de su estructura, antes que nada recalco que los 4 primeros campos son direcciones virtuales.
  • RawDataStartVA: La dirección de inicio de la plantilla TLS. La plantilla es un bloque que es utilizado para inicializar la infor-mación TLS. El sistema copia todo de estos datos cada vez que un hilo es creado.
  • RawDataEndVA: La dirección del último byte de la información del TLS excepto para el relleno de ceros.
  • AddressOfIndex: El lugar que recibe el índice del TLS que el loader asigna. Esta ubicación es una sección de datos ordinaria por lo que se puede dar un nombre simbólico que sea ac-cesible al programa.
  • AddressOfCallBacks: Puntero a la serie de funciones TLS. El fin de la matriz se identifica por que la última entrada tiene valor nulo.
  • SizeOfZeroFill: El tamaño en bytes de la plantilla.
  • Characteristics: Reservado.

Los dos primeros campos son utilizados para delimitar la información con la cual inicializar, pero ¿Nosotros vamos a inicializar información?
No, nosotros vamos a aprovecharnos de la estructura y de dos campos suyos (AddressOfIndex y AddressOfCallBacks). Principalmente del segundo que corresponderá a un puntero a una matriz de direcciones que a cada dirección corresponde una función que se ejecutará para "inicializar información".
He aquí un pequeño gráfico para que les quede más claro:

Si nos vamos entendiendo entonces tendréis claro que no queremos inicializar objetos, pero queremos aprovechar que podemos ejecutar alguna rutina antes de que siquiera se ejecute la primera instrucción del programa, he aquí un método de infección que tiene ya su tiempo pero yo no conozco un ejemplar.

Teoría de una ¿infección?
Primero me gustaría aclarar unos detalles acerca de los "requerimientos" de una estructura TLS.
El campo AddressOfIndex debe encontrarse referenciado en una sección con permisos de lectura y escritura puesto que el "loader" de Windows tratará de escribir en él y en caso de no poder nos dará un lindo "ACCESS VIOLATION ON WRITTING". Garantizada la posibilidad de escritura en este campo tenemos casi todo, nos resta referenciar el puntero de AddressOfCallBacks que apuntará a una matriz de direcciones de 4 bytes, las cuales cada es una función distinta que se ejecutará, debéis recordar que el final de estas direcciones será un DWORD nulo.

Teoría:
Nosotros podemos ejecutar alguna rutina que más bien se conocen como "shellcodes" la cual ejecutará una acción. Imagínate poder descargar y ejecutar algo, o modificar el mismo ejecutable, y más. Todo legítimamente y solo porque "inicializamos" objetos. Bueno entonces os comento lo que debéis hacer:
  • Agregando la shellcode: Necesitaremos agregar en alguna parte del ejecutable la rutina que queremos que ejecute, hay opciones como crear una sección nueva, expandir y abrirnos un espacio en una sección u otras alternativas como aprovecharnos de una pequeña "indocumentación" y ejecutarnos en la cabecera del ejecutable. Por limpieza sería mucho mejor agregar una sección pero estaríamos dando referencia muy fácil a donde nos encontramos y creo que el método que utilicéis para agregar la shellcode depende de vuestros fines.
  • Agregando directorio TLS: Para que podamos realizar esto deberemos agregar la estructura ya mencionada y en caso de existir tan solo agregar una referencia a nuestra rutina en la matriz de AddressOfCallBacks. Debes tener muy presente que los campos más importantes son AddressOfCallBacks & AddressOfIndex, si ignoramos cualesquiera podemos contar con que no funcionará. El directorio se encuentra en la décima entrada de IMAGE_DATA_DIRECTORY y el tamaño de dicha estructura es 0x20 bytes.

Teoría, teoría y la práctica ¿qué?
Bueno, bueno como mi idea no es repetir artículos que ya escribí voy a darles unas herramientas entre ellas información que os dará más idea de todo esto. Añado un enlace a 3 documentos que hablan sobre el tema y además una sorpresa después de las imágenes.


Ejemplo de infección práctico-teórico con TLS:
Código:
https://dl.dropbox.com/u/26610132/TLS.rar

Tutorial del formato PE en español basado en el PECOFF:
Código:
https://dl.dropbox.com/u/26610132/Formato%20de%20ficheros%20ejecutables%20_Formato%20PE_.pdf

Documentación oficial de Microsoft sobre el PE - PECOFF:
Código:
http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx

Imágenes:



Tal vez te hayas fijado en la imagen de OllyDBG y te preguntes ¿por qué ese return a NTDLL?
Bueno, pues es parte de la carga del ejecutable el lanzar la rutina que ejecute nuestro TLS así que terminada la ejecución de nuestras rutinas terminará de cargar el ejecutable y lo lanzará, por ello es que se ejecuta antes que el punto de entrada. IDA detectará que hay TLS y he ahí la imagen.
¿Y la primera imagen de qué es?
Bueno es un prototipo de un archivo que infecta a los archivos ejecutables de su mismo directorio.

¿Recuerdas que te dije que yo no conocía ejemplares?
El principal objeto de este artículo es compartir un pequeño ejemplar programado en MASM, seguramente os puede servir mucho para su estudio y bueno, es un ejemplar así que hay muchas cosas para tener en cuenta demás.

Código
  1. ; #################################################
  2. ; # Ejemplo de infección de ejecutables con TLS
  3. ; # Programado por Iván Portilla
  4. ; # Viernes, 8 de junio de 2012
  5. ; # http://reversingcode.com
  6. ; # Agradecimientos: Shaddy, Guan de dio & Lelouch  
  7. ; #################################################
  8.  

Código fuente:
Código:
https://dl.dropbox.com/u/26610132/infection.asm

Hasta la próxima.

Un saludo,
Iván Portilla.
8  Programación / ASM / [Consulta] Prototipos de funciones para include. en: 3 Junio 2012, 02:29 am
Hola,

Hoy vengo a molestaros con una pequeña consulta y es referido a MASM, y es la siguiente:
Yo tengo un número de funciones que hice y quisiera poder hacer un solo archivo que contenga esas funciones para posteriormente incluirlo en mis otros proyectos. Mi duda recae en que mis funciones van así:

Código
  1. proc MyFunc1, Param..
  2.  
  3. end proc

Pero no he logrado que funcione o no al menos con un include MyProcs.asm.
Creo que debo declarar de alguna forma las funciones en cabecera o algo, si alguien sabe agradecería me deis una pequeña manita.

Un saludo,
Iván Portilla.
9  Programación / Programación C/C++ / [C]Resource Dumper. en: 31 Mayo 2012, 21:48 pm


Hola,

Hoy les vengo a traer una aplicación que programé y lo que en realidad hace es extraer todos los recursos de un ejecutable. Más que por su utilidad seguro pueden entender como funciona el directorio de recursos de un archivo ejecutable.
No utilizo ninguna función API de recursos proporcionada por Windows, todo está hecho a mano.

Un saludo,
Iván Portilla.

Actualizado 22 de junio de 2012, ahora soporta parámetros en su función principal y tiene corregidos errores de manejo de memoria y está mucho más optimizado.

Código
  1. /**************************************************
  2.  * Resource Dumper v0.1 .
  3.  * Programado por Iván Portilla.
  4.  * Actualizado 22 de junio de 2012
  5.  * http://www.h-sec.org & http://www.elhacker.net
  6.  **************************************************/
  7.  
  8. #include <stdio.h>
  9. #include <windows.h>
  10. #include <Strsafe.h>
  11. #define STATIC_SIZE 0x20
  12.  
  13. void GetResources(PBYTE MappedFile, DWORD ResourceRVA, PCHAR Path, PIMAGE_SECTION_HEADER ish, DWORD NumberOfSections);
  14. int RVA_TO_OFFSET(int RVA, PIMAGE_SECTION_HEADER ish, int NumberOfSections);
  15. int RESOURCE_DUMP(PCHAR lFile, PCHAR MappedName, PCHAR DumpPath);
  16. int RESOURCE_TO_FILE(PCHAR Path, PBYTE ResourceRVA, DWORD Size);
  17. PCHAR ResourceType(DWORD ResType);
  18. PCHAR UNICODE_TO_STRING(PIMAGE_RESOURCE_DIR_STRING_U String);
  19.  
  20. typedef BOOL (WINAPI * _PathIsDirectory)(PCHAR Directory);
  21. typedef BOOL (WINAPI * _PathFileExists)(PCHAR Directory);
  22.  
  23. char STR_ID[STATIC_SIZE];
  24. char STR_ID2[STATIC_SIZE];
  25. char STR_ID3[STATIC_SIZE];
  26. char STR_ID4[STATIC_SIZE];
  27. char * RESOURCES[25] = {"RT_CURSOR","RT_BITMAP","RT_ICON","RT_MENU","RT_DIALOG",
  28.                        "RT_STRING","RT_FONTDIR","RT_FONT","RT_ACCELERATOR","RT_RCDATA",
  29.                        "RT_MESSAGETABLE","RT_GROUP_CURSOR","","GROUP_ICON","","RT_VERSION",
  30.                        "RT_DLGINCLUDE","","RT_PLUGPLAY","RT_VXD","RT_ANICURSOR","RT_ANIICON",
  31.                        "RT_HTML","RT_MANIFEST","UNKNOWN"};
  32.  
  33. int main(int argc, char * argv[])
  34. {
  35.    _PathIsDirectory PathIsDirectoryA = (_PathIsDirectory)GetProcAddress(LoadLibraryA("Shlwapi.dll"), "PathIsDirectoryA");
  36.    _PathFileExists PathFileExistsA = (_PathFileExists)GetProcAddress(LoadLibraryA("Shlwapi.dll"), "PathFileExistsA");;
  37.  
  38.    printf("####  ####\n");
  39.    printf("#  #  #   #\n");
  40.    printf("# #   #    #\n");
  41.    printf("##    #    #\n");
  42.    printf("# #   #   #\n");
  43.    printf("#  #  ####\n\n");
  44.    printf("Resource Dumper Base Model v0.1\n\n");
  45.  
  46.    if ((PathFileExistsA != NULL) && (PathIsDirectoryA != NULL))
  47.    {
  48.        if (argc == 4)
  49.        {
  50.            if ((PathFileExistsA(argv[1]) == 1) && (PathIsDirectoryA(argv[3])) && (argv[2] != NULL))
  51.            {
  52.                RESOURCE_DUMP(argv[1], argv[2], argv[3]);
  53.            }
  54.            else
  55.                printf("Check your parameters [File path, File Mapped Name, Path To Save Resources] (ALL STRINGS)");
  56.        }
  57.        else
  58.            printf("This software should be execute with params [File path, File Mapped Name, Path To Save Resources] (ALL STRINGS)");
  59.    }
  60.    else
  61.        printf("Fail to load API functions of shlwapi.dll.");
  62.    getchar();
  63.    return 0;
  64. }
  65.  
  66. int RESOURCE_DUMP(PCHAR iFile, PCHAR MappedName, PCHAR DumpPath)
  67. {
  68.    HANDLE lFile, lMap;
  69.    PBYTE Mapped;
  70.    PIMAGE_DOS_HEADER IDH;
  71.    PIMAGE_NT_HEADERS INH;
  72.    DWORD Resource;
  73.  
  74.    lFile = CreateFileA(iFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,0,0);
  75.    if (lFile != INVALID_HANDLE_VALUE)
  76.    {
  77.        lMap = CreateFileMappingA(lFile, NULL, PAGE_READONLY, 0, 0, MappedName);
  78.        Mapped = (PBYTE)MapViewOfFile(lMap, FILE_MAP_READ, 0, 0, 0);
  79.        IDH = (PIMAGE_DOS_HEADER)Mapped;
  80.        if (IDH->e_magic == IMAGE_DOS_SIGNATURE)
  81.        {
  82.            INH = (PIMAGE_NT_HEADERS)&Mapped[IDH->e_lfanew];
  83.            if(INH->Signature == IMAGE_NT_SIGNATURE)
  84.            {
  85.                Resource = INH->OptionalHeader.DataDirectory[2].VirtualAddress;
  86.                if (Resource > 0)
  87.                {
  88.                    printf("Getting resources..\n");
  89.                    GetResources(Mapped, Resource, DumpPath,(PIMAGE_SECTION_HEADER)&Mapped[IDH->e_lfanew + 24 + INH->FileHeader.SizeOfOptionalHeader], INH->FileHeader.NumberOfSections);
  90.                }
  91.                else
  92.                    printf("Resource directory not present\n");
  93.            }
  94.  
  95.        }
  96.        UnmapViewOfFile(Mapped);
  97.        CloseHandle(lMap);
  98.        CloseHandle(lFile);
  99.  
  100.    }
  101.    else
  102.    {
  103.        return -1;
  104.    }
  105.  
  106.    return 0;
  107. }
  108.  
  109. void GetResources(PBYTE MappedFile, DWORD ResourceRVA, PCHAR Path, PIMAGE_SECTION_HEADER ish, DWORD NumberOfSections)
  110. {
  111.    PIMAGE_RESOURCE_DIRECTORY IRD, SUBIRD, SSUBIRD;
  112.    PIMAGE_RESOURCE_DIRECTORY_ENTRY IRDRE, SUBIRDRE, SSUBIRDRE;
  113.    PIMAGE_RESOURCE_DATA_ENTRY IRDTE;
  114.    PIMAGE_RESOURCE_DIR_STRING_U IRDS;
  115.    DWORD NumberOfEntries, NumberOfSubEntries, NumberOfSSubEntries, Counter = 0, Tick = 0, lBytes = 0;
  116.    PCHAR UNICODE_STR_PARSED = NULL;
  117.    PCHAR RES_TYPE = NULL;
  118.  
  119.    Tick = GetTickCount();
  120.    IRD = (PIMAGE_RESOURCE_DIRECTORY) &MappedFile[RVA_TO_OFFSET(ResourceRVA, ish, NumberOfSections)];
  121.    NumberOfEntries = (IRD->NumberOfNamedEntries + IRD->NumberOfIdEntries);
  122.    IRDRE = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) ((int)IRD + sizeof(IMAGE_RESOURCE_DIRECTORY));
  123.    printf("[Root resource directory entries: %X]\n\n", NumberOfEntries);
  124.    while(NumberOfEntries > 0)
  125.    {
  126.        if (IRDRE->DataIsDirectory == 1)
  127.        {
  128.            SecureZeroMemory(STR_ID3, STATIC_SIZE);
  129.            if (IRDRE->NameIsString == 0)
  130.            {
  131.                RES_TYPE = RESOURCES[(IRDRE->Id)-1];
  132.                printf("  [Resource type: %s]\n", RES_TYPE);
  133.                StringCchCopyA(STR_ID3, STATIC_SIZE, RES_TYPE);
  134.                StringCchCatA(STR_ID3, STATIC_SIZE, "_");
  135.            }
  136.            else
  137.            {
  138.                IRDS = (PIMAGE_RESOURCE_DIR_STRING_U) (IRDRE->NameOffset + (int)IRD);
  139.                UNICODE_STR_PARSED = UNICODE_TO_STRING(IRDS);
  140.                printf("  [Resource type: %s]\n", UNICODE_STR_PARSED);
  141.                StringCchCopyA(STR_ID3, STATIC_SIZE, UNICODE_TO_STRING(IRDS));
  142.                StringCchCatA(STR_ID3, STATIC_SIZE, "_");
  143.                GlobalFree(UNICODE_STR_PARSED);
  144.            }
  145.            SUBIRD = (PIMAGE_RESOURCE_DIRECTORY) ((int)IRD + IRDRE->OffsetToDirectory);
  146.            NumberOfSubEntries = SUBIRD->NumberOfNamedEntries + SUBIRD->NumberOfIdEntries;
  147.            SUBIRDRE = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) ((int)SUBIRD + sizeof(IMAGE_RESOURCE_DIRECTORY));
  148.            printf("    [Number of sub entries: %x]\n", NumberOfSubEntries);
  149.            while(NumberOfSubEntries > 0)
  150.            {
  151.                if(SUBIRDRE->DataIsDirectory == 1)
  152.                {
  153.                    printf("      [Resource Id: %i]\n", SUBIRDRE->Id);
  154.                    SSUBIRD = (PIMAGE_RESOURCE_DIRECTORY) ((int)IRD + SUBIRDRE->OffsetToDirectory);
  155.                    NumberOfSSubEntries = SSUBIRD->NumberOfNamedEntries + SSUBIRD->NumberOfIdEntries;
  156.                    SSUBIRDRE = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) ((int)SSUBIRD + sizeof(IMAGE_RESOURCE_DIRECTORY));
  157.                    printf("      [Number of re-sub entries: %x]\n", NumberOfSSubEntries);
  158.                    while(NumberOfSSubEntries > 0)
  159.                    {
  160.                        IRDTE = (PIMAGE_RESOURCE_DATA_ENTRY) ((int)IRD +SSUBIRDRE->OffsetToData);
  161.                        printf("        [RVA: 0x%X Size: 0x%X]\n", IRDTE->OffsetToData, IRDTE->Size);
  162.  
  163.                        SecureZeroMemory(STR_ID, STATIC_SIZE);
  164.                        SecureZeroMemory(STR_ID2, STATIC_SIZE);
  165.                        SecureZeroMemory(STR_ID4, STATIC_SIZE);
  166.  
  167.                        StringCchCatA(STR_ID4, STATIC_SIZE, STR_ID3);
  168.                        _itoa(SUBIRDRE->Id, STR_ID, 10);
  169.                        StringCchCatA(STR_ID, STATIC_SIZE, "_");
  170.                        _itoa(SSUBIRDRE->Id, STR_ID2, 10);
  171.                        StringCchCatA(STR_ID4, STATIC_SIZE, STR_ID);
  172.                        StringCchCatA(STR_ID4, STATIC_SIZE, STR_ID2);
  173.                        RESOURCE_TO_FILE(Path, (PBYTE)((int)MappedFile + RVA_TO_OFFSET(IRDTE->OffsetToData, ish, NumberOfSections)), IRDTE->Size);
  174.                        NumberOfSSubEntries = NumberOfSSubEntries - 1;
  175.                        SSUBIRDRE++;
  176.                        Counter++;
  177.                        lBytes += IRDTE->Size;
  178.                    }
  179.                }
  180.                NumberOfSubEntries = NumberOfSubEntries - 1;
  181.                SUBIRDRE++;
  182.            }
  183.        }
  184.        NumberOfEntries = NumberOfEntries - 1;
  185.        IRDRE++;
  186.    }
  187.    printf("\nResources dumped: 0x%X.", Counter);
  188.    printf("\nTime of dumped: %i miliseconds.", (GetTickCount()-Tick));
  189.    printf("\nBytes dumped: 0x%X.", lBytes);
  190. }
  191.  
  192. int RVA_TO_OFFSET(int RVA, PIMAGE_SECTION_HEADER ISH, int NumberOfSections)
  193. {
  194.    int i, Offset = 0;
  195.    if (ISH != NULL)
  196.    {
  197.        for (i = 0; i < NumberOfSections; i++)
  198.        {
  199.            if ((RVA >= (int)ISH[i].VirtualAddress) && (RVA <= (int)(ISH[i].VirtualAddress + ISH[i].Misc.VirtualSize)))
  200.            {
  201.                    Offset = (RVA - ISH[i].VirtualAddress) + ISH[i].PointerToRawData;
  202.            }
  203.        }
  204.    }
  205.    else
  206.        Offset = 0;
  207.  
  208.    return Offset;
  209. }
  210.  
  211. PCHAR UNICODE_TO_STRING(PIMAGE_RESOURCE_DIR_STRING_U String)
  212. {
  213.    PCHAR nStr = (PCHAR) GlobalAlloc(GPTR, String->Length + 1);;
  214.    WideCharToMultiByte(CP_ACP, 0, String->NameString, String->Length * 2, nStr, String->Length, NULL, NULL);
  215.    return nStr;
  216. }
  217.  
  218. int RESOURCE_TO_FILE(PCHAR Path, PBYTE ResourceRVA, DWORD Size)
  219. {
  220.    PCHAR lFile = (PCHAR)GlobalAlloc(GPTR, lstrlenA(Path) + STATIC_SIZE);
  221.    PCHAR Buffer = (PCHAR)GlobalAlloc(GPTR, Size);
  222.    HANDLE sFile;
  223.    DWORD Bytes = 0, Rest;
  224.  
  225.    CopyMemory(Buffer, ResourceRVA, Size);
  226.    StringCchCopyA(lFile, lstrlenA(Path) + STATIC_SIZE, Path);
  227.    if ((Path[lstrlenA(Path)-2] == 92) & (Path[lstrlenA(Path)-1] == 92))
  228.        StringCchCopyA(&lFile[lstrlenA(Path)], lstrlenA(Path) + STATIC_SIZE, STR_ID4);
  229.    else
  230.    {
  231.        lFile[lstrlenA(Path)+1] = 92;
  232.        lFile[lstrlenA(Path)] = 92;
  233.        StringCchCopyA(&lFile[lstrlenA(Path)+2], lstrlenA(Path) + STATIC_SIZE, STR_ID4);
  234.    }
  235.    sFile = CreateFileA(lFile, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0);
  236.    if (sFile != INVALID_HANDLE_VALUE)
  237.    {
  238.        WriteFile(sFile, Buffer, Size, &Bytes, NULL);
  239.        CloseHandle(sFile);
  240.        Rest = 0;
  241.    }
  242.    else
  243.        Rest = -1;
  244.  
  245.    GlobalFree(Buffer);
  246.    GlobalFree(lFile);
  247.    return Rest;
  248. }
10  Informática / Hardware / Problema con virtualización por hardware. en: 27 Mayo 2012, 23:45 pm
Buenos días,
Hoy traigo un problema a ver si me pueden colaborar. Tengo mi Notebook de la cual os proporciono los siguientes datos:
- Modelo: Compaq CQ10-800
- Windows 7 Ultimate SP1 32 bits.

Mi problema surge cuando quiero instalar mi máquina virtual con VMWare (Windows 7 64-bits, tampoco sé si no se pued), la cúal me dice lo que tengo deshabilitado la virtualización asistida por hardware.

Comprobé que mi Notebook lo soportara con la herramienta de identificación de procesadores de Intel además del HAV Detection Tool de Microsoft ambos con la misma respuesta.

Os pego la parte importante generada por CPU-Z sobre mi hardware:
Código:
CPU-Z TXT Report
-------------------------------------------------------------------------

Binaries
-------------------------------------------------------------------------

CPU-Z version 1.60.1

Processors
-------------------------------------------------------------------------

Number of processors 1
Number of threads 4

APICs
-------------------------------------------------------------------------

Processor 0
-- Core 0
-- Thread 0 0
-- Thread 1 1
-- Core 1
-- Thread 0 2
-- Thread 1 3

Processors Information
-------------------------------------------------------------------------

Processor 1 ID = 0
Number of cores 2 (max 2)
Number of threads 4 (max 4)
Name Intel Atom
Codename
Specification Intel(R) Atom(TM) CPU N570   @ 1.66GHz
Package (platform ID) Socket 437 FCBGA8 (0x4)
CPUID 6.C.A
Extended CPUID 6.1C
Core Stepping B0
Technology 45 nm
Core Speed 997.6 MHz
Multiplier x FSB 6.0 x 166.3 MHz
Rated Bus speed 665.0 MHz
Stock frequency 1666 MHz
Instructions sets MMX, SSE, SSE2, SSE3, SSSE3, EM64T, VT-x
L1 Data cache 2 x 24 KBytes, 6-way set associative, 64-byte line size
L1 Instruction cache 2 x 32 KBytes, 8-way set associative, 64-byte line size
L2 cache 2 x 512 KBytes, 8-way set associative, 64-byte line size
FID/VID Control yes
FID range 6.0x - 10.0x
Max VID 1.088 V

Además he actualizado la BIOS y he seguido el tutorial de Microsoft:
Código:
http://www.microsoft.com/windows/virtual-pc/support/configure-bios.aspx

Pero no me dá la opción de activar la tecnología de virtualización.
¿Saben que puede ocurrir?

Un saludo,
Iván Portilla
Páginas: [1] 2 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines