Category Archives: Java

Qu’est ce qu’il y a dans mon application android?

Hello,

Avec ces smartphones, on a accès à plein d’applications! Tellement qu’on ne sait pas vraiment ce qu’elles font sur le réseau ou bien avec nos données privées. Et moi ça m’inquiète…

Donc j’étais curieux de voir comment étudier le code d’une application android. Et en fait c’est très très simple. Il suffit de télécharger l’application dex2jar.

https://code.google.com/p/dex2jar/
(Il faut avoir Java d’installé sur sa machine)

Ensuite il suffit d’exécuter les commandes suivantes avec un fichier apk que vous pouvez récupérer de puis votre téléphone (avec un backup par exemple)

# convert classes.dex in test_apk-debug.apk to test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o test_apk-debug_dex2jar.jar test_apk-debug.apk

# verify jar
d2j-asm-verify.sh test_apk-debug_dex2jar.jar

# convert to jasmin format
d2j-jar2jasmin.sh -f -o test_apk_jasmin test_apk-debug_dex2jar.jar

Et donc dans le répertoire test_apk_jasmin vous retrouverez tout le code source et vous pourrez étudier celui ci sous toutes ses coutures.
rmq: vous pourrez utiliser d’autres outils comme JD-GUI pour lire le jar test_apk-debug_dex2jar.jar

Accessoirement vous pourrez aussi repackager suite une modification si vous le souhaitez

# build jar
d2j-jasmin2jar.sh -f -o test_apk_jasmin.jar test_apk_jasmin/
# verify jar
d2j-asm-verify.sh test_apk_jasmin.jar
# convert to dex
d2j-jar2dex.sh -f -o classes.dex test_apk_jasmin.jar
# make a copy
cp test_apk-debug.apk test_apk-debug-toast.apk
# replace classes.dex in test_apk-debug-toast.apk
zip -r test_apk-debug-toast.apk classes.dex
# sign the apk
d2j-apk-sign.sh -f -o test_apk-debug-toast-signed.apk test_apk-debug-toast.apk

et voilà facile

So enjoy!

Tomcat en mode cluster et avec session multicast

Hello,

Je m’amuse toujours comme un petit fou à utiliser mon petit cluster cubietruck et là je me suis décidé à l’utiliser avec tomcat.

Pour commencer, j’ai 3 serveurs que je vais appeler simplement server1, server2 et server3.

Et donc le principe est assez simple c’est de mettre en frontal sur le server1 un apache qui va jouer le rôle de load balancer sur 3 instances de tomcat, une sur server1,2 et 3.

APACHE

Sur le serveur principal (server1) il vous faudra installer apache et un mod

sudo apt-get install apache2 libapache2-mod-jk

ensuite éditez le fichier /etc/apache2/mods-available/jk.conf

et modifiez le de telle façon http://svn.apache.org/repos/asf/tomcat/jk/trunk/conf/httpd-jk.conf

sudo nano /etc/libapache2-mod-jk/workers.properties

//workers.properties
worker.list=loadbalancer,status
worker.server1.port=8009
worker.server1.host=server1.com
worker.server1.type=ajp13

worker.server2.port=8009
worker.server2.host=serevr2.com
worker.server2.type=ajp13

worker.server3.port=8009
worker.server3.host=server3.com
worker.server3.type=ajp13

worker.server1.lbfactor=1
worker.server2.lbfactor=1
worker.server3.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=server1,server2,server3

worker.status.type=status

d’ailleurs dans les différents fichiers hosts il faudra que vous rajoutiez l’adresse ip et l’adresse dns associée pour qu’ils se connaissent mutuellements sous les noms server1.com, server2.com et server3.com

Modifiez les paramètres d’apache

 sudo nano /etc/apache2/sites-available/default

comme suit

<VirtualHost *:80>.

………………..

JkMount /status status

JkMount /* loadbalancer

</VirtualHost *:80>

et pour finir un petit redémarrage

service apache2 restart

 

TOMCAT

Téléchargez la dernière version de tomcat et java si vous ne l’avez pas déjà (booooooooooooohhhh si vous ne l’avez pas!!!!) et placez les fichiers décompresser dans un répertoire de travail sur les 3 serveurs. Vous pourriez faire un apt-get mais je préfère pas c’est plus simple à gérer à la main je trouve.

éditez le fichier tomcat/conf/server.xml

décommentez

<Connector port= »8009″ protocol= »AJP/1.3″ redirectPort= »8443″ />

dans la balise engine

<Engine name= »Catalina » defaultHost= »localhost » jvmRoute= »server1″>

<!–For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) –>
<!–
<Cluster className= »org.apache.catalina.ha.tcp.SimpleTcpCluster »/>
–>
<Cluster className= »org.apache.catalina.ha.tcp.SimpleTcpCluster »
channelSendOptions= »8″>
<Manager className= »org.apache.catalina.ha.session.DeltaManager » 

     expireSessionsOnShutdown= »false » 

      notifyListenersOnReplication= »true »/>
<Channel className= »org.apache.catalina.tribes.group.GroupChannel »>
<Membership className= »org.apache.catalina.tribes.membership.McastService » 

     address= »228.0.0.4″
     port= »45564″
     frequency= »500″
     dropTime= »3000″/>
<Receiver className= »org.apache.catalina.tribes.transport.nio.NioReceiver »
     address= »auto »
     port= »4000″
     autoBind= »100″
     selectorTimeout= »5000″
    maxThreads= »6″/>
<Sender className= »org.apache.catalina.tribes.transport.ReplicationTransmitter »>
    <Transport className= »org.apache.catalina.tribes.transport.nio.PooledParallelSender »/>
</Sender>
<Interceptor className= »org.apache.catalina.tribes.group.interceptors.TcpFailureDetector »/>
<Interceptor className= »org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor »/>
</Channel>
<Valve className= »org.apache.catalina.ha.tcp.ReplicationValve »
       filter= ».*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt; »/>
<ClusterListener className= »org.apache.catalina.ha.session.ClusterSessionListener »/>
</Cluster>

<Context distributed= »true » path= »/ » /> #chemin des applis distribuées

</Engine>

 

maintenant tout est près à déployer.

Mettez en place tous vos tomcat sur tous vos serveurs, par contre faites attention dans votre server.xml de mettre à jour la balise engine avec le bon nom du worker  jvmRoute= »serverX »

Avant de tout lancer il faut activer le multicast sur tous les serveurs pour qu’ils puissent se reconnaître.

sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

netstat -nr

Maintenant vous pouvez tout lancer tomcat/bin/startup.sh.

D’ailleurs si vous voulez pointer vers une autre version de java n’oubliez pas que vous pouvez créer un fichier setenv.sh dans ce répertoire bin comme par exemple

export JAVA_HOME=/root/Workspace/java/jdk1.8.0_06

export CATALINA_PID= »$CATALINA_BASE/tomcat.pid »

Dans ce cas j’ai eu qq problème car à déplacer des fichiers (java et tomcat) j’ai perdu qq droits d’exécution donc un petit chmod +x * dans les répertoires bin (java et tomcat) devrait résoudre le pb.

Si vous voulez vérifier que tout fonctionne il y a un fichier jsp qui traîne ici que vous pourrez déposer dans webapps/examples/jsp

par contre pour rendre une application distribuable il faudra que le fichier web.xml de l’appli contienne l’information

<distributable/>

Donc n’oubliez pas de mettre à jour le web.xml de « examples »

 

Voici un très bon tuto et cet autre tuto qui m’ont permis de réaliser cela.

So Enjoy!

Installer un serveur Glassfish

 

-Téléchargez la dernière version de Glassfih

-Vérifiez que java est bien installé (console>java -version). S’il ne l’est pas il faudra l’installer évidemment…

-Créez un répertoire où vous stockerez Glassfish (on l’appellera install_dir)

-Décrompessez le fichier zip dans ce répertoire

-Pour lancer le serveur console>install_dir/bin/asadmin start-domain

-Pour permettre d’ouvrir l’interface d’administration depuis un autre ordinateur (erreur Secure Admin must be enabled to access the DAS remotely)
°start Glassfish

°console>install_dir/bin/asadmin enable-secure-admin

°restart Glassfish

-Lancer l’interface d’administration « http://adresse:4848″ en local ou depuis un autre ordi

 

Pour finir, si vous rencontrez un problème de password et que vous voulez le remettre à zéro

De base le password admin est « changeit » ou « adminadmin »Pour le reset:

console> cd glassfish3/glassfish

console> touch /tmp/password.txt

console> chmod 600 /tmp/password.txt

console> echo « AS_ADMIN_PASSWORD= » > /tmp/password.txt

console> echo « AS_ADMIN_NEWPASSWORD=newadminpassword » >> /tmp/password.txt

console> bin/asadmin –user admin –passwordfile /tmp/password.txt change-admin-password –domain_name domain1

console> rm /tmp/password.txt

console> bin/asadmin start-domain

 

Et voilà.

So Enjoy!

 

Word completion sous Eclipse

Hello,

 

A chaque fois quand j’installe eclipse sur mon mac je me trouve confronté au problème de l’autocompletion « ctrl+ space » qui ouvre spotlight. Et à chaque fois j’oublie comment faire pour modifier cela. Donc je vous fait un petit pense bête qui me servira plus à moi qu’à vous. ;)

 

Donc dans le menu Eclipse>Preferences>Keys vous trouverez les valeurs suivantes que vous pourrez associer comme suit:
Word completion = alt + space

Content assist = cmd + space
Puis parfois l’autocompletion peut s’afficher toute seule en allant dans Eclipse>Preferences>TextEditors> advanced to select autocompletion

 

Voilà

So Enjoy!

Git qu'est ce que c'est bien….

Hello,

 

Il y a peu j’étais sur SVN pour mes dev et j’avais souvent des problèmes de cohérence suite à la suppression d’une classe notamment… Du coup je suis passé sur Git et c’est trop bien ça gère bien son développement. Merci Linus Torvald (M. Linux) !!!

Donc je me suis installé un petit serveur tomcat (je vous laisse vous débrouiller pour trouver ça) dans lequel j’ai publié gitblit qui n’est rien d’autre qu’un serveur git qui tourne sur une plateforme Java (Tomcat dans mon cas) avec une belle interface. Tout ça avec une installation toute simple! Et puis c’est propre, on peut localiser ses fichier à un endroit bien précis du disque, ça tient dans un war et surtout si vous voulez l’enlever vous le dépubliez et voilà.

Bref je vous laisse regarder sur le site gitblit pour l’installation .

 

Ensuite c’est du git… quoi rien de sorcier

1) vous créez votre repository depuis l’interface web de votre gitblit  http://localhost:8080/gitblit-0.9.3/

2)Faites un clône depuis un ordinateur (le même ou de votre réseau)

git clone http://user@xxx.xxx.xxx.xxx:8080/gitblit-0.9.3/git/helloworld.git/

3) si vous bossez sous eclipse vous n’avez plus qu’à ajouter un repository git et d’importer le working Directory qui vous intéresse.

4) Après des modifications il faudra faire un commit pour rafraichir le repository local et un push pour le repository distant. Par exemple

git add HelloWorld.java

git commit -m « mise à jour »

git push http://user@xxx.xxx.xxx.xxx:8080/gitblit-0.9.3/git/helloworld.git/ master

 

[UPDATE] un petit tuto fort sympathique sur git c’est toujours bien de l’avoir sous le coude :)

So enjoy!

 

On m'a volé mon ordinateur ! c'est pas grave…


Hello,

 

Hier je regardais une video d’un hacker qui raconte avec humour ses péripéties pour récupérer son ordinateur volé.

C’est alors que je me suis posé « la » question mais que deviendrais je sans mon ordi ?? Mon ordi que j’aime tant et sur lequel je passe toutes mes journées depuis l’âge de 2ans (j’exagère un peu…).

Déjà je pleure ;(

Ensuite, même avec des backups, je n’ai pas envie de repasser autant de temps à tout réinstaller ou reparamétrer…

Alors je me suis fait une petite appli qui se lance au login mon ordi (même pour le compte invité) et permet d’envoyer mon ip externe à un site web en php pour stocker ça dans une base de données.


Ainsi je peux suivre l’adresse ip à chaque connexion de mon ordi…même en session invité (c’est même fait exprès car évidemment ma session perso est « passwordé ») et donc si je me fais voler mon ordinateur peut être que ça pourra m’aider à le retrouver . Je l’ai fait pour mac mais cela est très simple à modifier pour que cela fonctionne sur Windows (cette partie là est même déjà en place dans le code java) ou linux

 

Le principe de l’application est assez simple:

1) au démarrage de l’ordinateur un script lance l’appli java. (Il faudra paramétrer le lancement du script en fonction de votre os, un bat sur windows ou sh sur mac et linux)

2) celle ci va consulter le script whatsmyip.php afin de récupérer son adresse ip

3) ensuite l’appli va envoyer en argument l’ip fraichement récupérée au script storemyip.php

4) et voilà le tour est joué, l’appli java se ferme.

5) vous pourrez consulter l’historique date et ip des 50 dernières connexions avec le script consultmyip.php

 

Voici un petit schéma du détail:

 

 

Reprenons point par point:

(pour les sources évitez les copier/coller à la fin du tuto vous retrouverez un lien pour tout télécharger directement)

1) l’appli Java sur votre ordinateur

 

Vous trouverez le zip avec le code source de l’appli à télécharger ici

Dans cette appli vous trouverez un fichier config/config.properties qui contient les urls de votre server php. Il faudra juste remplacer your.url.com par votre url (si vous conservez la même implantation de fichier sur votre serveur php évidemment)

org.galaxy.url.setmyip=http://your.url.com/storemyip.php

org.galaxy.url.whatsmyip.url=http://your.url.com/whatsmyip.php

Ensuite il ne reste plus qu’à paramétrer l’exécution de votre appli java au démarrage de votre ordinateur.
voici quelques liens pour faire cela. exemple de login hook sur mac: lien1 lien2 lien3
Le script à exécuter se trouve dans le zip, il lance juste le jar. Attention le script doit être exécutable évidemment (sudo chmod +x tracer.sh)
L’appli est assez longue à l’exécution (30sec) mais c’est voulu pour permettre la connexion wifi ou ethernet d’être en place avant de tenter de faire de requêtes sur le web. Bon après votre ordinateur met 30 secondes à s’allumer, je pense que ça peut être réduit (en diminuant la tempo dans le code) ou fait autrement mais moi ça me convient pour le moment.

2) Whatsmyip.php

Ce script vous permet de récupérer l’adresse ip vue de l’extérieur. Un script très simple
<?php
$ip = getenv(« REMOTE_ADDR ») ;
Echo $ip;
?>

3) storemyip.php

Ce script vous permet d’inscrire en base votre adresse ip. Un script très simple, il vous faudra mettre vos paramètres en place dans le fichier.
<?php
// information pour la connection à le DB
$host = ‘localhost‘;
$user = ‘user‘;
$pass = ‘pass‘;
$db = ‘db‘;
$ip = ip2long ( $_GET[‘ip’]);
$us32str = sprintf(« %u »,$ip);
$ip2=long2ip(-(4294967296-$us32str));
$link = mysql_connect ($host,$user,$pass) or die (‘Erreur : ‘.mysql_error() );
mysql_select_db($db) or die (‘Erreur :’.mysql_error());
$insert = « INSERT INTO connexion (date, adresseip) VALUES (NOW(), ‘$ip2′) »;
$result = mysql_query($insert,$link) or die (‘Erreur : ‘.mysql_error() );
?>
Bien sûr il vous faudra une base de donnée Mysql pour écrire dedans, voici le script de création de la table:
CREATE TABLE IF NOT EXISTS `connexion` (
`index` int(11) NOT NULL auto_increment,
`date` datetime NOT NULL,
`adresseip` text NOT NULL,
PRIMARY KEY  (`index`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

3) consultmyip.php

Le travail de stockage est fini maintenant si vous voulez consulter les 50 dernières connexions (50 c’est pour la lisibilité) voici le script:
<html>
<body>
<?php
// information pour la connection à le DB
$host = ‘host‘;
$user = ‘user‘;
$pass = ‘pass‘;
$db = ‘db‘;
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die (‘Erreur : ‘.mysql_error() );
mysql_select_db($db) or die (‘Erreur :’.mysql_error());
// requête SQL qui compte le nombre total d’enregistrements dans la table
//et qui récupère tous les enregistrements
$select = « SELECT date,adresseip FROM connexion ORDER BY date DESC »;
$result = mysql_query($select,$link) or die (‘Erreur : ‘.mysql_error() );

$total = mysql_num_rows($result);

// si on a récupéré un résultat on l’affiche.

if($total) {
// début du tableau
echo ‘<table bgcolor= »#FFFFFF »>’. »n »;
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo ‘<tr>';
echo ‘<td bgcolor= »#669999″><b><u>Date</u></b></td>';
echo ‘<td bgcolor= »#669999″><b><u>Adresse IP</u></b></td>';
echo ‘</tr>’. »n »;
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    $compteur=0;
while($row = mysql_fetch_array($result) and $compteur<=100) {
echo ‘<tr>';
echo ‘<td bgcolor= »#CCCCCC »>’.$row[‘date’].'</td>';
echo ‘<td bgcolor= »#CCCCCC »>’.$row[‘adresseip’].'</td>';
echo ‘</tr>’. »n »;
$compteur++;
}
echo ‘</table>’. »n »;
// fin du tableau.
}else echo ‘Pas d’enregistrements dans cette table…';
// on libère le résultatmysql_free_result($result);
?>
</body>
</html>
Et voilà vous pouvez suivre les ip à chaque connexion de votre ordinateur sur le net. Sachant qui ip peut se localiser relativement facilement, en plus  je vous conseille de mettre vnc, et ssh en route (cf. la video précédente) pour aller un peu plus loin ^^
Vous trouverez toutes les sources java, php et mysql à télécharger ici, notez que si vous souhaitez mettre en place l’application il faudra coller le répertoire tracer à la racine de votre système et faire un loginhook sur le tracer.command

ps: on peut imaginer une requête inverse qui en cas de vol autodétruirait l’ordi ^^ quoi je regarde trop la télé… :p

Enjoy

 

Tagged , , , , , , , ,

Je suis obfusqué !

Hello,

 

Je me posais un problème sur le reverse engineering de mon code java. J’ai installé JAD (un décompilateur qui a aussi un plugin pour eclipse) et je peux lire dans mon code super facilement… Non pas que je ne souhaite pas libéré mon code mais j’ai mis à disposition une API pour qu’il soit possible d’en faire le maximum.

 

Donc j’ai trouvé un très bon article qui explique comment faire tout ça.

Si vous recherchez à faire ça automatiquement à partir de maven ya un plugin maven.

 

Bon pour ma part j’ai un petit problème à la mavenéisation mais c’est en passe d’être résolu…enfin j’espère

Enjoy !

Processing and Java

Hello,

 

Je suis en train de produire une petite app pour mon projet (je vous en parlerai un peu plus tard…) et donc tout ça se passe en Java. Normal vu que c’est le langage sur lequel je me focalise…

Je viens de jouer avec Processing et je trouve ça vraiment puissant ! On peut déployer son application sur pas mal de plateforme et super simplement. Du coup en regardant un peu on peut fabriquer nos propres librairie et en plus depuis eclipse !  ^^ je sens que je vais me faciliter la vie :)

 

Intégration sous eclipse

un petit learning

le wiki de processing

 

Enjoy !!

Java…mais avec DP !!

Hello,

Donc si vous suivez un peu mon blog vous savez que je me suis lancé dans la programmation Java et je tiens donc à vous conseiller des petits trucs de temps en temps…

Première chose: il ne faut pas passer à côté des Designs Patterns. C’est des conseils pour développer vos applications pour que ce soit plus efficace. Pour cela je peux vous conseiller un bouquin idéal pour ça même s’il est un peu bizarre (attention la drogue c’est mal…vous comprendrez en lisant ce livre)

Sinon il y a des sites très bien fait qui expliquent cela comme par exemple celui-ci.

Deuxième chose : c’est bien beau de se lancer dans le dev mais n’importe qui peut le faire ! mais pas tout le monde peut bien le faire pour que ce soit lisible, maintenable… donc ce bouquin est à lire de tout urgence. Il est plutot lourd mais il vaut vraiment le coup !

 

Enjoy !

Le debug série d'un arduino Mac OSX

Hello !

Alors mission du jours travailler sur du port série et regarder ce qu’il s’y passe. Par exemple si comme moi vous voulez faire une discussion série entre un arduino et un soft de votre composition le soucis c’est qu’une fois la connection établie sur le port série et le soft personne d’autre ne peut s’y connecter… Même avec toute la meilleur volonté du monde des debuggeurs dont vous faites parti si vous rencontrez un problème vous risquez de ramer longtemps pour trouver la cause du problème même avec des serial.print().

Le but du jeu ici est de mettre en place un espion qui va recevoir/envoyer sur le même port série que l’arduino. Les ports de sortie 0 et 1 de l’arduino correspondent à ce qui se déroule en RX/TX sur l’avr. Il ne vous suffit que de trouver un petit appareil UsbToUart ça coute presque rien. (je vous conseille peut être un USB to FTDI ça vous fera l’économie d’un drivers à installer et le résultat sera le même)

Dans mon cas, j’ai pris un UsbToUART avec un CP2102… donc il faut pour commencer un nouveau drivers :( vous trouverez cela directement sur le site du fabricant du composant Il est dispo pour plein d’os (moi je n’ai testé que sur Mac OSX)
Une fois le drivers installé et la machine redémarrée en branchant votre clé UsbToUart vous pourrez exploiter le port série.
Pour cela je vous conseille un terminal série vous pourrez bien utiliser la commande du terminal

moon:fred$>ls /dev/tty.*

Vous aurez comme résultat tous ce qu’il y a en usb sur votre ordinateur. C’est intéressant pour récupérer le nom de ce nouvel appareil pour la suite.

moon:fred$>screen portname datarate

Cela vou affichera le retour sur le port série.
Bon de cette façon, c’est mignon mais ce ne permet pas d’envoyer de données (TX) mais que de recevoir(RX). Donc ce que je vous conseille c’est de télécharger une petite appli qui s’appelle coolterm (c’est ce que j’utilise) ou bien Zterm ça marche aussi…

 

Après niveau branchements c’est simple RX de l’usbtouart sur RX de l’arduino et TX de l’usbtouart sur TX de l’arduino. Ca peut paraitre bizarre mas c’est comme ça soit le nommage de l’usbtouart ou de l’arduino est noté à l’inverse (car normalement le TX est branché sur le RX et le RX sur le TX). Au pire si vous recontrer un petit soucis faut intervertir et le résultat devrait apparaître.

Puis n’oubliez pas de brancher le GND. Je suis un peu un boulet ou plutot un n00b et j’ai mis le temps à comprendre pourquoi ça buggait… :)

 

Je me suis fait une petite boite portable pour faire mes devs tranquillou. Voilà ce que ça donne:

 

Vous lancez sur le port usb de votre debuggueur usbtouart. Et voilà facile la vie :)

Cette solution est à mon goût plus intéressante car on récupère brut de fonderie ce qui ce passe entre l’arduino et le soft qui communiquent. Cela va vous permettre de vraiment suivre la discussion.

Autrement il est possible d’utiliser d’autres port série que les port 0 et 1 de sortie de l’arduino grâce à serial ou à la librairie softwareserial et d’y afficher certaine choses si vous le souhaitez.
[UPDATE]
Voici un petit lien à consulter pour mettre en place un port virtuel et ne pas être embêté lors d’un problème de connexion
Voilà enjoy!

Tagged , , ,