Tråd: Låsa upp Huawei modem.
Efter en stunds fifflande och trixande med mitt Huawei modem snubblade jag in på ämnet upplåsning. Det hela visade sig vara mycket enkelt och fungerar troligtvis för mer eller mindre alla dagens huawei modem. Följande guide beskriver "magin" bakom de uppåsningstjänster man har mage att ta betalt för:
Först och främst behövs en metod att kommunicera med modemet på. Det finns givetvis massvis med program till detta men för de av er som är windowsanvändare och inte har sysslat med sådant tidigare kan jag rekommendera PuTTY. Börja med att sätta i modemet och ta reda på vilken COM-port det hamnar på. Detta görs enklast genom att lokalisera modemet under fliken Modem i enhetshanteraren och kika under fliken "Modem" under denna. Någonstans längst upp står det exempelvis "Port: COM10".
Nästa steg är att öppna PuTTY, växla till "Serial" och fylla i tidigare funna COM-port under "Serial line". Ibland krävs även att man växlar till "Force on" under "Local echo:" i kategorin "Terminal" i menyn till höger för att input ska synas i terminalen.
Efter att ha öppnat en terminal testa skicka kommandot AT till modemet genom att skriva det i terminalen och trycka enter. Strax nedanför bör nu ett OK synas. Detta är svaret från modemet.
Nästa steg är att skicka AT+CPIN? för att se om modemet är pinskyddat. Om svaret är +CPIN: READY är simkortet redan upplåst men om svaret är +CPIN: SIM PIN väntar modemet på pin. Skicka detta genom att skriva AT+CPIN=xxxx där xxxx är pinkoden till modemet. Upprepa AT+CPIN? för att säkerställa att modemet är färdigt.
Kommandot ATI returnerar viss information om modemet. Det värde vi är intresserad av är imei-numret. Detta ska nämligen användas för att generera den upplåsningskod som behövs. Algoritmen och viss kod finns beskriven på följande address: http://forum.gsmhosting.com/vbb/f83/hua … ll-946136/
Även pythonkoden nedan är (med ett par mindre ändringar) från samma address:
import hashlib
def getCode(imei, salt):
digest = hashlib.md5((imei+salt).lower()).digest()
code = 0
for i in range(0,4):
code += (ord(digest[i])^ord(digest[4+i])^ord(digest[8+i])^ord(digest[12+i])) << (3-i)*8
code &= 0x1ffffff
code |= 0x2000000
return code
# Your IMEI goes here:
imei = "123456789012347"
print "Unlock code: %s" % getCode(imei, "5e8dd316726b0335")
print "Flash code: %s" % getCode(imei, "97b7bc6be525ab44")
Koden talar för sig själv, byt ut imei nummret mot ert och kör med python. Det intressanta nummret för upplåsning är den 8 siffriga unlock koden. Vad Flash code är vet jag inte riktigt, men anar att det har med flashning att göra.
Sjävla upplåsningen görs genom att skicka AT^CARDLOCK="12345678" där 12345678 är unlock koden från pythonscriptet ovan.
Klart!
Alla kommandon kan göras busenkelt i linux.
cat /dev/ttyUSB0 &
(om ttyUSB0 är modemet) för att se utmatning. Exempel på hur man kan skicka ett kommando:
echo -e "AT+CPIN?\r" > /dev/ttyUSB0
radslut behöver vara Carriage Return, dvs \r. Därav parametern -e