Récupérer les codes imei, imsi, oem [managed tapi]

Soyez le premier à donner votre avis sur cette source.

Vue 36 641 fois - Téléchargée 987 fois

Description

J'ai créé un exemple sur l'utilisation de la bibliothèque TAPI pour récupérer des informations sur la machine
Dans cette source: les informations à récupérer sont:
La résolution horizontale (sans api).
La résolution verticale (sans api).
-------------------------------------
Utilisation de la biblio TAPI pour récupérer:
Le code IMEI (International Mobile Equipment Identity).
Le code IMSI (International Mobile Subscriber Identity).
L'OEM (Original Equipment Manufacturer).
Le model de la machine.
Le numéros de révision.
---------------------------------------
J'ai inclus aussi le projet Tapi wrapper for managed code (Code source de la biblio Managed Tapi)
Mais il y a quelques problèmes,
L'application marche très bien avec les version Windows Mobile 2003 et (-) mais elle nécessite un certificat pour qu'elle marchera avec les versions 5 et 6 de Windows Mobile
Donc il est necessaire d'obtenir un certificat et signer les deux projet (tapi et l'application qui l'utilise) pour l'executer.

L'utilité du code,
L'IMEI est généralement utiliser pour générer les cles des produits pour les sécuriser.

Source / Exemple :


using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using OpenNETCF.Tapi;
// Référence a ajouter : Biblio TapiLib.dll
namespace Tapi_IMEI_EMSI_OEM
{
    public partial class frmMain : Form
    {
        // fonctions des dll PINVOKE.
        [DllImport("cellcore.dll")] 
        internal static extern int lineGetGeneralInfo(IntPtr hLine, byte[] bCache);
        //OEM:pour Original Equipment Manufacturer
        //IMSI:pour International Mobile Subscriber Identity 
        //IMEI:pour International Mobile Equipment Identity
        internal struct GeneralInfos
        {
            internal string OEM;
            internal string Model;
            internal string Revision;
            internal string IMEI;
            internal string IMSI;
        }
        public frmMain()
        { 
            InitializeComponent(); 
        }

        static public String GetDisplayHorzRes()
        { 
            return Screen.PrimaryScreen.Bounds.Width.ToString(); 
        }
        static public String GetDisplayVertRes()
        { 
            return Screen.PrimaryScreen.Bounds.Height.ToString(); 
        }

        internal static GeneralInfos GetGeneralInfos()
        {
            //Creation d'un objet Tapi
            Tapi t = new Tapi();
            t.Initialize();
            //Objet line
            Line l = t.CreateLine(0, LINEMEDIAMODE.INTERACTIVEVOICE, LINECALLPRIVILEGE.MONITOR);
            //Reservation d'un espace mémoire pour la lecture des infos.
            byte[] buffer = new byte[512];
            BitConverter.GetBytes(512).CopyTo(buffer, 0);
            // Lecture des infos, vérification du resultat de l'opération.
            if (lineGetGeneralInfo(l.hLine, buffer) != 0)
            {
                throw new System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error(), "TAPI Error: " + System.Runtime.InteropServices.Marshal.GetLastWin32Error().ToString("X"));
            }
            // preparations pour l'extraction des informations.
            GeneralInfos gi = new GeneralInfos();

            // OEM.
            int manuSize = BitConverter.ToInt32(buffer, 12);
            int manuOffset = BitConverter.ToInt32(buffer, 16);
            gi.OEM = System.Text.Encoding.Unicode.GetString(buffer, manuOffset, manuSize);
            gi.OEM = gi.OEM.Substring(0, gi.OEM.IndexOf(Convert.ToChar(0)));
            
            // Model        
            int modelSize = BitConverter.ToInt32(buffer, 20);
            int modelOffset = BitConverter.ToInt32(buffer, 24);
            gi.Model = System.Text.Encoding.Unicode.GetString(buffer, modelOffset, modelSize);
            gi.Model = gi.Model.Substring(0, gi.Model.IndexOf(Convert.ToChar(0)));
            
            //Révision
            int revSize = BitConverter.ToInt32(buffer, 28);
            int revOffset = BitConverter.ToInt32(buffer, 32);
            gi.Revision = System.Text.Encoding.Unicode.GetString(buffer, revOffset, revSize);
            gi.Revision = gi.Revision.Substring(0, gi.Revision.IndexOf(Convert.ToChar(0)));

            //IMEI
            int IMEI = BitConverter.ToInt32(buffer, 36);
            int IMEIoffset = BitConverter.ToInt32(buffer, 40);
            gi.IMEI = System.Text.Encoding.Unicode.GetString(buffer, IMEIoffset, IMEI);
            gi.IMEI = gi.IMEI.Substring(0, gi.IMEI.IndexOf(Convert.ToChar(0)));

            //IMSI
            int IMSIsize = BitConverter.ToInt32(buffer, 44);
            int IMSIoffset = BitConverter.ToInt32(buffer, 48);
            gi.IMSI = System.Text.Encoding.Unicode.GetString(buffer, IMSIoffset, IMSIsize);
            gi.IMSI = gi.IMSI.Substring(0, gi.IMSI.IndexOf(Convert.ToChar(0)));
            
            l.Dispose();
            t.Shutdown();
            return gi;
        }
        private void frmMain_Load(object sender, EventArgs e)
        {
            GeneralInfos gi = GetGeneralInfos();

            lblHorizRes.Text +=  GetDisplayHorzRes();
            lblVertRes.Text += GetDisplayVertRes();
            lblIMEICode.Text += gi.IMEI;
            lblIMSICode.Text += gi.IMSI;
            lblOEM.Text += gi.OEM;
            lblModel.Text += gi.Model;
            lblRevision.Text += gi.Revision;
        }

        private void mnuQuit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Conclusion :


Voici un article pour signer l'application
http://msdn.microsoft.com/fr-fr/library/ms839681(en-us).aspx

La biblio TapiLib est un wrapper pour c# et vb.net permettant l'utilisation de l'api native de téléphonie (Telephony API) mais son utilisation nécessite l'obtention d'un certificat.
visiter le site http://www.mobile2market.net

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012

Bonjour boutemine,
C'est justement ce dont j'avais besoin...
Merci bcp pour ces renseignements précieux...
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1
On est tous étudiants :)
Tu peux utiliser les certificats gratuit d'essai livrés avec le SDK
http://www.boutemine-oualid.qsh.me/post/Developpement-NET-Compact-Framework-LA-SECURITE-WINDOWS-MOBILE-6-ILLUSTREE-PAS-A-PAS.aspx
Messages postés
159
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
7 mai 2012

Bonjour boutemine,
Etant étudiant, je me vois mal acheter un certificat, donc si pas hasard tu aurais un système pour éviter cet achat et donc me permettre d'utiliser le code que tu proposes.
Je veux faire un antivol et j'ai donc besoin d'accéder au données système de la carte sim
Merci
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1
AH OK, j'ai compris, comme j'ai dis, il faut que l'application soit signé par un certificat car l'utilisation de l'API TAPI necessite des droits d'administration

http://boutemine-oualid.blogspot.com/2008/09/dveloppement-net-compact-framework-la.html
Messages postés
26
Date d'inscription
mercredi 5 mars 2003
Statut
Membre
Dernière intervention
11 mai 2011
2
Rebonjour Boutemine,

L'idée est bonne mais ineficace. Lorsque je change de type de projet pour "Windows Mobile 6.0 Standard", lorsque je démarre l'appication j'ai un erreur d'opération et n'affiche rien par la suite comme données. Est-ce que tu as déjà fait du portage vers "WiMo 6 std" et as-tu dû modifier des paramètres.

Merci
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.