Random IRC quote :      <h> que llegue un caballo y te la meta

Jugando con Samepage Merging

ACTUALIZACIÓN: 1/5/2010 Incluyo un pequeño cambio en el codigo del PoC que había hecho el cual mejora muchisimo los resultados, lamentablemente no tengo tiempo de rehacer las graficas y las conclusiones. Pruebenlo que ahora los resultados son mucho mas notables ;)

Hola audiencia de 48bits, hoy les voy a contar un poco sobre una cualidad que tienen ciertos entornos de virtualizacion, la cual podemos aprovechar para detectar los mismos.

El método que propongo esta basado en timing analysis, pero no sobre el tiempo de ejecución de determinadas instrucciones, sino que sobre los tiempos de acceso a memoria. Se han utilizado técnicas similares para detectar VMMs (incluyendo VT). Un método conocido es medir el tiempo de acceso a memoria con cache on/off, por lo general el VMM no permite desactivar el cache, entonces si ambas mediciones dan resultados similares significa que estamos dentro de un entorno virtual.

A diferencia de esa técnica, la manera que he encontrado no requiere ring0 y además es bastante sencilla. Claro que tiene ciertas limitaciones, no sirve para detectar cualquier VM, solo aquellas que implementen samepage merging (hasta ahora solo hice pruebas con KVM-KSM y VMware).

Supongo que tendré que explicar un poco en que consiste esto del samepage merging (desde ahora SM porque soy vago). El SM esta muy relacionado con el CoW (Copy on Write). Básicamente se trata de un thread que periódicamente recorre la memoria y une todas las páginas cuyo contenido es exactamente el mismo. Una vez unidas las páginas, el resto del proceso es exactamente un CoW, se comparte la misma page frame y se marca la página como read-only, cuando se intenta realizar una escritura, el manejador de excepciones se encarga de asignar una nueva página.

Este tipo de estrategia es bastante costosa por lo que no se suele utilizar sobre toda la memoria del sistema operativo. Sin embargo es muy tentador utilizarla en entornos virtualizados ya que se ahorran cantidades considerables de ram, el beneficio es máximo cuando se corren varios guests simultanea-mente.

En linux disponemos de KSM (Kernel Samepage Merging), este se puede activar y desactivar en el vuelo. Cualquier versión reciente de KVM saca provecho de KSM si se encuentra activado. La idea original sobre este tipo de tecnologías parece pertenecer a VMware y al parecer hubo ciertos problemas de patentes con KSM, lo importante a destacar es que si podemos aprovecharnos de KSM seguramente también podemos hacerlo de VMware.

Ya con todo esto un poco explicado, algunos deben estarse preguntando que pasaría si medimos los tiempos de acceso a memoria antes y después de que el KSM (o VMware) actue sobre la memoria del guest. Es justamente lo que vamos a averiguar ;)

Para logralo he escrito un PoC bastante cutre pero útil a nuestros propósitos. A continuación, el código (que no es muy bonito que digamos), y le sigue su descripción.

Nuevo PoC!

/*
 * smdetect.cpp
 *
 * Created by Daniel Fernandez (soyf...@48bits.com) on 19/03/2010
 *
 * Copyright (c) 2010  48BITS
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 *
 * Neither the name of the project’s author nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#include <iostream>
#include <cstdlib>
#include <sys/time.h>
#include <unistd.h>

#ifdef _WIN32
#include <windows.h>
#else
#include <sys/mman.h>
#endif

class Buffer
{
    int *buffer;
    unsigned int size;

    unsigned long long gettime()
    {
        struct timeval tv;

        gettimeofday(&tv, NULL);
        return ((unsigned long long) tv.tv_sec) * 1000000ULL +
                (unsigned long long) tv.tv_usec;
    }

public:

    enum Exceptions
    {
        ALLOC_FAILED,
        LOCK_FAILED,
    };

    Buffer(unsigned int sz, bool locking, unsigned int seconds) : size(sz)
    {
#ifdef _WIN32
        HANDLE hProcess(GetCurrentProcess());
        SIZE_T minws, maxws;

        buffer = (int *) VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);

        if (buffer == NULL)
            throw ALLOC_FAILED;

        if (locking == true)
        {
            GetProcessWorkingSetSize(hProcess, &minws, &maxws);
            SetProcessWorkingSetSize(hProcess, minws + size, maxws + size);

            if (VirtualLock(buffer, size) == 0)
                throw LOCK_FAILED;
        }
#else
        buffer = (int *) mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE |
                              MAP_ANONYMOUS, 0, 0);

        if (buffer == MAP_FAILED)
            throw ALLOC_FAILED;

        if (locking == true && mlock(buffer, size) == -1)
            throw LOCK_FAILED;
#endif
        for (unsigned int x(0); x != size/sizeof(int); ++x)
            buffer[x] = 0x443d3d38;
#ifdef _WIN32
        Sleep(seconds * 1000);
#else
        sleep(seconds);
#endif
    }

    ~Buffer()
    {
#ifdef _WIN32
        VirtualUnlock(buffer, size);
        VirtualFree(buffer, 0, MEM_RELEASE);
#else
        munmap(buffer, size);
#endif
    }

    unsigned long long measureWrite()
    {
        unsigned long long start(gettime());

        for (unsigned int x(0); x != size/sizeof(int); x += 4096/sizeof(int))
            buffer[x] = x;

        return gettime() – start;
    }
};

unsigned long long getTime(unsigned int bsize, bool locking,
                           unsigned int sleep_seconds = 0)
{
    Buffer buf(bsize, locking, sleep_seconds);
    return buf.measureWrite();
}

int main(int argc, char *argv[])
{
    unsigned int buffer_size(15*1024*4096);
    unsigned int sleep_time(60);
    unsigned int threshold(500);
    bool locking(true);
    char c;
   
    while ((c = getopt(argc, argv, "pm:s:t:")) != -1)
    {
        switch(c)
        {
        case ‘p’:
            locking = false;
            break;
        case ‘m’:
            buffer_size = (atoi(optarg) * 1024 * 1024) & ~4095;
            break;
        case ‘s’:
            sleep_time = atoi(optarg);
            break;
        case ‘t’:
            threshold = atoi(optarg);
            break;
        case ‘?’:
            std::cout << "\nOptions:\n"
                    << "-m size\t buffer size in Mb (default 60mb)\n"
                    << "-s time\t sleep time in second (default 60secs)\n"
                    << "-t num\t threshold (default 98)\n"
                    << "-p\t disable locking (default enabled)"
                    << std::endl;
            return -1;
        }
    }

    try
    {
        unsigned long long t1(getTime(buffer_size, locking));
        unsigned long long t2(getTime(buffer_size, locking, sleep_time));

        // avoid division by zero
        if (t1 == 0)
                t1 = 1;
       
        int variation((std::abs((long long)(t2 – t1))*100)/t1);

        std::cout << "First write:  " << t1
                << "\nSecond write: " << t2
                << "\nVariation:    " << variation << "%\n"
                << (variation >= threshold ? "VMM detected!" : "no VMM detected")
                << std::endl;
    }
    catch (Buffer::Exceptions e)
    {
        if (e == Buffer::ALLOC_FAILED)
        {
            std::cout << "Can’t alloc buffer, try with a smaller size (-m)\n"
                    "Or check your capabilities" << std::endl;
        }

        if (e == Buffer::LOCK_FAILED)
        {
            std::cout << "Can’t lock buffer, check your capabilities\n"
                    "Or use -p flag" << std::endl;
        }
    }

    return 0;
}
 

El código puede ser compilado con visual studio, y lo ideal es compilarlo para release.

Ahora se compila con: g++ -O3 smdetect.cpp -o smdetect
Funciona tanto en linux como en windows (mingw).

Ahora unas gráficas con los resultados en distintos entornos:

Las gráficas corresponden a 10 ejecuciones de smdetect por cada entorno. Si todo fuera perfecto deberían ser lineas horizontales, pero factores externos como la carga del sistema hacen variar bastante los resultados.

Se puede apreciar una diferencia notable entre los casos donde no hay VMM y en los que la hay. Un caso curioso se da con OSX, donde la diferencia es apenas un 100% estando más cerca de los resultados donde no hay VMM. Incluso en una prueba llego a dar ~30% lo cual lo hace un target muy dificil de detectar.

Mirando las gráficas y sin considerar OSX, podriamos establecer un umbral de 150% para la detección. Incluyendo los datos de OSX he decidido utilizar un 98%, aún asi pueden darse falsos negativos en OSX y un umbral tan bajo podría llegar a dar falsos positivos si se dan ciertas condiciones.

Conclushion!

Tenemos un nuevo método, que si bien no es 100% confiable, puede ser utilizado de forma práctica y es posible refinarlo mucho más. Una posibilidad es la utilización de heurísticas para ajustar el umbral en función a información sobre la carga del sistema. Otro tema pendiente es la enorme espera que hay que realizar entre mediciones, pero esto no creo que sea un impedimento para muchos autores de malware…

Aqui se acaba :)

PD: lo siento Javi y Marconi por meter otro post en tan poco tiempo (parece ser que siempre ocurre lo mismo, pueden pasar meses sin movimiento y luego abalancha de posts).

84 Comentarios para “Jugando con Samepage Merging” »»

  1. Comentario por Shaddy | 03/17/10 at 7:01 am

    muy buena tío, lo que me pregunto es como exactamente lo aplicarías para una detección de entorno virtualizado (sin tener acceso al host). Porque meter “hardcodeado” un rango de estadísticas de un entorno virtualizado puede llegar a implicar que en máquinas antiguas se detecten como virtualizadas, no? Quiero decir, que es un método válido para X máquina en contreto . . .

    Un saludo ;) .

  2. Comentario por Mario Vilas | 03/17/10 at 9:44 am

    Para lo que pregunta Shaddy, se me ocurre que en vez de detectar estadisticas harcodeadas se puede tratar de relacionar la media de variaciones con la velocidad del procesador, que tambien es medible. Pero no estoy tan ducho en matematicas como para proponer algo en concreto. :)

    Offtopic, de donde salio el capcha? Recien tuve que tipear la palabra “chalchichon” :D :D :D

  3. Comentario por erg0t | 03/17/10 at 10:00 am

    @Shaddy, si te fijas, lo que se mide es la variacion en los tiempos, no los tiempos en si. Es decir no importa la velocidad del procesador la relacion se va a mantener igual. Si el procesador es mas lento ambas mediciones van a dar mas counts pero la diferencia entre la primera y segunda medicion se va a mantener igual.

    Si hay una diferencia considerable, digamos de un 80% para arriba podriamos decir que estamos en una VM. Tambien se podria calcular mas de una vez por si llegara a ocurrir algo como el pico en la grafica que comente, aunque es poco probable pero ya con tomar las medidas por lo menos dos veces las posibilidades de un falso positivo serian practicamente nulas.

  4. Comentario por Karcrack | 03/17/10 at 9:51 pm

    Muy interesante el tema =D

    A ver si consigo hacer un par de test en un par de maquinas viejas que tengo por casa, ya os contaré! ;D

  5. Comentario por Shaddy | 03/18/10 at 4:39 am

    Entonces la idea es determinar el entorno en función de la varianza estadística?

  6. Comentario por erg0t | 03/18/10 at 10:14 am

    @Shaddy, si algo asi. Si miras la ultima grafica vas a ver que las variaciones en el caso de no-VM son muy pequeñas, en cambio en el caso de VMWare y KVM-KSM son bastante grandes (inclusive mucho mas de lo que parece en la grafica, ya que la grafica es un promedio de la variacion de las 3 medidas, y el segundo read tiene una variacion ~0% por lo cual bajo bastante el promedio).

  7. Comentario por Dreg | 03/21/10 at 8:18 pm

    mu chulo tio

  8. Comentario por Putex | 03/25/10 at 10:57 am

    Oye espero con ansiedad un articulo sobre los Futex, que se nos estan atragantando!!

  9. Comentario por Photography Tips | 11/17/10 at 1:23 pm

    Si miras la ultima grafica vas a ver que las variaciones en el caso de no-VM son muy pequeñas, en cambio en el caso de VMWare y KVM-KSM son bastante grandes

  10. Comentario por Spelling Bee | 11/17/10 at 4:17 pm

    Definitely cool. There is the caveat that it will not work to style arbitrary content, since you need to know the text content of the element and be able to rely on it being fixed. That’s a shame, as it’d be fun to use on page headings and navigation, but it’s still great for applying to branding areas. thanks

  11. Comentario por cna certification | 11/21/10 at 11:42 am

    …. independientemente de la relación de la velocidad del procesador seguirá siendo el mismo, si el procesador es más lenta que las dos medidas se dan más cuenta, pero la diferencia entre la medición primera y la segunda seguirá siendo el mismo … También se puede calcular una vez, si algo llegara a suceder, como el pico en la gráfica para comentar, aunque es poco probable, pero las medidas ya adoptadas a lo menos dos veces la probabilidad de falsos positivos es virtualmente cero.

  12. Comentario por air compressors for sales | 02/03/11 at 4:07 pm

    Great sharing! Thanks for your information. I would also like to share you my articles about air pump and air compressor, hope you will like it.

  13. Comentario por air pumps for sales | 02/03/11 at 4:08 pm

    I would also like to share you my articles about air pump and air compressor, hope you will like it.

  14. Comentario por forex | 02/16/11 at 12:08 pm

    Nice post! Thank you so much for the article! I would also like to share you my articles about air pump and air compressor, hope you will like it. Thank’s!

  15. Comentario por hentai games | 03/02/11 at 6:31 pm

    These information are very useful. Really, I want this technologies gives more knowledge. Genetic engineering mostly used in developed country but that times its technology used other develop countries.

  16. Comentario por New Hairstyles 2013 | 03/03/11 at 10:53 am

    @ Shaddy, si te Fijas, Lo Que SE MIDE es la Variación en Los Tiempos, no se si en Los Tiempos. Es Decir no importa la Velocidad del Procesador la relacion sí va a igual mantener. Si es Procesador El Mas lento embajadores Mediciones una camioneta mas dar cuenta Pero La Diferencia Entre la medicion de primera Segunda y sí va a igual mantener. Having been an actor and a writer for so long – 20 years or so – I felt that it would be daft to go to one’s grave without having directed. It’s a natural extension of writing and acting, and so I knew it would happen one day.

  17. Comentario por san diego printers | 03/04/11 at 10:03 pm

    I usually commit those mistakes especially when in front of the computer where I don’t really think of anything else but what’s on the screen.thnx

  18. Comentario por android casino | 03/04/11 at 10:07 pm

    This is a good articles for all the girls who act needy to their boyfriend. They nned to spend their time too with their friend. They not live only for you

  19. art
    Comentario por art | 03/07/11 at 8:46 am

    Lovely blog for me. I always search for these type of topics and I would like to read a bit more about this topic. Thanks for posting the nice information.

  20. Comentario por love quotes | 03/07/11 at 3:21 pm

    Really nice and interesting post. I was looking for this kind of information and enjoyed reading this one. Keep posting. Thanks for sharing.

  21. Comentario por  San Diego Real Estate | 03/15/11 at 2:26 pm

    You have some good points there. I did my own search on the area and found the majority people will see eye to eye with your weblog. Thanks once more for taking the time to put this online. I unquestionably liked every bit of it.

  22. Comentario por  San Diego Real Estate | 03/15/11 at 2:28 pm

    The existence of Waffle House on this list cements my new found love of Garden and Gun. Thanks for realizing that the true soul of the South encompasses a world from the fine dining at Galatoires to the late night craving-fulfilling of Waffle House.

  23. Comentario por stamped concrete patios | 03/22/11 at 8:56 pm

    This is what I thought too, but is now looks like some are wrong and some are right. Oh well, you win some and you lose some that’s life I guess.

  24. Comentario por Jacob | 03/27/11 at 2:17 pm

    Tenemos un nuevo método, que si bien no es 100% confiable, puede ser utilizado de forma práctica y es posible refinarlo mucho más. Una posibilidad es la utilización de heurísticas para ajustar el umbral en función a información sobre la carga del sistema.

  25. Comentario por waiting room furniture | 03/28/11 at 2:58 pm

    Yea I agree if you concentrate you can figure out the problem. Also references will help as well.

  26. Comentario por hotels near disneyland | 03/30/11 at 2:43 am

    Very nice blog for me. I bump on this site on search and I would like to read a bit more about this topic. Thanks for posting the nice information.

  27. Comentario por SpinPro | 03/31/11 at 3:35 pm

    The art work for this album is simply amazing. Ramon is a great artist. In fact, I think he is like every artists should be out there. A lot of talent in both music making and also art work.

  28. Comentario por Gary Corbett | 04/03/11 at 6:52 am

    Nice explanation. i always stuck with CSS. i want to do with CSS but i am zero in it. i have design dozens of site using tables. can you point me place i can easily learn css

  29. Comentario por Austin dwi lawyers | 04/05/11 at 4:42 pm

    It is just what I was looking for and quite thorough as well. Thanks for posting this, I saw a couple other similar posts but yours was the best so far. The ideas are strongly pointed out and clearly emphasized. Thanks for sharing your thoughts and ideas on this one. Please keep posting about such articles as they really spread useful information.

  30. Comentario por wallsrteet forex robot | 04/05/11 at 9:38 pm

    Nice post! Thank you so much for the article! I would also like to share you my articles about air pump and air compressor, hope you will like it.

  31. Comentario por wallsrteet forex robot | 04/05/11 at 9:52 pm

    The existence of Waffle House on this list cements my new found love of Garden and Gun.

  32. Comentario por San Diego Printing | 04/08/11 at 11:44 am

    Brilliant post and useful information Looking forward to future posts in this field thanks A very interesting article, interesting ideas and a lot of good questions posed Thanks for your insight for the great written piece.

  33. Comentario por san diego printers | 04/08/11 at 7:57 pm

    This is a good post. This post gives truly quality information. I’m definitely going to look into it. Really very useful tips are provided here. thank you so much. Keep up the good works

  34. Comentario por architectural photographer | 04/09/11 at 12:24 pm

    I am definitely tired of struggling to find relevant and intelligent commentary on this subject.

  35. Comentario por traprenovatie kosten | 04/10/11 at 3:45 pm

    I recently came across your blog and have been reading along. I thought I would leave my first comment. I don’t know what to say except that I have enjoyed reading. Nice blog, I will keep visiting this blog very often.

  36. Comentario por beach house designs | 04/11/11 at 9:02 am

    Thanks for sharing these ideas guys!

  37. Comentario por bali house, | 04/11/11 at 9:11 pm

    Thanks for informative and helpful post, obviously in your blog everything is good.If you post informative comments on blogs there is always the chance that actual humans will click through.

  38. Comentario por Bali Realty | 04/13/11 at 6:03 am

    I was very pleased to find this site.I wanted to thank you for this great read! Hope that you will keep updating us in the same way with some more stuff. Keep up the good work and I have bookmark your site for future updates.

  39. Comentario por answers | 04/14/11 at 10:57 pm

    I could say that this is awesome articles, really great representation that may benifit viewers like me. I would love to subscribe to your site to receive updates and to share more about our land for sale details.

  40. Comentario por Austin Homes for Rent | 04/19/11 at 3:14 pm

    No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant pos

  41. Comentario por Abbreviations | 04/20/11 at 9:07 am

    Thanks for sharing this and I’ll be visiting back for more technical updates on this blog.

  42. Comentario por Love horoscope for today | 04/20/11 at 9:09 am

    I wonder if you’re interested in the Geeklog platform which is kinda awesome for your CMS. Just a thought.

  43. Comentario por Austin MLS | 05/04/11 at 12:12 pm

    It is nice to find a site about my interest. My first visit to your site is been a big help. Thank you for the efforts you been putting on making your site such an interesting and informative place to browse through. I’ll be visiting your site again to gather some more valuable information. You truly did a good job.

  44. Comentario por Nikon D3100 Review | 05/05/11 at 8:24 pm

    Si miras la ultima grafica vas a ver que las variaciones en el caso de no-VM son muy pequeñas, en cambio en el caso de VMWare y KVM-KSM son bastante grandes. Great Post!!

  45. Comentario por hairstyles | 05/05/11 at 9:23 pm

    Great, Yeah right it you be the best thing that you should do.

  46. Comentario por Apartments for rent Ottawa, Ontario | 05/07/11 at 12:40 pm

    I just found this blog and have high hopes for it to continue. Keep up the great work, its hard to find good ones. I have added to my favorites. Thank You.

  47. Comentario por depilação | 05/07/11 at 3:07 pm

    this post really opened my eyes. it is not only eye opening rather very beneficial for the people those who want to do something good in

  48. Comentario por Nikon D3100 Review | 05/07/11 at 8:33 pm

    Tenemos un nuevo método, que si bien no es 100% confiable, puede ser utilizado de forma práctica y es posible refinarlo mucho más.

  49. Comentario por HCG Diet | 05/09/11 at 7:59 am

    Many thanks for the article and for those complaining they cannot translate there are some free translation software on the web, please take time to find it rather than moan just to get a link on a site

  50. Comentario por cheap camping tents | 05/09/11 at 11:37 pm

    I found numerous helpful stuff in your weblog especially the ongoing dialogue. From the tons of comments on your posts, I suppose I’m not the only person having fun in reading your website. Carry on the great work.

  51. Comentario por Austin Houses for Sale | 05/10/11 at 5:55 am

    The post is written in very a good manner and it entails many useful information for me. I am happy to find your distinguished way of writing the post i will be happy to see you writing. Now you make it easy for me to understand and implement the concept. Thank you for the post. really a great efforts.

  52. Comentario por nitin | 05/10/11 at 10:23 am

    I like this wonderful report and the main thing that this topic was finally covered here, at this web!

  53. Comentario por Cheap Cigarettes online | 05/10/11 at 7:15 pm

    Amazing!I also wish him good luck to defend his gold medal.I like to share it with all my friends and hope they will also encourage him.

  54. Comentario por clubmz espy | 05/11/11 at 7:35 am

    I loved as much as you will receive carried out right here. The sketch is tasteful, your authored subject matter stylish. nonetheless, you command get got an impatience over that you wish be delivering the following. unwell unquestionably come further formerly again as exactly the same nearly very often inside case you shield this increase…..

  55. Comentario por Best Real Estate Websites | 05/11/11 at 3:04 pm

    I picture this might be diverse upon the written content material? then again I still consider that it is usually suitable for nearly any form of matter subject matter, as a result of it will incessantly be gratifying to determine a warm and pleasant face or possibly pay attention a voice while initial landing.

  56. Comentario por car valuation | 05/12/11 at 9:45 pm

    It is a must read article and very informative for a developer and learner. I should bookmark the post for its relevance. Thanks for the nice work.

  57. Comentario por thermal imaging | 05/12/11 at 10:04 pm

    This is just the information I am finding everywhere.Me and my friend were arguing about an issue similar to this! Now I know that I was right.Thanks for the information you post. I just subscribe your blog. This is a nice blog.

  58. Comentario por ankle braces | 05/16/11 at 8:06 pm

    He estado buscando esta información durante un par de esto, gracias por compartir.

  59. Comentario por adult toy Tampa | 05/17/11 at 5:12 am

    Oh I love all of these! Especially because they are so simple and beautiful yet have a cool edge.

  60. Comentario por sukhumvit apartment | 05/18/11 at 5:46 am

    nice post|really a great post and i really wants to share this on twitter and facebook. i found it from Google.thanks for share this useful information. keep it up buddy..

  61. Comentario por Sukhumvit condo | 05/18/11 at 5:47 am

    A lot of interesting things found on your blogs, like the topic! The author thanks and success in the blog!

  62. Comentario por condo sukhumvit | 05/18/11 at 5:49 am

    I really enjoyed your article. Excellent and really helped me. Congratulations.

  63. Comentario por Inflatable pools | 05/22/11 at 10:59 pm

    Awesome info! keep it up!

  64. Comentario por sheffield seo | 05/28/11 at 12:13 am

    As mostly in many blog I found information is very vast but they are not stick to main point so that lose user attention .If they keep focus on main topic then they got huge potential traffic

  65. Comentario por Georgetown Roofing Contractor | 05/28/11 at 2:40 pm

    Excellent is the only word i can give u for this wonderful blog, keep it up. I will come back again to read some more interesting things on this topic

  66. Comentario por mms2 | 05/29/11 at 6:30 pm

    I think the world will be a better place to live if we can have more people like this which is not only care for their own best interest but also helping others in those less fortunate areas.

  67. Comentario por Whirlpool Baths | 05/30/11 at 7:03 am

    This is a very attractive segment, gave me a lot of help, thank you for sharing, hope you can update more and better stories.

  68. Comentario por Short Hairstyles 2011 | 06/07/11 at 4:20 pm

    Thanks for this excellent and worth sharing post. Kudos!

  69. Comentario por land for sale | 06/20/11 at 3:23 pm

    before coming to this article i went end no of articles but things i foun d here are really interesting and a matter of great interest.this blog vtotally satisfied me.comments on it are execellent.

  70. Comentario por Real Estate Austin TX | 06/21/11 at 5:42 pm

    This is a very well information think to you.

  71. Comentario por land for sale | 06/21/11 at 9:43 pm

    we people that is people of today’s world are very busy we don ‘t even had i time to read article like that of you. fantastic thoughts i got after reading it and i am full of positive energy.

  72. Comentario por Cerbral Plasy | 02/02/12 at 12:20 am

    Wow! This can be one of the most helpful blogs we’ve ever come across on thesubject. Actually magnificent post! I am also an expert in this topic so I can understand your effort.

  73. Comentario por Fan Parts | 02/02/12 at 7:49 am

    Este es un gran recurso que está proporcionando y lo dan de forma gratuita. Me encanta ver a los sitios web que entender el valor de proporcionar una información de calidad. Gracias por compartir.

Trackbacks/Pingbacks »»>

  1. [...] Ehrinn Cummings Elena Lyons Elisabeth Röhm Elisha Cuthbert Posted in Uncategorized [...]

  2. [...] Brittany Snow Brittny Gastineau Brody Dalle Brooke Burke [...]

  3. Pingback por Usher – Moving Mountains | 05/12/11 at 9:48 am

    [...] Haylie Duff Heidi Klum Heidi Montag Hilarie Burton Posted in Uncategorized [...]

  4. Pingback por Justin Bieber, Bruno Mars, Muse Added To Grammy Show | 05/12/11 at 9:53 am

    [...] Grace Park Gretha Cavazzoni Gwen Stefani Halle Berry Posted in Uncategorized [...]

  5. [...] EMULEX EMS TECHNOLOGIES EMC ELECTRONICS FOR IMAGING This entry was posted in Uncategorized. Bookmark the permalink. ← The Metal War Cloud over Libya [Image Cache] [...]

  6. [...] Frederic Bolley Xavier Boog Damon Bradshaw [...]

  7. [...] Asami Giuseppe Ascareggi Franz Aschenbrenner   Leave a [...]

  8. Pingback por Heidi Klum & Kids: New York City Stroll | 06/18/11 at 9:35 pm

    [...] Love Hewitt Jennifer Morrison Jennifer ODell Jennifer Scholle Posted in [...]

  9. Pingback por Amber Portwood: Released From Hospital « lizahardam | 06/18/11 at 9:37 pm

    [...] Nielsen Cristina Dumitru Daisy Fuentes Dania [...]

  10. [...] Harris Deanna Russo Denise Richards Desiree Dymond Posted in [...]

  11. [...] Alonso Danneel Harris Deanna Russo Denise Richards Posted in [...]


Dejar un comentario »»