1 pontos por GN⁺ 2025-02-08 | 1 comentários | Compartilhar no WhatsApp
  • LinuxPDF é uma demo que executa uma VM Linux dentro de um PDF, posicionando a tela da VM e a interface de entrada pelo teclado juntas no PDF
  • O ambiente de execução é limitado a navegadores baseados em Chromium, então é difícil esperar que funcione em outros ambientes de PDF
  • As entradas de teclado podem ser enviadas à VM pressionando os botões de tecla na tela ou digitando diretamente na caixa de entrada superior
  • As teclas oferecidas incluem Esc, Tab, Enter, Shift, Ctrl, Alt, setas, Home/End, PgUp/PgDn, F1~F12, além de teclas numéricas e de letras
  • Usuários que quiserem conferir a implementação podem ver o código-fonte no repositório linuxpdf no GitHub

Demo de VM Linux dentro de um PDF

  • LinuxPDF é uma demo que executa uma VM Linux dentro de um documento PDF
  • O ambiente de funcionamento é limitado a navegadores baseados em Chromium
  • Na tela há a mensagem Loading..., que indica o status de carregamento da VM

Enviando entradas de teclado para a VM

  • Há duas formas de entrada
    • Pressionar os botões de tecla exibidos na tela
    • Digitar diretamente na caixa de entrada Type here for keyboard inputs.
  • A tecla pressionada atualmente pode ser conferida na área Pressed:

Conjunto de teclas oferecido

  • Teclas de controle e teclas especiais
    • Esc, Tab, Caps, Enter, Shift, RShift, Ctrl, Alt, Space, Menu
    • Home, Ins, Del, End, PgUp, PgDn
  • Setas e teclas de função
    • ^, <, v, >
    • De F1 a F12
  • Entrada de teclas comuns
    • Números 1~0, -, =
    • Teclas de letras QWERTY
    • [, ], ;, ', ,, ., /, \, `

Código-fonte

  • Source code: repositório do código-fonte do LinuxPDF

1 comentários

 
GN⁺ 2025-02-08
Comentários do Hacker News
  • Não funciona e o documento não responde. Só para constar, usei uma HP DeskJet 2820e Printer

    • Parece que seria preciso circular a tecla correta a cada escaneamento e reinserir isso no scanner repetidamente
    • O PDF de fato tem um recurso para definir separadamente quais elementos mostrar na tela e imprimir (Optional Content)
  • Nos últimos dias, tanto “rodar Linux dentro de um PDF” quanto “a forma de colocar PDFs em LLMs” viralizaram, então, se as pessoas começarem a conectar vários tipos de parsers e avaliadores de PDF a LLMs, pode surgir um conjunto bem interessante de possibilidades de hacking

    • Dá para rodar Linux dentro do LLM e usar isso para roubar recursos computacionais, e com isso treinar o próprio LLM ou minerar Bitcoin
    • PDF sempre foi um vetor de ataque muito atraente. A maioria das pessoas pensa em PDF apenas como documento de texto e não sabe que é fácil embutir código executável
      Somando isso ao fato de que leitores populares como o Acrobat têm uma quantidade assustadora de vulnerabilidades, vira a porta de entrada perfeita para invadir empresas
  • É o post que apareceu alguns dias atrás: https://news.ycombinator.com/item?id=42891937
    No repositório também há explicações e informações sobre como os mecanismos internos funcionam

  • Finalmente chegou. Faz tempo demais que faço a piada de “vou colocar Linux.js em um PDF para rodar Linux dentro de um PDF dentro de um navegador dentro de um Linux dentro de um PDF dentro de um navegador dentro de um Linux”

    • Não exatamente. Este PDF ainda não consegue abrir um navegador!
  • Fazer isso com JavaScript parece meio trapaça. Fico curioso se algo parecido seria possível também com PostScript

    • É possível, mas não dentro de um PDF. PDFs só suportam o subconjunto não Turing-completo de PostScript, porque os projetistas do PDF acharam que colocar uma linguagem Turing-completa dentro de um formato de documento causaria problemas de desempenho
      Depois mudaram de ideia e adicionaram suporte a JavaScript
    • Do ponto de vista computacional, é possível. PostScript tem as operações aritméticas inteiras necessárias para emulação de CPU x86, e também strings mutáveis de bytes que servem bem como memória de emulação
    • Existe o zmachine.ps em PostScript, um interpretador de ZMachine com o qual dá para jogar adventures de texto
      Claro, também existem engine de xadrez e jogo da velha em PostScript, e com paciência talvez até dê para rodar jogos de NES, embora talvez seja preciso mexer bastante com a pilha
  • Finalmente agora dá para executar rm -rf / dentro de um PDF

    • O PostScript oferece isso com o operador "shredpage"
  • Se você copiar isso 10 vezes e colocar em um pendrive, poderá curtir um cluster Kubernetes portátil
    https://news.ycombinator.com/item?id=42681039

  • No VirusTotal aparecem pelo menos 3 detecções, mas não sei dizer se isso significa algo relevante
    ClamAV: Js.Trojan.Obfus-48
    Cylance: Unsafe
    Google: Detected

  • Basta definir pdfjs.enableScripting como false no about:config do Firefox

  • Mas existe algum editor de PDF para Linux que rode Linux dentro de PDF? No Evince ele não carrega

    • O único lugar onde consegui rodar foi no Chrome. Não funciona em Adobe Reader, Firefox, Evince etc.
      Parece que esse tipo de coisa de “programar dentro de PDF” quase sempre tem o Chrome como ambiente-alvo. Não sei ao certo se é porque o Chrome permite executar mais código dentro dos documentos ou algo assim