Jolla 1 zurücksetzen ohne PIN?

  • Hallo zusammen,


    da mein Jolla 1 mittlerweile lange genug in der Ecke gelegen hat wollte ich es mal zum Verkauf anbieten und zuvor natürlich zurück setzen. Dabei bin ich allerdings auf ein Problem gestoßen: mir fällt mein alter PIN nicht mehr ein :/ Also habe ich in der Hoffnung, dass man dort ohne weiteres einen Reset mache kann, den Recovery Mode angeworfen. Leider auch Fehlanzeige. Da hat Jolla echt gute Arbeit geleistet :thumbup: Dummerweise habe ich im Netz bisher keine anderen Do-it-yourself-Lösungen gefunden. Die einzige weitere Option, die ich noch gefunden habe, ist, das Handy an Jolla zu schicken, nur dürfte da der Hin- und Rückversand recht Nahe am Gerätewert liegen und damit unrentabel sein.


    Kennt hier jemand einen Trick um das Jolla 1 ohne den PIN zu kennen zurücksetzen zu können?


    lg Andreas

  • Da gibt's doch auch was von Ratio... es soll einen "Trick" über Fastboot geben.
    https://together.jolla.com/que…r-devicelock-without-pin/
    https://together.jolla.com/que…4037/fastboot-on-jolla-1/


    Fairerweise muss man aber auch sagen, dass ich deine Misere verstehen kann, andererseits bin ich hin- und hergerissen.
    Es sollte meiner Meinung nach nicht möglich sein ein Gerät mit einem Trick, den ein "Script Kiddie" hinbekommt, zu entsperren.
    Neu flashen, okay. Dann sind die Daten hin. Aber unlock ist so eine Sache.
    Da Jolla leider keine Firmware für das Jolla 1 bereitstellt habe ich dir mal diese Hinweise an die Hand gegeben.


    Beste Grüße - med

    IT Security Engineer
    Fachinformatiker / Systemintegrator | GNU / Linux Admin


    Die Sprache der Menschen ist einzigartig aber nicht eindeutig.
    Das Verständnis des Gesagten hängt vom Wohlwollen des Gegenüber ab.

  • Puh, Jolla-Hacking. Das ist mühsamer als gedacht...


    Also erstmal danke für deine Links, @medProfiler! Leider habe ich es nicht geschafft mein Jolla per Fastboot anzusprechen. Die Android-SDK-Tools 28 kennen den Parameter -i gar nicht erst. Version 27 hat den Parameter noch, aber auch damit ist es mir nicht gelungen es per fastboot -i 0x2931 devices zu finden. Der Recovery-Mode an sich funktioniert aber, denn per telnet komme ich drauf.


    Bei meiner weiteren Suche ist mir aber eingefallen, dass ich damals SSH-Access erlaubt hatte. Nach etwas raten hatte ich das richtige PW erraten und kann damit per SSH mit root-Rechten arbeiten. Dummerweise habe ich noch keinen Weg gefunden einen Reset per SSH auszuführen.


    Was ich hingegen gefunden habe sind zwei Dateien, die eventuell nützlich sein könnten:
    - /opt/alien/usr/share/lipstick/devicelock/.devicelock.enc
    - /usr/share/lipstick/devicelock/.devicelock.enc
    In beiden ist der gleiche Hashwert zu finden. Der Dateiname lässt mich hoffen, dass es sich damit um den gehashten/verschlüsselten Device code handelt. Falls es sich um einen Hash handelt rätsle ich aber noch welcher Algorythmus das sein könnte. md5 ist deutlich zu kurz, sha1 ist um eine Stelle zu kurz, sha256 ist deutlich zu lang.


    Ist möglicherweise bekannt wie der Device Code in Sailfish gehasht/verschlüsselt wird? Könnte es sein, dass in der Datei einfach ein sha1-Hash steht und ein X angehängt wurde (möchte das jemand bei sich nachprüfen?). Ob es vielleicht sogar reichen könnte einfach den Inhalt zu löschen, um den Device code zu löschen?


    lg Andreas

  • Danke! Ein einfaches Set-Code nach dem entfernen/verschieben der Datei hat mich leider nicht weiter gebracht. Set-Code erwartet weitere Argumente (oldcode + newcode). Einen beliebigen oldcode eingeben funktioniert leider nicht, weil er diesen dann aus der zuvor entfernten Datei lesen möchte.


    Der nächstbeste Ansatz ist dann wohl Brute-Force per Check-Code, aber dazu müsste ich noch wissen welchen Rückgabewert ich beim richtigen Code bekommen werde.


    Hätte jemand Lust auf seinem Jolla diese beiden Kommandos auszuführen und die Rückgabe zu posten? 12345 durch den eigenen Code ersetzen. Den eigenen Code natürlich vorm Posten entfernen, sollte dieser ersichtlich sein.

    Shell-Script
    1. /usr/lib/qt5/plugins/devicelock/encpartition --check-code 12345
    2. echo $?
  • Grüß Dich,
    bei einem passenden Pin bekommt man den Error-Code 0 zurück.


    Daher könnte Dein Brutforcebefehl in etwa so aussehen:


    Shell-Script
    1. count=9999; while [ true ]; do (( count ++ )); /usr/lib/qt5/plugins/devicelock/encpartition --check-code ${count} && break; done; echo PIN: ${count}


    Habe auch gleich einen kleinen Banchmark gestartet. - Mein Gerät braucht pro 1000 Versuche rund 5 Minuten. - Sind also im allerschlimmsten Fall etwas mehr als 8 Stunden (bei einem 5-Stelligen Code).


    Nachtrag:
    Da habe ich doch glatt unterschlagen, dass ein Pin auch mit Nullen beginnen darf.

    Shell-Script
    1. count=-1; while [ true ]; do (( count ++ )); /usr/lib/qt5/plugins/devicelock/encpartition --check-code $(printf %05d $count) && break; done; echo PIN: $(printf %05d $count)


    Falls Du Dir auch noch den Verlauf anschauen willst:

    Shell-Script
    1. count=-1; while [ true ]; do (( count ++ )); echo $(printf %05d $count); /usr/lib/qt5/plugins/devicelock/encpartition --check-code $(printf %05d $count) && break; done; echo PIN: $(printf %05d $count)
  • @SonArc: Wow, in einem Einzeiler und so schön hätte meine Lösung vermutlich nicht ausgesehen :D Vielen Dank für deine Bemühungen!


    Ich habe mir heute endlich wieder Zeit für dieses kleine Problemchen nehmen können. Kommando ausgeführt, einen ausgiebigen Kaffee schlürfen gegangen und voila, spuckte das Skript den passenden PIN aus. Lustigerweise hatte ich schon äußerst ähnliche PINs geraten, aber halt nie den exakt richtigen. Ich habe jedenfalls wieder Zugriff und kann es jetzt endlich zurücksetzen. Problem gelöst ^^


    Interessant finde ich in dem Zusammenhang allerdings noch, dass das encpartition-Tool unendlich viele Versuche zulässt, während überall sonst das Telefon nach einigen Fehlversuchen gesperrt wird. Aber ich will mich nicht beklagen, genau das war in meinem Fall ja hilfreich.

  • In meiner Ausbildung wurde mir beigebracht, dass jeder Tastenanschlag, den man nicht machen muss wertvolle Kalorien spart. Daher versuche ich mich kurz zu halten.


    Ich weiß auch nicht, was mich "damals", am 01.07. dazu gebracht hat, die Variable "count" komplett auszuschreiben, wobei es auch ein einfaches "$i" getan hätte :P .



    Spaß beiseite. Freut mich sehr, dass ich helfen konnte.
    Früher gab es wohl mal einen Befehl, mit dem man das Telefon über "dbus" entsperren konnte und hatte schon daran experementiert, dass ich zuhause im WLAN keine PIN-Abfrage mehr bekomme. Leider funktioniert das Kommando nicht mehr oder ich habe einfach vergessen, wie es ging. - Sperren kann ich aber noch...


    Ich hoffe, Dein Jolla1 Verkauf ist nicht gleichbedeutend mit einem Sailfish-Ausstieg.


    "Script Kiddies" halte ich bei der Lösung für unbedenklich, da man hierfür SSH Zugriff und ein bekanntes WLAN für das Telefon braucht.

  • Wie müsste der Code aussehen wenn der PIN 10 oder mehr Stellen hat?

  • Alle 5en durch die vermutete Maximallänge austauschen. Also für 10 Stellen beispielsweise:

    Shell-Script
    1. count=-1; while [ true ]; do (( count ++ )); echo $(printf %010d $count); /usr/lib/qt5/plugins/devicelock/encpartition --check-code $(printf %010d $count) && break; done; echo PIN: $(printf %010d $count)


    Sollte der Code allerdings wirklich 10-stellig sein wird das eine gaaaaanze Weile dauern. Du solltest also unbedingt ein Ladegerät anschließen und dich gedanklich schon mal davon verabschieden es die nächsten Tage verwenden zu können.

  • Wie müsste der Code aussehen wenn der PIN 10 oder mehr Stellen hat?

    Grüß Dich,
    der Befehl funktioniert auch mit größeren Zahlen. Der Befehl "printf %05d" besagt nur, dass wir hier mindestens 5 Stellen haben wollen (Sailfish lässt keinen vierstelligen Pin zu, daher brauchen wir das auch nicht versuchen.
    Was aber in dem Fall nicht gefunden werden kann, ist ein Pin mit mehr als 5 Stellen, der mit einer "0" beginnt (z.B. 012345).


    Sollte Dein Pin aber wirklich so lang sein, würde ich empfehlen, eine andere Lösung zu suchen. - Du kannst Deinen Fall hier im Forum gerne etwas detailierter schildern.


    Wenn ich keinen groben Denkfehler habe, noch eine kleine Tabelle mit Schätzwerten.


    Pin-Stellen Stunden Tage Jahre
    5 8,5
    6 85 3,5
    7 850 35,4
    8 8500 354,2
    9 85000 3541,7 9,7
    10 850000 35416,7 97,0
  • Oh, je das sind keine guten Aussichten.
    Es wird kaum einen anderen weg geben. Den Device lock habe nicht ich eingegeben, der Vorbesitzer hatte ihn vergessen. Ich bin über zwei Möglichkeiten gestolpert den Devicelock zu ändern.
    1. Über die Shell per ssh
    2. über Fastboot und adb
    Beide klappten nicht, das das Gerät nicht im Dev Modus ist.
    Das hier ist Nummer drei gewesen und wohl leider auch nichts.
    Nummer vier wäre, wenn ich über einen Android Terminal als root die .devicelock.enc löschen könnte. Da bekomme ich es nicht hin als root zu agieren. Da der devmod nicht an ist, geht devel-su nicht.


    Dennoch Danke


  • Nachtrag:
    Da habe ich doch glatt unterschlagen, dass ein Pin auch mit Nullen beginnen darf.

    Shell-Script
    1. count=-1; while [ true ]; do (( count ++ )); /usr/lib/qt5/plugins/devicelock/encpartition --check-code $(printf %05d $count) && break; done; echo PIN: $(printf %05d $count)

    Falls Du Dir auch noch den Verlauf anschauen willst:

    Shell-Script
    1. count=-1; while [ true ]; do (( count ++ )); echo $(printf %05d $count); /usr/lib/qt5/plugins/devicelock/encpartition --check-code $(printf %05d $count) && break; done; echo PIN: $(printf %05d $count)

    Darf ich das auf meine Seite übernehmen?
    Den Shell-Code gibt man wohl im Revovery Modus > Shell ein richtig ?

  • @davodego: ich denke du solltest es einfach mal mit dem Skript für einen 5-stelligen PIN versuchen. Meinen PIN hatte ich z.B. nur deshalb 5-stellig gewählt, weil 4 Stellen nicht möglich waren. Ich nehme an so ging es sicherlich vielen. Wenn es damit nicht klappt kannst du ja noch immer 6-stellig versuchen. Die 97 Jahre für 10-stellig lohnen sich aber wahrscheinlich wirklich nicht 8o

  • @davodego: ich denke du solltest es einfach mal mit dem Skript für einen 5-stelligen PIN versuchen. Meinen PIN hatte ich z.B. nur deshalb 5-stellig gewählt, weil 4 Stellen nicht möglich waren. Ich nehme an so ging es sicherlich vielen. Wenn es damit nicht klappt kannst du ja noch immer 6-stellig versuchen. Die 97 Jahre für 10-stellig lohnen sich aber wahrscheinlich wirklich nicht 8o

    Was anderes blieb mir nicht übrig. Der Vorbesitzer konnte sich nicht mehr erinnern. Er hatte in Erinnerung das er mit dem Daumen einen Bogen über das Tastenfeld gemacht hat und die Zahlen doppelt nahm. Also so was wie 77445566990. Mit so was rechnete ich.
    Zu meinem Glück hat er sich geirrt und der Code war nur 5 Stellig.


    Noch eine Anmerkung zu dem Script.
    Von einem Android Terminal aus geht es nicht. Man hat zwar auch Zugriff auf "/" und kann den Befehl aufrufen (encpartition --check-code), aber das script beim Durchlaufen liefert nur Fehlermeldungen. Mit echo kommt:
    0000-1: not found hintereinander weg
    und ohne Fortschritt in einem weg:
    code: not found


    Zum meinem Glück gibt es die App "ShellEx". Von da aus konnte ich das script aufrufen und konnte den code sehen und ändern.
    Vielen Dank an @SonArc für das script und an alle anderen für mitdenken. Ich hatte die Hoffnung schon fast aufgegeben.

  • Darf ich das auf meine Seite übernehmen?Den Shell-Code gibt man wohl im Revovery Modus > Shell ein richtig ?

    Selbstverständlich darfst Du das übernehmen. Vielleicht aber mit dem Hinweis, dass es derzeit mit einer führenden 0 bei einem mehr als 5-Stelligen Pin nicht funktioniert. - Dazu muss man den printf händisch inkrementieren.


    Zum ausprobieren habe ich mich einfach über eine normale SSH-Session aufs Jolla verbunden. - Bin mir nicht sicher, aber ich glaube in der Telnet-Recovery-Shell braucht man ebenfalls einen Pin.


    @davodego: Sehr gerne. Freut mich, wenn es geholfen hat.

    Nachtrag:
    @davodego: Leider kenne ich mich im Bereich Android recht wenig aus und weiß nicht, wie sich die Apps verhalten. Wenn das "Android Terminal" eine normale Shell erzwingt, wird es sicherlich am "(( count ++ ))" scheitern. - Wenn ich mich nicht irre, braucht der "(( i ++ ))" Befehl mindestens eine Bash4 oder die Z-Shell(?). Mit csh und der normalen Shell stoße ich öfter an Grenzen.
    Dafür könnte ein "bash -c 'count=-1; while [ true ]; do (( count ++ ));.....'" helfen (ungetestet).


    Habe aber gerade meine Freundin mit meinem Android-Tablet in den Urlaub geschickt und kann es derzeit nicht testen. - Aber auf dem läuft bei mir das JuiceSSH, welches auch in der freien Version einen echt guten Eindruck macht.


    @sailfishmods: Wie wäre es mit einer Generalvollmacht von mir? - Mir ist es nur wichtig, Leuten zu helfen. Der Kanal oder der Verbreitungsweg ist mir dabei fast egal. - Allerdings wäre eine PN im Forum nett (keine Bedingung).
    Ansonsten ist die schöpferische Leistung eh zu gering um da irgendwelche Ansprüche erheben zu können.


    Der wichtigste Dank gehlt wohl eh an @bwupph, der mit dem Errorcode auf "/usr/lib/qt5/plugins/devicelock/encpartition --check-code $i" angefangen hat.


  • @sailfishmods: Wie wäre es mit einer Generalvollmacht von mir? - Mir ist es nur wichtig, Leuten zu helfen. Der Kanal oder der Verbreitungsweg ist mir dabei fast egal. - Allerdings wäre eine PN im Forum nett (keine Bedingung).
    Ansonsten ist die schöpferische Leistung eh zu gering um da irgendwelche Ansprüche erheben zu können.


    Der wichtigste Dank gehlt wohl eh an @bwupph, der mit dem Errorcode auf "/usr/lib/qt5/plugins/devicelock/encpartition --check-code $i" angefangen hat.

    Sorry, aber was meinst du mit Generalvollmacht? Also für was genau? :)


    Der dank geht an euch beiden ;)


    Hätte aber noch kurz paar fragen:


    1) Man kann das nur anwenden, wenn a) der Dev-Modus an ist. b) man sich im eigenen Wlan-Netzwerk befindet, ergo auch das Wlan im Smartphone eingeschaltet ist? Via USB geht das nicht, wenn der Dev-Mode an ist?


    2) Wäre es möglich, dass man Rückwärts suchen kann? Für diejenigen die wissen, dass der Code mit z.B. einer 9 anfängt ?


    3) Wenn der Pin 6-10 stellen hat, kann deine Zeile nur Pins abfragen, wenn die mit einer 0 (null) anfängt? Ist das nicht möglich die Code Zeile dementsprechend anzupassen ?


    4) @all - ist das wirklich so, dass man ohne den Pin nicht in den Recovery Modus kommt? Kann das jemand Testen bzw. Bestätigen?


    5) das man 1000 Anfragen in 5 Min stellen kann, liegt das wegen Jolla 1 und dessen HW-Leistung? Und sind so viele anfragen möglich auch wenn man eingestellt hat, dass man nur 3 versuche hat?