LaTeX Uglifier/混淆器

LaTeX Uglifier/混淆器

对于 JavaScript,例如js 丑化器,它混淆了 JavaScript,使人类无法读取 JavaScript 代码。此外,根据@DavidCarlisle十二.tex(见下文),在 TeX 中混淆是绝对可能的。

\let~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
A@@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
AGGFRruoPAqq71.72.F717271PAYY7172F727171PA??Fi*LmPA&&71jfi
Fjfi71PAVVFjbigskipRPWGAUU71727374 75,76Fjpar71727375Djifx
:76jelse&U76jfiPLAKK7172F71l7271PAXX71FVLnOSeL71SLRyadR@oL
RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jbye

是否有这样的软件可以混淆文件.tex,使其很难理解?

可能相关且有用的文件:

答案1

使用新tokcycle包(https://www.ctan.org/pkg/tokcycle),我们可以将输入中的标记映射到乱码中,并将其写入外部文件。然后,在第二个文档中,只要从第一个文档中知道映射,我们就可以将外部输入的乱码取消映射回 LaTeX 代码:

制图

这将映射输入块并将其写入文件xform.tex。任何未映射的字符(例如大写字母、数字等)均以明文形式显示。显然,映射必须是一对一的,否则取消映射将会产生歧义。

对于那些仍安装有旧版 LaTeX 的用户,已编辑以避免使用\expanded选项。\addcytoks

映射之后,我还展示了乱码的去标记形式:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tokcycle}
\newwrite\xfile
\long\def\remaptext#1#2\endremaptext{\tokcycle
  {\addcytoks[4]{\tcremap{##1}}}
  {\processtoks{##1}}
  {\addcytoks{##1}}
  {\addcytoks{##1}}{#2}%
  \immediate\openout\xfile=#1
  \immediate\write\xfile{\the\cytoks}
}
\newcommand*\tcmapto[2]{\expandafter\def\csname tcmapto#1\endcsname{#2}%
  \tcmapfrom{#1}{#2}}
\newcommand*\tcmapfrom[2]{\expandafter\def\csname tcmapfrom#2\endcsname{#1}}
\newcommand*\tcremap[1]{\ifcsname tcmapto#1\endcsname
\csname tcmapto#1\expandafter\endcsname\else\expandafter#1\fi}
\tcmapto am \tcmapto bf \tcmapto cz \tcmapto de \tcmapto ey
\tcmapto fl \tcmapto gx \tcmapto hb \tcmapto ic \tcmapto jn
\tcmapto ki \tcmapto lr \tcmapto mh \tcmapto nt \tcmapto ok
\tcmapto ps \tcmapto qa \tcmapto ro \tcmapto sq \tcmapto tw
\tcmapto uj \tcmapto vp \tcmapto wd \tcmapto xg \tcmapto yu
\tcmapto zv \tcmapto ^& \tcmapto &^ \tcmapto +- \tcmapto -+
\begin{document}
\remaptext{xform.tex}%
\section{We can map sectioning, as well}

What can't we \textit{accomplish} if we try?
\begin{equation}
y = f(x) = \frac{1 + x^a}{47b}
\end{equation}
Let us be of good spirit and put our minds to it!
\endremaptext
Encoded input (detokenized):\\
\detokenize\expandafter{\the\cytoks}
\end{document}

在此处输入图片描述

检查文件后xform.tex显示相同内容(我添加了换行符):

\section {Wy zmt hms qyzwcktctx, mq dyrr} \par Wbmw zmt'w dy 
\textit {mzzkhsrcqb} cl dy wou? \begin {yajmwckt} u = l(g) = 
\frac {1 - g&m}{47f} \end {yajmwckt} Lyw jq fy kl xkke qscocw 
mte sjw kjo hcteq wk cw! 

取消映射

xform.tex现在,我们使用原始编码中的映射来取消映射乱码(包含在外部文件中):

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tokcycle,etoolbox}
\tokcycleenvironment\unmaptext
  {\addcytoks[4]{\tcunmap{##1}}}
  {\processtoks{##1}}
  {\addcytoks{##1}}
  {\addcytoks{##1}}
\newcommand*\tcmapto[2]{\expandafter\def\csname tcmapto#1\endcsname{#2}%
  \tcmapfrom{#1}{#2}}
\newcommand*\tcmapfrom[2]{\expandafter\def\csname tcmapfrom#2\endcsname{#1}}
\newcommand*\tcunmap[1]{\ifcsname tcmapfrom#1\endcsname
\csname tcmapfrom#1\expandafter\endcsname\else\expandafter#1\fi}
\tcmapto am \tcmapto bf \tcmapto cz \tcmapto de \tcmapto ey
\tcmapto fl \tcmapto gx \tcmapto hb \tcmapto ic \tcmapto jn
\tcmapto ki \tcmapto lr \tcmapto mh \tcmapto nt \tcmapto ok
\tcmapto ps \tcmapto qa \tcmapto ro \tcmapto sq \tcmapto tw
\tcmapto uj \tcmapto vp \tcmapto wd \tcmapto xg \tcmapto yu
\tcmapto zv \tcmapto ^& \tcmapto &^ \tcmapto +- \tcmapto -+

\newread\infile
\makeatletter
\newcommand\unmapfile[1]{%
\def\fcont{}
\openin\infile=#1
{\endlinechar=-1
 \everyeof{}%
 \loop\unless\ifeof\infile
  \read\infile to \temp
  \ifx\temp\empty\else
\expandafter\g@addto@macro\expandafter\fcont\expandafter{\temp}%
  \fi
 \repeat
}%
\closein\infile
\expandafter\unmaptext\fcont\endunmaptext
}
\makeatother
\begin{document}
\unmapfile{xform.tex}
\end{document}

提供所需的输出:

在此处输入图片描述

因此,如果您拥有原始映射功能和包含映射文本的文件,您就可以重建原始文件!

相关内容