{"id":110721,"date":"2023-10-10T15:10:19","date_gmt":"2023-10-10T13:10:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android"},"modified":"2023-10-10T15:10:19","modified_gmt":"2023-10-10T13:10:19","slug":"google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android","title":{"rendered":"A Google reescreveu o firmware pvmfm, utilizado no Android, na linguagem Rust","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Como parte dos esfor\u00e7os para aumentar a seguran\u00e7a de componentes de software cr\u00edticos na plataforma Android, a Google reescreveu o firmware pvmfm na linguagem Rust, utilizado para organizar o funcionamento de m\u00e1quinas virtuais iniciadas pelo hypervisor pVM do Android Virtualization Framework. Anteriormente, o firmware era escrito na linguagem C e implementado sobre o bootloader U-Boot, no qual vulnerabilidades foram anteriormente encontradas devido a problemas com a mem\u00f3ria.     <\/p>\n<p>O firmware reescrito em Rust foi inclu\u00eddo no Android 14, e as bibliotecas universais criadas durante o processo de desenvolvimento do firmware foram formatadas como pacotes crate e entregues \u00e0 comunidade Rust. Por exemplo, foi publicado o pacote smccc para suportar interfaces ARM PSCI (Power State Coordination Interface) e chamadas SMCCC (SMC Calling Convention), e o pacote aarch64-paging para manipula\u00e7\u00e3o de tabelas de p\u00e1ginas de mem\u00f3ria. Tamb\u00e9m foi realizada uma revis\u00e3o de erros e expans\u00e3o da funcionalidade do pacote existente virtio-drivers com implementa\u00e7\u00e3o de drivers VirtIO. Al\u00e9m da plataforma Android, os pacotes mencionados est\u00e3o envolvidos no projeto Oak, que desenvolve componentes para transmiss\u00e3o, armazenamento e processamento de dados em ambientes protegidos (TEE, Trusted Execution Environment).        <\/p>\n<p>O hypervisor pVM assume o controle em uma fase precoce do carregamento e garante completa isolamento de mem\u00f3ria <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pt\/vps\/\"   title=\"m\u00e1quinas virtuais\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2070\">m\u00e1quinas virtuais<\/a> e do ambiente host, impedindo que o sistema host acesse as m\u00e1quinas virtuais protegidas, nas quais s\u00e3o processados dados confidenciais. O firmware pvmfm (Protected Virtual Machine Firmware) obt\u00e9m o controle logo ap\u00f3s o in\u00edcio da m\u00e1quina virtual, realiza a verifica\u00e7\u00e3o do ambiente criado e decide sobre a interrup\u00e7\u00e3o de emerg\u00eancia do carregamento em caso de problemas com a integridade ou gera um certificado de inicializa\u00e7\u00e3o para o sistema convidado em caso de confirma\u00e7\u00e3o da cadeia de confian\u00e7a.            <\/p>\n<p>A reescrita na linguagem Rust permite uma conformidade mais simples e segura com a \"regra dos dois\", aplicada pelo Google para garantir a seguran\u00e7a dos componentes do sistema Android. De acordo com esta regra, qualquer c\u00f3digo adicionado deve se enquadrar em no m\u00e1ximo duas das tr\u00eas condi\u00e7\u00f5es: trabalhar com dados de entrada n\u00e3o verificados, usar uma linguagem de programa\u00e7\u00e3o n\u00e3o segura (C\/C++) e ser executado com privil\u00e9gios elevados. Dessa regra, conclui-se que o c\u00f3digo para processamento de dados externos deve ser ou reduzido a privil\u00e9gios m\u00ednimos (isolado), ou escrito em uma linguagem de programa\u00e7\u00e3o segura. Segundo estat\u00edsticas do Google, cerca de 70% de todas as vulnerabilidades perigosas identificadas no Android s\u00e3o causadas por erros no gerenciamento de mem\u00f3ria.     <\/p>\n<p>Rust \u00e9 focada em opera\u00e7\u00f5es seguras com mem\u00f3ria e permite reduzir o risco de vulnerabilidades causadas por problemas como refer\u00eancias a \u00e1reas de mem\u00f3ria ap\u00f3s sua libera\u00e7\u00e3o e estouro de buffer. A seguran\u00e7a da mem\u00f3ria em Rust \u00e9 garantida durante a compila\u00e7\u00e3o atrav\u00e9s da verifica\u00e7\u00e3o de refer\u00eancias, rastreamento da posse de objetos e considera\u00e7\u00e3o do tempo de vida dos objetos (escopos), assim como pela avalia\u00e7\u00e3o da corre\u00e7\u00e3o do acesso \u00e0 mem\u00f3ria durante a execu\u00e7\u00e3o do c\u00f3digo. Rust tamb\u00e9m oferece ferramentas para prote\u00e7\u00e3o contra estouros inteiros, exige a inicializa\u00e7\u00e3o obrigat\u00f3ria dos valores das vari\u00e1veis antes do uso, gerencia melhor os erros na biblioteca padr\u00e3o, aplica o conceito de refer\u00eancias e vari\u00e1veis imut\u00e1veis (immutable) por padr\u00e3o e oferece uma forte tipagem est\u00e1tica para minimizar erros l\u00f3gicos.    <\/p>\n<p>Entre as dificuldades que surgem no processo de desenvolvimento de componentes de baixo n\u00edvel em Rust, como drivers, est\u00e1 a necessidade de trabalhar com ponteiros brutos em modo unsafe, pois Rust \u00e9 projetado levando em conta o uso da mem\u00f3ria alocada no programa, e no c\u00f3digo que opera sem camadas acima do hardware, \u00e9 necess\u00e1rio acessar a mem\u00f3ria compartilhada e MMIO. Atualmente, as capacidades de Rust para trabalhar com ponteiros brutos deixam a desejar, mas a situa\u00e7\u00e3o deve mudar ap\u00f3s a estabiliza\u00e7\u00e3o do suporte para os macros offset_of, slice_ptr_get e slice_ptr_len.       <\/p>\n<p>Entre as desvantagens, merece aten\u00e7\u00e3o a necessidade de uma sintaxe aprimorada para acessar campos de estruturas e \u00edndices de arrays atrav\u00e9s de ponteiros brutos, sem criar refer\u00eancias, al\u00e9m das limita\u00e7\u00f5es na cria\u00e7\u00e3o de wrappers seguros sobre opera\u00e7\u00f5es unsafe, que podem causar comportamentos indefinidos e n\u00e3o podem ser verificadas pelo compilador. Por exemplo, n\u00e3o \u00e9 poss\u00edvel criar tais wrappers para opera\u00e7\u00f5es com tabelas de p\u00e1ginas de mem\u00f3ria, j\u00e1 que o mapeamento de p\u00e1ginas em uma parte do programa pode afetar outras partes.     <\/p>\n<p>Quanto ao tamanho do c\u00f3digo resultante, a vers\u00e3o antiga do firmware pVM ocupava 220 kB, enquanto a nova ocupa 460 kB, mas houve adi\u00e7\u00e3o de novos recursos na vers\u00e3o reescrita, permitindo a remo\u00e7\u00e3o de alguns outros componentes utilizados durante a inicializa\u00e7\u00e3o. Assim, o tamanho total de todos os componentes de inicializa\u00e7\u00e3o antigos e novos acabou sendo compar\u00e1vel. Observa-se que, quando o tamanho \u00e9 mais importante que o desempenho, resultados compar\u00e1veis aos da linguagem C podem ser alcan\u00e7ados ao ativar modos adicionais de otimiza\u00e7\u00e3o de tamanho no compilador, eliminar depend\u00eancias desnecess\u00e1rias e n\u00e3o utilizar recursos de formata\u00e7\u00e3o de strings.    <\/p>\n<p>Adicionalmente, \u00e9 mencionada a continuidade do trabalho na implementa\u00e7\u00e3o da capacidade de execu\u00e7\u00e3o de aplica\u00e7\u00f5es confi\u00e1veis escritas na linguagem Rust (Trusted Application) no sistema operacional Trusty, que fornece um ambiente TEE (Trusted Execution Environment) para Android, sendo executado em paralelo com o Android no mesmo processador em um ambiente isolado. O Trusty \u00e9 utilizado em dispositivos Pixel e j\u00e1 emprega Rust em bibliotecas e componentes do sistema (o n\u00facleo continua em C).<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=59900\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Android \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Google \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 pvmfm, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u043e\u043c pVM \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 Android Virtualization Framework. \u0420\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 U-Boot, \u0432 \u043a\u043e\u0434\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u043f\u0440\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-110721","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Android \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Google \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 pvmfm, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/news\/google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Google \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 pvmfm, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0432 Android | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Android \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Google \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 pvmfm, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2023-10-10T13:10:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2023-10-10T13:10:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Google reescreveu em Rust o firmware pvmfm, utilizado no Android | ProHoster","description":"No \u00e2mbito do trabalho para fortalecer a seguran\u00e7a dos componentes de software cr\u00edticos da plataforma Android, a Google reescreveu em Rust o firmware pvmfm, que \u00e9 utilizado para gerenciar m\u00e1quinas virtuais.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Google \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 pvmfm, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0432 Android | ProHoster","og:description":"\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Android \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Google \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Rust \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 pvmfm, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d.","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/google-perepisal-na-yazyke-rust-proshivku-pvmfm-ispolzuemuyu-v-android","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2023-10-10T13:10:19+00:00","article:modified_time":"2023-10-10T13:10:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"110721","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-02-09 17:11:16","updated":"2026-02-09 17:11:16","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/110721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=110721"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/110721\/revisions"}],"predecessor-version":[{"id":159314,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/110721\/revisions\/159314"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=110721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=110721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=110721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}