Thursday, January 31, 2013

Android hacking: hooking system functions used by Dalvik

Let's say you need to alter behavior of some Android app you do not have source code for.
For example, you want to redirect all socket connect()s made to badhost.com to myhost.com or perhaps even 127.0.0.1.
How this can be achieved (without having to root the device and recompile system libs) ?

On normal Linux systems one can easily use dynamic linker LD_PRELOAD environment variable to let ld change symbol resolution order and thus inject any code you want. However, on Android it is not possible for following reasons:
  • LD_PRELOAD is not useful because zygote already forked JVM
  • Once an app is running, JVM is already started
  • It not possible to (easily) modify environment variables for JVM invokation 
So, how do we do it? By patching PLT (.rel.plt)  (procedure linkage tables) of a running process in-flight!

I will not be going into describing how PLT works and details on ELF binary format. It is suffice to say that compiled code which imports symbols from other .so-s needs to figure out where these functions are located in memory. Since libraries can be loaded at a different place in memory for different processes, it is impossible to know imported functions addresses at compile time. Detailed description can be found here.

However, Android's Bionic library is different, and code specific to glib/gcc dynamic linker won't work. Fortunately, it is easily possible to access ld's internal structures and fish out relevant data. Consider signature of regular POSIX dlopen call:

 void *dlopen(const char *filename, int flag);

Interestingly, this gives us void* abstract 'handle'. In practice, this handle is pointer to a struct soinfo which contains all the information we ever need to override PLT tables.

From linker/linker.cpp:

 soinfo* do_dlopen(const char* name, int flags)  

Now, all we need to is to simply re-dlopen() shared library we want (in my case it libandroid_runtime.so) and walk through plt table, patch connect() method to our own.

Here is the complete hooking code:
/*
Copyright (C) 2013 Andrey Petrov

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software 
without restriction, including without limitation the rights to use, copy, modify, 
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit 
persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or 
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE SOFTWARE.
*/

#define ANDROID_ARM_LINKER  
 #include <dlfcn.h>  
 #include <errno.h>  
 #include <fcntl.h>  
 #include <pthread.h>  
 #include <stdio.h>  
 #include <stdlib.h>  
 #include <string.h>  
 #include <sys/atomics.h>  
 #include <sys/mman.h>  
 #include <sys/stat.h>  
 #include <unistd.h>  
 #include "linker.h"  // get it from bionic
 static unsigned elfhash(const char *_name)  
 {  
   const unsigned char *name = (const unsigned char *) _name;  
   unsigned h = 0, g;  
   while(*name) {  
     h = (h << 4) + *name++;  
     g = h & 0xf0000000;  
     h ^= g;  
     h ^= g >> 24;  
   }  
   return h;  
 }  
 static Elf32_Sym *soinfo_elf_lookup(soinfo *si, unsigned hash, const char *name)  
 {  
   Elf32_Sym *s;  
   Elf32_Sym *symtab = si->symtab;  
   const char *strtab = si->strtab;  
   unsigned n;  
   n = hash % si->nbucket;  
   for(n = si->bucket[hash % si->nbucket]; n != 0; n = si->chain[n]){  
     s = symtab + n;  
     if(strcmp(strtab + s->st_name, name)) continue;  
       return s;  
     }  
   return NULL;  
 }  
 int hook_call(char *soname, char *symbol, unsigned newval) {  
  soinfo *si = NULL;  
  Elf32_Rel *rel = NULL;  
  Elf32_Sym *s = NULL;   
  unsigned int sym_offset = 0;  
  if (!soname || !symbol || !newval)  
     return 0;  
  si = (soinfo*) dlopen(soname, 0);  
  if (!si)  
   return 0;  
  s = soinfo_elf_lookup(si, elfhash(symbol), symbol);  
  if (!s)  
    return 0;  
  sym_offset = s - si->symtab;  
  rel = si->plt_rel;  
  /* walk through reloc table, find symbol index matching one we've got */  
  for (int i = 0; i < si->plt_rel_count; i++, rel++) {  
   unsigned type = ELF32_R_TYPE(rel->r_info);  
   unsigned sym = ELF32_R_SYM(rel->r_info);  
   unsigned reloc = (unsigned)(rel->r_offset + si->base);  
   unsigned oldval = 0;  
   if (sym_offset == sym) {  
    switch(type) {  
      case R_ARM_JUMP_SLOT:  
         /* we do not have to read original value, but it would be good   
           idea to make sure it contains what we are looking for */  
         oldval = *(unsigned*) reloc;  
         *((unsigned*)reloc) = newval;  
         return 1;  
      default:  
         return 0;  
    }  
   }  
  }  
  return 0;  
 }  

So, in order to hook connect call you would need to call:

 hook_call("libandroid_runtime.so", "connect", &my_connect);  

All you now need is to write appropriate my_connect function which will inspect then modify input parameters and then delegate call to real connect()

Next thing to worry about is how to get this code to be executed on target app start, but perhaps it is a topic for a separate post.

Stay tuned ;-)

update: some people told me this interception does not work anymore. This works fine for 2.3.x and 4.0.x. For >4.1.x you would want to intercept libjavacore.so. Thanks for Madhavi Rao for figuring this out

376 comments:

  1. Does this require root? or can you do it for your own process?

    ReplyDelete
  2. Hi Andrey,

    Did you test this code on a ARM processor or just X86?

    Thanks.

    ATTA

    ReplyDelete
  3. HI Andrey,
    thanks for input, i would ask you if is possible to have some infos plus, like how to implement a basic "my_connect" and how to integrate in android java app.
    i'm a researcher and i'm looking for how to know if apps send personal informations to external server.
    thanks
    Andrea

    ReplyDelete
  4. Hi Andrey,
    I would like to know what all libraries and header files have to included from bionic for the above.
    Thanks.

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. Hey,

      in 4.2.2, when calling *((unsigned*)reloc) = newval using libjavacore.so, I get a segfault.

      Does anyone else have this problem? Is there a solution for newer android systems?
      Thx

      Delete
    2. Maybe you can reference this
      http://stackoverflow.com/questions/23443848/how-to-hook-system-calls-of-my-android-app-non-rooted-device/27099442#27099442

      Delete
  6. Also on android 4.1 memory near the "*(unsigned*) reloc" is protected. And operation:

    *((unsigned*)reloc) = newval;

    causes "signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 4e8afd08".
    So to make it work i've changed code:

    mprotect(aligned_pointer, pagesize, PROT_WRITE | PROT_READ);
    oldval = *(unsigned*) reloc;
    *((unsigned*)reloc) = newval;
    mprotect(aligned_pointer, pagesize, PROT_READ);

    ReplyDelete
    Replies
    1. Forgot to write:

      size_t pagesize = sysconf(_SC_PAGESIZE);
      const void* aligned_pointer = (const void*)(reloc & ~(pagesize - 1));

      Delete
  7. This comment has been removed by the author.

    ReplyDelete
  8. I need to read memory value of another app... like which frequency fm radio is listening... please help... and where should i start ???

    ReplyDelete
  9. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. This comment has been removed by the author.

      Delete
  10. It is not working in android 6.0 version. Any idea to fix it?

    ReplyDelete
    Replies
    1. I'm really interested in which part this way fails.
      Is the content of the soinfo which is got from dlopen() correct ?

      Delete
    2. dlopen has been changed in the bionic library so it no longer returns a pointer to the soinfo struct, but rather a handle. This renders the technique in this post useless, although there are other methods ;)

      Delete
  11. It is really a great work and the way in which u r sharing the knowledge is excellent.
    Thanks for helping me to understand basic concepts. As a beginner in android programming your post help me a lot.Thanks for your informative article Android Training in velachery | Android Training institute in chennai

    ReplyDelete
  12. I need you to contact me badly buddy, I got a good paid job for you. Give me a mail to ibo1989-regis@yahoo.de

    ReplyDelete
  13. Excellant post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
    AWS Training in chennai

    AWS Training in bangalore

    ReplyDelete
  14. Well done! Pleasant post! This truly helps me to discover the solutions for my inquiry. Trusting, that you will keep posting articles having heaps of valuable data. You're the best! 

    java training in tambaram | java training in velachery

    java training in omr | oracle training in chennai

    java training in annanagar | java training in chennai

    ReplyDelete
  15. Fantastic work! This is the type of information that should follow collective approximately the web. Embarrassment captivating position Google for not positioning this transmit higher! Enlarge taking place greater than and visit my web situate
    Blueprism training in Pune

    Blueprism online training

    Blue Prism Training in Pune

    ReplyDelete
  16. Well researched article and I appreciate this. The blog is subscribed and will see new topics soon.
    python training in chennai
    python training in Bangalore

    ReplyDelete
  17. A very nice guide. I will definitely follow these tips. Thank you for sharing such detailed article. I am learning a lot from you.
    Blueprism training in annanagar

    Blueprism training in velachery

    Blueprism training in marathahalli

    ReplyDelete
  18. Excellent tutorial buddy. Directly I saw your blog and way of teaching was perfect, Waiting for your next tutorial.
    rpa training in chennai | rpa training in velachery | rpa training in chennai omr

    ReplyDelete
  19. I am really happy with your blog because your article is very unique and powerful for new reader.
    Click here:
    selenium training in chennai
    selenium training in bangalore
    selenium training in Pune
    selenium training in pune
    Selenium Online Training


    http://shreeraj.blogspot.com/2011/11/csrf-with-json-leveraging-xhr-and-cors_28.html

    ReplyDelete
  20. Thanks for sharing this kind of wonderful informative blogs in live. I have bookmarked more article from this website. Such a nice blog you are providing ! Kindly Visit Us R Programming training in Chennai | R Programming Training in Chennai with placement | R Programming Interview Questions and Answers | Trending Software Technologies in 2018

    ReplyDelete
  21. I love what you’ve got to say. But maybe you could a little more in the way of content so people could connect with it better.
    safety course in chennai

    ReplyDelete
  22. DevOps is currently a popular model currently organizations all over the world moving towards to it. Your post gave a clear idea about knowing the DevOps model and its importance.

    Good to learn about DevOps at this time.


    devops training in chennai | devops training in chennai with placement | devops training in chennai omr | devops training in velachery | devops training in chennai tambaram | devops institutes in chennai | devops certification in chennai | trending technologies list 2018

    ReplyDelete
  23. Goyal packers and movers in Panchkula is highly known for their professional and genuine packing and moving services. We are top leading and certified relocation services providers in Chandigarh deals all over India. To get more information, call us.


    Packers and movers in Chandigarh
    Packers and movers in Panchkula
    Packers and movers in Mohali
    Packers and movers in Zirakpur
    Packers and movers in Patiala
    Packers and movers in Ambala
    Packers and movers in Ambala cantt
    Packers and movers in Pathankot
    Packers and movers in Jalandhar
    Packers and movers in Ludhiana

    ReplyDelete
  24. We are a group of volunteers and starting a new initiative in a community. Your blog provided us valuable information to work on.You have done a marvellous job!
    devops online training

    aws online training

    data science with python online training

    data science online training

    rpa online training

    ReplyDelete

  25. Your very own commitment to getting the message throughout came to be rather powerful and have consistently enabled employees just like me to arrive at their desired goals.

    Web Designing Training in Chennai | Best Web Designing Training in Chennai
    RPA Training in Chennai | Best RPA Training in Chennai

    ReplyDelete
  26. Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more.data science course in dubai

    ReplyDelete
  27. This is a wonderful article, Given so much info about hacking, These type of articles keeps the users interest in the website, and keep on sharing more ... good luck.

    Data Science

    ReplyDelete
  28. Just saying thanks will not just be sufficient, for the fantastic lucidity in your writing. I will instantly grab your rss feed to stay informed of any updates.

    Data Science Course

    ReplyDelete
  29. I love what you’ve got to say. But maybe you could a little more in the way of content so people could connect with it better.
    date analytics certification training courses

    ReplyDelete
  30. 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.

    ReplyDelete
  31. First You got a great blog .I will be interested in more similar topics. i see you got really very useful topics, i will be always checking your blog thanks.
    machine learning training in bangalore

    ReplyDelete
  32. Si el agua cae al lago, desaparecerá( phụ kiện tủ bếp ). Pero si cae a la hoja de( phụ kiện tủ áo ) loto, brillará como una joya. Caer igual pero( thùng gạo thông minh ) estar con alguien es importante.

    ReplyDelete
  33. Language is the primary way to strengthen your roots and preserve the culture, heritage, and identity. Tamil is the oldest, the ancient language in the world with a rich literature. Aaranju.com is a self-learning platform to learn Tamil very easy and effective way.
    aaranju.com is a well-structured, elementary school curriculum from Kindergarten to Grade 5. Students will be awarded the grade equivalency certificate after passing the exams. Very engaging and fun learning experience.
    Now you can learn Tamil from your home or anywhere in the world.


    You can knows more:

    Learn Tamil thru English

    Tamil School online

    Easy way to learn Tamil

    Learn Tamil from Home

    Facebook

    YouTube

    twitter

    ReplyDelete
  34. I want you to thank for your time of this wonderful read!!! I definately enjoy every little bit of it and I have you bookmarked to check out new stuff of your blog a must read blog!

    Make My Website is one of the few IT system integration, professional service and software development companies that work with Enterprise systems and companies that focus on quality, innovation, & speed. We utilized technology to bring results to grow our client’s businesses. We pride ourselves in great work ethic, integrity, and end-results. Throughout the years The Make My Website has been able to create stunning, beautiful designs in multiple verticals while allowing our clients to obtain an overall better web presence.
    Philosophy
    Our company philosophy is to create the kind of website that most businesses want: easy to find, stylish and appealing, quick loading, mobile responsive and easy to buy from.
    Mission
    Make My Website mission is to enhance the business operation of its clients by developing/implementing premium IT products and services includes:
    1. Providing high-quality software development services, professional consulting and development outsourcing that would improve our customers’ operations.
    2. Making access to information easier and securer (Enterprise Business).
    3. Improving communication and data exchange (Business to Business).
    4. Providing our customers with a Value for Money and providing our employees with meaningful work and advancement opportunities.


    My Other Community:

    Facebook

    twitter

    linkedin

    instagram

    Youtube

    ReplyDelete
  35. Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.
    pmp certification malaysia

    ReplyDelete
  36. Excellent Blog! I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I wanted to thank you for this websites! Thanks for sharing. Great websites!
    Six Sigma Course Hyderabad

    ReplyDelete
  37. The article is so informative. This is more helpful for our
    software testing training and placement
    selenium testing training in chennai. Thanks for sharing

    ReplyDelete
  38. website name
    Dj Required has been setup by a mixed group of London’s finest Dj’s, a top photographer and cameraman. Together we take on Dj’s, Photographers and Cameramen with skills and the ability required to entertain and provide the best quality service and end product. We supply Bars, Clubs and Pubs with Dj’s, Photographers, and Cameramen. We also supply for private hire and other Occasions. Our Dj’s, Photographers and Cameramen of your choice, we have handpicked the people we work with

    ReplyDelete

  39. Truly, this article is really one of the very best in the history of articles. I am a antique ’Article’ collector and I sometimes read some new articles if I find them interesting. And I found this one pretty fascinating and it should go into my collection. Very good work!


    DATA SCIENCE COURSE IN MALAYSIA

    ReplyDelete
  40. Very awesome!!! When I seek for this I found this website at the top of all blogs in search engine.

    ReplyDelete
  41. PhenQ_Reviews 2019 – WHAT IS PhenQ ?


    How_to_use_PhenQ ?This is a powerful slimming formula made by combining the multiple weight loss
    benefits of variousPhenQ_ingredients. All these are conveniently contained in
    one pill. It helps you get the kind of body that you need. The ingredients of
    the pill are from natural sources so you don’t have to worry much about the side
    effects that come with other types of dieting pills.Is_PhenQ_safe ? yes this is completly safe.
    Where_to_buy_PhenQ ? you can order online.PhenQ Scam ? this medicine is not scam at all.


    Watch this PhenQ_Reviews to know more.
    Know about PhenQ Scam from here.
    know Is_PhenQ_safe for health.
    you don`t know How_to_use_PhenQ check this site

    wanna buy phenq check this site and know Where_to_buy_PhenQ and how to use.

    check the PhenQ_ingredients to know more.

    what is PhenQ check this site.

    ReplyDelete
  42. Awesome blog. I enjoyed reading yourarticles
    . This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work!

    ReplyDelete
  43. I am looking for and I love to post a comment that "The content of your post is awesome" Great work!
    data science course malaysia

    ReplyDelete
  44. After reading your article I was amazed. I know that you explain it very well. And I hope that other readers will also experience amazon web services training how I feel after reading your article.

    ReplyDelete
  45. Wow! Such an amazing and helpful post this is. I really really love it. It's so good and so awesome. I am just amazed. I hope that you continue to do your work like this in the future also.Amazon web services bangalore

    ReplyDelete
  46. Car Maintenance Tips That You Must Follow


    For everyone who owns it, Car Maintenance Tips need to know.
    Where the vehicle is currently needed by everyone in the world to
    facilitate work or to be stylish.
    You certainly want the vehicle you have always been in maximum
    performance. It would be very annoying if your vehicle isn’t even
    comfortable when driving.
    Therefore to avoid this you need to know Vehicle Maintenance Tips or Car Tips
    Buy New Car visit this site to know more.

    wanna Buy New Car visit this site.
    you dont know about Car Maintenance see in this site.
    wanna know about Car Tips click here.
    know more about Hot car news in here.


    ReplyDelete
  47. Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I’ll be subscribing to your feed and I hope you post again soon.
    data science course

    ReplyDelete
  48. This is the best website for Unique clipping path and high quality image editing service Company in Qatar. Unique clipping path

    ReplyDelete
  49. uch a wonderful blog on Mean Stack .Your blog having almost full information about
    Mean Stack ..Your content covered full topics of Mean Stack ,that it cover from basic to higher level content of Mean Stack .Requesting you to please keep updating the data about Mean Stack in upcoming time if there is some addition.
    Thanks and Regards,
    Best institute for mean stack training in chennai
    Mean stack training fees in Chennai
    Mean stack training institute in Chennai
    Mean stack developer training in chennai
    Mean stack training fees in OMR, Chennai









    ReplyDelete
  50. Your info is really amazing with impressive content..Excellent blog with informative concept. Really I feel happy to see this useful blog, Thanks for sharing such a nice blog..
    If you are looking for any Big data Hadoop Related information please visit our website hadoop classes in pune page!

    ReplyDelete
  51. delta portable cribs


    These baby cribs reviews help you to find out a traditional, unique, safe,
    comfortable, reliable, sustainable and also most perfect baby cribs.

    ReplyDelete
  52. This comment has been removed by the author.

    ReplyDelete


  53. Thank you so much for sharing the article. Really I get many valuable information from the article
    With our Digital Marketing Training, re-discover your creative instinct to design significant marketing strategies to promote a product/service related to any organization from any business sector.

    Digital Marketing Course in Sydney

    ReplyDelete
  54. Tech Gadgets reviews and latest Tech and Gadgets news updates, trends, explore the facts, research, and analysis covering the digital world.
    You will see Some Tech reviews below,

    lg bluetooth headset : You will also wish to keep design and assorted features in mind. The most essential part of the design here is the buttonsof lg bluetooth headset .

    Fastest Car in the World : is a lot more than the usual number. Nevertheless, non-enthusiasts and fans alike can’t resist the impulse to brag or estimate according to specifications. Fastest Car in the World click here to know more.

    samsung galaxy gear : Samsung will undoubtedly put a great deal of time and even more cash into courting developers It is looking for partners and will allow developers to try out
    different sensors and software. It is preparing two variants as they launched last year. samsung galaxy gear is very use full click to know more.

    samsung fridge : Samsung plans to supply family-oriented applications like health care programs and digital picture frames along with games It should stick with what they know and they
    do not know how to produce a quality refrigerator that is worth what we paid. samsung fridge is very usefull and nice product. clickcamera best for travel: Nikon D850: Camera It may be costly, but if you’re trying to find the very best camera you can purchase at this time, then Nikon’s gorgeous DX50 DSLR will
    probably mark each box. The packaging is in a vibrant 45.4-megapixel full-frame detector, the picture quality is simply wonderful. However, this is just half the story. Because of a complex 153-point AF system along with a brst rate of 9 frames per minute. camera best specification. click here to know more.

    visit https://techgadgets.expert/ this site to know more.

    ReplyDelete
  55. Kaamil Traning is fastly growing Training Center in Qatar
    that aims to provide Value through Career Linked training, Professional Development Programs, Producing Top Notch
    Professionals, Provide Bright Career Path. Kaamil Training Leveraging best-in-class global alliances and strategic partnerships with Alluring Class rooms, Great Learning
    Environment. The toppers study with us and market leaders will be your instructors.
    At Kaamil Training our focus is to make sure you have all the knowledge and exam technique you need to achieve your
    ACCA Course in Qatar qualification. Our core objective is to help you
    pass your exams and our ability to do this is demonstrated by our exceptional pass rates.



    ReplyDelete
  56. Design the website strategically, if you've got plenty of things to discuss. Creating a site isn't alone enough for a site to be prosperous. Website being among the best mediums to showcase the services and products of your business, is a good method to start if you're going the internet way for the very first time. As a way to sustain and do well in a very competitive internet environment your website should be easily navigable and user friendly and for that working with a trusted website development firm can make the process simpler for you if not more.
    ."> website development kerala

    ReplyDelete
  57. Nice Post
    For Data Science training in Bangalore, Visit:
    Data Science training in Bangalore

    ReplyDelete
  58. Book a consultation with the professionals at our Ayurveda hospital Kottayam for
    expert opinions on your health and wellness conditions. Cleaning Services Hobart

    ReplyDelete

  59. Kaal Sarp Dosha implies many meanings in Sanskrit, but there is danger and a threat to life associated with the word. Of its many meanings, we can safely conclude that Kaal means time, and Sarp means snake or serpent.
    kaal sarp dosh puja in ujjain
    Top kaal sarp dosh puja in ujjain
    Best kaal sarp dosh puja in ujjain

    ReplyDelete
  60. Thanks for sharing this info,it is very helpful.
    data sciences

    ReplyDelete
  61. For AWS training in Bangalore, Visit:
    AWS training in Bangalore

    ReplyDelete
  62. Social media is a vital aspect of drawing new customers to your website, professionally handled by social media marketing Kochi.. social media marketing in Kochi

    ReplyDelete
  63. Thanks for sharing it.I got Very significant data from your blog.your post is actually Informatve .I'm happy with the data that you provide.thanks


    click here
    see more
    visit us
    website
    more details

    ReplyDelete

  64. The high quality Organic T-shirts by Dezayno are made on some of the softest ringspun certified organic cotton available. Their shirts are built to last a long time and feel comfortable the entire life of the shirt. Organic T-shirts

    ReplyDelete
  65. The high quality Organic T-shirts by Dezayno are made on some of the softest ringspun certified organic cotton available. Their shirts are built to last a long time and feel comfortable the entire life of the shirt. Organic T-shirts

    ReplyDelete
  66. Thanks for your excellent blog and giving great kind of information. So useful. Nice work keep it up thanks for sharing the knowledge.
    Visit us
    Click Here
    For More Details
    Visit Website
    See More

    ReplyDelete
  67. How to stop smoking weed ???

    1.Do you want to know How to stop smoking weed or have you been wondering of how to get your dear one to stop smoking weed ?
    Every weed smoker knows deep down that quitting the behavior is an uphill task. And some people don`t know How to quit smoking weed .. They should
    Know How to quit smoking weed by visiting in this https://irvined.co.uk/ website.

    2.Long-term marijuana users may find the withdrawal experience uncomfortable. Marijuana detox helps one to slowly ease off of THC
    until it is completely eliminated from the body system. Marijuana detox also helps to reduce withdrawal symptoms thus making it
    easier for even highly addicted individuals to make full about turn in their weed smoking habits (avoiding relapse).

    3.The decision to stop smoking weed is usually impulsive for many individuals. If you have smoked pot long enough, you probably have plenty of memories
    where you did something and swore to yourself to stop your weed smoking habit going forward. And if you don`t know How to stop smoking pot ...
    Then visit https://irvined.co.uk/ here to know more.

    4.Quitting marijuana will give you the chance to become more responsible and set you in the right direction to progress in your life.
    And the good thing is that you don’t have to try quitting on your own now. ‘ Quit Marijuana The Complete Pack ’ is just a click away at a very affordable price.
    See more details about the guide and current purchase offers at https://quit-weed.com/. You can do this. Regardless of how long you have smoked pot or used marijuana
    in other ways, the quit marijuana pack offers you robust support to ensure that you achieve your goals. To know more information visit https://irvined.co.uk/ here.

    ReplyDelete
  68. Thank you so much for the post.The content is very useful.I always love your posts because of the information and knowledge one can gain by reading your post.Thanks for sharing and keep updating still more.
    Best Python Training in BTM Layout

    ReplyDelete
  69. Hi Guys. We are a family-owned business started in 1971 in Sparks, Nevada. We have an automotive parts warehouse distribution system for automobiles and light and heavy-duty trucks with several shipping locations throughout the United States. We specialize in drivetrain-related areas and provide experience and expertise to assist you in getting the correct parts the first time. We offer free diagnostics and road testing as well as free troubleshooting support by telephone. We would be honored if We can help you. drivetrain

    ReplyDelete
  70. I have to voice my passion for your kindness giving support to those people that should have guidance on this important matter.
    MCSE Training in chennai | mcse training class chennai

    ReplyDelete
  71. Thanks For sharing a nice post about AWS Training Course.It is very helpful and AWS useful for us.aws training in bangalore

    ReplyDelete
  72. I really enjoy simply reading all of your weblogs. Simply wanted to inform you that you have people like me who appreciate your work. Definitely a great post. Hats off to you! The information that you have provided is very helpful.
    Please check ExcelR Data Science Course in Pune

    ReplyDelete

  73. You completed a number of nice points there. I did a search on the issue and found ExcelR Data Analytics Course In Pune nearly all people will have the same opinion with your blog.

    ReplyDelete
  74. I am a regular reader of your blog and I find it really informative. Hope more Articles From You.Best Tableau tutorial videos with Real time scenarios . hope more articles from you.

    ReplyDelete
  75. Enjoyed reading the article above, really explains everything in detail,the article is very interesting and effective.Thank you and good luck…

    Start your journey with DevOps Course and get hands-on Experience with 100% Placement assistance from experts Trainers @Softgen Infotech Located in BTM Layout Bangalore.

    ReplyDelete
  76. very interesting, good job and thanks for sharing such a good blog.

    Real Time Experts provides Best SAP PM Training in Bangalore with expert real-time trainers who are working Professionals with min 8+ years of experience in Java Training Industry, we also provide 100% Placement Assistance with Live Projects on Java Training.

    ReplyDelete
  77. I am happy for sharing on this blog its awesome blog I really impressed. thanks for sharing. Great efforts.

    Start your journey with AWS Course and get hands-on Experience with 100% Placement assistance from Expert Trainers with 8+ Years of experience @eTechno Soft Solutions Located in BTM Layout Bangalore.

    ReplyDelete
  78. Truly, this article is really one of the very best in the history of articles. I am a antique ’Article’ collector and I sometimes read some new articles if I find them interesting. And I found this one pretty fascinating and it should go into my collection. Very good work!
    ExcelR data science course in bangalore

    ReplyDelete
  79. As a global Corporate Training company, Tuxedo Funding Group has a proven record of helping companies of all types and sizes improve employee performance by creating custom training & learning solutions for all types of employee development needs. We take the time to get to know you, your learners, and your organization.

    ReplyDelete
  80. wonderful thanks for sharing an amazing idea. keep it...

    Best SAP Training in Bangalore for SAP, we provide the sap training project with trainers having more than 5 Years of sap training experience, we also provide 100% placement support.

    ReplyDelete

  81. Truly, this article is really one of the very best in the history of articles. I am a antique ’Article’ collector and I sometimes read some new articles if I find them interesting. And I found this one pretty fascinating and it should go into my collection. Very good work!
    ExcelR data Science courses

    ReplyDelete
  82. Best Data Science Course in Mumbai wherein we have classroom and online training. Along with Classroom training, we also conduct online training using state-of-the-art technologies to ensure the wonderful experience of online interactive learning. Best Data Science Course in Mumbai

    ReplyDelete
  83. Data Science Courses fee in Bangalore wherein we have classroom and online training. Along with Classroom training, we also conduct online training using state-of-the-art technologies to ensure the wonderful experience of online interactive learning. Data Science Courses fee in Bangalore

    ReplyDelete
  84. Thanks for Sharing such an useful info...thanks for posting....

    Tableau for Beginners

    ReplyDelete

  85. I am really happy to say it’s an interesting post to read . I learn new information from your article , you are doing a great job . Keep it up and a i also want to share some information regarding best selenium online training and selenium training videos


    ReplyDelete
  86. I finally found great post here.I will get back here. I just added your blog to my bookmark sites. thanks.Quality posts is the crucial to invite the visitors to visit the web page, that's what this web page is providing.
    data science course in Mumbai
    data science interview questions

    ReplyDelete
  87. Awesome blog. I enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work!
    business analytics course
    data science interview questions

    ReplyDelete
  88. I finally found great post here.I will get back here. I just added your blog to my bookmark sites. thanks.Quality posts is the crucial to invite the visitors to visit the web page, that's what this web page is providing.
    data science course Mumbai
    data science interview questions
    data analytics course in mumbai

    ReplyDelete
  89. They're produced by the very best degree developers who will be distinguished for your polo dress creating. You'll find polo Ron Lauren inside exclusive array which include particular classes for men, women.big data in malaysia
    data scientist course malaysia
    data analytics courses
    360DigiTMG

    ReplyDelete
  90. This is my first time i visit here. I found so many entertaining stuff in your blog, especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the leisure here! Keep up the good work. I have been meaning to write something like this on my website and you have given me an idea.big data in malaysia
    data science course in malaysia
    data analytics courses
    360DigiTMG

    ReplyDelete
  91. I finally found great post here.I will get back here. I just added your blog to my bookmark sites. thanks.Quality posts is the crucial to invite the visitors to visit the web page, that's what this web page is providing.
    ExcelR Data Science training in Mumbai

    ReplyDelete
  92. Thanks for the informative and helpful post, obviously in your blog everything is good..
    Please check this Data Science Course Pune

    ReplyDelete

  93. Thanks for sharing.Your information is clear with very good content.This was the exact information i was looking for.keep updating more.If you are the one searching for big Data certification courses then visit our site big data certification bangalore

    ReplyDelete
  94. Having read this I thought it was extremely enlightening. I appreciate you taking the time and energy to put this information together. I once again find myself personally spending a lot of time both reading and leaving comments. But so what, it was still worthwhile!
    Gadgets

    ReplyDelete
  95. Thanks for sharing such a wonderful blog on Amazon Web Services .
    This blog contains so much data about Amazon Web Services ,like if anyone who is searching for the Amazon Web Services data,They will easily grab the knowledge from this .Requested you to please keep sharing these type of useful content so that other can get benefit from your shared content.
    Thanks and Regards,
    Amazon Web Services training in Chennai
    Best Amazon Web Services training in chennai
    Top Amazon Web Services Training in chennai
    Amazon Web Services training fees in Velachery,Chennai


    ReplyDelete
  96. Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading ExcelR Machine Learning Courses topics of our time. I appreciate your post and look forward to more.

    ReplyDelete
  97. Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article. machine learning courses in Bangalore

    ReplyDelete
  98. Very interesting post. thanks for sharing this post with us. really appreciate you for this.

    data science Course in Bangalore

    ReplyDelete
  99. Hi buddies, it is great written piece entirely defined, continue the good work constantly.
    Please check this Data Scientist Courses

    ReplyDelete
  100. This post is really nice and informative. The explanation given is really comprehensive and useful.

    aws developer training
    aws tutorial videos

    ReplyDelete
  101. Thank you so much for sharing this blog, such a nice information u have posted. i'm so thankful for your blog .
    data science training in hyderabad.

    ReplyDelete
  102. Mean stack development is one of the best technology nowdays. it is in more demand. the information you provide on mean stack is really wonderful. Thanks for sharing this information.

    data science Training in Bangalore
    data science Course in Bangalore

    ReplyDelete
  103. First You got a great blog .I will be interested in more similar topics. i see you got really very useful topics, i will be always checking your blog thanks.. Please check this Data Scientist Course

    ReplyDelete
  104. Thank you for taking the time to provide us with your valuable information. We strive to provide our candidates with excellent care
    http://trainingsinvelachery.in/sap-hr-training-in-velachery/
    http://trainingsinvelachery.in/sap-mm-training-in-velachery/
    http://trainingsinvelachery.in/sap-sd-training-in-velachery/
    http://trainingsinvelachery.in/sap-fico-training-in-velachery/
    http://trainingsinvelachery.in/sap-abap-training-in-velachery/
    http://trainingsinvelachery.in/sap-hana-training-in-velachery/

    ReplyDelete
  105. Big Truck Tow: Heavy Duty towing service san jose

    We're rated the most reliable heavy duty towing san jose service & roadside assistance in San Jose!
    Call us now! We're ready to help you NOW!

    Since 1999, tow truck san jose has provided quality services to clients by providing them
    with the professional care they deserve. We are a professional and affordable Commercial
    Towing Company. BIG TRUCK TOW provides a variety of services, look below for the list of
    services we offer. Get in touch today to learn more about our heavy duty towing


    Click here to Find tow truck near me

    ReplyDelete
  106. Well done and helpful data..
    Thanks for sharing with us,
    We are again come on your website,
    Thanks and good day,
    Please visit our site,
    buylogo

    ReplyDelete
  107. Pretty article! I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing..

    oracle erp training

    ReplyDelete
  108. Just saying thanks will not just be sufficient, for the fantasti c lucidity in your writing. I will instantly grab your rss feed to stay informed of any updates.
    data science courses in pune

    ReplyDelete
  109. Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I’ll be subscribing to your feed and I hope you post again soon.
    pune digital marketing course

    ReplyDelete
  110. This is so elegant and logical and clearly explained. Brilliantly goes through what could be a complex process and makes it obvious.

    azure online training

    ReplyDelete
  111. Your artwork is very magical and full of whimsy. You definitely caught the Tim Burton look. It's surreal but also dreamlike. Beautiful work
    Home elevators
    Home elevators Melbourne
    Home lifts

    ReplyDelete
  112. This was really one of my favorite website. Please keep on posting. ExcelR Data Science Course In Pune

    ReplyDelete
  113. Nice article. For offshore hiring services visit:
    bootstrap.phpfox

    ReplyDelete
  114. I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this sharepoint training , I feel happy about it and I love learning more about this topic.

    ReplyDelete
  115. Are you looking for SEO services in Kerala? We TeamD is the best freelance SEO expert in Kerala. We do all types of SEO such as local SEO,youtube SEO,eCommerce SEO, etc.

    ReplyDelete
  116. I have to search sites with relevant information on given topic and provide them to teacher our opinion and the article.

    business analytics courses

    ReplyDelete
  117. We provide influencer marketing campaigns through our network professional African Bloggers, influencers & content creators.

    ReplyDelete
  118. This is a wonderful article, Given so much info in it, These type of articles keeps the users interest in the website, and keep on sharing more ... good luck.
    best digital marketing course in mumbai

    ReplyDelete
  119. I am really enjoying reading your well written articles. It looks like you spend a lot of effort and time on your blog. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work....business analytics certification

    ReplyDelete
  120. Its as if you had a great grasp on the subject matter, but you forgot to include your readers. Perhaps you should think about this from more than one angle.

    data science course

    ReplyDelete
  121. Your work is very good and I appreciate you and hopping for some more informative posts
    data scientist course in malaysia
    360DigiTMG

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

    ReplyDelete
  123. Very informative post ! There is a lot of information here that can help any business get started with a successful social networking campaign !

    Business Analytics Training | Business Analytics Course In Hyderabad

    ReplyDelete
  124. Amazing web journal I visit this blog it's extremely marvelous. Interestingly, in this blog content composed plainly and reasonable.share some more related to this.
    Ai & Artificial Intelligence Course in Chennai
    PHP Training in Chennai
    Ethical Hacking Course in Chennai Blue Prism Training in Chennai
    UiPath Training in Chennai

    ReplyDelete
  125. To make your company look professional you need to have a formal email hosting uk for your organization. Using a free hosting company makes you look like a spammer and that is what you don't want because it creates a bad brand image. Realizing this at an email shop we provide you all kinds of services like POP3, IMAP, spam block, an unlimited number of emails depending on the type of package you buy.

    ReplyDelete
  126. Cloud servers are the best in safe guarding one's information thorugh online. Without this dedicated methodology many companies would have not existed at all. The same though has been furnished above.
    AWS training in chennai | AWS training in annanagar | AWS training in omr | AWS training in porur | AWS training in tambaram | AWS training in velachery

    ReplyDelete
  127. nice article with great content.We are the Best Digital Marketing Agency in Chennai, Coimbatore, Madurai and change makers of digital! For Enquiry Contact us @+91 9791811111

    Website designers in chennai | digital marketing agencies in chennai |digital marketing consultants in chennai | Best seo company in chennai | Best SEO Services in Chennai

    ReplyDelete
  128. great blog with great article.We are the Best Digital Marketing Agency in Chennai, Coimbatore, Madurai and change makers of digital! For Enquiry Contact us @+91 9791811111

    Website designers in chennai | digital marketing agencies in chennai |digital marketing consultants in chennai | Best seo company in chennai | Best SEO Services in Chennai

    ReplyDelete
  129. Excellent effort to make this blog more wonderful and attractive.Data Science Training in Hyderabad

    ReplyDelete
  130. your article has great information,keep posting us.As the most reputed website designers in Chennai, our work is always elegant & has a visual story to it. Our team comprises the best website designers in India.


    digital marketing agencies in chennai | best web developers and designers in chennai | best website designing companies in chennai | | Website designers in chennai | Best logo designers in chennai

    ReplyDelete