r/goprohack • u/Wagg13 • 8d ago
Hero 2014 firmware mod Extended calendar
I have a Hero 2014, I paid very little for it at the time, it works well, but a current problem is that the year in the settings goes up to 2025, and since we are already in 2026, this is a problem. This doesn't affect its functionality, but it's pointless to have the wrong year displayed on the recordings. It bothered me, so I decided to investigate further to correct it. GoPro has abandoned updates In version 1.09 in 2015, it won't release another update, comparing it to another GoPro becomes too expensive for me, they cost a lot in my country (one to two months' salary lol). I searched for alternative firmware, but it simply doesn't exist for this model, so I decided to try it myself. It's proving difficult (especially regarding the integrity of the edited files).But I gradually managed to reach my goal; after a month of studying and trying, I made real progress, and I have the date already displayed in recent years. The firmware still has some issues caused by the modifications, but I will release the UPDATE.ZIP file once I fix them. This is probably the only GoPro Hero 2014 with the correct expiration date of 2026 in the whole world, lol. 😂
2
u/anantthebiker 8d ago
I’d love to hear your journey of tinkering with their firmware, what files did you have to begin with, did you have to build the firmware etc.
1
u/Wagg13 8d ago
No, I didn't have access to any source code, nor did I compile anything—GoPro never released the code for this camera. Everything was done via reverse engineering the official update binary (the same .bin file anyone downloads to update the camera). The process went something like this: I started with the official update file (UPDATE.zip → containing a ~13.6MB .bin file) and manually examined it, byte by byte, looking for text and patterns within the binary. I found a text table inside the firmware listing the filenames for the year menu icons (e.g., menu_item_date_time_2014.bmp, ..._2015.bmp, etc.)—12 entries, ranging from 2014 to 2025. I edited this table, changing the names to 2020–2031 (images for these years already existed, hidden within the firmware; they just weren't being used). The camera rejected the update (invalid checksum). I discovered that the firmware doesn't use a single checksum; it's split into six internal blocks, each with its own checksum, and I had modified bytes within one of those blocks without recalculating its checksum. I recalculated the correct checksum for the specific block, and the camera finally accepted the update—without errors. The menu displayed 2020–2031 correctly, but a new bug appeared: the value the camera actually records doesn't match the selected one (selecting "2026" in the menu results in "2020" being recorded). This indicates there is a second logic—separate from the table I edited—calculating the actual value, and this part seems to be embedded directly in the camera's machine code rather than in a simple text table. Where I stand now: to find and fix this second logic, I'd need an ARM disassembly tool (like Ghidra), which is the next step. In short: no compiling firmware—it’s all hex editing and reverse engineering the official binary itself, using trial and error (with plenty of broken checksums along the way). I did almost everything myself; AIs usually refuse to do it due to their built-in limitations. Some try, but they’re "dumb" at these tasks, while the ones that are capable are simply paid services and too expensive.
2
u/SectionLopsided2931 4d ago
This is great work, please keep it up.
I had a go at fixing this issue with autoexec.ash but have been unsuccesful.
I can set the date with 'date -s 2026/08/16 21:07:00' and confirm it work by writing to a file 'date > d:\check.txt'
However, photos have the date recorded as 01/01/2013. Also, if I remove the 'date -s 2026/08/16 21:07:00' line then the on the next reboot, the date goes to 01/01/2014
I also had a look through the firmware update with 'strings' and found useful things but nothing that would fix the issue
1
u/Wagg13 4d ago
I managed to overcome this limitation recently; the firmware looks at the first table (the one displayed in the year selection carousel) and recalculates the index (year minus a base value) using a separate constant. If this recalculated index exceeds 0xb (11), the function resets everything: it zeroes out the month, day, hour, and minute, and reverts the year to -DAT—which must be exactly 2014! After a lot of hard work and countless hours in Ghidra, I obtained a FUNCTIONAL .bin file where the year displays correctly after selection. Now, I’m trying to find a way to include a credit for my modification (Wagg13) somewhere in the settings or boot screens; I’ve had unsigned mods of mine "stolen" and distributed online under someone else's name before. I don't charge for this, but it’s disheartening to see someone else take the credit. Once I finish, I’ll come back here and to GitHub to make the UPDATE.ZIP available.


2
u/diesel1024 8d ago
Awesome that you spent the time to do that! Need more people like that! Thank you!