Math teachers hate him after discovering this one easy trick!
But Why
Summer break, 2019, we (Hunter, Peyton, And Lucas) were trying to think of something to do to occupy us for the summer. A project to be involved in. At the time Hunter and I had used a SIM card module in one of our WT class projects to send a text message to a designated recipient for alert purposes. Lucas came up with the grand idea of putting that module in a calculator. To hack a calculator into doing things it shouldn't by connecting it to the network.
But How
What makes it possible
There was some pre-hand knowledge that we know would make this possible. We needed an interface port and a method to utilize that port. The TI-Nspire has one of the highest in popularity and capability of the calculators on the market with the TI-84 probably being next in line. Both of these calculators happen to meet the requirements. We knew there was an exploit for both calculators that would allow for running unsigned code and a UART port on each. We ended up choosing the TI-Nspire because we had one on hand. What made this calculator even a better candidate is it even has a keyboard, sort've, I think? |
Hardware
The UART port of the calc is located in the cradle connector in the rear. The diagram below shows a pinout of the needed terminals.
I 3D printed a custom connector which I designed in Autodesk Inventor to easily attach and detach to this connector. It uses POGO pins for reliable contact. The uart data is then brought from 3.3v (from the calc) to 5v (module) using the logic level converter board. The UART on the TI operates at 115200 baud. A small 160mAh Li-Po battery controlled by a TP4056 powers the board.
The entire thing is small and thin enough to tuck in into the empty spare battery compartment in the back of the calculator.
Software
All of the software was made possible by Ndless, the exploit for Nspire calculators. My code can be found on Github. It utilized the nSDL library for drawing to the screen and the nspire-io library for interacting with the UART port.
The code is very much a PoC (Proof of Concept Piece of Crap). It is one of my first multi-file complex low-level programs I have built. I am quite proud of it but it is probably prone to memory leaks.
What Next
The code is far from finished but it shows it is possible. Here is what I have finished vs what I want it to do.
- [x] Send Messages
- [ ] Receive Messages
- [ ] Make Calls
- [ ] Receive Calls
- [ ] Internet Browser (HTTP POST requests)
- [ ] LVGL Implimentation
Since this was more of a gag than an actual project, I am most likely not going to finish it. If you like this project, please consider contributing!
Content
Resources
- Ndless: Homepage | Blog
- Ndless SDK: Wiki
- Nspire Emulator: Firebird Code
- nspire-io library: Github
- nspire-sim (My Code): Github
- Similar project for SMS Shield: Github | Thread
- Fix for UART: Forum (see page 2)
- SIM800L: Amazon
- Logic Level Shifter: Amazon
- POGO Pins: Amazon
- TP4056 Lithium Charge Controller: Amazon