You can also use my GFXFileManager release to actually use the original GFXFileManager.dll for extraction.
[Only registered and activated users can see links. Click Here To Register...]
This makes your application independent of any changes made to the PK2 files by any server owner. You don't have to deal with obfuscation, encryption, blowfish keys, pk2 base key, etc. If the GFXFileManager.dll can extract the files, your application can, too.
Example for listing files:
[Only registered and activated users can see links. Click Here To Register...]
You can use the export functions to simply extract single files or directores:
[Only registered and activated users can see links. Click Here To Register...]
Or you can go "the regular way" by opening, reading the bytes and saving them to a file.
Possible major downside: You have to use C++. At least for writing a C# wrapper for it ;)