Как запутать шрифты в EPub? - PullRequest
       10

Как запутать шрифты в EPub?

0 голосов
/ 02 февраля 2020

Я работаю над обфускацией epub 2.0. Наши требования состоят в том, чтобы пользователь мог просматривать наши epubs, но они не должны использовать наши шрифты в своей системе, распаковывая и распаковывая из них шрифты. Мы должны ограничить установку встроенных шрифтов в пользовательской системе, но пользователь может просматривать epubs без каких-либо ошибок. Кроме того, мы не хотим подмножество шрифтов.

Я использовал Sigil, чтобы сделать шрифты epub запутанными, но проблема с Sigil заключается в том, что любой может удалить обфускацию из шрифтов, редактируя наши epubs в Sigil, просто щелкните правой кнопкой мыши на шрифте и сделайте обфускацию шрифта none.

Sigil вносит два изменения для обфускации. Идентификатор Giud вставляется в content.opf и шифрование. xml файл создается.

Я изменил идентификатор guid

<dc:identifier opf:scheme="UUID">urn:uuid:4cfee596-5bf8-48db-a68c-2ddfa2c328b3</dc:identifier>

, чтобы отключить деобфускацию, но шрифты все еще deobfuscate.

Затем я использовал следующий код c# для обфускации шрифтов, но после обфускации шрифта и добавления идентификатора guid в файл content.opf и создания шифрования. xml, шрифт не применяется в epub.

 public static void Obfuscate_Deobfuscate_Font(string inputFontFilePath, string obfuscationKey, string outputFontName)
        {
            try
            {
                using (FileStream stm = new FileStream(inputFontFilePath, FileMode.Open))
                using (FileStream fs = new FileStream(outputFontName, FileMode.Create))
                {
                    byte[] dta = new byte[stm.Length];
                    stm.Read(dta, 0, dta.Length);
                    string guid = new Guid(obfuscationKey).ToString("N");
                    byte[] guidBytes = new byte[16];
                    for (int i = 0; i < guidBytes.Length; i++)
                    {
                        guidBytes[i] = Convert.ToByte(guid.Substring(i * 2, 2), 16);
                    }

                    for (int i = 0; i < 32; i++)
                    {
                        int gi = guidBytes.Length - (i % guidBytes.Length) - 1;
                        dta[i] ^= guidBytes[gi];
                    }
                    fs.Write(dta, 0, dta.Length);
                }
            }
            catch (Exception ex)
            {

            }
        }

Как сделать так, чтобы шрифт epub деинсталлировался у пользователей p c?

Есть ли какое-либо коммерческое программное обеспечение для этой цели?
Любая помощь будет принята с благодарностью.

...