mailto: blog -at- heyrick -dot- eu

Navi: Previous entry Display calendar Next entry
Switch to desktop version

FYI! Last read at 22:59 on 2024/05/06.

Uh... this stuff is in French?

Yup. The British government has gone and signed Article 50 (and then the wheels fell off...) so expect me to inflict my crappy French upon the world more frequently.

 

IPCAM hacking

C'est pour mon IPCAM, un MCL IP-CAMD610AW. Ces informations peut appliquer aussi pour FOSCAM, WANSCAM, et autres qui bien ressemble mon IPCAM - Wansview NCL610W pour exemple? Aucun garantie, mais on peut essayer, non?

 

Originalement, quand je connecté au serveur web du IPCAM, j'ai eu vu:

C'est bien lente à charger sur une téléphone portable, même avec 3G. Donc, j'examine pour trouver le raison, et un solution.

Alors, ca que vous voir là compte pour environ 180Ko avec 11 demandes séparées. Une demande, pour jquery.min.js, compte pour 96Ko pour... pour quoi? C'est un très bon question!

 

Retrouver les fichiers d'origine

Pour créer les modifications, j'ai copié les fichiers sur mon Pi avec le server FTPs. Mettre en place FTPs pour traiter $.Public comme dossier de base et avec le utilisateur "root" avec un mot de passe. Créé les dossiers $.Public.system et $.Public.system.www.

Connectez-vous sur l'IPCAM avec telnet (Hearsay, Nettle, etc), et le nom root et mot de pass 123456:

Connecting to 192.168.1.20,23
Connected

(none) login: root
Password:


BusyBox v1.12.1 (2012-11-16 09:54:14 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands

#

Aller au dossier des fichiers web, puis demarrer ftp, connecter au Pi, et transférer les fichiers (c'est nous qui tapper les caractères en gros ☺):

# cd system/www
# /system/system/bin/ftp
ftp> open 192.168.1.10
Connected to 192.168.1.10.
220 Service ready for new user.
Name (192.168.1.10:root): root
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
ftp> cd system/www
200> Command okay.
ftp> binary
200> Command okay.
ftp> prompt
200> Command okay.
ftp> mput *
Les fichiers (~1.3Mo) ont copie dans quelques secondes.

 

Faire des sauvegardes

Tapez exit pour quitter ftp, et faire un copie de l'originale de les fichiers nous modifier bientôt:
# cp index.htm index.backup.htm
# cp config.htm config.backup.htm
# cp jpeg.htm jpeg.backup.htm
# cp mobile.htm mobile.backup.htm
# cp public.js public.backup.js

 

Comment il marche?

Pour information - le fichier index.htm contient un iframe. Dans cet cadre, il peut charger: Attention - touts les fichiers sont ".htm" sauf pour "jpeg.html".

 

Un meilleur voie

Pensez...

Accès vers le mode MJPEG (navigateur puissant), mode photos (navigateur simple), directement vers le flux MJPEG sans contrôle de camera, et enfin directement vers les options du camera sans besoin de passer au mode MJPEG avant.
Et, en plus, il compte que trois demandes et 1.70Ko en totale! Génial!

Je jettera le mode MSIE. Un ActiveX? En 2017? Putain, NON!

 

Une nouvelle index.htm

<head>
<!-- Simpler camera web interface, by Rick Murray 2017/04/05 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="date" content="0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="0">
<title>Rick's tilt'n'turn camera</title>

<script src="get_status.cgi"></script> <!-- device identity -->
<script src="login.cgi"></script>      <!-- who I am        -->
</head>

<body text="white" bgcolor="black" link="cyan" vlink="cyan" alink="blue">
<h1>Rick's tilt'n'turn camera</h1>
<h3 style="margin-top: -20px;">(<script type="text/javascript">
document.write(deviceid+': '+loginuser+', ');
if (pri == 255)
   document.write('<i>admin</i>');
else
   document.write('viewer');
</script>)</h3>

<ul>
<li><a href="jpeg.html"><b>MJPEG mode</b> (full control)</a>
<br /><br />
<li><a href="mobile.htm"><b>Image mode</b> (simple)</a>
<br /><br />
<li><script type="text/javascript">document.write('<a href="videostream.cgi?loginuse='+loginuser+'&loginpas='+loginpass+'">');
</script><b>Video stream</b> (direct link)</a>
<br /><br />
<script type="text/javascript">
if (pri == 255)
   document.write('<li><a href="config.htm"><b>Setup</b></a>');
</script>
</ul>
</body>
</html>

Il y trois morceaux de Javascript:

<script type="text/javascript">
document.write(deviceid+': '+loginuser+', ');
if (pri == 255)
   document.write('<i>admin</i>');
else
   document.write('viewer');
</script>
Ici il dire l'identification unique de le camera et votre nom de utilisateur. Après votre nom, il report "admin" si vous êtes l'administrateur, ou "viewer" autrement.
Actuallement, il y un troisième option, "opérateur", mais pour nous, vous êtes admin...ou pas.

<script type="text/javascript">document.write('<a href="videostream.cgi?loginuse='+loginuser+'&loginpas='+loginpass+'">');</script>
Ici nous a besoin d'un lien directe vers http://192.168.1.20/videostream.cgi?loginuse=USER&loginpas=PASS. Une risque de sécurité de mettra les données en clair comme ça? Bien sûr, mais cet camera fait ça tous les temps - sniffer les paquets!
L'information sur nom d'utilisateur et mot de passe retrouvé par login.cgi est valable uniquement après un bon connexion.

<script type="text/javascript">
if (pri == 255)
   document.write('<li><a href="config.htm"><b>Setup</b></a>');
</script>
Enfin, le lien pour reconfigurer le camera apparu uniquement si vous êtes administrateur.

 

Autres corrections

Si nous appeler les fichiers directement, il casse le choses qu'anticiper de rester sur le cadre "iframe". Pour régler cet problème, charger le fichier jpeg.html et cherche en haut pour:
<link rel="stylesheet" href="obj.css" type="text/css">

<script>

Juste après le ligne <script>, ajouter:

var cookieuser = loginuser;
var cookiepass = loginpass;
var cookiepri = pri;

Alors - attendre un petit moment - c'est tout en Anglais!
Oui, c'est vrai, mais nous peut corriger. En haut cherchez la ligne:

<script type="text/javascript src="public.js"></script>
Et juste dessus (pas dessous!), ajouter:
<script>var language = 3</script>
Les langues: 0 (ou pas specifié) for English, 1 para español, 2 für deutsch, 3 pour française, 4 per l'italiano, 5 dla polskiego, 6 한국을 위해 (Coréen), 7 为中文 (Chinois simple), 8 為中文 (Chinois traditionnel), 9 日本のために (Japonaise), et 10 para portugues.

Faire pareil pour mobile.htm (qui dire correctement script language="javascript"!), et aussi dans config.htm.

En dernier chose. L'option "Back" ("Visualisation" en française) sur l'écran de configuration ne marche plus. Un petit modification sur public.js réparer le problème. Ouvrir cet fichier et cherche pour le fonction gobackpage (environ moitié). Changer cet fonction comme:

function gobackpage()
{
	//alert(top.goback_page);

	if (top.goback_page == null)
	   window.history.back();
	else
  	   location=top.goback_page;
}

C'est tout.

 

Placer les fichiers sur le camera

Sur le camera, connecter un fois plus au server FTP et charger les fichiers modifié:
# cd /system/www
# /system/system/bin/ftp
ftp> open 192.168.1.10
Connected to 192.168.1.10.
220 Service ready for new user.
Name (192.168.1.10:root): root
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
ftp> cd system/www
200> Command okay.
ftp> binary
200> Command okay.
ftp> get index.htm
[...]
ftp> get jpeg.html
[...]
ftp> get mobile.htm
[...]
ftp> get config.htm
[...]
ftp> get public.js

Sur votre navigateur, connectez-vous au camera pour voir les changes.

Quand vous est heureux, déconnectez-vous sur telnet:

ftp> exit
426 Connection closed; transfer aborted.
# exit

Disconnected by remote

Voilà, une liste des options vite, légère, et simple.

 

Heureux hacking!

 

 

Your comments:

Hugues, 2nd May 2017, 10:09
Sympa le hack de ces petites caméras je l'avais réalisé sur une caméra à base de processeur mips.  
Tu utilise toujours ton RiscPC? J'utilise toujours ton dossier sur l'assembleur arm que tu as réalisé il y a maintenant bien longtemps.

Add a comment (v0.11) [help?]
Your name:

 
Your email (optional):

 
Validation:
Please type 50527 backwards.

 
Your comment:

 

Navi: Previous entry Display calendar Next entry
Switch to desktop version

Search:

See the rest of HeyRick :-)