Tuesday, June 16, 2015

Dude, where’s my heap?

Or: Bypassing High-Entropy Bottom-Up Randomization in Windows 8 by abusing IE’s Memory Protection

Note: This is a copy of a blog post that was originally published on the Google Project Zero blog.

The ability to place controlled content to a predictable location in memory can be an important primitive in exploitation of memory corruption vulnerabilities. A technique that is commonly used to this end in browser exploitation is heap spraying: By allocating a large amount of memory an attacker ensures that some of the allocations happen in a predictable memory region. In order to break this technique, in Windows 8 Microsoft introduced High Entropy Bottom-Up Randomization. Essentially, it introduces 1TB of variance in start address of heap (as well as stack and other allocations) in 64-bit processes. In a traditional heap spraying scenario, this would mean that the attacker needs to allocate over 1TB of memory in order to place content at a predictable location which is infeasible on today’s computers. Internet Explorer 11 (as well as various other 64-bit processes on Windows 8) employs this mitigation whenever it uses a 64-bit tab process (such as in Metro mode or with Enhanced Protected Mode turned on).

Internet Explorer also introduced another mitigation called MemoryProtector in order to prevent exploitability of use-after-free vulnerabilities. The two mitigations are not meant to be related. However, somewhat unexpectedly, one can be (ab)used to bypass the other. In one sentence, it is possible to use a timing attack on MemoryProtector to reveal the offset used by High-Entropy Bottom-Up Randomization, thus completely bypassing it.

The Issue

MemoryProtector is intended to prevent exploitation of a certain kind of use-after-free vulnerabilities. Since details of the mitigation have already been published in various places (such as here), only the bare essentials sufficient to understand the issue will be given here. Simplified, MemoryProtector prevents exploitability of use-after-free vulnerabilities in which a pointer to a freed object is kept on the stack. This is a common situation in web browsers caused by the code such as

Node* node = getNodeFromSomewhere();
fireJavaScriptCallback(); // kills node

In the example above, a pointer to the Node object is obtained and stored in a local variable (on stack). After that, a function is called which ends up causing JavaScript callback. Attacker-controlled code in the JavaScript callback causes node to be deleted, but after the control flow returns to the code above, the node is referenced after being deleted (use-after-free condition).

MemoryProtector works by preventing the object (Node in the example above) from being freed if its address can be found on the stack (in the node variable in the example above). If MemoryProtector is enabled, for certain classes, deleting won’t free the memory right away - it will only zero it out. Once the size of those freed-but-not-really objects reaches a certain threshold, MemoryProtector will scan the stack and identify which of these objects have their addresses on the stack. Those that do not will be deleted. The others are left untouched and will be considered again during the next stack scan. Thus it is ensured that no object gets freed while its address is on the stack.

To demonstrate the issue that enables us to defeat High-Entropy Bottom-Up Randomization several observations need to be made. The first observation is that, when scanning the stack, MemoryProtector cannot differentiate between addresses and other types of data on the stack. Thus, it will treat all data on the stack (such as, for example, user-controlled double-precision numbers or 64-bit integers) as addresses. Since some of this data can be attacker-controlled, an attacker can deliberately place something that looks like an address on the stack and prevent an object located at that address from being freed. In fact, an attacker might be able to place multiple addresses on the stack and prevent freeing of objects at any of those addresses. By itself this isn’t very dangerous - it can cause memory exhaustion and not much else.

The second observation to make is that freeing memory takes time, especially for large (such as 1MB used by the PoC) objects where free/delete ends up calling VirtualFree. The time is sufficiently large to observe a difference between the time it takes to free a large object and attempting to delete an object without actually freeing it (which happens with MemoryProtector) if the address of the object is present on the stack during the delete attempt.

This is demonstrated in Figure 1. Notice that for memory range [0x9ddc000000, 0x9de0000000] the time it takes for MemoryProtector to run is much less than for other ranges because the block doesn’t get freed during the run. Also notice that the next run takes longer than average. This is because during this run two blocks are freed (one from the current run and one from the previous one).

Figure 1.

Thus by spraying the stack with a range of possible addresses and then triggering a free and measuring the time it takes to free (or not) the object, it is possible to determine if the object was allocated in the given address range or not. If an address of the object is detected, the attacker will also learn the approximate offset used by High Entropy Bottom-Up Randomization and will be able to predict addresses used by future (or past) allocations.

Description of the Exploit

There are several hoops to jump through in order to exploit the issue. The first one is placing controllable data on the stack. Standard stack spraying techniques such as using a JavaScript function with a lot of local variables or calling a JavaScript function with a lot of arguments don’t actually work because JavaScript variables in IE are stored in a packed format which makes it difficult to have a variable whose representation could also be mistaken for an address (that is, different than the address of a variable itself). However, I have observed that during some numeric computations, such as multiplication, JavaScript engine will place intermediate results in a native double format on the stack. It is trivial to create double-precision numbers that will look like addresses in the required range (0x0000000000 to 0x10000000000).

The second issue is reducing the search space because we don’t want to have to try out all addresses in the lower 1TB range. Since we will be using a large allocation (allocated using VirtualAlloc) it is known that the allocation will be made on 0x1000 boundary (in Windows 8). Thus there are ‘only’ 0x10000000 possibilities. Note also that for each experiment we can place multiple values on the stack at once. The current PoC can test 0x4000 possibilities in one experiment, thus also reducing the number of required experiments to 0x4000 (16K). If each experiment allocates 1M of memory, this means that all experiments allocate a total of 16GB of memory throughout a single PoC run. However note that these allocations are not needed at the same time, in fact only two 1M allocations are needed at any given time plus some stack space and other smaller heap allocation made by the PoC. Thus the PoC should run fine even on machines with very low amount of free RAM.

The next issue is triggering MemoryProtector at the desired time. By looking at the code of MemoryProtection::CMemoryProtector::ReclaimMemory() function, it is easily determined that MemoryProtector triggers after more than 100000 bytes of memory is freed. This is fine because we’ll use an allocation larger than that anyway. In the PoC, MemoryProtector is triggered by first setting the ‘title’ property of a Button HTML element to a large (1MB) string and then to a small string. If the address of a large string is not found on a stack when MemoryProtector is triggered, it will get freed. Otherwise, it will get freed next time MemoryProtector runs if the allocation address is no longer on the stack.

We also need a way to measure time precisely since the times involved will be in sub-millisecond intervals. Fortunately, we can use performance.now() API which is supported in Internet Explorer for this.

The full PoC can be found here.

Reproducing the Issue

To reproduce the issue you first need to ensure that IE runs tab process in 64-bit mode. There are several ways to accomplish this. Probably the easiest is to open the PoC in IE in Metro mode where 64-bit tab process is used by default. In desktop mode 64-bit is still not the default (though presumably this will change at some point in the future). But you can have 64-bit tab processes in desktop mode as well either by making IE run in a single process mode or enabling Enhanced Protected Mode.

You can make IE run in a single process mode by setting TabProcGrowth registry key to 0, however note that this should never be used when browsing untrusted websites and opening untrusted files as it disables the IE sandbox.

The recommended way to run IE in 64-bit mode is to enable Enhanced Protected Mode,  which can be done by changing Internet Options -> Advanced -> Security -> ‘Enable Enhanced Protected Mode’ and ‘Enable 64-bit processes for Enhanced Protected Mode’. Not only will this enable additional mitigations that can be found on 64-bit Windows but will also enable additional sandboxing features, so I fully recommend that users run IE like this.

Note however, that when Enhanced Protected Mode is enabled, you’ll need to open the PoC in the Internet Zone because Enhanced Protected Mode does not get applied to Local intranet and Trusted sites (including local files). If successful, you should see processes like this when opening the PoC.

Figure 2.

Note: It’s also possible to run the PoC in 32-bit mode with some changes. You need to replace the line ‘o.cur = min + 0x40;’ with ‘o.cur = min + 0x20;’ and the line ‘var max = 0x10000000000;’ with ‘var max = 0x100000000;’. However note that High Entropy Bottom-Up Randomization doesn’t get applied to 32-bit processes so all allocations should (predictably) happen in a low memory range.

After you have the test environment set up, just click “Dude, where’s my heap?” button on the PoC and wait. The entire run of the PoC takes about 30 seconds on a reasonably modern computer.

After the test run finishes, you should see the detected allocation memory range as well as detailed output of memory ranges sorted by time it took to run the experiment. By opening IE process in your favorite debugger you should be able to verify that memory allocations do indeed happen in the detected range. This is demonstrated in Figure 3.

Figure 3.

The PoC currently uses a very simple heuristics to detect if the run was successful - there needs to be a single memory range for which the run time is faster than for all other runs by at least a threshold %. Note that this PoC is made just for demonstration purposes and there are likely ways to make the poc both faster and more reliable. It could be made more reliable for example by repeating the experiments for the small number of best candidates (and possibly adjacent ranges) to verify the result or repeating the entire run if the result can’t be verified. It could also be made faster by breaking early if a good candidate is found in one of the experiments (expected to reduce the run time by half on average), by finding a way to put more user-controlled data on the stack or possibly by incorporating some other insight about the entropy of bottom-up randomization.

Vendor response

The issue was reported to Microsoft on January 19th in the context of the Mitigation Bypass Bounty program. The initial response (on January 28th) was that the “submission meets Microsoft’s criteria for the Mitigation Bypass” and “has novel elements”. On April 23rd (~3 months later) I was notified that “investigation determined the effort involved to ship a fix, that enabled MemoryProtect to not allow ASLR bypass down level, would be a significant amount of resources (and possible regression risk) for an issue primarily applicable to a non-default configuration” and Microsoft “will explore ways to mitigate this problem in the next version of our product”. MSRC noted this decision was based on the facts that “64-bit IE is a non-default configuration” and “MemoryProtect has led to a significant overall decrease of IE case submissions”. Thus the issue is still unfixed.

Potential collision with HP Security Research

On February 5th (2 weeks after I sent my report to Microsoft) HP Security Research announced that they also received a Mitigation Bypass bounty from Microsoft. In addition to other attacks they mention that “attacker can use MemoryProtection as an oracle to completely bypass ASLR” which leads me to believe that there is a partial (but not complete, judging by the Microsoft response) overlap between our research.

The details of HP’s research are unknown at this time but if I had to guess, I’d say they were using the same basic principle to map the free memory of a 32-bit process. By finding which memory regions are already allocated (addresses where the attacker can’t allocate memory on) it might be possible, based on the allocation address and size, to tell which of these allocations were made by executable modules.


Both High-Entropy Bottom-Up Randomization and MemoryProtector are really useful mitigations. Without MemoryProtector or in scenarios where the attacker does not have the same amount of control as in a web browser, High-Entropy Bottom-Up Randomization is an efficient defense against heap spraying and similar techniques. Similarly MemoryProtector is an efficient defense for use-after-free vulnerabilities where the object reference is kept on the stack. While it might be possible to bypass it in specific scenarios, it renders a large number of vulnerabilities unexploitable.

It is only when these mitigations come together in an environment with a lot of control given to the attacker, including control over the stack and heap allocation as well as the ability to accurately measure time, that the problem manifests. For what it is worth I agree that fixing the issue would be very difficult without making serious compromises because it basically exploits how the mitigations in question work as intended. Microsoft has a tough job if they indeed want to fix this issue in the future.

As new mitigations grow both in number and complexity this might not be the last time we see them interacting in unexpected ways.


Sathya G said...

Thank you for taking the time to provide us this valuable information. we appreciate you for this valuable information
Informatica Training in Chennai Thiruvanmiyur

Abiya Carol said...

Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.

ccna training in chennai guindy

Maani kamili said...

I simply couldn’t depart your site before suggesting that I really enjoyed the usual information an individual supply in your visitors? Is going to be again steadily to check out new posts.

Web development company in Chennai

aliya seen said...

Your blog provided us with valuable information to work with. Each & every tip of your post is awesome. wordpress support services

Xplorant Seo said...

Wonderful blog.. Thanks for sharing informative blog.. its very useful to me..

iOS Training in Chennai

Hammed said...

I just see the post i am so happy to the communication science post of information's.So I have really enjoyed and reading your blogs for these posts.Any way I’ll be replay for your great thinks and I hope you post again soon....

SEO Company in Chennai

vinu priya said...

Wonderful blog.. Thanks for sharing informative blog.. its very useful to me.. iOS App Development Company in India

Sanjana sekar said...

This post is really nice and informative. The explanation given is really comprehensive and informative...
Security alarm in Chennai

Abiya Carol said...

Such a great articles in my carrier, It's wonderful commands like easiest understand words of knowledge in information's.

AWS Training in Chennai

Anil Gupta said...

I am very happy when read this blog post because blog post written in good manner and write on good topic. Thanks for sharing valuable information.
Bangalore Web Designing Company, Web Development Company Bangalore

Akshaysri said...

This is an awesome post.Really very informative and creative contents. These concept is a good way to enhance the knowledge.I like it and help me to development very well.Thank you for this brief explanation and very nice information.Well, got a good knowledge.
Australia Education Consultants in Chennai

Thamizharasi J said...

Very nice post here thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.

Fresher Jobs in Chennai
Fresher Jobs in Delhi
Fresher Jobs in Bangalore
Fresher Jobs in Kolkata

Prasanth said...

Good work…unique site and interesting too… keep it up…looking forward for more updates. It is very informative on subject or topic.
UI UX Design Companies in Bangalore, Web Application Development in Bangalore

kumar said...

Firstly I want to say thanks for the useful information that you are giving here on this post. Every time I come to this site, I always walk away with a lot of new knowledge.
Engineering Colleges, Mechanical Engineering Colleges in Chennai

Philips Huges said...

Thanks admin for sharing the unique content, you have done a great job

Installment loans in Mississippi
Payday loans in Mississippi
Title loans in Mississippi

Thomas Driscoll said...

The exercises which they don't have any know how and this will make them a hazardous people for the general society. Training makes an ignorant individual more ready to teach themselves.wordpress survey plugin

Earmold Sydney said...

cute blog with colourful images, really I appreciate your works. All the articles are very interesting to read
Ear plugs for Sleeping
Musicians Earplugs
Motorcycle Ear Plugs
Ear Plugs for Swimming
Custom Ear Plugs

Swati Bhatt said...

Nice article you have been posted, It's very informative and helpful. Thanks for sharing it.internet security

Philips Huges said...

Its a wonderful post and very helpful, thanks for all this information. You are including better information regarding this topic in an effective way.Thank you so much

Installment loans in alabama
Payday loans in alabama
Title loans in alabama
Cash Advances in alabama

Anonymous said...

Thank you for this great article.keep more updates.
Digital marketing company in Chennai

Isabella Olivia said...

This information is impressive; I am inspired with your post writing style & how continuously you describe this topic.

Pawn Shop

Pawn Loans

Pawn Shops

Pawn Loan

Pawn Shop near me

Avantika joy said...

Thanks for appreciating. Really means and inspires a lot to hear from you guys.I have bookmarked it and I am looking forward to reading new articles. Keep up the good work..Believe me, This is very helpful for me.
Pimple Treatment
Pigmentation Cream
Acne Cream

Asharaf said...

This blog is having the good information. Got a creative work and this is very different one.We have to develop our creativity mind.This blog helps for this.Thank you for this blog.This is very interesting and useful.

Self Employment Tax
Tax Preparation Services
Tax Accountant
Tax Consultant
Tax Advisor

Mrs Sharon Sim said...

Hello Everybody,
My name is Mrs Sharon Sim. I live in Singapore and i am a happy woman today? and i told my self that any lender that rescue my family from our poor situation, i will refer any person that is looking for loan to him, he gave me happiness to me and my family, i was in need of a loan of S$250,000.00 to start my life all over as i am a single mother with 3 kids I met this honest and GOD fearing man loan lender that help me with a loan of S$250,000.00 SG. Dollar, he is a GOD fearing man, if you are in need of loan and you will pay back the loan please contact him tell him that is Mrs Sharon, that refer you to him. contact Dr Purva Pius,via email:(urgentloan22@gmail.com) Thank you.

WordPar said...

Good work…unique site and interesting too… keep it up…looking forward for more updates.Good luck to all of you and thanks so much for your hard-work.
subtitling company in bangalore, subtitling services india


Hello Everybody,
My name is Mrs Sharon Sim. I live in Singapore and i am a happy woman today? and i told my self that any lender that rescue my family from our poor situation, i will refer any person that is looking for loan to him, he gave me happiness to me and my family, i was in need of a loan of S$250,000.00 to start my life all over as i am a single mother with 3 kids I met this honest and GOD fearing man loan lender that help me with a loan of S$250,000.00 SG. Dollar, he is a GOD fearing man, if you are in need of loan and you will pay back the loan please contact him tell him that is Mrs Sharon, that refer you to him. contact Dr Purva Pius,via email:(urgentloan22@gmail.com) Thank you.

rohan rj said...

I truly appreciate this post.The design of the home is very beautiful. I am very lucky to be able to come to see your weblog.Keep up the good work. fire watch

Ancy merina said...
This comment has been removed by the author.
Karqa said...

Thank you very much for your good blog
Bedava Sohbet Et
Sohbet Et
Chat yap
Sohbet Siteleri
irc sohbet
mirc Sohbet
Üyeliksiz Sohbet
Canlı Sohbet
Sohbet Chat
Sohbet Siteleri
Sohbet Odalari
Seviyeli sohbet
Yazışma Siteleri
Yetişkin sohbet Siteleri

ramshu271 said...

I am very happy when read this blog post because blog post written in good manner and write on good topic.
Thanks for sharing valuable information.
Web Design Company Bangalore,
Digital Marketing Company

CIIT Noida said...

Nice looking sites and great work. Pretty nice information. it has a better understanding. thanks for spending time on it.

Best Industrial Training in Noida
Best Industrial Training in Noida

CIIT Noida said...

It was excellent and really informative.I also like composing something if my downtime. So I could find out something from your write-up. Thanks.

Best BCA Colleges in Noida

Jack Adok said...

Thanks for sharing these information. It’s a very nice topic. We are providing online training classes

Best Cartoon Picture Apps
Best Caller ID Apps
Fighting Games for Android
Call Recorder Apps

Burak özdil said...

mobil sohbet
mobil chat
mobil sohbet odalari
mobil sohbet siteleri
cep sohbet
bedava sohbet
ücretsiz sohbet
ücretsiz sohbet siteleri
ücretsiz sohbet odalari
Sohbet ücretsiz
bedava sohbet
bedava sohbet odalari
bedava sohbet siteleri
bedava sohbet chat
mobil chat
mobil sohbet
mobil chat siteleri
chat mobil
Sexsi sohbet
Sexs sohbet
Sex sohbet
cinsel sohbet
islami sohbet
islami sohbet odalari
islami sohbet siteleri
islami sohbeti
dini sohbet
dini sohbet odalari
dini sohbet siteleri
dini sohbeti
Telefon sohbet
Telefonda sohbet
mobil sohbet
sohbet odalari
sohbet siteleri

Sania khan said...

This blog was... how do you say it? Relevant!! Finally I've found something which helped me. Cheers! sad poetry about love

Usman Abbaxi said...

Good work…unique site and interesting too… keep it up…looking forward for more updates.

Ortamim.Com said...

Türkiye’nin en popüler arkadaşlık ve sohbet ortamı.

Twinkle said...

Nice post. It is really interesting. Thanks for sharing the post!
Domain Registrar In India, Check domain availability, Domain Transfer And Renewal In India, Website Creation Company In India, Web Design Company In India, Web Services, Web Design Company in Tuticorin

sathya said...

Nice post. It is really interesting. Thanks for sharing the post!
fridge online
buy fridge online
buy refrigerator online
Washing Machine Online
Washing Machine Offers
Buy Washing Machine Online
Online Shopping

Laxman S said...

Interesting information and attractive.This blog is really rocking... Yes, the post is very interesting and I really like it.I never seen articles like this. I meant it's so knowledgeable, informative, and good looking site. I appreciate your hard work. Good job.
Kindly visit us @
Sathya Online Shopping
Buy AC Online | AC Online Shopping | AC Price | Buy Air Conditioner Online
Inverter Split AC | Best Inverter AC | Split AC Price | Buy Split AC Online
Smart LED TV | Smart TV Price | LED TV Online | Buy LED TV Online
Laptop Online | Laptop Price | Buy Laptop Online | Best Laptop
Buy Ultra HD TV Online
Buy Mobile Online | Buy Smartphone Online in India

Laxman S said...

I’m really impressed with your article, such great & usefull knowledge you mentioned here. Thank you for sharing such a good and useful information here in the blog
Kindly visit us @
Social Media Marketing Company | SMO Company India
Social Media Marketing Packages in India
PPC Campaign Price | Google Adwords Pricing in india
PPC Company in India | PPC Services India
Google Adwords company in India | Google Adwords Services in India
Best SEO Company in india | SEO Services in India
Bulk SMS Service India | Bulk SMS India

S Happy said...

Nice post. It is really interesting. Thanks for sharing.
Hotels in Tuticorin, Hotels in Thoothukudi, Best Hotel in Tuticorin

liza said...

I enjoyed over read your blog post. Your blog have nice information, I got good ideas from this amazing blog. I am always searching like this type blog post. I hope I will see again.

liza said...

Thanks for sharing the information. It is very useful for my future. keep sharing
visit our web

basha said...

Superb blog I visit this blog it's really awesome. The important thing is that in this blog content written clearly and understandable. The content of information is very informative.
Oracle Fusion HCM Online Training
Oracle Fusion SCM Online Training
Oracle Fusion Financials Online Training
Big Data and Hadoop Training In Hyderabad
oracle fusion financials classroom training
Workday HCM Online Training
Oracle Fusion HCM Classroom Training
Workday HCM Online Training

Segmentweb Industries said...

I really like your posts. Amazing job. Thanks for providing this post.
Web Design Services Jaipur | Web Design Company Jaipur
Logo Design Services Jaipur | Logo Design Company Jaipur

vyshu kits2019 said...

Its a wonderful post and very helpful, thanks for all this information. You are including better information regarding this topic in an effective way.Thank you so much

QlikSense Online Training

Oracle Sql Plsql Online Training

Arcsight ESM Online Training

Perfect Strom said...

Türkiye'nin yıllardır en çok ziyaret edilen hava yolu uçak kargo şirketi sizlerle.

uçak kargo
uçak kargo
yurtdışı kargo
uçak kargo
yurtdışı kargo
thy kargo
hava kargo
yurtdışı kargo

kameralı sohbet said...

Kamerali sohbet

Selin Yalın said...

Güzel ve faydalı bir paylaşım daha, teşekkürler sayın admin..


chat sohbet

mobil chat


islami sohbet

islami sohbet

islami sohbet

Selin Yalın said...


chat odaları

türk chat


kelebek sohbet

kızlarla sohbet

bayanlarla sohbet

vinith said...

You actually make it look so easy with your performance but I find this matter to be actually something which I think I would never comprehend. It seems too complicated and extremely broad for me. I'm looking forward for your next post, I’ll try to get the hang of it!

python training in bangalore

rithiaanandh said...

Very nice post here and thanks for it. I always like and such super content of these post. Excellent and very cool idea and great content of different kinds of valuable information's.
Sql server dba online training

Tiffany said...

We reviewed dozens of online dating agencies. Here's our https://wizzlove.com/reviews/asiame-review review.

Rigid Box said...

Excellent Blog. I really want to admire the quality of this post. I like the way of your presentation of ideas, views and valuable content. No doubt you are doing great work. I’ll be waiting for your next post. Thanks .Keep it up!
Kindly visit us @
Luxury Boxes
Premium Packaging
Luxury Candles Box
Earphone Packaging Box
Wireless Headphone Box
Innovative Packaging Boxes
Wedding gift box
Leather Bag Packaging Box
Cosmetics Packaging Box
Luxury Chocolate Boxes

Shadeep Shree said...

I would definitely thank the admin of this blog for sharing this information with us. Waiting for more updates from this blog admin.
Data Science Course in Chennai
Data Science Training in Chennai
AWS Training in Chennai
Azure Training in Chennai
Cloud Computing Training in Chennai
VMware Training in Chennai
Data Science Training in Velachery
Data Science Training in Tambaram
Data Science Training in Adyar

kirankumar said...

Thanks for posting the information it is useful and helpful
Sanjary Academy is the best Piping Design institute in Hyderabad, Telangana. It is the best Piping design Course in India and we have offer professional Engineering Courses like Piping design Course, QA/QC Course, document controller course, Pressure Vessel Design Course, Welding Inspector Course, Quality Management Course and Safety Officer Course.
Piping Design Course

Riya Raj said...

Wonderful Blog.... Thanks for sharing with us...
Hadoop Training in Chennai
Big data training in chennai
Big Data Hadoop Training in Chennai
big data certification in chennai
big data Training in Tnagar
Hadoop training in Thiruvanmiyur
Software testing training in chennai
Android Training in Chennai
JAVA Training in Chennai
Selenium Training in Chennai

shemadevan said...

Nice Blog..Waiting for next upddate...
Drupal Training in Chennai
Drupal 8 Training
Drupal Classes
Drupal Training in Velachery
Drupal Training in Tambaram
Photoshop Classes in Chennai
clinical sas training in chennai
SAS Training in Chennai
javascript training in chennai
Hibernate Training in Chennai

impressbss said...

You shared a lot of information
web designing company in chennai

rinjuesther said...

Nice Blog...waiting for next update...
clinical sas training in chennai
clinical sas training
clinical sas Training in Anna Nagar
clinical sas Training in T Nagar
clinical sas Training in OMR
SAS Training in Chennai
Spring Training in Chennai
LoadRunner Training in Chennai
QTP Training in Chennai
javascript training in chennai

Savanah Eden said...

thanks for ur valuable information,keep going touch with us

Aluminium Scaffolding dealers in chennai

swathima said...

Nice Presentation and its hopefull words..
if you want a cheap web hostinng in web
cheap web hosting company chennai

Jasikajessy said...

Nice information keep sharing like this.

scaffolding dealers in chennai
Aluminium scaffolding dealers in chennai
Aluminium scaffolding hire

Destiny Solutions LLP said...

shipstation quickbooks integration

Rahuldevan said...

Thanks for giving excellent Message.Waiting for the next article
Html5 Training in Chennai
html5 course fees
html course fees
Html5 Training in Velachery
Html5 Training in Tnagar
DOT NET Training in Chennai
core java training in chennai
Hibernate Training in Chennai
Mobile Testing Training in Chennai
SAS Training in Chennai

shwethapriya said...

Thank you for your efforts and I am inspiried with your written style.
IELTS Coaching in Chennai
Best IELTS Coaching in Chennai
german classes
learn Japanese in Chennai
Best Spoken English Class in Chennai
TOEFL Coaching Centres in Chennai
IELTS Coaching in OMR
IELTS Coaching in Porur

Sensigo Technologies said...

Software Development Company We specialize in Blockchain development, Artificial Intelligence, DevOps, Mobile App development, Web App development and all your customised online solutions. Get best impression at online by our services, we are familiar for cost effectiveness, quality, delivery and support.

Merry said...

Read this article
Read this article
Read this article
Read this article
Read this article
Read this article
Read this article
Read this article
Read this article
Read this article

kameralı sohbet said...


Tashi said...

professional bridal makeup artist in chennai Style Specializes in beauty bridal makeup and makes assured that individual bride should look like a princess.

best bridal makeup artist in chennai

Tashi said...

Grow sale India ads available in India of goods for sale from cars, furniture, electronics to jobs and services listings.

post free classified ads in india

Vikas Kumar said...

your post is really very interesting to read. I got Very valuable information from your blog.I’m satisfied with the information that you provide for me.Thanks for sharing it.

Python Training in Pune

Savanah Eden said...

if you want any promotion please visit us ,
Linkedin Marketing company chennai
seo company in chennai

nakshatra said...

professional bridal makeup artist in chennai Style Specializes in beauty bridal makeup and makes assured that individual bride should look like a princess.

best bridal makeup artist in chennai

meghna said...

Grow sale india classified ads website Buy&sell find just about anything

post free classified ads in india

nakshatra said...

A & P ASSOCIAATES is supplier and trader of plastic packaging box,packaging pallets,plastic containers based in Chennai - Tamil Nadu, India

vito food oil dealers in chennai

swathima said...

One of the best scaffolding ladder dealers in chennai, variety of designs and models are available here,please visit us
Scaffolding dealers in chennai

Riya Raj said...

Phenomenal Blog!!! thanks for your post and awaiting for your new updates...
Digital Marketing Course in Chennai
Digital Marketing Training in Chennai
Digital Marketing Training
Digital Marketing Course
Digital marketing course in Tambaram
Digital marketing course in Guindy
Python Training in Chennai
Big data training in chennai
SEO training in chennai
JAVA Training in Chennai

The India said...

Delhi Mathura Vrindavan Tour by Bus
Agra Mathura Tour Package by Bus
Delhi to Agra tour by Volvo bus
Online Bus Ticket Booking for Agra
Same Day Agra Tour
Same Day Agra Tour by Bus

arthi said...

The post is absolutely fantastic! Lots of great information and inspiration both of which we all need! Also like to admire the time and effort you put into your blog.

web portal development services in chennai

Ram Niwas said...

Learned a lot from your blog. Share more like this.

Website Designing Company in Delhi

Neha Khan said...

BA Exam Result - BA 1st Year, 2nd Year and 3rd Year Result

Bsc Exam Result - Bsc 1st Year, 2nd Year and 3rd Year Result

wood couter said...

Thanks for posting useful information.You have provided an nice article, Thank you very much for this one. And i hope this will be useful for many people.. and i am waiting for your next post keep on updating these kinds of knowledgeable things...Really it was an awesome article...very interesting to read..please sharing like this information......
outdoor game

Unknown said...

It’s a great pleasure reading your post. It really makes feel Happy and outdoor game

Unknown said...

It’s a great pleasure reading your post. It really makes feel Happy and outdoor game

Unknown said...

I am expecting more interesting topics from you. And this was nice content and definitely it will be useful for many people. outdoor game

News 24 said...

This is excellent information. It is amazing and wonderful to visit your site.Thanks for sharng this information,this is useful to me... outdoor game

repairtechsolutions said...

I enjoy reading a post online google pixel display repair that can make men and women think. Also, thanks for permitting online nokia display repair me to comment! Right here is the right web site for anyone who wishes to understand this online iphone display repair topic.

repairtechsolutions said...

You understand so much it's almost online mi display repair hard to argue with you (not that I actually would want to…HaHa). You definitely put a fresh spin online lg display repair on a topic that's been written about for decades. Wonderful stuff, just excellent! Aw, this was an incredibly online mobile repair marathahalli good post. Spending some time and actual effort to produce a very good article…

Lavandep Smith said...

Get Support for:

Ledger Wallet Support
Ledger Wallet Customer Support Number
Trezor Support
Trezor Customer Support Number
Electrum Wallet Support
Electrum Wallet Customer Support Number

Ledger Nano S wallet Not Updating
My Ledger Stoped working Need Support
How to Use Ethereum First Time

KolaySohbet said...

thank you web admin very good sohbet içerik.

Tatli said...

sohbet odaları
Sohbet A mobil
Sohbet A

aFa said...

mobil sohbet
mobil sohbet
mobil sohbet

Sohbetci said...


SohbetKat said...

Admin elinize sağlık thanx you.

mobil sohbet
kameralı sohbet
sohbet siteleri

Savanah Eden said...

its really amazing, keep touch with us
Linkedin Marketing company in india
Erp software development company in india
seo company in india
Wordpress web development company in india
CRM software development company in india

kartal evden eve nakliyat said...

Nice Servis
Nice Servis
Nice Yetkili Servis