Resetting and Unlocking a Nintendo DSi Parental Control Lock

in technology •  7 years ago 

parental controls.jpg

So I inherited a nintendo DSi, and it had a parental lock code on it. I tried to brute force either the unlock code or the security question, but no luck. So I turned to Google and found this :
Wii Parental Control password reset tool .

Yes, it does say it is for the Wii, but Nintendo uses the same algorithm for the DSi.

To reset the Parental Control Lock for the Nintendo DSi
Go to:
System Settings -> Parental Controls -> Yes Change Parental Controls -> Pin I forgot -> security question I forgot -> Get the Inquiry Number and write it down

Go to http://wii.marcansoft.com/parental.wsgi
And enter the Inquiry Number as the Confirmation Number
And select the date that the DSi is currently set to.

This gives you an unlock code and you can enter it into the next screen on the DSi
Go back to the DSi and hit OK

Enter the unlock code and you will have access to the parental control panel where you can edit the PIN or turn it off completely.

Here is the code that actually calculates the algorithm, thought it was neat to see how the website works :

 #!/usr/bin/python  
 # Wii parental control password reset tool  
 #  
 # Copyright 2008-2009 Hector Martin Cantero <[email protected]>  
 #  
 # This program is free software; you can redistribute it and/or modify  
 # it under the terms of the GNU General Public License as published by  
 # the Free Software Foundation; version 2 or version 3 of the License.  
 #  
 # This program is distributed in the hope that it will be useful,  
 # but WITHOUT ANY WARRANTY; without even the implied warranty of  
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
 # GNU General Public License for more details.  
 import time, urlparse  
 def application(environ, start_response):  
      start_response("200 OK", [("Content-type","text/html")])  
      yield """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">  
 <head>  
 <title>Wii Parental Control Password Resetter</title>  
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
 <style type="text/css">  
 .title {  
      font-size: 18pt;  
      font-family: sans-serif;  
 }  
 .response {  
      font-size: 16pt;  
      font-family: sans-serif;  
 }  
 .error {  
      color: red;  
      font-size: 16pt;  
      font-family: sans-serif;  
 }  
 </style>  
 </head>  
 <body>  
 <div class="title">Wii Parental Control password reset tool</div>"""  
      uri = environ["REQUEST_URI"]  
      qs = urlparse.urlparse(uri).query  
      form = urlparse.parse_qs(qs)  
      ctime = time.time()  
      def opt_date(delta):  
           t = time.gmtime(ctime + delta * 3600 * 24)  
           if delta == 0:  
                selected = ' selected="selected"'  
           else:  
                selected = ""  
           return '<option value="%02d%02d" %s>%s</option>'%(t.tm_mon,t.tm_mday,selected,time.strftime("%a, %d %b %Y",t))  
      class CRC32:  
           def __init__(self):  
                self.gentable()  
           def crc32(self, input, crc=0xffffffffl):  
                count = len(input)  
                i = 0  
                while count != 0:  
                     count -= 1  
                     temp1 = (crc >> 8) & 0xFFFFFF  
                     temp2 = self.table[(crc ^ ord(input[i])) & 0xFF]  
                     crc = temp1 ^ temp2  
                     i += 1  
                return crc  
           def gentable(self):  
                self.table = []  
                for i in range(256):  
                     crc = i  
                     for j in range(8):  
                          if crc & 1:  
                               crc = (crc >> 1) ^ 0xEDB88320l  
                          else:  
                               crc >>= 1  
                     self.table.append(crc)  
      def error(s):  
           return '<div class="error">%s</div>'%s  
      def process():  
           try:  
                int(form["number"][0]) #validate  
                if len(form["number"][0]) != 8 or not all([x in "0123456789" for x in form["number"][0]]):  
                     raise ValueError()  
           except:  
                return error("Please provide a valid 8-digit confirmation number")  
           try:  
                int(form["date"][0]) #validate  
                if len(form["date"][0]) != 4 or not all([x in "0123456789" for x in form["date"][0]]):  
                     raise ValueError()  
           except:  
                return error("Invalid date")  
           fullnum = form["date"][0] + form["number"][0][4:8]  
           crc = CRC32().crc32(fullnum)  
           code = ((crc ^ 0xaaaa) + 0x14c1) % 100000  
           return '<div class="response">Your unlock code:<span class="code">%05d</span></div>'%code  
      if form.has_key("submit"):  
           yield process()  
      yield """  
 <div class="form">  
      <form action="/parental.wsgi">  
           <p>Confirmation Number:  
                <input name="number" type="text" size="9" maxlength="8" value="" /></p>  
           <p>Current Date in your timezone:  
                <select name="date" size="1">"""  
      yield opt_date(-1)  
      yield opt_date(0)  
      yield opt_date(1)  
      yield """</select><br /></p>  
           <p><input name="submit" type="submit" value="Get Reset Code" /></p>  
      </form>  
 </div>  
 <p>  
      <a href="http://validator.w3.org/check?uri=referer"><img  
           src="http://www.w3.org/Icons/valid-xhtml10-blue"  
           alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>  
      <a href="http://jigsaw.w3.org/css-validator/">  
      <img style="border:0;width:88px;height:31px"  
           src="http://jigsaw.w3.org/css-validator/images/vcss-blue"  
           alt="Valid CSS!" />  
      </a>  
      <br />  
      <a href="parental.txt">Source code</a>  
 </p>  
 </body>  
 </html>"""  
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
http://xerohournix.blogspot.com/2013/01/resetting-and-unlocking-nintendo-dsi.html

I am the owner of that blog.

Your Post Has Been Featured on @Resteemable!
Feature any Steemit post using resteemit.com!
How It Works:
1. Take Any Steemit URL
2. Erase https://
3. Type re
Get Featured Instantly – Featured Posts are voted every 2.4hrs
Join the Curation Team Here | Vote Resteemable for Witness

Congratulations! This post has been upvoted from the communal account, @minnowsupport, by vapenation from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.