You can also use my GFXFileManager release to actually use the original GFXFileManager.dll for extraction.
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:
You can use the export functions to simply extract single files or directores:
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