<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>PPTX visszafejtés on File Format Blog</title>
    <link>https://blog.fileformat.com/hu/tag/pptx-visszafejt%C3%A9s/</link>
    <description>Recent content in PPTX visszafejtés on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>hu</language>
    <lastBuildDate>Wed, 16 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/hu/tag/pptx-visszafejt%C3%A9s/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PPTX visszafejtés: A PowerPoint fájlok belső működésének megértése</title>
      <link>https://blog.fileformat.com/hu/presentation/pptx-reverse-engineering-understanding-powerpoint-files-internally/</link>
      <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/hu/presentation/pptx-reverse-engineering-understanding-powerpoint-files-internally/</guid>
      <description>Fedezze fel, mi is él valójában egy `.pptx` fájlban. Ismerje meg, hogyan működik a OpenXML csomagolás, a kapcsolati grafikonok, az alakzatok és a rajzolási jelölés a háttérben.</description>
      <content:encoded><![CDATA[<p><strong>Utoljára frissítve</strong>: 16 Sept, 2026</p>
<figure class="align-center ">
    <img loading="lazy" src="images/pptx-reverse-engineering-understanding-powerpoint-files-internally.png#center"
         alt="PPTX Reverse Engineering: Understanding PowerPoint Files Internally"/> 
</figure>

<hr>
<h2 id="visszafejtés-pptx4-fájlok-fejlesztőknek-szóló-útmutató">Visszafejtés <a href="https://docs.fileformat.com/presentation/pptx/">PPTX</a> fájlok: Fejlesztőknek szóló útmutató</h2>
<p>A modern prezentációs anyagok mindent meghajtnak, az befektetői bemutatóktól a belső negyedéves mutatókig. De ha valaha is programozottan kellett szöveget kinyerni, sablonokat helyettesíteni futásidőben, automatikus diakészítőket építeni, vagy bizalmas prezentációkat tisztítani, valószínűleg gyorsan rájöttél valamire: a szabványos magas szintű prezentációs könyvtárak gyakran kiszámíthatatlan fekete dobozként érződnek.</p>
<p>Amikor a <a href="https://products.fileformat.com/presentation/python/python-pptx/"><code>python-pptx</code></a>, <a href="https://products.fileformat.com/presentation/java/apache-poi-xslf/">Apache POI</a> vagy <a href="https://products.fileformat.com/presentation/net/openxmlsdk/">OpenXML SDK</a> könyvtárak elérik a határaikat – vagy dokumentálatlan elrendezési hibákat vezetnek be – az egyetlen kiút a belülről való áthaladás. Meg kell értened, hogy egy PowerPoint prezentáció valójában mi a bájt- és séma szinten.</p>
<p>Ebben a mélyreható elemzésben leleplezzük a <code>.pptx</code> formátumot, kibontjuk annak belső felépítését, nyomon követjük a kapcsolati gráfot, szétbontjuk a rajzolási hierarchiákat, és gyakorlati stratégiákat mutatunk be a visszafejtéshez, vizsgálathoz és a prezentációk nyers kóddal történő manipulálásához.</p>
<h2 id="1-mi-is-valójában-egy-pptx-fájl">1. Mi is valójában egy <code>.pptx</code> fájl?</h2>
<p>Alapvetően a <code>.pptx</code> fájl nem egy saját tulajdonú monolitikus bináris, mint az 1990-es évek ősi <code>.ppt</code> formátuma. Amióta a Microsoft bevezette az Office Open XML-et (ECMA-376 és ISO/IEC 29500), a modern Office dokumentumok <strong>Open Packaging Conventions (OPC) archívumok</strong>.</p>
<p>Egyszerűen fogalmazva: <strong>a <code>.pptx</code> fájl csupán egy zip archívum, amely XML dokumentumokat és médiaeszközöket tartalmaz, egy determinisztikus könyvtárfában szervezve.</strong></p>
<p>Ezt másodpercek alatt bizonyíthatod a szokásos terminál eszközök segítségével:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Rename the extension and unpack it</span>
</span></span><span style="display:flex;"><span>cp presentation.pptx presentation.zip
</span></span><span style="display:flex;"><span>unzip presentation.zip -d presentation_unpacked/
</span></span><span style="display:flex;"><span>cd presentation_unpacked/
</span></span><span style="display:flex;"><span>tree -L <span style="color:#ae81ff">2</span>
</span></span></code></pre></div><p>Az eredményül kapott könyvtárfa figyelemre méltóan konzisztensnek tűnik:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.
</span></span><span style="display:flex;"><span>├── [Content_Types].xml
</span></span><span style="display:flex;"><span>├── _rels/
</span></span><span style="display:flex;"><span>│   └── .rels
</span></span><span style="display:flex;"><span>├── docProps/
</span></span><span style="display:flex;"><span>│   ├── app.xml
</span></span><span style="display:flex;"><span>│   └── core.xml
</span></span><span style="display:flex;"><span>└── ppt/
</span></span><span style="display:flex;"><span>    ├── presentation.xml
</span></span><span style="display:flex;"><span>    ├── _rels/
</span></span><span style="display:flex;"><span>    ├── slides/
</span></span><span style="display:flex;"><span>    ├── slideLayouts/
</span></span><span style="display:flex;"><span>    ├── slideMasters/
</span></span><span style="display:flex;"><span>    ├── theme/
</span></span><span style="display:flex;"><span>    └── media/
</span></span></code></pre></div><p>Minden egyes vizuális eszköz, átmenet, diamester öröklődés, szövegdoboz koordináta és vektorgrafika kódolva van ebben a fájlhierarchiában.</p>
<h2 id="2-a-csomag-felépítése-kulcsfontosságú-alrendszerek">2. A csomag felépítése: kulcsfontosságú alrendszerek</h2>
<p>A prezentációk hatékony visszafejtéséhez meg kell értened minden felső szintű komponens feladatait.</p>
<h3 id="content_typesxml"><code>[Content_Types].xml</code></h3>
<p>Ez az OPC olvasó belépő manifesztje. A fájlkiterjesztéseket és a kifejezett belső részneveket szabványos MIME/tartalomtípusokhoz rendeli. Ha új diát hozol létre vagy képet adsz hozzá, és nem jelented be a <code>[Content_Types].xml</code>-ben, a PowerPoint a prezentációt sérültnek jelzi, és helyreállítást kér.</p>
<p>Példa kódrészlet:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;Types</span> <span style="color:#a6e22e">xmlns=</span><span style="color:#e6db74">&#34;http://schemas.openxmlformats.org/package/2006/content-types&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Default</span> <span style="color:#a6e22e">Extension=</span><span style="color:#e6db74">&#34;xml&#34;</span> <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;application/xml&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Default</span> <span style="color:#a6e22e">Extension=</span><span style="color:#e6db74">&#34;rels&#34;</span> <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;application/vnd.openxmlformats-package.relationships+xml&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Default</span> <span style="color:#a6e22e">Extension=</span><span style="color:#e6db74">&#34;png&#34;</span> <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;image/png&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Override</span> <span style="color:#a6e22e">PartName=</span><span style="color:#e6db74">&#34;/ppt/presentation.xml&#34;</span> 
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/Types&gt;</span>
</span></span></code></pre></div><h3 id="a-_rels-kapcsolati-gráf">A <code>_rels/</code> kapcsolati gráf</h3>
<p>Az OpenXML egyik legfontosabb fogalma a <strong>kapcsolatokon keresztüli indirekció</strong>. Az alkatrészek ritkán mutatnak közvetlenül a nyers fájlutakra. Ehelyett egy fájl (pl. <code>slide1.xml</code>) egy kapcsolati fájlhoz kapcsolódik, amely egy testvér <code>_rels</code> mappában található (pl. <code>_rels/slide1.xml.rels</code>).</p>
<p>A kapcsolatok meghatározzák:</p>
<ul>
<li>Hiperhivatkozások (<code>r:id=&quot;rId2&quot;</code>, TargetMode=&ldquo;External&rdquo;)</li>
<li>Képek és hangfájlok, amelyek a <code>ppt/media/</code> mappában tárolódnak</li>
<li>Elrendezés öröklési mutatók (<code>slideLayout1.xml</code>)</li>
<li>Jegyzet diák, megjegyzések és beágyazott betűtípusok</li>
</ul>
<h3 id="docprops-metaadatok"><code>docProps/</code> (Metaadatok)</h3>
<ul>
<li><strong><code>core.xml</code></strong>: Dublin Core metaadatok—szerző, cím, létrehozás dátuma, módosítás időbélyege.</li>
<li><strong><code>app.xml</code></strong>: Alkalmazás-specifikus statisztikák—PowerPoint verzió, összes dia száma, rejtett diák száma, szavak száma, bemutató sablonnevek.</li>
</ul>
<h3 id="ppt-a-prezentációs-motor"><code>ppt/</code> (A prezentációs motor)</h3>
<p>Itt található a tényleges prezentáció:</p>
<ul>
<li><strong><code>presentation.xml</code></strong>: A fő gerinc. Regisztrálja a diaazonosítókat, a dia méretméreteket, a jegyzetek főreferenciáit és az alapértelmezett betűtípus-beállításokat.</li>
<li><strong><code>slides/</code></strong>: Az egyes diák (<code>slide1.xml</code>, <code>slide2.xml</code>, stb.).</li>
<li><strong><code>slideLayouts/</code></strong>: Mester struktúra előbeállítások (Címdiák, Két oszlop, Szakaszfejléc).</li>
<li><strong><code>slideMasters/</code></strong>: Globális stílusok, alapértelmezett paletták, háttérkitöltések és helyőrző öröklődés.</li>
<li><strong><code>theme/</code></strong>: Színpaletták (akcentus 1‑től 6‑ig, sötét/világos változatok) és betűtípus-sémák (fő/segéd betűk).</li>
<li><strong><code>media/</code></strong>: Nyers képek (PNG, JPEG, SVG), hang- és videofájlok.</li>
</ul>
<h2 id="3-diapozitív-felbontása-a-presentationml-p-és-a-drawingml-a-dialektusok">3. Diapozitív felbontása: a PresentationML (<code>p:</code>) és a DrawingML (<code>a:</code>) dialektusok</h2>
<p>Amikor megnyitja a <code>ppt/slides/slide1.xml</code> fájlt, két elsődleges XML névtérrel találkozik:</p>
<ol>
<li><strong>PresentationML (<code>p:</code>)</strong>: Irányítja a strukturális prezentációs elemeket (diák, alakfa, vászoncsoportok).</li>
<li><strong>DrawingML (<code>a:</code>)</strong>: Irányítja a tipográfiát, geometriát, 2D koordinátákat, színátmenetes kitöltéseket és a vektoros megjelenítést.</li>
</ol>
<p>Itt egy leegyszerűsített példa arra, hogy néz ki egy szabványos szöveges alakzat:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;p:sp&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">&lt;!-- 1. Non-visual shape properties (Identifiers, names) --&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;p:nvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;p:cNvPr</span> <span style="color:#a6e22e">id=</span><span style="color:#e6db74">&#34;4&#34;</span> <span style="color:#a6e22e">name=</span><span style="color:#e6db74">&#34;Title Box 1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;p:cNvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:spLocks</span> <span style="color:#a6e22e">noGrp=</span><span style="color:#e6db74">&#34;1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/p:cNvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;p:nvPr&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;p:ph</span> <span style="color:#a6e22e">type=</span><span style="color:#e6db74">&#34;title&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/p:nvPr&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/p:nvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">&lt;!-- 2. Visual shape properties (Position, size, geometry) --&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;p:spPr&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:xfrm&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:off</span> <span style="color:#a6e22e">x=</span><span style="color:#e6db74">&#34;1524000&#34;</span> <span style="color:#a6e22e">y=</span><span style="color:#e6db74">&#34;1143000&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:ext</span> <span style="color:#a6e22e">cx=</span><span style="color:#e6db74">&#34;9144000&#34;</span> <span style="color:#a6e22e">cy=</span><span style="color:#e6db74">&#34;1828800&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:xfrm&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:prstGeom</span> <span style="color:#a6e22e">prst=</span><span style="color:#e6db74">&#34;rect&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:avLst/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:prstGeom&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:solidFill&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:schemeClr</span> <span style="color:#a6e22e">val=</span><span style="color:#e6db74">&#34;accent1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:solidFill&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/p:spPr&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">&lt;!-- 3. Text Body (Paragraphs, runs, styling) --&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;p:txBody&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:bodyPr</span> <span style="color:#a6e22e">rtlCol=</span><span style="color:#e6db74">&#34;0&#34;</span> <span style="color:#a6e22e">anchor=</span><span style="color:#e6db74">&#34;ctr&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:lstStyle/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:p&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:r&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;a:rPr</span> <span style="color:#a6e22e">lang=</span><span style="color:#e6db74">&#34;en-US&#34;</span> <span style="color:#a6e22e">sz=</span><span style="color:#e6db74">&#34;3200&#34;</span> <span style="color:#a6e22e">b=</span><span style="color:#e6db74">&#34;1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;a:t&gt;</span>Mission Critical Architecture<span style="color:#f92672">&lt;/a:t&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;/a:r&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:p&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/p:txBody&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/p:sp&gt;</span>
</span></span></code></pre></div><h3 id="létfontosságú-mértékegységek-emu-k-és-pont-századok">Létfontosságú mértékegységek: EMU-k és pont századok</h3>
<p>Figyelje meg a koordinátszámokat a <code>&lt;a:xfrm&gt;</code> elemben:</p>
<ul>
<li><code>x=\&quot;1524000\&quot;</code></li>
<li><code>cx=\&quot;9144000\&quot;</code></li>
</ul>
<p>Ezek <strong>angol metrikus egységek (EMUs)</strong>.</p>
<ul>
<li>$1 \text{ inch} = 914,400 \text{ EMUs}$</li>
<li>$1 \text{ cm} = 360,000 \text{ EMUs}$</li>
<li>$1 \text{ pt} = 12,700 \text{ EMUs}$</li>
</ul>
<p>Az EMU-k lehetővé teszik, hogy egész számok pontos tört részeket ábrázoljanak mind hüvelyk, mind milliméter esetén, anélkül, hogy lebegőpontos kerekítési hibák lépnének fel különböző hardverarchitektúrák között.</p>
<p>Figyelje meg a betűméretet is:</p>
<ul>
<li><code>sz=\&quot;3200\&quot;</code> azt jelenti, hogy <strong>32,00 pt</strong>. A DrawingML-ben a betűméreteket a pont századrészében mérik.</li>
</ul>
<h2 id="4-az-öröklődési-lánc-miért-örökölnek-a-formák-láthatatlan-stílusokat">4. Az öröklődési lánc: Miért örökölnek a formák láthatatlan stílusokat</h2>
<p>Az egyik leggyakoribb buktató a PPTX fájlok visszafejtésekor az, amikor azt feltételezzük, hogy egy alakzat vizuális stílusa teljes mértékben a saját <code>slideX.xml</code> fájljában van deklarálva.</p>
<p>Valójában az OpenXML egy szigorú <strong>4 szintű kaszkádos öröklődési modellre</strong> támaszkodik:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[Theme: ppt/theme/theme1.xml]
</span></span><span style="display:flex;"><span>              │
</span></span><span style="display:flex;"><span>              ▼
</span></span><span style="display:flex;"><span>[Slide Master: ppt/slideMasters/slideMaster1.xml]
</span></span><span style="display:flex;"><span>              │
</span></span><span style="display:flex;"><span>              ▼
</span></span><span style="display:flex;"><span>[Slide Layout: ppt/slideLayouts/slideLayout1.xml]
</span></span><span style="display:flex;"><span>              │
</span></span><span style="display:flex;"><span>              ▼
</span></span><span style="display:flex;"><span>[Slide: ppt/slides/slide1.xml]
</span></span></code></pre></div><p>Ha egy szövegdoboz a <code>slide1.xml</code>-ben a következőt tartalmazza:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;a:p&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;a:r&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:t&gt;</span>Revenue Projections<span style="color:#f92672">&lt;/a:t&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/a:r&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/a:p&gt;</span>
</span></span></code></pre></div><p>A <code>&lt;a:r&gt;</code> futáshoz nincs megadva betűcsalád, explicit szín és méret sem. Ahhoz, hogy kiderítsd, hogyan jeleníti meg a PowerPoint ezt a szöveget, a parserednek a következőket kell tennie:</p>
<ol>
<li>Azonosítsd a helyőrző típusát (<code>&lt;p:ph type=&quot;title&quot;/&gt;</code>).</li>
<li>Olvasd el a <code>slide1.xml.rels</code>-ben hivatkozott elrendezést.</li>
<li>Ellenőrizd, hogy a <code>slideLayout1.xml</code> biztosít-e stílus felülírásokat az adott helyőrzőhöz.</li>
<li>Térj vissza a <code>slideMaster1.xml</code>-hez az alapértelmezett cím szövegtörzs stílusokért.</li>
<li>Kövesd nyomon a szín tokeneket, mint a <code>accent1</code> vagy <code>tx1</code>, a <code>theme1.xml</code>-ben, hogy megtaláld a hexadecimális színkódot.</li>
</ol>
<p>Ha kihagyod ezt az öröklődési gráfot, a parsered helytelenül olvassa a stílusokat, hiányzó betűtípusokat, betűméreteket és az elrendezés horgonyait.</p>
<h2 id="5-gyakorlati-fordított-mérnöki-munkafolyamat">5. Gyakorlati fordított mérnöki munkafolyamat</h2>
<p>Amikor meg kell vizsgálnod, hogy egy adott PowerPoint funkció hogyan működik a háttérben (pl. morph átmenetek, összetett táblázatok, vektor útvonalak), kövesd ezt az empirikus megközelítést:</p>
<h3 id="1-lépés-hozzon-létre-egy-minimális-diff-párost">1. lépés: Hozzon létre egy minimális &ldquo;Diff párost&rdquo;</h3>
<ol>
<li>Nyissa meg a PowerPointot, és hozzon létre egy üres diát.</li>
<li>Mentse el <code>before.pptx</code> néven.</li>
<li>Alkalmazza a pontos egyetlen módosítást, amelyet visszafejteni szeretne (például adjon árnyékot egy körnek, változtassa meg a felsorolás stílusát, szúrjon be egy beágyazott videót).</li>
<li>Mentse el <code>after.pptx</code> néven.</li>
</ol>
<h3 id="2-lépés-csomagolja-ki-mindkét-archívumot">2. lépés: Csomagolja ki mindkét archívumot</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>unzip before.pptx -d before/
</span></span><span style="display:flex;"><span>unzip after.pptx -d after/
</span></span></code></pre></div><h3 id="3-lépés-formázza-az-xml-t">3. lépés: Formázza az XML-t</h3>
<p>Az Office-archívumokban lévő nyers XML általában elveszíti a behúzásokat és az újsor karaktereket. A diffelés előtt formázza a fájlokat:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>find before/ after/ -name <span style="color:#e6db74">&#34;*.xml&#34;</span> -exec xmllint --format <span style="color:#f92672">{}</span> --output <span style="color:#f92672">{}</span> <span style="color:#ae81ff">\;</span>
</span></span></code></pre></div><h3 id="4-lépés-futtasson-egy-egységes-diff-et">4. lépés: Futtasson egy egységes diff-et</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>diff -uNr before/ after/ &gt; changes.patch
</span></span></code></pre></div><p>A <code>changes.patch</code> áttekintése feltárja a pontos címke nevét, a névtér attribútumát és a PowerPoint által bevezetett konténer hierarchiát. Ez a leggyorsabb módja annak, hogy dokumentálatlan vagy rejtett séma tulajdonságokat fedezzünk fel anélkül, hogy ezrek oldalait kellene átböngészni az ECMA-376 dokumentációnak.</p>
<h2 id="6-egyedi-mikro-motor-építése-kibontás-módosítás-újracsomagolás">6. Egyedi mikro-motor építése: kibontás, módosítás, újracsomagolás</h2>
<p>Néha nem szeretne nehéz vállalati függőséget, mint az Apache POI vagy a Microsoft OpenXML SDK—különösen könnyű, szerver nélküli környezetekben (AWS Lambda, Cloudflare Workers, edge node-ok).</p>
<p>Itt egy önálló Python minta, amely bemutatja, hogyan lehet biztonságosan kicsomagolni egy memóriában lévő PPTX-et, egyedi adatokat injektálni a szabványos könyvtári eszközökkel, és újra csomagolni azt:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> zipfile
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> io
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> xml.etree.ElementTree <span style="color:#66d9ef">as</span> ET
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">modify_slide_title</span>(input_pptx_bytes: bytes, new_title: str) <span style="color:#f92672">-&gt;</span> bytes:
</span></span><span style="display:flex;"><span>    input_zip <span style="color:#f92672">=</span> zipfile<span style="color:#f92672">.</span>ZipFile(io<span style="color:#f92672">.</span>BytesIO(input_pptx_bytes))
</span></span><span style="display:flex;"><span>    output_buffer <span style="color:#f92672">=</span> io<span style="color:#f92672">.</span>BytesIO()
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> zipfile<span style="color:#f92672">.</span>ZipFile(output_buffer, <span style="color:#e6db74">&#34;w&#34;</span>, zipfile<span style="color:#f92672">.</span>ZIP_DEFLATED) <span style="color:#66d9ef">as</span> output_zip:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">for</span> item <span style="color:#f92672">in</span> input_zip<span style="color:#f92672">.</span>infolist():
</span></span><span style="display:flex;"><span>            content <span style="color:#f92672">=</span> input_zip<span style="color:#f92672">.</span>read(item<span style="color:#f92672">.</span>filename)
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#75715e"># Target slide 1</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> item<span style="color:#f92672">.</span>filename <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;ppt/slides/slide1.xml&#34;</span>:
</span></span><span style="display:flex;"><span>                namespaces <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#39;p&#39;</span>: <span style="color:#e6db74">&#39;http://schemas.openxmlformats.org/presentationml/2006/main&#39;</span>,
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#39;a&#39;</span>: <span style="color:#e6db74">&#39;http://schemas.openxmlformats.org/drawingml/2006/main&#39;</span>
</span></span><span style="display:flex;"><span>                }
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e"># Register namespaces to preserve prefixes</span>
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">for</span> prefix, uri <span style="color:#f92672">in</span> namespaces<span style="color:#f92672">.</span>items():
</span></span><span style="display:flex;"><span>                    ET<span style="color:#f92672">.</span>register_namespace(prefix, uri)
</span></span><span style="display:flex;"><span>                    
</span></span><span style="display:flex;"><span>                root <span style="color:#f92672">=</span> ET<span style="color:#f92672">.</span>fromstring(content)
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e"># Find title placeholder text run</span>
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">for</span> title_run <span style="color:#f92672">in</span> root<span style="color:#f92672">.</span>findall(<span style="color:#e6db74">&#34;.//p:sp[p:nvSpPr/p:nvPr/p:ph[@type=&#39;title&#39;]]//a:t&#34;</span>, namespaces):
</span></span><span style="display:flex;"><span>                    title_run<span style="color:#f92672">.</span>text <span style="color:#f92672">=</span> new_title
</span></span><span style="display:flex;"><span>                    <span style="color:#66d9ef">break</span>
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                content <span style="color:#f92672">=</span> ET<span style="color:#f92672">.</span>tostring(root, encoding<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;utf-8&#34;</span>, xml_declaration<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            output_zip<span style="color:#f92672">.</span>writestr(item, content)
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> output_buffer<span style="color:#f92672">.</span>getvalue()
</span></span></code></pre></div><h3 id="kulcsfontosságú-buktatók-a-fájlok-nyers-bájtszinten-történő-módosításakor">Kulcsfontosságú buktatók a fájlok nyers bájtszinten történő módosításakor:</h3>
<ol>
<li><strong>Névtér megőrzése</strong>: Az XML-elemzők gyakran átírják az előtagokat (<code>xmlns:p</code> lehet, hogy <code>xmlns:ns0</code>). Bár érvényes XML, a PowerPoint szigorú belső sémaellenőrzése időnként elutasítja a nem szabványos előtag aliasokat. Regisztrálja a névtereket kifejezetten.</li>
<li><strong>ZIP tömörítési módszerek</strong>: Győződjön meg róla, hogy a fájlokat a szabványos deflate tömörítéssel (<code>zipfile.ZIP_DEFLATED</code>) írja vissza.</li>
<li><strong>Stream kiürítése</strong>: Mindig ellenőrizze, hogy a zip puffer teljesen lezárul és kiürül, mielőtt a bájtokat továbbküldené.</li>
<li><strong>Kapcsolatok megőrzése</strong>: Ha eltávolít egy diát, akkor azt is el kell távolítania a <code>ppt/presentation.xml</code>-ből, törölnie kell a kapcsolódását a <code>ppt/_rels/presentation.xml.rels</code>-ben, és tisztítania kell a tartalomtípusát a <code>[Content_Types].xml</code>-ből.</li>
</ol>
<h2 id="7-teljesítmény--és-biztonsági-szempontok">7. Teljesítmény- és biztonsági szempontok</h2>
<p>A PPTX fájlok visszafejtése nem csak a diák szerkesztéséről szól; hanem arról is, hogy ellenőrizze, mi kerül a rendszereibe.</p>
<h3 id="biztonság-milliárd-nevetés--xxe">Biztonság: Milliárd Nevetés &amp; XXE</h3>
<p>Mivel a PPTX fájlok XML-t dolgoznak fel, bármely szerveroldali folyamat, amely felhasználók által beküldött prezentációkat dolgoz fel, sebezhető a következőkre:</p>
<ul>
<li><strong>XML külső entitás (XXE) befecskendezés</strong>: Rosszindulatú XML, amely megpróbál hozzáférni a <code>/etc/passwd</code>-hez vagy lekérdezni a belső felhő metaadat végpontokat (<code>http://169.254.169.254/</code>).</li>
<li><strong>Entitás bővítési támadások (Billion Laughs)</strong>: Exponenciális entitásciklusok, amelyek kimerítik a rendszer RAM-át.</li>
</ul>
<p><strong>Mérséklés</strong>: Mindig tiltsa le a <code>resolve_entities</code>, <code>load_dtd</code> és a külső hálózati feloldást az XML elemzőjében (például a Pythonban a <code>defusedxml</code> használatával).</p>
<h3 id="biztonság-makró-terhek-és-rejtett-adatfolyamok">Biztonság: Makró Terhek és Rejtett Adatfolyamok</h3>
<p>Ellenőrizze a fájlokat, hogy van-e <code>.pptm</code> tartalom, amely <code>.pptx</code> kiterjesztés alatt rejtőzik. Figyeljen a <code>ppt/vbaProject.bin</code> fájlra, amely lefordított Visual Basic kódot tartalmaz. A szabványos <code>.pptx</code> fájlokban a VBA kód tiltott; ha bináris payload hivatkozásokat talál a kapcsolatokban, azonnal karanténjelzést kell kiváltani.</p>
<h2 id="összegzés">Összegzés</h2>
<p>A <code>.pptx</code> fájlok visszafejtése leleplezi a prezentációs szoftver titkait. Amint felismeri, hogy a PowerPoint fájlok egyszerűen felépített zip csomagok, amelyek koordinátákkal, séma hivatkozásokkal és XML kapcsolati fákkal vannak telepítve, már nem korlátozzák a meglévő harmadik fél absztrakciói.</p>
<p>Akár a diák generálásának áteresztőképességét optimalizálja, egyedi automatizált szanitizálókat ír, vagy a renderelési hibákat hárítja, a mögöttes OpenXML architektúrára való közvetlen tekintés teljes irányítást biztosít a prezentációs folyamat felett.</p>
<h2 id="gyakran-ismételt-kérdések-gyik">Gyakran Ismételt Kérdések (GYIK)</h2>
<p>**Q: Átalakíthatja a .pptx fájlt egy szabványos mappává, és közvetlenül egy IDE-ben szerkesztheti a fájlokat?</p>
<p><strong>A1:</strong> Igen, kicsomagolhatja az archívumot, szerkesztheti az XML-t egy olyan szerkesztőben, mint a VS Code, majd újra zip-elheti a könyvtár tartalmát, hogy újra megnyithassa a PowerPointban.</p>
<p>**Q: Miért mondja a PowerPoint, hogy a manuálisan módosított PPTX fájlom javítást igényel?</p>
<p><strong>A2:</strong> Ez általában akkor fordul elő, ha hibás XML-t vezet be, kihagy egy új eszközt a <code>[Content_Types].xml</code>-ból, vagy egy függőben lévő hivatkozást hagy egy kapcsolódó <code>.rels</code> fájlban.</p>
<p>**Q: Milyen mérőegységet használ a PowerPoint az alakzatok pozícióihoz és margóihoz?</p>
<p><strong>A3:</strong> A PowerPoint az angol metrikus egységeket (EMU-k) használja, ahol 1 hüvelyk 914,400 EMU-nak, 1 pont pedig 12,700 EMU-nak felel meg.</p>
<p>**Q: Hogyan tudom <a href="https://products.fileformat.com/presentation/python/python-pptx/">programozottan kinyerni</a> az összes képet egy prezentációból külső könyvtárak nélkül?</p>
<p><strong>A4:</strong> Egyszerűen nyissa meg a <code>.pptx</code> fájlt bármely szabványos zip eszközzel, és csomagolja ki az összes bináris fájlt, amely a <code>ppt/media/</code> könyvtárban található.</p>
<p>**Q: Biztonságos-e a felhasználók által feltöltött PPTX fájlok feldolgozása szabványos XML elemzőkkel?</p>
<p><strong>A5:</strong> Nem, meg kell erősítenie az elemzőjét, vagy biztonságos burkolókat kell használnia, például a <code>defusedxml</code>-t, hogy megakadályozza az XML külső entitás (XXE) és zip-bomb támadásokat.</p>
<h2 id="lásd-még">Lásd még</h2>
<ul>
<li><a href="https://blog.fileformat.com/presentation/powerpoint-file-formats/">Prezentációs fájlformátumok a FileFormat.com-on?</a></li>
<li><a href="https://blog.fileformat.com/presentation/apache-poi-api-to-access-powerpoint-file-formats/">Java API a PowerPoint fájlformátumok eléréséhez</a></li>
<li><a href="https://blog.fileformat.com/presentation/odp-vs-pptx-opendocument-vs-microsoft-powerpoint-format-comparison/">ODP vs PPTX: OpenDocument vs Microsoft PowerPoint prezentáció formátum összehasonlítás</a></li>
<li><a href="https://blog.fileformat.com/presentation/difference-between-ppt-and-pptx/">A PPT és PPTX közötti különbség</a></li>
<li><a href="https://blog.fileformat.com/presentation/create-presentation-in-java-with-apache-poi-api/">PowerPoint prezentáció létrehozása Java-ban az Apache POI API-val</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
