desofuscamento

Alexandre Oliva lxoliva en fsfla.org
Mar Abr 14 10:44:48 UTC 2026


Oi, pessoAll,

Ontem comecei a mexer no IRPF-Livre 2026 e retomei o projeto de
descompilação do IRPF2026.

On Jun 15, 2025, Adonay Felipe Nogueira <adfeno.7046 en gmail.com> wrote:

> Em 02/06/2025 02:36, Alexandre Oliva escreveu:
>> Acabo de notar que desde 2021 o IRPF da Receita Federal tem vindo
>> (quase) sem ofuscamento.  A exceção é o módulo receitanet.jar, que
>> parece que tem sido reutilizado sem qualquer modificação.

> Interessante.

Usei o procyon com o jre do openjdk-11, ambos disponíveis no Trisquel11,
pra descompilar tudo que veio do SERPRO no IRPF2026.

Ele só teve alguma dificuldade com um único método da z.class do
receitanet-pro-1.32.jar, que nem é tão grande, mas precisaria ser
descompilado na mão.  De resto, parece que descompilou tudinho, mas
ainda não tentei recompilar pra ver o que acontece.  Tem algumas
ocorrências de '<?' no código descompilado, tais como 'Class<?>' e
'[...]<? extends [...]', que me parecem suspeitas (não acompanhei a
evolução de Java), talvez precisem ser ajustadas manualmente.

De resto, há vários módulos de terceiros, todos sob licenças livres, à
exceção dos fontes Arial, escondidos em midas-layouts-2.0.jar.

Busquei os fontes de vários deles, e encontrei quase tudo que busquei.
A única dificuldade quase impeditiva por enquanto foi
jgoodies-forms-1.0.3; o desenvolvedor não mais oferece essa versão pra
download, as versões mais novas não são mais livres, repositórios maven
não têm essa versão.  Um repositório git de swing-jgoodies-forms parece
ter fontes antigos o suficiente, mas não tem uma tag que identifique a
versão específica, há uma meia dúzia de commits entre um refresh para
1.0.3 e um pra 1.0.4.  Temos a 1.1 no repositório do irpf-livre, pois na
época não sabia qual versão estavam usando, mas essa não vai ajudar
grande coisa.


>> https://www.planalto.gov.br/ccivil_03/_ato2019-2022/2020/lei/l14063.htm#art16

Não tenho muita dúvida de que esse programa se enquadra na lei, isto é,
deveria estar sob licença livre; as exceções por restrição de acesso à
informação nem cabem dada a facilidade de descompilação, mesmo do módulo
ofuscado.  A outra exceção possível seria contrato firmado entre Receita
Federal e SERPRO antes da entrada em vigor, supondo que o contrato
antigo não houvesse sido renovado ainda, ou que a renovação não
caracterizasse novo contrato.  Mesmo assim, não sei se dá pra enquadrar
o contrato como "firmado com terceiros", já que os dois lados seriam
cobertos pela lei, parece-me que haveria alguma irregularidade em
tentarem forçar a barra pra manter o programa não-livre.


Os módulos que não são desenvolvidos pelo próprio SERPRO são todos
livres, isso eu já verifiquei.  Infelizmente não tem nada com copyleft
forte; tem alguns módulos com copyleft fraco, e muita coisa sob licenças
bem permissivas:

balloontip-1.2.4.jar BSD3
batik-awt-util-1.7.jar ASL2.0
batik-dom-1.7.jar ASL2.0
batik-svg-dom-1.7.jar ASL2.0
batik-svggen-1.7.jar ASL2.0
batik-util-1.7.jar ASL2.0
batik-xml-1.7.jar ASL2.0
bcmail-jdk18on-1.75.jar MIT/X11-ish
bcpkix-jdk18on-1.75.jar MIT/X11-ish
bcprov-jdk18on-1.75.jar MIT/X11-ish
bcutil-jdk18on-1.75.jar MIT/X11-ish
castor-1.2.jar BSD-5ish+ASL2.0
chardet-1.0.0.jar MPL1.1|GPL2+|LGPL2.1+
commons-beanutils-1.9.4.jar ASL2.0
commons-codec-1.11.jar ASL2.0
commons-collections-3.2.2.jar ASL2.0
commons-digester-1.8.jar ASL2.0
commons-io-2.4.jar ASL2.0
commons-lang-2.6.jar ASL2.0
commons-lang3-3.8.1.jar ASL2.0
commons-logging-1.2.jar ASL2.0
core-3.3.3.jar ASL2.0
exificient-0.9.7.jar MIT/X11
exificient-core-0.9.7.jar MIT/X11
exificient-grammars-0.9.7.jar MIT/X11
filters-2.0.235.jar ASL2.0
fluent-hc-4.5.14.jar ASL2.0
freesans-1.0.0.jar FreeFont(PD|GPL|OPL)
groovy-3.0.25.jar ASL2.0+BSD3
groovyconverter-1.0.jar ASL2.0+BSD3
groovy-xml-3.0.25.jar ASL2.0+BSD3
gson-2.3.jar ASL2.0
httpclient-4.5.14.jar ASL2.0
httpcore-4.4.16.jar ASL2.0
icepdf-core-6.2.2.jar ASL2.0
icepdf-viewer-6.2.2.jar ASL2.0
itext-2.1.7.jar LGPL2+|MPL1.1+permissive+BSD2+Unicode/X11-ish
jackson-annotations-2.1.4.jar ASL2.0
jackson-core-2.1.4.jar ASL2.0
jackson-databind-2.1.4.jar ASL2.0
jai_core-1.1.3.jar BSD2
jai-imageio-core-1.3.1.jar BSD2
jakarta-regexp-1.4.jar ASL2.0
jasperreports-5.6.1.jar LGPL3+
javase-3.3.3.jar ASL2.0
jaxb-api-2.3.0.jar CDDL1.1|GPL2=+ClassPathException
jcommander-1.72.jar ASL2.0
jcommander-1.85.jar ASL2.0
jcommon-1.0.15.jar LGPL2.1+
jdtcore-3.1.0.jar EPL1.0
jfreechart-1.0.12.jar LGPL2.1+
jgoodies-forms-1.0.3.jar BSD3-ish (difícil encontrar fontes para essa versão)
jna-4.5.2.jar LGPL2.1+|ASL2.0
jna-platform-4.5.2.jar LGPL2.1+|ASL2.0
jsignnet-3.6.0.jar (serpro)
lucene-analyzers-common-4.5.1.jar ASL2.0
lucene-core-4.5.1.jar ASL2.0
lucene-queries-4.5.1.jar ASL2.0
lucene-queryparser-4.5.1.jar ASL2.0
lucene-sandbox-4.5.1.jar ASL2.0
maven-artifact-3.8.4.jar ASL2.0
midas-layouts-2.0.jar (serpro)+FreeFont(PD|GPL|OPL)+Arial(proprietary???)
olap4j-0.9.7.309-JS-3.jar EPL1.0
plexus-utils-3.3.0.jar ASL2.0+BSD-ish
ppgd-formatos-externos-4.3.1.jar (serpro)
ppgd-gui-beans-4.3.1.jar (serpro)
ppgd-icones-4.0.jar (serpro)
ppgd-infraestrutura-4.3.1.jar (serpro)
ppgd-negocio-4.3.1.jar (serpro)
ppgd-persistencia-4.3.1.jar (serpro)
ppgd-pgd-utils-4.3.1.jar (serpro)
receitanet-pro-1.32.jar (serpro)
recnet-envelope-1.2.jar (serpro)
recnetutil-1.1.jar (serpro)
serpro-1.0.0.jar (serpro)
slf4j-api-1.7.36.jar MIT/X11
slf4j-nop-1.7.36.jar MIT/X11
sqladaj-2.0.1.jar (serpro)
swing-layout-1.0.3.jar LGPL2.1+ (repo maven tem fontes em .jar)
swing-worker-1.1.jar LGPL2.1+ (repo maven tem fontes em .jar)
swingx-1.6.jar LGPL2.1+ (repo maven tem fontes em .jar)
tinylaf-1.4.0.jar LGPL3+
xalan-2.6.0.jar ASL1.1+MIT/X11
xercesImpl-2.11.0.jar ASL2.0
xmladaj-1.0.0.jar (serpro)+jarinjarloader(EPL1.0)
xmlpull-1.1.3.1.jar PD
xslconverter-1.0.jar (serpro)+jarinjarloader(EPL1.0)


Dada a dúvida sobre a vigência do contrato (será que alguém sabe como
averiguar isso?  o contrato deve ser público, mas não sei achar essas
coisas; será que precisaria de um pedido via LAI?), talvez não desse pra
publicar um pacote livre com base no IRPF2026, mas seguramente daria pra
construir e publicar uma receita sobre como obter fontes passíveis de
auditoria e, forçando um pouco, modificação posterior, até pra provocar
alguma reação e debate sobre a aplicabilidade da lei.  Só não é certeza
de que seria livre, especialmente o receitanet-pro, porque tem nomes de
classes e métodos ofuscados.  Mas dá pra viver sem esse pacote, e daí,
dependendo do contrato, o resto seria defensavelmente livre.


Enfim...  Vou pensar um pouco a respeito, mas acho que vou fazer a
atualização do bom e velho IRPF-Livre baseado no IRPF2007 primeiro, que
é mais garantido.  Depois eu volto a explorar essa descompilação.

-- 
Alexandre Oliva, happy hacker            https://blog.lx.oliva.nom.br/
Free Software Activist     FSFLA co-founder     GNU Toolchain Engineer
Learn the truth about Richard Stallman at https://stallmansupport.org/


Más información sobre la lista de distribución Softwares-impostos