B4A Class [B4X] Account Class get a DeviceUID to create a account without registration

Discussion in 'Additional libraries, classes and official updates' started by Alexander Stolte, Jan 26, 2019.

  1. Alexander Stolte

    Alexander Stolte Well-Known Member Licensed User

    B4A and B4I Only

    with this Class you can create a Device UID.

    Creation Android:
    • App ID 'a fixed id on class global (Obfuscated) ' Example: 7038c50061d2e5db54e3bea7faf6a65ffaacd831
    • Phone Number on Simcard '"null"` if not provided by sim card (not all do this)
    • Hardware Serial 'android.os.Build.SERIAL
    • Device ID 'TelephonyManager.getDeviceId())
    • Subscriber ID 'TelephonyManager.getSubscriberId()` or `"null"
    • Sim Serial Number 'TelephonyManager.getSimSerialNumber()` or `"null"
    with this information, the class create a SHA256 Hash.

    Creation IOS:
    • App ID 'a fixed id on class global
    • Vendor Identifier
    with this information, the class create a SHA256 Hash.

    On IOS after uninstalling the App the Vendor ID is a other id, it is require to put the string in the keychain with:
    Code:
    pp.KeyChainPut("uid",ac.GetDeviceUID)
    and get:
    Code:
    pp.KeyChainGet("uid")
     

    Attached Files:

    fabricio, johndb, AnandGupta and 5 others like this.
  2. peacemaker

    peacemaker Well-Known Member Licensed User

    THanks for sharing. For B4J maybe some ID of motherboard and the processor ID can be got ?

    Seems, there is come codes for Windows OS
    Code:
    private static string GetUniqueHardwaeId()
            {
                
    StringBuilder sb = new StringBuilder();
     
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(
    "root\\CIMV2",
                      
    "SELECT * FROM Win32_Processor");
     
                foreach (ManagementObject queryObj 
    in searcher.Get())
                {
                    sb.Append(queryObj[
    "NumberOfCores"]);
                    sb.Append(queryObj[
    "ProcessorId"]);
                    sb.Append(queryObj[
    "Name"]);
                    sb.Append(queryObj[
    "SocketDesignation"]);
     
                    Console.WriteLine(queryObj[
    "ProcessorId"]);
                    Console.WriteLine(queryObj[
    "Name"]);
                    Console.WriteLine(queryObj[
    "SocketDesignation"]);
                
    }
     
                searcher = new ManagementObjectSearcher("root\\CIMV2",
                    "SELECT * FROM Win32_BIOS");
     
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    sb.Append(queryObj["Manufacturer"]);
                    sb.Append(queryObj["Name"]);
                    sb.Append(queryObj["Version"]);
     
                    Console.WriteLine(queryObj["Manufacturer"]);
                    Console.WriteLine(queryObj["Name"]);
                    Console.WriteLine(queryObj["Version"]);
                }
     
                searcher = new ManagementObjectSearcher("root\\CIMV2",
                       "SELECT * FROM Win32_BaseBoard");
     
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    sb.Append(queryObj["Product"]);
                    Console.WriteLine(queryObj["Product"]);
                }
     
                var bytes = Encoding.ASCII.GetBytes(sb.ToString());
                SHA256Managed sha = new SHA256Managed();
     
                byte[] hash = sha.ComputeHash(bytes);
     
                return BitConverter.ToString(hash);
            }

    Code:
    #Include  <Crypt.au3>
    #Include  <WinAPI.au3>
     
    Global 
    Const $UHID_MB = 0x00
    Global 
    Const $UHID_BIOS = 0x01
    Global 
    Const $UHID_CPU = 0x02
    Global 
    Const $UHID_HDD = 0x04
     
    ConsoleWrite(_UniqueHardwaeIDv1() & @CR)
    ConsoleWrite(_UniqueHardwaeIDv1(BitOR($UHID_MB, $UHID_BIOS)) & @CR)
    ;ConsoleWrite(_UniqueHardwaeIDv1(BitOR($UHID_MB, $UHID_BIOS, $UHID_CPU)) & @CR)
    ;ConsoleWrite(_UniqueHardwaeIDv1(BitOR($UHID_MB, $UHID_BIOS, $UHID_CPU, $UHID_HDD)) & @CR)
     
    Func _UniqueHardwaeIDv1($iFlags = 
    0)
     
        Local $oService = ObjGet(
    'winmgmts:\\.\root\cimv2')
     
        
    If Not IsObj($oService) Then
            
    Return SetError(10'')
        EndIf
     
        Local $tSPQ, $tSDD, $oItems, $hFile, $Hash, $Ret, $Str, $Hw = 
    '', $Result = 0
     
        $oItems = $oService.ExecQuery(
    'SELECT * FROM Win32_ComputerSystemProduct')
        If Not IsObj($oItems) Then
            
    Return SetError(20'')
        EndIf
        
    For $Property In $oItems
            $Hw &= $Property.IdentifyingNumber
            $Hw &= $Property.Name
            $Hw &= $Property.SKUNumber
            $Hw &= $Property.UUID
            $Hw &= $Property.Vendor
            $Hw &= $Property.Version
        
    Next
        $Hw = StringStripWS($Hw, 
    8)
        
    If Not $Hw Then
            
    Return SetError(30'')
        EndIf
        
    If BitAND($iFlags, 0x01Then
            $oItems = $oService.ExecQuery(
    'SELECT * FROM Win32_BIOS')
            If Not IsObj($oItems) Then
                
    Return SetError(20'')
            EndIf
            $Str = 
    ''
            For $Property In $oItems
                $Str &= $Property.IdentificationCode
                $Str &= $Property.Manufacturer
                $Str &= $Property.Name
                $Str &= $Property.SerialNumber
                $Str &= $Property.SMBIOSMajorVersion
                $Str &= $Property.SMBIOSMinorVersion
    ;           $Str &= $Property.Version
            
    Next
            $Str = StringStripWS($Str, 
    8)
            
    If $Str Then
                $Result += 
    0x01
                $Hw &= $Str
            EndIf
        EndIf
        
    If BitAND($iFlags, 0x02Then
            $oItems = $oService.ExecQuery(
    'SELECT * FROM Win32_Processor')
            If Not IsObj($oItems) Then
                
    Return SetError(20'')
            EndIf
            $Str = 
    ''
            For $Property In $oItems
                $Str &= $Property.Architecture
                $Str &= $Property.Family
                $Str &= $Property.Level
                $Str &= $Property.Manufacturer
                $Str &= $Property.Name
                $Str &= $Property.ProcessorId
                $Str &= $Property.Revision
                $Str &= $Property.Version
            
    Next
            $Str = StringStripWS($Str, 
    8)
            
    If $Str Then
                $Result += 
    0x02
                $Hw &= $Str
            EndIf
        EndIf
        
    If BitAND($iFlags, 0x04Then
            $oItems = $oService.ExecQuery(
    'SELECT * FROM Win32_PhysicalMedia')
            If Not IsObj($oItems) Then
                
    Return SetError(20'')
            EndIf
            $Str = 
    ''
            $tSPQ = DllStructCreate('dword;dword;byte[4]')
            $tSDD = DllStructCreate('ulong;ulong;byte;byte;byte;byte;ulong;ulong;ulong;ulong;dword;ulong;byte[512]')
            For $Property In $oItems
                $hFile = _WinAPI_CreateFile($Property.Tag, 
    200)
                
    If Not $hFile Then
                    ContinueLoop
                EndIf
                $Ret = DllCall(
    'kernel32.dll', 'int', 'DeviceIoControl', 'ptr', $hFile, 'dword', 0x002D1400, 'ptr', DllStructGetPtr($tSPQ), 'dword', DllStructGetSize($tSPQ), 'ptr', DllStructGetPtr($tSDD), 'dword', DllStructGetSize($tSDD), 'dword*', 0, 'ptr', 0)
                If (Not @error) And ($Ret[0]) And (Not DllStructGetData($tSDD, 5)) Then
                    
    Switch DllStructGetData($tSDD, 11)
                        
    Case 0x030x0B ; ATA, SATA
                            $Str &= $Property.SerialNumber
                    EndSwitch
                EndIf
                _WinAPI_CloseHandle($hFile)
            
    Next
            $Str = StringStripWS($Str, 
    8)
            
    If $Str Then
                $Result += 
    0x04
                $Hw &= $Str
            EndIf
        EndIf
        $Hash = _Crypt_HashData($Hw, $CALG_MD5)
        
    If @error Then
            
    Return SetError(40'')
        EndIf
        $Hash = StringTrimLeft($Hash, 
    2)
        
    Return SetError(0, $Result, '{' & StringMid($Hash, 1, 8) & '-' & StringMid($Hash, 9, 4) & '-' & StringMid($Hash, 13, 4) & '-' & StringMid($Hash, 17, 4) & '-' & StringMid($Hash, 21, 12) & '}')
    EndFunc   ;==>_UniqueHardwaeIDv1
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice