A couple of days ago I discovered that from the 6 GBA games I owned for almost 15 years 4 were actually bootlegs!!! I was angry, frustrated, and ashamed that I had not discovered this in all these years. You can read my blog post about it if you like but it's quite long.
One of my ideas was to write a homebrew app for the NDS that would allow me (and possibly others) to verify a cart on the spot! To do this the app would read the cartridge and calculate a hash to compare with a "known good database" I downloaded from the no-intro website. In my blog I have pictures of my own carts showing whats inside and it's quite obvious which are the fakes, but it requires a triwing screwdriver which maybe not every one has.

(there are seven games here, but minish cap I have only got since last week. So I did not count it above
)
Just to see how difficult it was going to be a looked at the gba-link-cable-dumper on whats needed to read the ROM and which libraries I would need to do this. The database I downloaded has hashes in CRC32, MD5 and SHA1 but unfortunately no ready to use library for homebrew use is included for the DS in devkitpro. I really wanted to test the SLOT-2 reading speed so I started without being able to hash the data and to my surprise reading it completed in less than 1-2 seconds!! This was ofcourse just loading it into a buffer and doing nothing with it but still I expected it to take a while. What is included in libnds was a way to identify the game and display the GBA Header so I did:

This is a screenshot made with DeSmuMe and the ZELDA LTTP ROM in slot-2 which made it a lot easier to debug my simple app and fix small bugs and stuff. Then I found some source code to actually do SHA1 hashing without any hardware support or need for other libraries and it works perfectly! Reading the cart and calculating the SHA1 hash is done at around 800KB/s so for an 8MB game this takes 10 seconds to complete. Ofcourse it did not work right in a single try and I had to change the buffer's byte alignment and 16bit bus access and other fun stuff like that, but it works now and after a few seconds it shows the SHA1 hash on screen!
I did not have time yet to include the database into this NDS app yet so I had to manually compare the hashes but for the original Nintendo carts the hashes did match! Having this code that already reads the entire ROM anyway I was thinking...why not add writing to the slot-1 SD card and make my own cart backup's this way?? And also add a way to backup and restore the savegame while I am at it!
Actually this whole idea was inspired by the reply's on my blog from @FAST6191 , so thanks you for that.
For making a cart backup I did had to disable the hashing since it takes A LOT longer when both are done at the same time. But checking the backup on my PC showed it was done correctly and the hash matched the database of known good dumps!
My library of GBA games is not very large at the moment so I was done in about 15 minutes including taking out the SD card every time and removing the dumps. This was needed both because I used a fixed name "dump.gba" and because the super tiny 64MB sd card inside the only currently bootable and DLDI cabable DS flashcart I could find! 
I have not started on adding savegame support yet but for that I will borrow even more code from the gba-link-cable-dumper since it has a library that detects the type of save and it's size. No need to reinvent the wheel on that and hopefully it is more reliable than anything I could come up with. Especially for writing a save back into a real cart!
So with this enormously long into the point of all this is to share my tool (eventually) if there is interest. I am also open to any ideas or features to add that might be useful ofcourse. And at somepoint I will share the code on GitHub but I need to sort out the licensing of the libraries that I am using and cleanup the code a bit more before doing that.
I am aware of the GBA Backup Tool but I do this mainly because it's a fun challenge

(there are seven games here, but minish cap I have only got since last week. So I did not count it above
Just to see how difficult it was going to be a looked at the gba-link-cable-dumper on whats needed to read the ROM and which libraries I would need to do this. The database I downloaded has hashes in CRC32, MD5 and SHA1 but unfortunately no ready to use library for homebrew use is included for the DS in devkitpro. I really wanted to test the SLOT-2 reading speed so I started without being able to hash the data and to my surprise reading it completed in less than 1-2 seconds!! This was ofcourse just loading it into a buffer and doing nothing with it but still I expected it to take a while. What is included in libnds was a way to identify the game and display the GBA Header so I did:

This is a screenshot made with DeSmuMe and the ZELDA LTTP ROM in slot-2 which made it a lot easier to debug my simple app and fix small bugs and stuff. Then I found some source code to actually do SHA1 hashing without any hardware support or need for other libraries and it works perfectly! Reading the cart and calculating the SHA1 hash is done at around 800KB/s so for an 8MB game this takes 10 seconds to complete. Ofcourse it did not work right in a single try and I had to change the buffer's byte alignment and 16bit bus access and other fun stuff like that, but it works now and after a few seconds it shows the SHA1 hash on screen!
I did not have time yet to include the database into this NDS app yet so I had to manually compare the hashes but for the original Nintendo carts the hashes did match! Having this code that already reads the entire ROM anyway I was thinking...why not add writing to the slot-1 SD card and make my own cart backup's this way?? And also add a way to backup and restore the savegame while I am at it!
For making a cart backup I did had to disable the hashing since it takes A LOT longer when both are done at the same time. But checking the backup on my PC showed it was done correctly and the hash matched the database of known good dumps!
I have not started on adding savegame support yet but for that I will borrow even more code from the gba-link-cable-dumper since it has a library that detects the type of save and it's size. No need to reinvent the wheel on that and hopefully it is more reliable than anything I could come up with. Especially for writing a save back into a real cart!
So with this enormously long into the point of all this is to share my tool (eventually) if there is interest. I am also open to any ideas or features to add that might be useful ofcourse. And at somepoint I will share the code on GitHub but I need to sort out the licensing of the libraries that I am using and cleanup the code a bit more before doing that.
I am aware of the GBA Backup Tool but I do this mainly because it's a fun challenge