Ενημερώστε τον reader σας
Σήμερα και μετά την υπόδειξη της Google μεταφέραμε το feed μας στην διεύθυνση http://feeds2.feedburner.com/DevelopStories.Αν είστε subscriber ενημερώστε τον reader σας, διαφορετικά subscribe now!
Σήμερα και μετά την υπόδειξη της Google μεταφέραμε το feed μας στην διεύθυνση http://feeds2.feedburner.com/DevelopStories.Αν είστε subscriber ενημερώστε τον reader σας, διαφορετικά subscribe now!
Όταν τελείωσα το Reverse Engineering Academy course – και σαν καλός μαθητής που είμουν – μου έγινε η πρόταση να δημιουργήσω ένα project για την REA 2. Φυσικά λόγω του κολλήματος που έχω με την php σκέφτηκα να γράψω μία encrypted έκδοση της βιβλιοθήκης της php στα windows (php4ts.dll)
Φυσικά θα ήταν πιό εύκολο να χρησιμοποιήσω ένα έτοιμο encryption library, ωστόσο έτσι δέν νομίζω οτι μαθαίνεις αρκετά και δεδομένου οτι μιλάμε για ένα project “ελεύθερου χρόνου” άξιζε τον κόπο. Επίσης η όλη εμπειρία που αποκόμισα με βοήθησε στην δημιουργία του php encryption που χρησιμοποιούμε στην NetWerk για διάφορα projects που χρειάζεται encryption.
Τελικά το project δέν μπήκε στην REA 2 και για κακή μου τύχη έχασα όλα τα sources αφού χάθηκαν τα backup και μου κλέψαν το laptop! Ευτυχώς ο zero (admin στην REA) είχε κρατήσει ένα αντίγραφο και μου το έστειλε.
Όσοι λοιπόν θέλετε να εξασκηθείτε στο hacking μπορείτε να κατεβάσετε το zipάκι απο εδώ και να παίξετε με το project. Ενδεχομένως να σας φανούν χρήσιμα και τα εργαλεία για reverse engineering που έχω γράψει παλιότερα.
Αν βρείτε λύση – δηλαδή αν βρείτε τα arguments που χρειάζεται το πρόγραμμα για να καταλάβει πως είστε “php master” – αφήστε ένα σχόλιο. Happy cracking
Σε ένα απο τα τελευταία projects που ασχολούμαι στην NetWerk, η εφαρμογή μου επικοινωνεί με web services που βρίσκονται σε άλλους servers, ωστόσο για την αποφυγή λαθών και για καλύτερο debugging ήθελα να κάνω ping τον server που “μιλάω” ωστε να ξέρω τι συμβαίνει.
Επειδή γενικώς δέν μου αρέσει να ανακαλύπτω τον τροχό κάθε φορά που κάνω κάτι καινούριο, έψαξα στο internet και ανακάλυψα ένα code snippet για ping μέσω php. Το μόνο πρόβλημα, είναι πως εφόσον o server που κάνουμε ping δέν απαντήσει, το scriptάκι κολλάει. Παρακάτω είναι μία αλλαγμένη έκδοση του snippet οπου ορίζεις το timeout.
<?php
//add
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
// Checksum calculation function
function icmpChecksum($data) {
if (strlen($data)%2)
$data .= "\x00";
$bit = unpack('n*', $data);
$sum = array_sum($bit);
while ($sum >> 16)
$sum = ($sum >> 16) + ($sum & 0xffff);
return pack('n*', ~$sum);
}
// Making the package
$type= "\x08";
$code= "\x00";
$checksum= "\x00\x00";
$identifier = "\x00\x00";
$seqNumber = "\x00\x00";
$data= "Scarface";
$package = $type.$code.$checksum.$identifier.$seqNumber.$data;
$checksum = icmpChecksum($package); // Calculate the checksum
$package = $type.$code.$checksum.$identifier.$seqNumber.$data;
// And off to the sockets
$socket = socket_create(AF_INET, SOCK_RAW, 1);
if (socket_connect($socket, $argv[1], null)) {
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0)); // thek add
// If you're using below PHP 5, see the manual for the microtime_float
// function. Instead of just using the m
// icrotime() function.
//$startTime = microtime(true); // thek remove
$startTime = microtime_float(); // thek add
socket_send($socket, $package, strLen($package), 0);
if (socket_read($socket, 255)) {
//echo round(microtime(true) - $startTime, 4) .' seconds'; // thek remove
echo round(microtime_float() - $startTime, 4) .' seconds'; // thek add
}
else {
echo 'lost connection';
}
socket_close($socket);
}
else {
echo 'lost connection';
}
?>
Στο παραπάνω παράδειγμα το timeout θα γίνει σε 5 δευτερόλεπτα. Αν θέλετε να το αλλάξετε απλώς αλλάξτε το 5 στην παρακάτω γραμμή:
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array(“sec”=>5, “usec”=>0)); // thek add
Το script τρέχει μόνο απο CLI δίνοντας την εντολή
php -q script.php <ip address>
όπου script.php είναι το παρών σκριπτάκι και <ip_address> είναι η διεύθυνση που θέλετε να κάνετε ping. Σε επόμενο άρθρο θα γράψω πώς να το κάνετε απο web εφαρμογή.
Ένα απο τα θέματα που μας ενδιαφέρουν σχετικά με το search engine optimization, είναι το κάθε πότε κάνει crawl το google το site μας. Ειδικότερα θέλουμε να δούμε – κυρίως για εγκυκλοπαιδικούς λόγους – πόσος καιρός μεσολαβεί απο ένα crawl μέχρι την παρουσία μιας σελίδας στο index.
Με αυτές τις απορίες κατά νου αποφασίσαμε να δημιουργήσουμε ένα απλό scriptάκι το οποίο απλά καταγράφει κάθε valid request του google. To script είναι πάρα πολύ απλό, ωστόσο ελπίζω να σας χρησιμέψει.
Καταρχήν χρειαζόμαστε ένα mysql database που θα κρατάει τα δεδομένα μας. Στην προκειμένη περίπτωση δημιουργήσαμε ένα database με όνομα “google_spy” και τρέξαμε το παρακάτω SQL για να δημιουργηθεί ο πίνακας που θα κρατάει τα δεδομένα:
CREATE TABLE IF NOT EXISTS `trace` ( `TraceID` int(10) unsigned NOT NULL auto_increment, `Domain` varchar(100) NOT NULL default '', `Time` datetime NOT NULL default '0000-00-00 00:00:00', `Bot` varchar(100) NOT NULL default '', `Url` text NOT NULL, PRIMARY KEY (`TraceID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Παρακάτω είναι το php script που κάνει την δουλειά:
<?
php
define ('GOOGLE_AGENT','Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
//A few settings for the script:
$db_host = 'localhost';
$db_user = 'user';
$db_pass = 'password';
function googlebot($ip) {
$bot = 'googlebot.com';
$name = gethostbyaddr($ip);
if ($name == $ip) return false;
return (strpos($name, $bot) !== false and gethostbyname($name) == $ip) ? true : false;
}
if ($_SERVER['HTTP_USER_AGENT']==GOOGLE_AGENT &amp;amp;&amp;amp; googlebot($_SERVER['REMOTE_ADDR']))
{
$url='http://'.$_SERVER['HTTP_HOST'];
if ($_SERVER['REQUEST_URI']) $url.=$_SERVER['REQUEST_URI'];
$url_u8=iconv('Windows-1253','UTF-8',$url);
if (crc32($url)==crc32(iconv('UTF-8','Windows-1253',$url_u8))) $url=$url_u8;
$url=urldecode($url);
$sql ="INSERT LOW_PRIORITY INTO `google_spy`.`trace` SET `Domain`='".$_SERVER['HTTP_HOST']."',`Time`='".date('Y-m-d H:i:s')."',";
$sql.="`Bot`='".gethostbyaddr($_SERVER['REMOTE_ADDR'])."',`Port`='".$_SERVER['REMOTE_PORT']."',`Url`='$url'";
$con=mysql_connect($db_host,$db_user,$db_pass);
mysql_query("SET NAMES 'utf8'",$con);
mysql_query($sql,$con);
mysql_close($con);
}
?>
Για να το χρησιμοποιείσετε απλώς αλλάξτε τα settings στην αρχή ($db_host, $db_user, $db_pass) και κάντε include το script σε οποιοδήποτε site θέλετε να κρατάτε logs. Σημειώστε οτι το script κρατάει μία εγγραφή ανα visit (που προέρχεται απο το google) οπότε καλό θα είναι να σβήνετε τα δεδομένα ανα τακτά χρονικά διαστήματα.
Αν κάνετε κάποια μετατροπή ή δημιουργήσετε ένα όμορφο interface για το scriptάκι μήν διστάσετε να το μοιραστείτε μαζί μας
Το twitter, η micro blogging πλατφόρμα που πλέον όλοι γνωρίζουμε και χρησιμοποιούμε, είναι το αγαπημένο μας social network για ανταλλαγή μηνυμάτων. Όπως όλα τα social networks έχει friends, αλλά αυτό που το κάνει ιδιαίτερο είναι ο τρόπος που παρακολουθείς μια συζήτηση (follow,@). Έχουν γραφτεί πάρα πολλές εφαρμογές βασισμένες στο api του twitter, πολλές από αυτές, έχουν κάνει το twitting καθημερινή συνήθεια.
To audiotwit είναι και αυτό μία εφαρμογή που χρησιμοποιεί το api του twitter για να δημιουργεί ένα audio playlist με την βοήθεια του χρήστη @listensto. Η ιδέα έρχεται από τον Νίκο Παπανώτα, ο οποίος έψαχνε να βρεί ένα project για να πειραματιστεί με το api. Για να το χρησιμοποιήσει κάποιος δεν έχει παρά να κάνει follow τον user @listensto και να στέλνει τα ακούσματά του με την μορφή «@listensto Artists – Song». Το audiotwit κάθε 5 λεπτά, βλέπει τα μυνήματα και τα καταχωρεί στην σελίδα του κάθε χρήστη. (π.χ. Το δικό μου twitter είναι το thek27, οπότε το thek27.audiotwit.com παρουσιάζει την λίστα με τα τραγούδια που έχω ακούσει, ενώ η υπηρεσία έχει και RSS feed για κάθε χρήστη.)
Πολύ ωραίο σαν ιδέα, άλλα το πρόβλημα είναι ότι για να ενημερώνω το playlist μου θα πρέπει κάθε φορά που ακούω ένα τραγούδι να το στέλνω και στο twitter. Έτσι μου ήρθε η ιδέα να φτιάξω ένα winamp plugin το οποίο θα στέλνει αυτόματα το τραγούδι που ακούω κάθε στιγμή χωρίς εγώ να ασχολούμαι με το twitter.
Σε επόμενο post θα γράψω όλη την διαδικασία κατασκευής αυτού του plugin, αφού θα δώσω και τον κώδικα ανοιχτό. Αλλά προς το παρόν συγχωρέστε με άλλα βιάζομαι να δω πως θα προχωρήσει το audiotwit μετά την εφαρμογή του winamp plugin.
Σείρα έχει το plugin για media player και itunes. Πιστέυω πως δεν θα αργήσουν. Αν έχει ασχοληθεί κάποιος και θέλει να βοηθήσει μπορεί να επικοινωνήσει μαζί μου.
Αν θέλετε να συμμετάσχετε στο ελληνικό social experiment του twitter, δέν έχετε παρά να κατεβάσετε το plugin απο εδώ. Αφού το εκτελέσετε, την πρώτη φορά που θα τρέξει θα σας ζητήσει το username και το password σας στο twitter ωστε να μπορεί να κάνει updates όποτε ακούτε κάποιο κομμάτι.