oooh, the redbox uses full AES encryption!
and they always use the same key which is embedded in the executable right next to the encrypt() and decrypt() functions. well done, guys
oooh, the redbox uses full AES encryption!
and they always use the same key which is embedded in the executable right next to the encrypt() and decrypt() functions. well done, guys
this code is enterprise as hell
you need the url for the base client? well you use Redbox.Rental.Services.KioskClientService.KioskClientServiceBaseUrl which is a property that'll ask the ServiceLocator to find an instance of IConfiguration to get the KioskClientServiceBaseUrl object out of it
they logged the first six digits and last 4 digits of every credit card transaction.
HAVE YOU EVEN HEARD OF PCI?
Edit: this is technically allowed by PCI.
1234 56## #### 7890
can I buy a vowel?
OH HEY BAD NEWS:
when someone opens up the hard drive of a redbox unit, they can pull a file which has a complete list of titles ever rented, and the email addresses of the people who rented them, and where and when
the unit I've got an image for has records going back to at least 2015.
I was able to easily match one of them to a real name
Redbox.HAL.Configuration
.ConfigurationFileService implements IConfigurationFileService
STOP MAKING SERVICES AND FACTORIES AND INTERFACES AND JUST READ THE FUCKING JSON FILE YOU ENTERPRISE FUCKERS
AND HEY YOU DON'T NEED A SEPARATE C# CLASS FOR EACH XML FILE YOU LOAD
YOU CAN JUST HAVE AN XMLLOADER CLASS AND A GENERIC CONFIG FILE. PLEASE
so these people wrote a mostly C# program, with some lua for glue scripting.
and then they implemented their own language. it's some bastardized version of BASIC
it's a compiled (to bytecode? I think?) cooperative-multitasking BASIC.
and god I wish it was the only one of those I'd ever seen
example code:
POP START-DECK
POP START-SLOT
POP END-DECK
POP END-SLOT
IF END-SLOT > MAX-SLOT-PER-DECK
SET END-SLOT MAX-SLOT-PER-DECK
ENDIF
Foone's official list of things they never expected to implement their own multitasking programming language, yet found one anyway:
* Redbox vending machine motors
* Wheel of Fortune (2011, Wii)
Redbox.HAL.IPC.Framework.ClientSessionFactory
PLEASE, NO MORE FACTORIES
MY CHILDREN ARE STARVING
oh good they implemented both an internal C# dynamic plugin loading system, as well as the ability to craft arbitrary Invoke()s over TCP/HTTP.
So you can call any C# function from anywhere on the machine, I think?
So, quick summary:
Redbox went bankrupt and the machines are getting in the hands of individuals. The disk image has been dumped. The software is being reverse engineered: they're not currently very useful, since they need to talk to a server that's gone.
But progress is being made
and I'm told Doom has already been run on them. It's windows 7, it can run many doom sourceports.
With a little extra work you could probably play native MS-DOS Doom on them
MORE FUN FACTS:
it turns out the device has a database on it which lists the location of every single other redbox machine. full addresses.
Ohhh I do love me an embedded scripting language. Do you know if there’s any info on the HS language, or if you have time would you mind posting a sample or two?
@rk there's no info, but there are some samples. I don't have access to the full ones right now, but here's a snippet from the discord:
GRIPPER STATUS
POP GRIPPER-STATUS
IF "FULL" == GRIPPER-STATUS
LOG "The gripper is full - please fix."
APPLOG "The gripper is obstructed - exiting."
RESULT CODE="ItemStuckInGripper" MESSAGE="There is a disc stuck in the picker."
EXIT "Gripper is obstructed."
ENDIF
@KayOhtie @foone a lot of this hardware days back to 2007 / 2008 when Redbox specifically contracted to make their own hardware for this. A lot of this stuff was probably made by a handful of contractors to start and then, eventually, a few handfuls of developers.
It basically peaked in 2013 at $2B in revenue, it only rolled out 300 new kiosks that year. And it peaked just above 43k kiosks. Their listing 24k kiosks to decommission, likely meaning each one has been in service since before 2013..
And it wasn't some well-funded startup with Tech talent from the Bay area. It was likely a bunch of people who hacked this together in the days when he would still use FTP to ship the new code to the server. I was doing that with .NET in 2010.
And by 2015 it was clear the ship was sinking. So nobody was going to spend money trying to bring this thing up to modern standards. Why bother?
@foone I saw this with people that had been doing it for 20 years but clearly not very well.
They were smart enough to use PBKDF… but the output of this was always a constant because they seeded the RNG with the same value and used a random number as the password.
I tried to explain why that’s stupid and they argued that they have no way for the server to know the correct key if they did it differently. Yes, but … this is not a hard problem to solve?
@foone
that you have so _few_ transactions for nearly 10 years on that one drive may explain why redbox has ceased to be, has joined the parrot eternal.
(one rental per day is par for an AirBNB, but unless their costs were really really low that's very bad retail.)
Rentals were $2.25 *per night*, automatically extended. There were various sales and bundles to start the loan ($1 first day on selected titles, $3.75 2-day rental, etc), but that was the core pricing.
You could also purchase the disc outright from the kiosk, too.
Another factor is you could return disks to any kiosk. Not all kiosks had the same selection, and some were bigger than others, I often went to a bigger kiosk inside Fred Meyer to rent a particular Blu-ray but then returned it to the sad little kiosk outside 7-11 closer to home. So it's possible some kiosks were primarily used as drop boxes while the actual revenue came from high traffic locations dispensing the rentals.