Kyan

SL3NCK - Calculate NCK's from TARGET_HASH and MASTER_SP_CODE

1 post in this topic

#1 ·  Posted (edited)

Hi, SL3NCK calculates the 7 NCK's levels used for unlocking SL3 phones.

SL3NCK("0000000000000000000000000000000000000000", "080803080307030003010002020305")

_output:

#pw+283037116581614+1#
#pw+235518432205471+2#
#pw+595388505163502+3#
#pw+415333744058839+4#
#pw+259299316395048+5#
#pw+467723677207791+6#
#pw+690485095019780+7#

You can test run and see is the same code output as in the following websites:

#include <Crypt.au3>

; #Function# ===========================================================================================================
; Name...........: SL3NCK
; Description ...: Calculates 7 NCK levels for SL3.
; Syntax.........: SL3NCK("TARGET_HASH","MASTER_SP_CODE")
; Return values .: string with 7 levels NCK's.
; Author ........: kyan (autoIT code), oOXTCOo (PHP code).
; Remarks .......: $TargetHash is a string with 40 hex chars. $MasterSP is a string with 30 digits.
; Related .......: SimlFeistel(), _packH()
; Requeires .....: #include <Crypt.au3>
; ===============================================================================================================================
Func SL3NCK($TargetHash, $MasterSP)
    $result = ''
    $MasterSP = '000000' & StringMid($MasterSP, 0 + 1, 24)
    For $i = 1 To 7
        $hash = _packH('0' & $i & $TargetHash)
        $hash = StringTrimLeft(StringUpper(_Crypt_HashData($hash, $CALG_SHA1)), 2)
        $precode8 = StringMid($MasterSP, 0 + 1, 16)
        $precode7 = StringMid($MasterSP, 17 + 1, 30)
        For $magic = 0 To 1
            $sh = _packH('0' & $magic & StringMid($hash, 0 + 1, 32) & $precode8)
            $sh = StringTrimLeft(StringUpper(_Crypt_HashData($sh, $CALG_SHA1)), 2)
            $precode = SimlFeistel($sh, $precode7)
            $precode7 = $precode

            $sh = _packH('0' & $magic & StringMid($hash, 0 + 1, 32) & $precode)
            $sh = StringTrimLeft(StringUpper(_Crypt_HashData($sh, $CALG_SHA1), 2)
            $precode = SimlFeistel($sh, $precode8, 8)
            $precode8 = $precode
        Next
        $final = $precode8 & $precode7
        $x = 1
        $nck = ''
        For $y = 1 To 15
            $nck = $nck & StringMid($final, $x + 1, 1)
            $x += 2
        Next
        $result &= '#pw+' & $nck & '+' & $i & '#' & @CRLF
    Next
    Return $result
EndFunc   ;==>SL3NCK

Func SimlFeistel($sh, $precode, $bytes = 7)
    Local $result = '', $j = 0, $nck = '', $nck2 = ''
    While ($j < ($bytes * 2))
        $nck = StringMid($sh, $j + 1, 1) & StringMid($sh, $j + 2, 1)
        $nck2 = StringMid($precode, $j + 1, 1) + StringMid($precode, $j + 2, 1)
        $prenck = Mod((Dec($nck) + Dec($nck2)), 10)
        $result = $result & '0' & $prenck
        $j += 2
    WEnd
    Return $result
EndFunc   ;==>SimlFeistel

Func _packH($sInput)
    Local $sReply = ""
    For $xx = 1 To StringLen($sInput) Step 2
        $sReply &= Chr(Dec(StringMid($sInput, $xx, 2)))
    Next
    Return $sReply
EndFunc   ;==>_packH by Luigi

Hope it comes handy for someone :D

PS: You can't unlock a phone only with this. Google is your friend.

Edited by Kyan

Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • LoneWolf_2106
      By LoneWolf_2106
      Hi everybody,
      i want to optimize my search code, because i don't think that my solution is "acceptable" from development perspective, it might be optimized.
      I have a text file, i read it and i copy all the entries to an Array, then i have to start a search to see if a specific entry is present. I have about ten different strings to search.
      Func FileSearch($file_content_array, $search) $j=0 For $i = 0 To UBound($file_content_array) - 1 $search_result=StringInStr($file_content_array[$i],$search) If $search_result<>0 Then ReDim $searchResultArray[UBound($searchResultArray) + 1] $searchResultArray [$j] = $file_content_array[$i] $j+=1 EndIf Next Return $searchResultArray EndFunc My solution would be ok for a single search, but in case of multiple searches? would it be still good?
      I have thought to use a 2D Array, where the first column is the array-item and the second column is "yes" or "no". But what about the searches? Do i have to use 10 times the function?
      In case of questions: I have to scan a directory and check whether some files are present or not and then write into another file:"yes, it is present", "no, it is not present".
      Thanks in advance
    • genbadger
      By genbadger
      Hi All,
      I'm not too code savvy but I know this is a simple one! Here's my problem, I have a folder with text files containing gcode. they are appended .nc, .ngc, and .gcode randomly. I can rename them all .ngc which is my preferred file type. In these files there's lines of gcode, carrying commands for a CNC. What I need to do is remove some comments from the beginning and format the text a certain way. I'll show an example of the original file and what I need it to look like. The files can be 20 lines or 10,000 long depending on the part.
      Old text:
      ( Header 1 text                      )
      ( Header 2 text                      )
      G90   (set absolute distance mode)
      G90.1 (set absolute distance mode for arc centers)
      G17   (set active plane to XY)
      G21   (set units to mm)
      #<z_safe> =  0.250 
      #<plunge_feed> =     5 
      (---------------------------------------------------------)
      G0 X 17.2644 Y 1.6127
      M03 
      G1 X 2.2842 Y 8.0674 F 0.01 
      G1 X 15.3642 Y 17.8133
      G1 X 17.2644 Y 1.6127
      M05 
      G0 X 0.0000 Y 0.0000
      M05 
      M02 
       
       
      What it needs to look like:
      G90
      G21
      G0 X17.2644 Y1.6127
      M03
      G1  X2.2842 Y8.0674  <--- copy and paste above the next m05
      G1  X15.3642 Y17.8133
      G1  X17.2644 Y1.6127
      G1  X2.2842 Y8.0674  <--- pasted here
      M05
      G0 X0.000 Y0.000
      M05
      M02
      Some things to note: g90 sets absolute coordinate mode, g21 tets units to mm, g0 is first coordinate to move the tool to. 
      This is an important step: m03 is what turns on a laser. I need the first coordinate after every m03 to be copied to the line above m05 for each chunk of gcode. the very last m05 before the m02 needs to be ignored. There are multiple chunks with m03 x,ys then m05. each chunk is going to have different coordinates after the m03.
       
      I have no idea where to start other than find the line with the wanted string, m03. dont know how to handle m05 though... any help is very much appreciated!
    • guinness
      By guinness
      This function is used to create a unique system I/O control code (IOCTL).
      ; Ported from C to C#: http://www.emoticode.net/c-sharp/win32-ctl_code-macro-ported-to-c.html Func _WinAPI_Create_CTL_CODE($iDeviceType, $iFunction, $iMethod, $iAccess) Return BitOR(BitShift($iDeviceType, -16), BitShift($iAccess, -14), BitShift($iFunction, -2), $iMethod) EndFunc ;==>_WinAPI_Create_CTL_CODE
    • FireFox
      By FireFox
      Hi,
      Here is a script which destroys the AutoIt Window, there is many issues that can understand and fix except that the application won't exit with the Exit code.

      Is there any way to "redirect" the exit code to terminate the application?

      There should be a main function in the internal autoit code, no way to make it exit?

      Here is the script :

      ;you will need to kill the autoit3 process. #include <WinAPI.au3> #include <Constants.au3> #include <WindowsConstants.au3> Global $_hWndProc = DllCallbackRegister("WM_HANDLER", "int", "hwnd;int;wparam;lparam") AutoItWinSetTitle("Wndtmp_") $hWnd = WinGetHandle("Wndtmp_") _WinAPI_SetWindowLong($hWnd, $GWL_WNDPROC, DllCallbackGetPtr($_hWndProc)) _WinAPI_DestroyWindow($hWnd) ;also destroys: ;tray icon, hotkeys, wm messages (in particular Exit), more things? Exit ;does not work Func WM_HANDLER($hWnd, $iMsg, $wParam, $lParam) Switch $iMsg Case $WM_CLOSE Return False EndSwitch Return _WinAPI_DefWindowProc($hWnd, $iMsg, $wParam, $lParam) EndFunc ;==>WM_HANDLER My purpose for this is insignificant, but I would be interested to know if it's possible.

      Br, FireFox.