import{s as Ms,ae as Mt,af as Ts,f as a,a as p,l as fe,g as l,D as o,c as i,h as Le,m as ue,d as s,j as B,k as H,i as n,r as T,u as js}from"./scheduler.2f9f1739.js";import{S as As,i as Ds,b as we,d as be,m as ke,a as $e,t as Pe,e as He}from"./index.f9f1dac6.js";import{g as qs,a as Es}from"./styles.a749dd55.js";import{M as Os}from"./MarkdownLayout.50a9a114.js";import{L as Ls}from"./link.4e908ad9.js";import{I as It}from"./image.a4587660.js";function Ws(h){let r;return{c(){r=fe("wikipedia page")},l(d){r=ue(d,"wikipedia page")},m(d,y){n(d,r,y)},d(d){d&&s(r)}}}function Rs(h){let r,d="app.py";return{c(){r=a("code"),r.textContent=d},l(y){r=l(y,"CODE",{"data-svelte-h":!0}),o(r)!=="svelte-brmdec"&&(r.textContent=d)},m(y,u){n(y,r,u)},p:js,d(y){y&&s(r)}}}function Gs(h){let r,d="Trojan horses have been one of the most effective ways to get payloads on a target’s device, If you don’t know what a Trojan horse is — The Idea behind It Is that you hide payload behind what the target finds legitimate.",y,u,c="Recently I discovered cool stuff about JPEG images and figured we could attach additional Information or store data Inside of the JPEG, without distorting the Image.",m,F,jt="In this tutorial, we will learn using Python as our programming language, how we can hide data in JPEG images, and also, how you can read the data you stored in the image.",Ie,I,At="<p>Disclaimer: This tutorial has nothing to do with creating Trojan horses.</p>",Me,M,Dt="What is FFD9;",je,f,$t,me,qt="x0FFx0D9",Pt,he,Ot="end of the image (EOI).",Ht,Fe,Wt="FFD8",Tt,xe,Rt="FFFE",Et,E,Lt,Ae,j,Gt="We will be taking advantage of the end marker i.e. FFD9, and add whatever we want behind it, anything from other images, videos, audios, executables, or any bit of data you can think of.",De,A,Jt="First, let’s try adding a hello world to an Image, I will be using this example image (I promise it is not bugged 😀, you can trust me 🙂) for this demo. It is safe to download.",qe,_e,D,Oe,q,zt="Create a new Python file.",We,ve,L,Re,x,St=`<code><span class="line"><span style="color: #F97583">def</span><span style="color: #B392F0"> inject(</span><span style="color: #FF9800">image</span><span style="color: #BBBBBB">,</span><span style="color: #B392F0"> </span><span style="color: #FF9800">data</span><span style="color: #B392F0">):</span></span>
<span class="line"><span style="color: #B392F0">    image_file </span><span style="color: #F97583">=</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(image, </span><span style="color: #FFAB70">&#39;ab&#39;</span><span style="color: #BBBBBB">)</span></span>
<span class="line"><span style="color: #B392F0">    image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">write</span><span style="color: #BBBBBB">(data)</span></span>
<span class="line"><span style="color: #B392F0">    image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">close</span><span style="color: #BBBBBB">()</span></span></code>`,Ge,O,Yt="Here, we have a straightforward function that takes the image and the data we want to append to the JPEG. Very straight forward stuff; we opened the Image in <code>ab</code> mode, appending bytes mode.",Je,W,Ut="Adding hello world;",ze,R,Kt="We can call our function and add:",Se,_,Qt='<code><span class="line"><span style="color: #B392F0">inject</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;demo.jpg&#39;</span><span style="color: #BBBBBB">, </span><span style="color: #F97583">b</span><span style="color: #FFAB70">&#39;Hello world&#39;</span><span style="color: #BBBBBB">)</span></span></code>',Ye,G,Nt="That’s it! Hello world now in our image, and if you’re to reopen your image, no damage has been made to it. Also, we’re adding a <code>byte sequence</code> instead of a string.",Ue,J,Vt="<p><strong>Good to know</strong>: In Python when you see a string preceded by a <strong>b</strong>, such as <strong>b’Hello world’</strong>, it signifies that the string is represented as a sequence of bytes rather than a sequence of characters.</p>",Ke,z,Xt="You might be thinking, “It’s that simple”! Well, Yes! Writing the data is quite a piece of cake, but, we will do a little more to get our data out of the Image.",Qe,S,Zt="Reading our stored data;",Ne,Y,es="In other to write a function that will return our stored data, This is where <code>FFD9</code> is going to come to play.",Ve,U,ts="<li>We will read to Image to locate the position of <code>FFD9</code></li> <li>Then, seek that index (Place our cursor in the location, so our reading of the image will start from there.)</li>",Xe,K,ss="Here is what the function will look like:",Ze,v,ns=`<code><span class="line"><span style="color: #F97583">def</span><span style="color: #B392F0"> get_end_flag(</span><span style="color: #FF9800">image</span><span style="color: #B392F0">):</span></span>
<span class="line"><span style="color: #B392F0">  image_file </span><span style="color: #F97583">=</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(image, </span><span style="color: #FFAB70">&#39;rb&#39;</span><span style="color: #BBBBBB">)</span></span>
<span class="line"><span style="color: #B392F0">  content </span><span style="color: #F97583">=</span><span style="color: #B392F0"> image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">read</span><span style="color: #BBBBBB">()</span></span>
<span class="line"><span style="color: #B392F0">  end_flag_index </span><span style="color: #F97583">=</span><span style="color: #B392F0"> content</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">indexof</span><span style="color: #BBBBBB">(</span><span style="color: #79B8FF">bytes</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">fromhex</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;FFD9&#39;</span><span style="color: #BBBBBB">))</span></span>
<span class="line"><span style="color: #B392F0">  end_flag_offset </span><span style="color: #F97583">=</span><span style="color: #B392F0"> end_flag_index</span><span style="color: #F97583">+</span><span style="color: #F8F8F8">2</span></span>
<span class="line"><span style="color: #B392F0">  image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">close</span><span style="color: #BBBBBB">()</span></span>
<span class="line"><span style="color: #B392F0">  </span><span style="color: #F97583">return</span><span style="color: #B392F0"> end_flag_offset</span></span></code>`,et,Q,as="The reason we’re adding 2 (two) is to skip past the marker to read the next section of the data. In this case, adding 2 to <code>end_flag_index</code> would position our pointer just after the <code>FFD9</code> marker, ready to process the next part of the data.",tt,N,ls="Our function to read the data will look like this:",st,g,os=`<code><span class="line"><span style="color: #F97583">def</span><span style="color: #B392F0"> read_injected_data(</span><span style="color: #FF9800">image</span><span style="color: #B392F0">):</span></span>
<span class="line"><span style="color: #B392F0">  image_file </span><span style="color: #F97583">=</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(image, </span><span style="color: #FFAB70">&#39;rb&#39;</span><span style="color: #BBBBBB">)</span></span>
<span class="line"><span style="color: #B392F0">  image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">seek</span><span style="color: #BBBBBB">(</span><span style="color: #B392F0">get_end_flag</span><span style="color: #BBBBBB">(image))</span></span>
<span class="line"><span style="color: #B392F0">  data </span><span style="color: #F97583">=</span><span style="color: #B392F0"> image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">read</span><span style="color: #BBBBBB">()</span></span>
<span class="line"><span style="color: #B392F0">  image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">close</span><span style="color: #BBBBBB">()</span></span>
<span class="line"><span style="color: #B392F0">  </span><span style="color: #F97583">return</span><span style="color: #B392F0"> data</span></span></code>`,nt,V,ps="Yahoo! We’re are done with the program, Let start by reading our Hello World we Initially added.",at,C,is=`<code><span class="line"><span style="color: #B392F0">data </span><span style="color: #F97583">=</span><span style="color: #B392F0"> read_injected_data</span><span style="color: #BBBBBB">(image)</span></span>
<span class="line"><span style="color: #B392F0">print</span><span style="color: #BBBBBB">(data)</span></span></code>`,lt,X,rs="There you have it: our Hello World and Image, both clean and Intact.",ot,ge,Z,pt,ee,Bs="A Problem 🤨;",it,te,cs="We’ve got a problem, you see, In order to add more data to this image, we will first need to get rid of whatever we’ve added initially.",rt,se,ds="We can write a function to do this:",Bt,w,ys=`<code><span class="line"><span style="color: #F97583">def</span><span style="color: #B392F0"> clear_injected(</span><span style="color: #FF9800">image</span><span style="color: #B392F0">):</span></span>
<span class="line"><span style="color: #B392F0">  image_file </span><span style="color: #F97583">=</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(image, </span><span style="color: #FFAB70">&#39;rb&#39;</span><span style="color: #BBBBBB">)</span></span>
<span class="line"><span style="color: #B392F0">  old_content </span><span style="color: #F97583">=</span><span style="color: #B392F0"> image_file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">read</span><span style="color: #BBBBBB">()</span></span>
<span class="line"><span style="color: #B392F0">  new_content </span><span style="color: #F97583">=</span><span style="color: #B392F0"> old_content</span><span style="color: #BBBBBB">[:</span><span style="color: #B392F0">get_end_flag</span><span style="color: #BBBBBB">(image)]</span></span>
<span class="line"><span style="color: #B392F0">  </span><span style="color: #F97583">with</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(image, </span><span style="color: #FFAB70">&#39;wb&#39;</span><span style="color: #BBBBBB">)</span><span style="color: #B392F0"> </span><span style="color: #F97583">as</span><span style="color: #B392F0"> new_image</span><span style="color: #BBBBBB">:</span></span>
<span class="line"><span style="color: #B392F0">    new_image</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">write</span><span style="color: #BBBBBB">(new_content)</span></span>
<span class="line"><span style="color: #B392F0">  image</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">close</span><span style="color: #BBBBBB">()</span></span></code>`,ct,ne,fs="This function basically the original content of the Image, I.e the content from the beginning to the end flag, then rewrites it to the same file. So everything after the End Of Image flag (EOI) is lost.",dt,ae,us="We can test our function again and everything we’ve appended to the Image vanishes 🪄",yt,b,ms='<code><span class="line"><span style="color: #B392F0">clear_injected</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;image.jpg&#39;</span><span style="color: #BBBBBB">)</span></span></code>',ft,le,hs="Optionally, you can call <code>clear_injected</code> inside of the <code>inject</code> function, so it clears anything added to the Image, before appending any other thing.",ut,k,Fs=`<code><span class="line"><span style="color: #F97583">def</span><span style="color: #B392F0"> inject(</span><span style="color: #FF9800">image</span><span style="color: #BBBBBB">,</span><span style="color: #B392F0"> </span><span style="color: #FF9800">data</span><span style="color: #B392F0">):</span></span>
<span class="line"><span style="color: #B392F0">  clear_injected</span><span style="color: #BBBBBB">(image)</span></span>
<span class="line"><span style="color: #B392F0">  </span><span style="color: #6B737C">## rest of function</span></span></code>`,mt,oe,xs="Injecting media files;",ht,pe,_s="As said earlier, Let’s see how we can Inject media files into our Image. Since everything we write is a byte sequence, we can just read any file in bytes mode and inject that into our Image.",Ft,ie,vs="This will look something like this:",xt,$,gs=`<code><span class="line"><span style="color: #F97583">with</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;somevid.mp4&#39;</span><span style="color: #BBBBBB">, </span><span style="color: #FFAB70">&#39;rb&#39;</span><span style="color: #BBBBBB">)</span><span style="color: #B392F0"> </span><span style="color: #F97583">as</span><span style="color: #B392F0"> media</span><span style="color: #BBBBBB">:</span></span>
<span class="line"><span style="color: #B392F0">  inject</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;image.jpg&#39;</span><span style="color: #BBBBBB">, media.</span><span style="color: #B392F0">read</span><span style="color: #BBBBBB">())</span></span></code>`,_t,re,Cs="You can see that after appending the video into the image, the size have increased:",vt,Ce,Be,gt,ce,ws="We can easily fetch our video using:",Ct,P,bs=`<code><span class="line"><span style="color: #B392F0">data </span><span style="color: #F97583">=</span><span style="color: #B392F0"> read_injected_data</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;image.jpg&#39;</span><span style="color: #BBBBBB">)</span></span>
<span class="line"><span style="color: #F97583">with</span><span style="color: #B392F0"> open</span><span style="color: #BBBBBB">(</span><span style="color: #FFAB70">&#39;injected-video.mp4&#39;</span><span style="color: #BBBBBB">, </span><span style="color: #FFAB70">&#39;wb&#39;</span><span style="color: #BBBBBB">)</span><span style="color: #B392F0"> </span><span style="color: #F97583">as</span><span style="color: #B392F0"> file</span><span style="color: #BBBBBB">:</span></span>
<span class="line"><span style="color: #B392F0">    file</span><span style="color: #BBBBBB">.</span><span style="color: #B392F0">write</span><span style="color: #BBBBBB">(data)</span></span></code>`,wt,de,ks="There you have, how you can hide or store data into jpeg images, without sacrificing anything in the image details, the image works everywhere without a problem. This is a god mode kind of way of hiding stuff in your computer, without ever being noticed, the only catch is that, the larger the data you’re hiding in the image, the larger it size gets.",bt,ye,$s="<strong>Comeback again, Peace</strong> ✌️!",kt;return E=new Ls({props:{href:"https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure",rel:"nofollow",$$slots:{default:[Ws]},$$scope:{ctx:h}}}),D=new It({props:{src:"https://paper-attachments.dropboxusercontent.com/s_EA202B613A1B366F3BBE06A9229C822665469C9FB6A5409DBB17EDEEBCBD6156_1708366286608_image.jpg",alt:"Naruto and his teacher jiraiya share a stick sweet. Abdulmumin yaqeen"}}),L=new Ls({props:{href:"http://app.py",rel:"nofollow",$$slots:{default:[Rs]},$$scope:{ctx:h}}}),Z=new It({props:{src:"https://paper-attachments.dropboxusercontent.com/s_EA202B613A1B366F3BBE06A9229C822665469C9FB6A5409DBB17EDEEBCBD6156_1708783901971_Screenshot+from+2024-02-24+15-10-05.png",alt:"Abdulmumin yaqeen naruto yaqeen.me blog"}}),Be=new It({props:{src:"https://paper-attachments.dropboxusercontent.com/s_EA202B613A1B366F3BBE06A9229C822665469C9FB6A5409DBB17EDEEBCBD6156_1708784631122_editnow.png",alt:"Abdulmumin yaqeen naruto yaqeen.me blog"}}),{c(){r=a("p"),r.textContent=d,y=p(),u=a("p"),u.textContent=c,m=p(),F=a("p"),F.textContent=jt,Ie=p(),I=a("blockquote"),I.innerHTML=At,Me=p(),M=a("h2"),M.textContent=Dt,je=p(),f=a("p"),$t=fe("FFD9 or "),me=a("code"),me.textContent=qt,Pt=fe(" It is one of the many markers in JPEG images that marks the "),he=a("em"),he.textContent=Ot,Ht=fe(" Other markers include "),Fe=a("code"),Fe.textContent=Wt,Tt=fe(" the start of the image, "),xe=a("code"),xe.textContent=Rt,Et=fe(" a comment, and soo much more. you can look up all available markers on the "),we(E.$$.fragment),Lt=fe("."),Ae=p(),j=a("p"),j.textContent=Gt,De=p(),A=a("p"),A.textContent=Jt,qe=p(),_e=a("p"),we(D.$$.fragment),Oe=p(),q=a("h3"),q.textContent=zt,We=p(),ve=a("p"),we(L.$$.fragment),Re=p(),x=a("pre"),x.innerHTML=St,Ge=p(),O=a("p"),O.innerHTML=Yt,Je=p(),W=a("h3"),W.textContent=Ut,ze=p(),R=a("p"),R.textContent=Kt,Se=p(),_=a("pre"),_.innerHTML=Qt,Ye=p(),G=a("p"),G.innerHTML=Nt,Ue=p(),J=a("blockquote"),J.innerHTML=Vt,Ke=p(),z=a("p"),z.textContent=Xt,Qe=p(),S=a("h3"),S.textContent=Zt,Ne=p(),Y=a("p"),Y.innerHTML=es,Ve=p(),U=a("ul"),U.innerHTML=ts,Xe=p(),K=a("p"),K.textContent=ss,Ze=p(),v=a("pre"),v.innerHTML=ns,et=p(),Q=a("p"),Q.innerHTML=as,tt=p(),N=a("p"),N.textContent=ls,st=p(),g=a("pre"),g.innerHTML=os,nt=p(),V=a("p"),V.textContent=ps,at=p(),C=a("pre"),C.innerHTML=is,lt=p(),X=a("p"),X.textContent=rs,ot=p(),ge=a("p"),we(Z.$$.fragment),pt=p(),ee=a("h3"),ee.textContent=Bs,it=p(),te=a("p"),te.textContent=cs,rt=p(),se=a("p"),se.textContent=ds,Bt=p(),w=a("pre"),w.innerHTML=ys,ct=p(),ne=a("p"),ne.textContent=fs,dt=p(),ae=a("p"),ae.textContent=us,yt=p(),b=a("pre"),b.innerHTML=ms,ft=p(),le=a("p"),le.innerHTML=hs,ut=p(),k=a("pre"),k.innerHTML=Fs,mt=p(),oe=a("h3"),oe.textContent=xs,ht=p(),pe=a("p"),pe.textContent=_s,Ft=p(),ie=a("p"),ie.textContent=vs,xt=p(),$=a("pre"),$.innerHTML=gs,_t=p(),re=a("p"),re.textContent=Cs,vt=p(),Ce=a("p"),we(Be.$$.fragment),gt=p(),ce=a("p"),ce.textContent=ws,Ct=p(),P=a("pre"),P.innerHTML=bs,wt=p(),de=a("p"),de.textContent=ks,bt=p(),ye=a("p"),ye.innerHTML=$s,this.h()},l(e){r=l(e,"P",{"data-svelte-h":!0}),o(r)!=="svelte-176iodq"&&(r.textContent=d),y=i(e),u=l(e,"P",{"data-svelte-h":!0}),o(u)!=="svelte-xfq764"&&(u.textContent=c),m=i(e),F=l(e,"P",{"data-svelte-h":!0}),o(F)!=="svelte-spbfjo"&&(F.textContent=jt),Ie=i(e),I=l(e,"BLOCKQUOTE",{"data-svelte-h":!0}),o(I)!=="svelte-18hfpho"&&(I.innerHTML=At),Me=i(e),M=l(e,"H2",{"data-svelte-h":!0}),o(M)!=="svelte-1466hv8"&&(M.textContent=Dt),je=i(e),f=l(e,"P",{});var t=Le(f);$t=ue(t,"FFD9 or "),me=l(t,"CODE",{"data-svelte-h":!0}),o(me)!=="svelte-febvn3"&&(me.textContent=qt),Pt=ue(t," It is one of the many markers in JPEG images that marks the "),he=l(t,"EM",{"data-svelte-h":!0}),o(he)!=="svelte-1iedh62"&&(he.textContent=Ot),Ht=ue(t," Other markers include "),Fe=l(t,"CODE",{"data-svelte-h":!0}),o(Fe)!=="svelte-1961hmo"&&(Fe.textContent=Wt),Tt=ue(t," the start of the image, "),xe=l(t,"CODE",{"data-svelte-h":!0}),o(xe)!=="svelte-1ub7xs5"&&(xe.textContent=Rt),Et=ue(t," a comment, and soo much more. you can look up all available markers on the "),be(E.$$.fragment,t),Lt=ue(t,"."),t.forEach(s),Ae=i(e),j=l(e,"P",{"data-svelte-h":!0}),o(j)!=="svelte-1c6giae"&&(j.textContent=Gt),De=i(e),A=l(e,"P",{"data-svelte-h":!0}),o(A)!=="svelte-ia137f"&&(A.textContent=Jt),qe=i(e),_e=l(e,"P",{});var Te=Le(_e);be(D.$$.fragment,Te),Te.forEach(s),Oe=i(e),q=l(e,"H3",{"data-svelte-h":!0}),o(q)!=="svelte-1pnrlad"&&(q.textContent=zt),We=i(e),ve=l(e,"P",{});var Ee=Le(ve);be(L.$$.fragment,Ee),Ee.forEach(s),Re=i(e),x=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(x)!=="svelte-1jbp95v"&&(x.innerHTML=St),Ge=i(e),O=l(e,"P",{"data-svelte-h":!0}),o(O)!=="svelte-1ge9p5d"&&(O.innerHTML=Yt),Je=i(e),W=l(e,"H3",{"data-svelte-h":!0}),o(W)!=="svelte-13snw"&&(W.textContent=Ut),ze=i(e),R=l(e,"P",{"data-svelte-h":!0}),o(R)!=="svelte-11jpl5g"&&(R.textContent=Kt),Se=i(e),_=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(_)!=="svelte-21mqpy"&&(_.innerHTML=Qt),Ye=i(e),G=l(e,"P",{"data-svelte-h":!0}),o(G)!=="svelte-1bpq5hv"&&(G.innerHTML=Nt),Ue=i(e),J=l(e,"BLOCKQUOTE",{"data-svelte-h":!0}),o(J)!=="svelte-8sgbgx"&&(J.innerHTML=Vt),Ke=i(e),z=l(e,"P",{"data-svelte-h":!0}),o(z)!=="svelte-xqtao2"&&(z.textContent=Xt),Qe=i(e),S=l(e,"H3",{"data-svelte-h":!0}),o(S)!=="svelte-127z68g"&&(S.textContent=Zt),Ne=i(e),Y=l(e,"P",{"data-svelte-h":!0}),o(Y)!=="svelte-17bkwkx"&&(Y.innerHTML=es),Ve=i(e),U=l(e,"UL",{"data-svelte-h":!0}),o(U)!=="svelte-19nhrng"&&(U.innerHTML=ts),Xe=i(e),K=l(e,"P",{"data-svelte-h":!0}),o(K)!=="svelte-1tyggkt"&&(K.textContent=ss),Ze=i(e),v=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(v)!=="svelte-qtdfmh"&&(v.innerHTML=ns),et=i(e),Q=l(e,"P",{"data-svelte-h":!0}),o(Q)!=="svelte-pws8pn"&&(Q.innerHTML=as),tt=i(e),N=l(e,"P",{"data-svelte-h":!0}),o(N)!=="svelte-11sw5ne"&&(N.textContent=ls),st=i(e),g=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(g)!=="svelte-134drs0"&&(g.innerHTML=os),nt=i(e),V=l(e,"P",{"data-svelte-h":!0}),o(V)!=="svelte-clwq77"&&(V.textContent=ps),at=i(e),C=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(C)!=="svelte-p836sg"&&(C.innerHTML=is),lt=i(e),X=l(e,"P",{"data-svelte-h":!0}),o(X)!=="svelte-f1r3p6"&&(X.textContent=rs),ot=i(e),ge=l(e,"P",{});var Ps=Le(ge);be(Z.$$.fragment,Ps),Ps.forEach(s),pt=i(e),ee=l(e,"H3",{"data-svelte-h":!0}),o(ee)!=="svelte-1miv75v"&&(ee.textContent=Bs),it=i(e),te=l(e,"P",{"data-svelte-h":!0}),o(te)!=="svelte-e2vfz6"&&(te.textContent=cs),rt=i(e),se=l(e,"P",{"data-svelte-h":!0}),o(se)!=="svelte-d8gspu"&&(se.textContent=ds),Bt=i(e),w=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(w)!=="svelte-dmxrtx"&&(w.innerHTML=ys),ct=i(e),ne=l(e,"P",{"data-svelte-h":!0}),o(ne)!=="svelte-lhf40v"&&(ne.textContent=fs),dt=i(e),ae=l(e,"P",{"data-svelte-h":!0}),o(ae)!=="svelte-1e9cxzr"&&(ae.textContent=us),yt=i(e),b=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(b)!=="svelte-cxc2ek"&&(b.innerHTML=ms),ft=i(e),le=l(e,"P",{"data-svelte-h":!0}),o(le)!=="svelte-1tx0vfk"&&(le.innerHTML=hs),ut=i(e),k=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(k)!=="svelte-1dlfdqt"&&(k.innerHTML=Fs),mt=i(e),oe=l(e,"H3",{"data-svelte-h":!0}),o(oe)!=="svelte-1w5bm25"&&(oe.textContent=xs),ht=i(e),pe=l(e,"P",{"data-svelte-h":!0}),o(pe)!=="svelte-hn79h7"&&(pe.textContent=_s),Ft=i(e),ie=l(e,"P",{"data-svelte-h":!0}),o(ie)!=="svelte-1ee3d5s"&&(ie.textContent=vs),xt=i(e),$=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o($)!=="svelte-x1xpkk"&&($.innerHTML=gs),_t=i(e),re=l(e,"P",{"data-svelte-h":!0}),o(re)!=="svelte-fhqetb"&&(re.textContent=Cs),vt=i(e),Ce=l(e,"P",{});var Hs=Le(Ce);be(Be.$$.fragment,Hs),Hs.forEach(s),gt=i(e),ce=l(e,"P",{"data-svelte-h":!0}),o(ce)!=="svelte-1l6mgjo"&&(ce.textContent=ws),Ct=i(e),P=l(e,"PRE",{class:!0,style:!0,tabindex:!0,"data-svelte-h":!0}),o(P)!=="svelte-zl445x"&&(P.innerHTML=bs),wt=i(e),de=l(e,"P",{"data-svelte-h":!0}),o(de)!=="svelte-1impo8f"&&(de.textContent=ks),bt=i(e),ye=l(e,"P",{"data-svelte-h":!0}),o(ye)!=="svelte-16puwly"&&(ye.innerHTML=$s),this.h()},h(){B(x,"class","shiki min-dark"),H(x,"background-color","#1f1f1f"),B(x,"tabindex","0"),B(_,"class","shiki min-dark"),H(_,"background-color","#1f1f1f"),B(_,"tabindex","0"),B(v,"class","shiki min-dark"),H(v,"background-color","#1f1f1f"),B(v,"tabindex","0"),B(g,"class","shiki min-dark"),H(g,"background-color","#1f1f1f"),B(g,"tabindex","0"),B(C,"class","shiki min-dark"),H(C,"background-color","#1f1f1f"),B(C,"tabindex","0"),B(w,"class","shiki min-dark"),H(w,"background-color","#1f1f1f"),B(w,"tabindex","0"),B(b,"class","shiki min-dark"),H(b,"background-color","#1f1f1f"),B(b,"tabindex","0"),B(k,"class","shiki min-dark"),H(k,"background-color","#1f1f1f"),B(k,"tabindex","0"),B($,"class","shiki min-dark"),H($,"background-color","#1f1f1f"),B($,"tabindex","0"),B(P,"class","shiki min-dark"),H(P,"background-color","#1f1f1f"),B(P,"tabindex","0")},m(e,t){n(e,r,t),n(e,y,t),n(e,u,t),n(e,m,t),n(e,F,t),n(e,Ie,t),n(e,I,t),n(e,Me,t),n(e,M,t),n(e,je,t),n(e,f,t),T(f,$t),T(f,me),T(f,Pt),T(f,he),T(f,Ht),T(f,Fe),T(f,Tt),T(f,xe),T(f,Et),ke(E,f,null),T(f,Lt),n(e,Ae,t),n(e,j,t),n(e,De,t),n(e,A,t),n(e,qe,t),n(e,_e,t),ke(D,_e,null),n(e,Oe,t),n(e,q,t),n(e,We,t),n(e,ve,t),ke(L,ve,null),n(e,Re,t),n(e,x,t),n(e,Ge,t),n(e,O,t),n(e,Je,t),n(e,W,t),n(e,ze,t),n(e,R,t),n(e,Se,t),n(e,_,t),n(e,Ye,t),n(e,G,t),n(e,Ue,t),n(e,J,t),n(e,Ke,t),n(e,z,t),n(e,Qe,t),n(e,S,t),n(e,Ne,t),n(e,Y,t),n(e,Ve,t),n(e,U,t),n(e,Xe,t),n(e,K,t),n(e,Ze,t),n(e,v,t),n(e,et,t),n(e,Q,t),n(e,tt,t),n(e,N,t),n(e,st,t),n(e,g,t),n(e,nt,t),n(e,V,t),n(e,at,t),n(e,C,t),n(e,lt,t),n(e,X,t),n(e,ot,t),n(e,ge,t),ke(Z,ge,null),n(e,pt,t),n(e,ee,t),n(e,it,t),n(e,te,t),n(e,rt,t),n(e,se,t),n(e,Bt,t),n(e,w,t),n(e,ct,t),n(e,ne,t),n(e,dt,t),n(e,ae,t),n(e,yt,t),n(e,b,t),n(e,ft,t),n(e,le,t),n(e,ut,t),n(e,k,t),n(e,mt,t),n(e,oe,t),n(e,ht,t),n(e,pe,t),n(e,Ft,t),n(e,ie,t),n(e,xt,t),n(e,$,t),n(e,_t,t),n(e,re,t),n(e,vt,t),n(e,Ce,t),ke(Be,Ce,null),n(e,gt,t),n(e,ce,t),n(e,Ct,t),n(e,P,t),n(e,wt,t),n(e,de,t),n(e,bt,t),n(e,ye,t),kt=!0},p(e,t){const Te={};t&2&&(Te.$$scope={dirty:t,ctx:e}),E.$set(Te);const Ee={};t&2&&(Ee.$$scope={dirty:t,ctx:e}),L.$set(Ee)},i(e){kt||($e(E.$$.fragment,e),$e(D.$$.fragment,e),$e(L.$$.fragment,e),$e(Z.$$.fragment,e),$e(Be.$$.fragment,e),kt=!0)},o(e){Pe(E.$$.fragment,e),Pe(D.$$.fragment,e),Pe(L.$$.fragment,e),Pe(Z.$$.fragment,e),Pe(Be.$$.fragment,e),kt=!1},d(e){e&&(s(r),s(y),s(u),s(m),s(F),s(Ie),s(I),s(Me),s(M),s(je),s(f),s(Ae),s(j),s(De),s(A),s(qe),s(_e),s(Oe),s(q),s(We),s(ve),s(Re),s(x),s(Ge),s(O),s(Je),s(W),s(ze),s(R),s(Se),s(_),s(Ye),s(G),s(Ue),s(J),s(Ke),s(z),s(Qe),s(S),s(Ne),s(Y),s(Ve),s(U),s(Xe),s(K),s(Ze),s(v),s(et),s(Q),s(tt),s(N),s(st),s(g),s(nt),s(V),s(at),s(C),s(lt),s(X),s(ot),s(ge),s(pt),s(ee),s(it),s(te),s(rt),s(se),s(Bt),s(w),s(ct),s(ne),s(dt),s(ae),s(yt),s(b),s(ft),s(le),s(ut),s(k),s(mt),s(oe),s(ht),s(pe),s(Ft),s(ie),s(xt),s($),s(_t),s(re),s(vt),s(Ce),s(gt),s(ce),s(Ct),s(P),s(wt),s(de),s(bt),s(ye)),He(E),He(D),He(L),He(Z),He(Be)}}}function Js(h){let r,d;const y=[h[0],Is];let u={$$slots:{default:[Gs]},$$scope:{ctx:h}};for(let c=0;c<y.length;c+=1)u=Mt(u,y[c]);return r=new Os({props:u}),{c(){we(r.$$.fragment)},l(c){be(r.$$.fragment,c)},m(c,m){ke(r,c,m),d=!0},p(c,[m]){const F=m&1?qs(y,[m&1&&Es(c[0]),m&0&&Es(Is)]):{};m&2&&(F.$$scope={dirty:m,ctx:c}),r.$set(F)},i(c){d||($e(r.$$.fragment,c),d=!0)},o(c){Pe(r.$$.fragment,c),d=!1},d(c){He(r,c)}}}const Is={title:"Hacking 101: How to Inject or hide data Into JPEG Images",description:"In this tutorial, we will learn using Python as our programming language, how we can hide data in JPEG images, and also, how you can read the data you stored in the image.",date:"2024-02-24",lastmod:"2024-02-24",categories:["python","hacking"],visual:!1,published:!0};function zs(h,r,d){return h.$$set=y=>{d(0,r=Mt(Mt({},r),Ts(y)))},r=Ts(r),[r]}class Vs extends As{constructor(r){super(),Ds(this,r,zs,Js,Ms,{})}}export{Vs as default,Is as metadata};