Oh, ok. As I said, I never used this since it was not discovered how to do this when I added support to pop-fe.
So what I did in pop-fe, and which works, is injecting kind of a SBI file into the eboot.
I.e. sony added TWO different ways to handle SBI files, and I used the SBI-blob approach in pop-fe
because we did not yet know how the magic-word approach were supposed to work.
So, on this page
https://www.psdevwiki.com/psp/PSISOIMG0000
you have the magic word that you injected at offset 0x12b0, but I do not use this in pop-fe.
Instead, what I use is injecting the SBI-like blob at offset 0x100400 and then I store this offset at 0x12d4 and the number of entries at 0x12d8.
Here is the python code in pop-fe that creates the SBI-blob:
https://github.com/sahlberg/pop-fe/blob/109975306f1bb37d947f6ee8f63722ee0258b02e/pop-fe.py#L3754
This function basically takes the magic word and then generates the sbi entries for all the sectors that are supposed to be
corrupted for this magic-word and writes it to a file.
Instead of writing to a file you can just write these entries straight into the eboot.
Convert a libcrypt protected game with pop-fe and you can see what it does in a hexeditor.
EDIT: or you could just skip libcrypt and rely on end users having to apply a ppf to disable it themselves. the biggest benefit is likely the support for configs since that allows people to iterate fast, testing new configs.
Libcrypt is also just for EU games and I think most people would think of the US version of the game as better and prefer it ot the EU versions.
EDIT 2: The offset 0x100400 as in the example for PSISOIMG might not be great.
Maybe a better place would be at offset 0x100000 - 0x400 into the PSISOIMG section.
It needs to go after the last DiskMapTable but before offset 0x100000 into PSISOIMG which where the disc tracks start.
Pop-fe puts this immediately after the DiskMapTable but it might be difficult in your application to see how big teh DiskMapTable is, pop-fe knows how big it is because pop-fe creates it when converting.
After the end of the DiskMapTable there is a huge gap of padding until offset 0x100000 where the tracks are stored. It can go anywhere in this huge gap.
This is the code in pop-fe that writes the sbi / subchannel blob into the EBOOT :
https://github.com/sahlberg/pop-fe/blob/109975306f1bb37d947f6ee8f63722ee0258b02e/popstation.py#L2786