<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>windows - Hard Wired</title>
	<atom:link href="https://www.hardwired.dev/tag/windows/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hardwired.dev</link>
	<description></description>
	<lastBuildDate>Sun, 28 Dec 2025 05:17:51 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://www.hardwired.dev/wp-content/uploads/2022/10/android-chrome-256x256-1-150x150.png</url>
	<title>windows - Hard Wired</title>
	<link>https://www.hardwired.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Portable Executable (PE) Format</title>
		<link>https://www.hardwired.dev/2025/12/01/portable-executable/</link>
		
		<dc:creator><![CDATA[Whizit]]></dc:creator>
		<pubDate>Mon, 01 Dec 2025 17:00:42 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[binary analysis]]></category>
		<category><![CDATA[code analysis]]></category>
		<category><![CDATA[COFF]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[digital forensics]]></category>
		<category><![CDATA[dll files]]></category>
		<category><![CDATA[DOS header]]></category>
		<category><![CDATA[exe files]]></category>
		<category><![CDATA[executable files]]></category>
		<category><![CDATA[file headers]]></category>
		<category><![CDATA[file structure]]></category>
		<category><![CDATA[malware analysis]]></category>
		<category><![CDATA[Malware Development Essentials]]></category>
		<category><![CDATA[NT headers]]></category>
		<category><![CDATA[PE format]]></category>
		<category><![CDATA[PE-bear]]></category>
		<category><![CDATA[Portable Executable]]></category>
		<category><![CDATA[reverse engineering]]></category>
		<category><![CDATA[security-research]]></category>
		<category><![CDATA[threat analysis]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[Windows OS]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2890</guid>

					<description><![CDATA[<p>Portable Executable is file format which is used in Windows OS for executable files like .exe, .dll, .cpl etc. It &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/12/01/portable-executable/">Portable Executable (PE) Format</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><strong>Portable Executable</strong> is file format which is used in Windows OS for executable files like <em>.exe, .dll, .cpl etc</em>. It is based on <strong>COFF</strong> (<strong>Common Object File Format</strong>).</p>
<p>A PE file is a data structure that holds information necessary for OS loader to load that executable into memory and execute it.</p>
<p>This article serves as basic overview of PE structure, understanding of which is useful for reverse engineering and understanding not just malware binaries.</p>
<h2>Note</h2>
<p>Examples provided in this article will be taken from random executable file, opened using analytics tool named <a href="https://github.com/hasherezade/pe-bear/releases" title="PE-bear">PE-bear</a>.</p>
<p>Code examples are from winnt.h WinAPI file. You can download these files as part of Visual Studio.</p>
<h2>Structure</h2>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/11/PEStructure-207x300.avif" alt="" /></p>
<h3>DOS Header</h3>
<p>Is represented by first 64 bytes of every PE file. Following parts are the most important:<br />
<strong>e_magic</strong> - Every PE File starts with 2 byte magic number <em>0x5A4D</em>. It is used to verify if it is valid executable. The value can be seen in reverse order in screenshot below, due to <em>Windows using little endian encoding</em><br />
<strong>e_lfanew</strong> - These 4 bytes contain the offset of PE header. When the program needs to be loaded by Windows loader, it looks for this value to skip the DOS Stub and go directly to NT headers.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/12/DOSHeader-300x87.avif" alt="" /></p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/12/DOSHeader_WinApi-PNG-300x176.avif" alt="" /></p>
<h3>DOS Stub</h3>
<p>Usually contains message <strong>&quot;This program cannot be run in DOS mode&quot;</strong>. It is used as fallback for older DOS systems that cannot process PE files.<br />
<img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/12/DOSStub-300x39.avif" alt="" /></p>
<h3>NT Headers</h3>
<p>Are accesssed from address in <em>e_lfanew</em></p>
<p><strong>Signature</strong> - Serves for checking validity of the structure, has value of <em>Ox4550</em> (PE)<br />
<strong>File Headers</strong> - Contains information about structure of the whole file, such as the machine type of the executable code, a time stamp, a pointer to symbol table and various flags. Value in machine type can help you determine whether the executable is 32(value 0x4c) or 64 bit (value 0x64)<br />
<strong>Optional Headers</strong> - Unlike name suggests, this header is not actually optional. It contains additional important information to <em>File Headers</em>, another magic number that determines whether file is 32/64bit, information about running subsystem, Preffered base address and security flags. Another important part is import,export, resource tables etc. which contain used APIs, imported functions, string and other static resources.<br />
<img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2025/12/32bitSignature-300x79.avif" alt="" /></p>
<h3>Section Header</h3>
<p>Is an array that contains memory locations for each section.</p>
<h3>Sections</h3>
<p><strong>.text</strong> - Contains the executable code. This section includes all compiled instructions that the processor will execute. The section is typically marked as executable and read-only for security purposes.</p>
<p><strong>.data</strong> - Contains initialized global data. This includes variables with initial values that the program requires during execution. The section is marked as readable and writable.</p>
<p><strong>.rdata</strong> - Contains read-only data, including import and export tables. It stores constant data, string literals, and critical tables that support dynamic linking functionality.</p>
<p><strong>.rsrc</strong> - Contains resources such as icons, images, and strings. This section organizes resources in a hierarchical structure that applications can access during runtime.</p>
<p><strong>.reloc</strong> - Contains relocation table that is used by loader for recalculating addresses in case the executable is not loaded at base address.</p>
<p><strong>.tls</strong>(Thread Local Storage)- is a special storage  class that contains thread specific data.</p>
<p><em>This list of sections is not exhaustive, just explains the most common ones.</em></p>
<p>When analyzing PE file, <em>malicious executables can have unusually small or large headers or sections</em>. Unusually large header can be a <em>sign of obfuscation</em> and for example small or empty import table can be sign of <em>dynamic loading</em> of libraries which is common for malware.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F12%2F01%2Fportable-executable%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2025/12/01/portable-executable/">Portable Executable (PE) Format</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nushell</title>
		<link>https://www.hardwired.dev/2025/06/12/2771/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Thu, 12 Jun 2025 21:20:19 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[nushell]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2771</guid>

					<description><![CDATA[<p>Nushell je zajímavou alternativou k asi nejrozšířenější variantě shellu Bash. Nepatří do top pětky, ten kromě Bashe okupují Tcsh/Csh, Ksh, &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2025/06/12/2771/">Nushell</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><a href="https://www.nushell.sh">Nushell</a> je zajímavou alternativou k asi nejrozšířenější variantě <a href="https://en.wikipedia.org/wiki/Shell_(computing)">shellu</a> <a href="https://www.gnu.org/software/bash/">Bash</a>. Nepatří do top pětky, ten kromě Bashe okupují <a href="Tcsh/Cs">Tcsh/Cs</a>h, <a href="http://kornshell.com/">Ksh</a>, <a href="https://www.zsh.org/">Zsh</a> a <a href="https://fishshell.com/">Fish</a>. </p>
<p>Dle autorů je Nushell nový typ shellu a už v <a href="https://www.nushell.sh/book/">úvodu dokumentace</a> se dozvíte hlavní rozdíl. Programy v tradičních shellech spolu komunikují pomocí textových řetězců. Program zapíše text na standardní výstup a druhý program tento text přečte a zpracuje ze standardního vstupu.</p>
<p>To mohlo stačit v dobách kdy byly tyto shelly vytvořeny, ale doba se posunula. Dnes je v mnoha aplikacích defacto standard JSON. Například Bash v základu práci s JSON formátem nepodporuje a je potřeba použít nějaký JSON processor. Například  <a href="https://jqlang.org/">jq</a>.</p>
<p>Nushell tuto filozofii neboří, naopak rozšiřuje a umožňuje posílat i jiné <a href="https://www.nushell.sh/book/types_of_data.html#types-at-a-glance">datové typy</a>. </p>
<pre><code class="language-shell">Integers            -65535
Floats (decimals)   9.9999, Infinity
Strings             "hole 18", 'hole 18', <code>hole 18</code>, hole18, r#'hole18'#
Booleans            true
Dates               2000-01-01
Durations           2min + 12sec
File-sizes          64mb
Ranges              0..4, 0..<5, 0.., ..4
Binary              0x[FE FF]
Lists               [0 1 'two' 3]
Records             {name:"Nushell", lang: "Rust"}
Tables              [{x:12, y:15}, {x:8, y:9}], [[x, y]; [12, 15], [8, 9]]
Closures            {|e| $e + 1 | into string }, { $in.name.0 | path exists }
Cell-paths          $.name.0
Blocks              if true { print "hello!" }, loop { print "press ctrl-c to exit" }
Null (Nothing)      null
Any                 let p: any = 5</code></pre>
<p>Jednou z výhod tohoto přístupu je, že výstupem může být tabulka, kterou další programy mohou zpracovat. Pokud chcete v Bashi například seřadit a filtrovat výstup příkazu ls, tak to bude kombinace příkazů ls, sort, grep, cut a možná i dalších. Největší obtíž bude kontext. Výstupy mezi program budou jen textové řetězce bez kontextu. <a href="https://www.youtube.com/results?search_query=ba%C5%99inka+bash">Ale zkušený Linux admin to určitě zvládne s přehledem</a>.</p>
<p>V Nushelu další program ví, že je to tabulka, která má nějaké sloupce co se nějak jmenují a hodnoty ve sloupcích mají nějaký typ. Tím výsledná sekvence příkazů vypadá mnohem přirozeněji a intuitivněji.</p>
<p>Příklad 1: Proces co zabírá nejvíc paměti</p>
<pre><code class="language-shell">~/bin> ps
╭───┬──────┬──────┬──────┬──────────┬──────┬──────────┬──────────╮
│ # │ pid  │ ppid │ name │  status  │ cpu  │   mem    │ virtual  │
├───┼──────┼──────┼──────┼──────────┼──────┼──────────┼──────────┤
│ 0 │    1 │    0 │ init │ Sleeping │ 0.00 │ 339.9 kB │ 997.3 GB │
│ 1 │ 1724 │    1 │ init │ Sleeping │ 0.00 │ 249.8 kB │ 997.3 GB │
│ 2 │ 1725 │ 1724 │ bash │ Sleeping │ 0.00 │   3.5 MB │ 222.2 GB │
│ 3 │ 1762 │ 1725 │ sudo │ Sleeping │ 0.00 │   2.5 MB │ 309.2 GB │
│ 4 │ 1763 │ 1762 │ nu   │ Running  │ 0.00 │  18.4 MB │ 150.1 GB │
╰───┴──────┴──────┴──────┴──────────┴──────┴──────────┴──────────╯</code></pre>
<p>Výstupem je tabulka, co má sloupce. V našem případě nás zajímá sloupec mem. Ten má jako řádky hodnoty typu file-size podle kterých lze sortovat.</p>
<pre><code class="language-shell">~/bin> ps | sort-by mem
╭───┬──────┬──────┬──────┬──────────┬──────┬──────────┬──────────╮
│ # │ pid  │ ppid │ name │  status  │ cpu  │   mem    │ virtual  │
├───┼──────┼──────┼──────┼──────────┼──────┼──────────┼──────────┤
│ 0 │ 1724 │    1 │ init │ Sleeping │ 0.00 │ 249.8 kB │ 997.3 GB │
│ 1 │    1 │    0 │ init │ Sleeping │ 0.00 │ 339.9 kB │ 997.3 GB │
│ 2 │ 1762 │ 1725 │ sudo │ Sleeping │ 0.00 │   2.5 MB │ 309.2 GB │
│ 3 │ 1725 │ 1724 │ bash │ Sleeping │ 0.00 │   3.5 MB │ 222.2 GB │
│ 4 │ 1763 │ 1762 │ nu   │ Running  │ 0.00 │  18.4 MB │ 150.1 GB │
╰───┴──────┴──────┴──────┴──────────┴──────┴──────────┴──────────╯</code></pre>
<p>Sort řadí od nejmenšího, takže je ještě potřeba výstup obrátit.</p>
<pre><code class="language-shell">~/bin> ps | sort-by mem | reverse
╭───┬──────┬──────┬──────┬──────────┬──────┬──────────┬──────────╮
│ # │ pid  │ ppid │ name │  status  │ cpu  │   mem    │ virtual  │
├───┼──────┼──────┼──────┼──────────┼──────┼──────────┼──────────┤
│ 0 │ 1763 │ 1762 │ nu   │ Running  │ 0.00 │  18.4 MB │ 150.1 GB │
│ 1 │ 1725 │ 1724 │ bash │ Sleeping │ 0.00 │   3.5 MB │ 222.2 GB │
│ 2 │ 1762 │ 1725 │ sudo │ Sleeping │ 0.00 │   2.5 MB │ 309.2 GB │
│ 3 │    1 │    0 │ init │ Sleeping │ 0.00 │ 339.9 kB │ 997.3 GB │
│ 4 │ 1724 │    1 │ init │ Sleeping │ 0.00 │ 249.8 kB │ 997.3 GB │
╰───┴──────┴──────┴──────┴──────────┴──────┴──────────┴──────────╯</code></pre>
<p>Zajímají jen Running procesy, takže můžeme využít sloupce status.</p>
<pre><code class="language-shell">~/bin> ps | sort-by mem | reverse | where status == Running
╭───┬──────┬──────┬──────┬─────────┬──────┬─────────┬──────────╮
│ # │ pid  │ ppid │ name │ status  │ cpu  │   mem   │ virtual  │
├───┼──────┼──────┼──────┼─────────┼──────┼─────────┼──────────┤
│ 0 │ 1763 │ 1762 │ nu   │ Running │ 0.00 │ 18.7 MB │ 150.1 GB │
╰───┴──────┴──────┴──────┴─────────┴──────┴─────────┴──────────╯</code></pre>
<p>Můžeme si tabulku zjednodušit tím, že nás zajímají jen sloupce pid, name a mem.</p>
<pre><code class="language-shell">~/bin> ps | sort-by mem | reverse | where status == Running | select pid name mem
╭───┬──────┬──────┬─────────╮
│ # │ pid  │ name │   mem   │
├───┼──────┼──────┼─────────┤
│ 0 │ 1763 │ nu   │ 18.7 MB │
╰───┴──────┴──────┴─────────╯</code></pre>
<p>Nakonec si pomocí příkazu get vytáhneme jen PID procesu.</p>
<pre><code class="language-shell">~/bin> ps | sort-by mem | reverse | where status == Running | select pid name mem | get pid
╭───┬──────╮
│ 0 │ 1763 │
╰───┴──────╯</code></pre>
<p>A tohle je jen takové škrabkání po povrchu. Nu disponuje škálou <a href="https://www.nushell.sh/book/working_with_tables.html">příkazů na práci s tabulkami</a>. Také na <a href="https://www.nushell.sh/book/working_with_records.html#updating-records">práci se záznamy</a> což je JSON, <a href="https://www.nushell.sh/book/working_with_lists.html">seznamy</a> a <a href="https://www.nushell.sh/book/working_with_strings.html">řetězci</a>. Vše je pěkně popsáno v dokumentaci v sekci <a href="https://www.nushell.sh/book/nu_fundamentals.html">Nu Fundamentals</a>.</p>
<p>Nushell jede na Windows, macOS a Linux operačních systémech. Metody instalace jsou popsány v <a href="https://www.nushell.sh/book/installation.html">dokumentaci</a>. Pro Debian/Ubuntu systém stačí přidat zdroj.</p>
<pre><code class="language-shell">curl -fsSL https://apt.fury.io/nushell/gpg.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/fury-nushell.gpg
echo "deb https://apt.fury.io/nushell/ /" | sudo tee /etc/apt/sources.list.d/fury.list
sudo apt update
sudo apt install nushell</code></pre>
<p>Nushell není kompatibilní s Bashem a jinými tradičními shelly. Takže není kompletní náhrada za standardní systémový shell. Ale dokáži si představit Nu jako &quot;every day&quot; shell na takovou běžnou uživatelskou Linuxařinu. Ale ještě víc pokud z mého programu potřebuji zpracovat strukturovaný výstup nebo naopak do mého programu dostat strukturovaný vstup. To může být velice silný nástroj. Nushell tvrdí že dokáže pracovat s JSON, YAML, Excel a dokonce i s SQLite. To může některé aplikace velice zjednodušit. Seznam všech podporovaných formátů najdete v <a href="https://www.nushell.sh/book/loading_data.html#opening-files">dokumentaci</a>.</p>
<p>Happy coding!</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2025%2F06%2F12%2F2771%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2025/06/12/2771/">Nushell</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Gitea a první soukromý repozitář</title>
		<link>https://www.hardwired.dev/2024/09/16/gitea-a-prvni-soukromy-repozitar/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Sun, 15 Sep 2024 22:15:31 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gitea]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[self-hosted]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2348</guid>

					<description><![CDATA[<p>Článek navazuje na Gitea v Dockeru s daty na Synology a Gitea na veřejné subdoméně. Tentokrát si ukážeme, jak vytvořit &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2024/09/16/gitea-a-prvni-soukromy-repozitar/">Gitea a první soukromý repozitář</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Článek navazuje na <a href="https://www.hardwired.dev/2024/09/14/gitea-v-dockeru-s-daty-na-synology/">Gitea v Dockeru s daty na Synology</a> a <a href="https://www.hardwired.dev/2024/09/15/gitea-na-verejne-subdomene/">Gitea na veřejné subdoméně</a>. Tentokrát si ukážeme, jak vytvořit nový soukromý repozitář a posílat do něj změny.</p>
<h1>Předpoklady</h1>
<ul>
<li>Máme funkční Giteu na vlastní subdoméně, do které se dokážeme přihlásit</li>
<li>Byly provedeny všechny kroky z předchozích návodů</li>
<li>Článek se zaměřuje na Windows ale na Linuxu to bude to samé nebo hodně podobné</li>
<li>Na počítači máme funkční SSH a <a href="https://git-scm.com/">GIT</a>.</li>
</ul>
<h1>Vytvoření soukromého repozitáře</h1>
<p>Přihlásíme se do naší Gitey. <code>Pluskem</code> zvolíme nový repozitář. Zadáme název repozitáře, <code>soukromy-repo-na-smazani</code>. Vybereme <code>Nastavit repozitář jako soukromý</code> a potvrdíme. Vytvoří se prázdný repozitář.</p>
<h1>Vytvoření SSH klíče</h1>
<p>Pro komunikaci s repozitářem budeme používat <a href="https://cs.wikipedia.org/wiki/Secure_Shell">SSH</a>. Budeme muset vytvořit pár klíčů, soukromý a veřejný. Soukromý bude u nás na počítači a veřejný budeme nahrajeme k repozitáři, jako přístupový.</p>
<p>Ujistíme se že v <code>c:\Users\&lt;username&gt;</code> máme složku <code>.ssh</code>. Poté v terminálu zadáme příkaz na vygenerování klíče pro přístup do Gitea. </p>
<p><code>ssh-keygen -t rsa -b 4096 -C &quot;&lt;váš email&gt;&quot; -f ~/.ssh/gitea-example-com</code></p>
<p>To ve složce <code>.ssh</code> vytvoří dva soubory. <code>gitea-example-com</code> a <code>gitea-example-com.pub</code>. Ten druhý musíme nahrát k repozitáři.</p>
<h1>Přidání klíče do Gitea repozitáře</h1>
<p>Otevřeme si repozitář. <code>Nastavení &gt; Klíče pro nasazení &gt; Přidat klič pro nasazení</code>. Pojmenujeme si ho, například <code>Domácí klíč</code>. A obsah <code>gitea-example-com.pub</code> zkopírujeme do pole <code>Obsah</code>. Nesmíme zapomenout zaškrtnout volbu <code>Povolit zápis</code> a potvrdit.</p>
<h1>Nastavení SSH na počítači</h1>
<p>Pokud ve složce <code>c:\Users\&lt;username&gt;\.ssh</code> nemáte soubor <code>config</code>, vytvořte ho a přidejte následující.</p>
<pre><code>Host gitea.example.com
  HostName gitea.example.com
  User git
  Port 222
  IdentityFile c:\Users\&lt;username&gt;\.ssh\gitea-example-com
  IdentitiesOnly yes</code></pre>
<p>Pro hosta <code>gitea.example.com</code> se nastaví odpovídající <code>host name</code>, <code>uživatel</code>, <code>port</code> pro připojení a <code>cesta k privátnímu klíči</code>. Volba <code>IdentitiesOnly</code> zajistí, že pro konkrétního hosta se použijí parametry, které jsou nastaveny.</p>
<h1>Připojení repozitáře</h1>
<p>Buď můžete připojit už existující repozitář z vašeho počítače, nebo vytvoříte nový. Vytvoříme nový.</p>
<p>Vytvořte složku kde bude nový repozitář. Obecně se pojmenuje názvem repozitáře co jsme vytvořili na naší Gitea.</p>
<pre><code class="language-shell">mkdir soukromy-repo-na-smazani</code></pre>
<p>Přesuneme se do něj.</p>
<pre><code class="language-shell">cd soukromy-repo-na-smazani</code></pre>
<p>Inicializujeme prázdný repozitář.</p>
<pre><code class="language-shell">git init</code></pre>
<p>Vytvoříme první soubor <code>README.md</code>.</p>
<pre><code class="language-shell">touch README.md</code></pre>
<p>Vytvoříme hlavní větev <code>main</code>.</p>
<pre><code class="language-shell">git checkout -b main</code></pre>
<p>Přidáme soubor <code>README.md</code> do <code>git</code> repozitáře.</p>
<pre><code class="language-shell">git add README.md</code></pre>
<p>Vytvoříme první <code>commit</code>.</p>
<pre><code class="language-shell">git commit -m &quot;První commit&quot;</code></pre>
<p>Napojíme náš repozitář z Gitea.</p>
<pre><code class="language-shell">git remote add origin git@gitea.example.com:&lt;gitea username&gt;/soukromy-repo-na-smazani.git</code></pre>
<p>Odešleme změny do vzdáleného repozitáře.</p>
<pre><code class="language-shell">git push -u origin main</code></pre>
<p>Když se nyní podíváme do repozitáře na <code>gitea.example.com</code>, uvidíme náš první <code>commit</code>.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2024%2F09%2F16%2Fgitea-a-prvni-soukromy-repozitar%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2024/09/16/gitea-a-prvni-soukromy-repozitar/">Gitea a první soukromý repozitář</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Windows Architecture &#038; WinAPI</title>
		<link>https://www.hardwired.dev/2024/04/23/windows-architecture-winapi/</link>
		
		<dc:creator><![CDATA[Whizit]]></dc:creator>
		<pubDate>Tue, 23 Apr 2024 21:45:08 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Různé]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Malware Development Essentials]]></category>
		<category><![CDATA[Memory Management]]></category>
		<category><![CDATA[WinAPI]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=2172</guid>

					<description><![CDATA[<p>Windows Architecture Windows architecture follows layered design with two main components: User Mode This mode is made of system processes, &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2024/04/23/windows-architecture-winapi/">Windows Architecture & WinAPI</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><h1>Windows Architecture</h1>
<p>Windows architecture follows layered design with two main components:</p>
<h3>User Mode</h3>
<p>This mode is made of  system processes, services, application and environments running on the system. All of these components have limited access to hardware and rely on <strong>kernel mode</strong> for hardware interaction.<br />
Interface between user mode and kernel functions is called environment subsystem.<br />
Each of these implement different API sets.<br />
Three main environment subsystems exist:<br />
1.Win32<br />
2.OS/2<br />
3.POSIX</p>
<h3>Security subsystem</h3>
<p>Deals with security tokens, manages access to resources based on permissions, handles authentication. Manages <strong>Active Directory</strong></p>
<h3>Kernel Mode</h3>
<p>Has full access to system hardware and resources and runs code in Protected Memory. Kernel mode handles memory management, device drivers, process management, thread prioritization etc.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2024/04/WinArchitecture-232x300.png" alt="" /></p>
<h3>System Call</h3>
<p>When user mode program needs access to any restricted resource or hardware, it makes system call. This call is processed by kernel mode.</p>
<h3>Hardware Abstraction Layer</h3>
<p>Acts as a bridge between kernel mode and hardware. Translates generic kernel instructions to specific instructions for given hardware.</p>
<h1>Memory Management</h1>
<p>Windows has sophisticated memory management system for physical(RAM) and virtual(RAM and Disk) memory utilization.</p>
<p><strong>Virtual Address Space</strong> - is set of virtual memory that process can use. This memory is private and cannot be accessed by other processes unless shared.<br />
Virtual address does not represent physical location in memory. System maintains internal data structure <em>Page Table</em> for each process. Every time thread references virtual address, system translates it to physical one.<br />
<em>Virtual address space</em> is divided into two <em>partitions - system and process</em>.</p>
<h3>Memory Types</h3>
<ul>
<li><strong>User mode/Kernel mode</strong>:<br />
Memory allocations are segregated based on mode to ensure security</li>
<li><strong>x86/x64</strong>:<br />
Represent addressable memory space for different CPU architectures. Every 32-bit(<em>x86</em>) app has up to <em>4GB</em> of virtual memory space, while 64-bit (<em>x64</em>) has up to 8TB.</li>
<li><strong>Paged Pool</strong>:<br />
Dynamically allocated memory that can be swapped between RAM and paging file on disk. This serves as memory usage optimization, or when RAM memory is full.</li>
<li><strong>Non-paged pool</strong>:<br />
Hold critical kernel mode data that must be always accessible in RAM as long as corresponding objects are allocated. This data is not paged to disk.</li>
</ul>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2024/04/WinMemoryManagement.png" alt="" /></p>
<h3>Page States</h3>
<ul>
<li><strong>Free</strong>: The page is available to be reserved, committed, or simultaneously reserved and committed</li>
<li><strong>Reserved</strong>: The page is reserved for future use, but it does <em>not have any physical storage associated</em> with it. Reserved memory cannot be used by other functions</li>
<li><strong>Committed</strong>: Memory have been allocated in RAM/paging file(s) on disk. Page is accessible and access is controlled by <strong>Memory Protection Constants</strong></li>
</ul>
<h3>Memory Protection Constants</h3>
<p>These constants specify permissions, which define operations that can be done on specified memory region. There is many of them, so I will list just a few that are probably most common, the rest can be found in <a href="https://learn.microsoft.com/en-us/windows/win32/memory/memory-protection-constants" title="Microsoft Documentation">Microsoft Documentation</a>.</p>
<ul>
<li><strong>PAGE_EXECUTE_READWRITE</strong> - Enables execute, read-only, or read/write access to the committed region of pages</li>
<li><strong>PAGE_READWRITE</strong> - Enables read-only or read/write access to the committed region of pages</li>
<li><strong>PAGE_READONLY</strong> - Enables read-only access to the committed region of pages<br />
...</li>
</ul>
<h3>C++ Code Example</h3>
<p>Let's apply previous information to allocate memory in a process.</p>
<pre><code>LPVOID memBlock = VirtualAllocEx(hProcess, NULL, sizeof(payload), (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);</code></pre>
<p>Here, we allocate variable 'memBlock' of 'LPVOID' type, assigning it result of 'VirtualAllocEx'(memoryapi.h) function. LPVOID represents address of any type.<br />
Executing this function commits memory to which we can write data later.<br />
Parameters:</p>
<ol>
<li>hProcess is handle to process in which virtual address space the memory will be allocated</li>
<li>This parameter specifies starting address. NULL means function will determine where to allocate the region</li>
<li>Size of memory region to allocate in bytes</li>
<li>Set page state, multiple can be used with bitwise '|' operator </li>
<li>Requires memory protection constant</li>
</ol>
<h2>Data Execution Prevention (DEP)</h2>
<p>Is a security technology, that makes some pages in memory non-executable. This prevents potential attackers from executing malicious code in these regions of memory using exploits like buffer overflow.</p>
<h2>Address Space Layout Randomization (ASLR)</h2>
<p>Is a security technique that randomizes base addresses of processes, DLL's and critical data structures like <em>stack and heap</em>. This prevents the attacker from hardcoding memory locations, which are like to be changed on each application restart. It also makes mistakes expensive, since writing to wrong address leads to application crash.<br />
Effectiveness of this technique can be significantly diminished by reducing entropy.</p>
<p><img decoding="async" src="https://www.hardwired.dev/wp-content/uploads/2024/04/ASLR-300x87.png" alt="" /></p>
<h2>WinAPI</h2>
<p>WinAPI is a collection of functions, divided between many DLL's, that allow applications to interact with underlying Windows functionalities through code.<br />
Many of these functions are documented in <a href="https://learn.microsoft.com/en-us/windows/win32/api/" title="Win32 API MSDN">Win32 API MSDN</a>.</p>
<h3>Important Windows DLL's</h3>
<ul>
<li>kernel32.dll - Exposes functions for memory management, file system access and console I/O, thread creation...</li>
<li>user32.dll - Provides functions for managing windows, menus, controls and handling user input</li>
<li>ntdll.dll - Many user mode API's rely on ntdll, as it exposes Native API</li>
<li>ws2_32.dll - Implements Windows Websocket API, it is crutial for network programming</li>
<li>advapi32.dll - Provides security features like authentication, access control and registry manipulation</li>
</ul>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2024%2F04%2F23%2Fwindows-architecture-winapi%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2024/04/23/windows-architecture-winapi/">Windows Architecture & WinAPI</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Starship pro Widláky</title>
		<link>https://www.hardwired.dev/2022/10/09/starship-pro-widlaky/</link>
		
		<dc:creator><![CDATA[John Doe]]></dc:creator>
		<pubDate>Sat, 08 Oct 2022 22:19:37 +0000</pubDate>
				<category><![CDATA[Různé]]></category>
		<category><![CDATA[clink]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[commandline]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[starship]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://hessevalentino.cz/?p=581</guid>

					<description><![CDATA[<p>Starship je cross-shell prompt napsaný v Rustu co vám obohatí váš shell. Jak to může vypadat se dozvíte hned na &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2022/10/09/starship-pro-widlaky/">Starship pro Widláky</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Starship je <code>cross-shell prompt</code> napsaný v Rustu co vám obohatí váš shell. Jak to může vypadat se dozvíte hned na <a href="https://starship.rs/">úvodní stránce</a> projektu.</p>
<blockquote>
<p>The minimal, blazing-fast, and infinitely customizable prompt for any shell!    </p>
</blockquote>
<p>Starship je multiplatformní a multi-shellový, ale tady se budeme zabývat instalací pro <code>cmd</code> na <code>windows</code>.</p>
<p>Samotnou instalaci můžete provést několika způsoby. Prvním způsobem je stažení klasického <code>msi</code>čka z <a href="https://github.com/starship/starship/releases/tag/v1.10.3">githubu starshipu</a> a normálně ho nainstalovat. Nebo můžete být víc <code>cool</code> a použít <a href="https://learn.microsoft.com/en-us/windows/package-manager/winget/">Winget</a>. Winget je pokus Microsoftu o &quot;balíčkovací systém&quot; přes příkazovou řádku. Někdo by si mohl říct že to bude jako Debianí <code>apt</code> nebo Fedorácký <code>yum</code>. Ne. Jediné co to udělá, je to, že stáhne <code>msi</code> soubor a spustí ho. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre><code class="language-shell">winget install --id Starship.Starship</code></pre>
<p>Po úspěšné instalaci je nutné stáhnout <a href="https://chrisant996.github.io/clink/clink.html">Clink</a>. Jelikož <code>cmd</code> je trochu prehistorie, potřebuje obohatit ještě o trošku více. Clink přinese do <code>cmd</code> opravdové doplňování a historii.</p>
<blockquote>
<p>Clink combines the native Windows shell cmd.exe with the powerful  command line editing features of the GNU Readline library, which  provides rich completion, history, and line-editing capabilities.  Readline is best known for its use in the Unix shell Bash, the standard  shell for Mac OS X and many Linux distributions.</p>
</blockquote>
<p>Ze <a href="https://github.com/chrisant996/clink/releases">stránek projektu</a> stáhněte a nainstalujte poslední verzi Clinku.</p>
<p>Jak tohle budete mít, tak je potřeba vytvořit soubor <code>starship.lua</code>, který umístíte do <code>%LocalAppData%\clink\</code>. Obsahem souboru bude následující:</p>
<pre><code class="language-lua">load(io.popen(&#039;starship init cmd&#039;):read(&quot;*a&quot;))()</code></pre>
<p>Teď když spustíte čerstvé <code>cmd</code>, tak uvidíte následující.</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/starship-success.jpg" alt="" /></p>
<p>Nebo něco takového. (v prvním případě je to přes Microsoft Terminál, v druhém případě je to čisté <code>cmd</code>)</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/starship-success-2.jpg" alt="" /></p>
<p>Tak to už vám běží Starship. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ale furt to nevypadá tak pěkně jako na stránkách Starshipu.</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/starship-example.jpg" alt="" /></p>
<p>V první řadě je potřeba doinstalovat font a to <a href="https://www.nerdfonts.com/">Nerd Font</a>.  </p>
<p>Tady to bude trochu divočejší. Potřebujeme vybrat font, který bude umět zobrazení různých symbolů jako vidíme na obrázku výše. </p>
<p>Pokud používám <a href="https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701">Windows Terminal</a> aplikaci, nainstaloval jsem a mám nastavený font <a href="https://www.nerdfonts.com/font-downloads">Caskaydia Cove Nerd Font</a>. Respektive <code>CaskaydiaCove Nerd Font Mono</code>.</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/caskaydia-cove-nerd-font.jpg" alt="" /></p>
<p>Blbé je, že klasické <code>cmd</code> ho neumí použít. Pro tento případ jsem použil font <a href="https://www.nerdfonts.com/font-downloads">3270 Nerd Font</a> a v <code>cmd</code> ho nastavil. (<code>ttf</code> soubory)</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/3270-nerd-font.jpg" alt="" /></p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/3270-narrow-nerd-install.jpg" alt="" /></p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/cmd-settings.jpg" alt="" /></p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/cmd-settings-font.jpg" alt="" /></p>
<p>Potvrďte, změní se font konzole. Zároveň se už korektně zobrazí základní preset Starshipu a uvidíte zelenou tučnou špidlatou závorku evokující šipku doprava. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/cmd-font-works.jpg" alt="" /></p>
<p>Tohle ale ještě furt není to co chceme. Teď ještě potřebujeme nějaký <a href="https://starship.rs/presets/#nerd-font-symbols">pěkný preset</a>. Můžeme použít <a href="https://starship.rs/presets/bracketed-segments.html">Bracketed Segments</a>.</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/bracketred-segments.jpg" alt="" /></p>
<p>Instalaci provedeme přes <code>cmd</code>.</p>
<pre><code class="language-bash">starship preset bracketed-segments &gt; %userprofile%/.config/starship.toml</code></pre>
<p>Spusťte nové <code>cmd</code> a když půjdete někam, kde může něco zajímavého říct, tak to zobrazí v nainstalovaném presetu. V mém případě jsem spustil <code>cmd</code> v Java Scriptovém projejktu.</p>
<p>Pro klasické <code>cmd</code>:</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/virtual-gallery-a.jpg" alt="" /></p>
<p>Pro <code>cmd</code> přes <code>Windows Terminal</code>:</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/virtual-gallery-b.jpg" alt="" /></p>
<p>Příkazová řádka mě informuje, že se nacházím ve větvi <code>master</code> a verze <code>nodejs</code> je 16. Co vám bude kontextově napovídáno je nakonfigurováno ve <code>starship.toml</code>, který jsme vytvářeli výše.</p>
<pre><code class="language-toml">[aws]
format = &#039;\[[$symbol($profile)(\($region\))(\[$duration\])]($style)\]&#039;

[bun]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[c]
format = &#039;\[[$symbol($version(-$name))]($style)\]&#039;

[cmake]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[cmd_duration]
format = &#039;\[[&#x23f1; $duration]($style)\]&#039;

[cobol]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[conda]
format = &#039;\[[$symbol$environment]($style)\]&#039;

[crystal]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[daml]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[dart]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[deno]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[docker_context]
format = &#039;\[[$symbol$context]($style)\]&#039;

[dotnet]
format = &#039;\[[$symbol($version)(? $tfm)]($style)\]&#039;

[elixir]
format = &#039;\[[$symbol($version \(OTP $otp_version\))]($style)\]&#039;

[elm]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[erlang]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[gcloud]
format = &#039;\[[$symbol$account(@$domain)(\($region\))]($style)\]&#039;

[git_branch]
format = &#039;\[[$symbol$branch]($style)\]&#039;

[git_status]
format = &#039;([\[$all_status$ahead_behind\]]($style))&#039;

[golang]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[haskell]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[helm]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[hg_branch]
format = &#039;\[[$symbol$branch]($style)\]&#039;

[java]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[julia]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[kotlin]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[kubernetes]
format = &#039;\[[$symbol$context( \($namespace\))]($style)\]&#039;

[lua]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[memory_usage]
format = &#039;\[$symbol[$ram( | $swap)]($style)\]&#039;

[nim]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[nix_shell]
format = &#039;\[[$symbol$state( \($name\))]($style)\]&#039;

[nodejs]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[ocaml]
format = &#039;\[[$symbol($version)(\($switch_indicator$switch_name\))]($style)\]&#039;

[openstack]
format = &#039;\[[$symbol$cloud(\($project\))]($style)\]&#039;

[package]
format = &#039;\[[$symbol$version]($style)\]&#039;

[pulumi]
format = &#039;\[[$symbol$stack]($style)\]&#039;

[purescript]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[python]
format = &#039;\[[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style)\]&#039;

[raku]
format = &#039;\[[$symbol($version-$vm_version)]($style)\]&#039;

[red]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[ruby]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[rust]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[scala]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[spack]
format = &#039;\[[$symbol$environment]($style)\]&#039;

[sudo]
format = &#039;\[[as $symbol]\]&#039;

[swift]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[terraform]
format = &#039;\[[$symbol$workspace]($style)\]&#039;

[time]
format = &#039;\[[$time]($style)\]&#039;

[username]
format = &#039;\[[$user]($style)\]&#039;

[vagrant]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[vlang]
format = &#039;\[[$symbol($version)]($style)\]&#039;

[zig]
format = &#039;\[[$symbol($version)]($style)\]&#039;
</code></pre>
<p>Tak a teď vám funguje Starship na Windows. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<hr />
<p>Pokud používáte PowerShell nemusíte instalovat Clink. Fonty pořešíte úplně stejně. V PowerShellu si vypíšete, kde se má nacházet konfigurační soubor.</p>
<pre><code class="language-shell">echo $PROFILE</code></pre>
<p>Dostanete něco ve smyslu <code>...\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1</code>. Pokud soubor neexistuje, tak ho vytvořte a do něj přidejte a uložte:</p>
<pre><code class="language-powershell">Invoke-Expression (&amp;starship init powershell)</code></pre>
<p>Spusťte nový PowerShell. Možná na vás vyskočí chyba <code>running scripts is disabled on this system</code>. To bude asi nějaká bezpečnost nebo co. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Abychom se toho zbavili, musíme pustit PowerShell jako správce a spustit následující příkaz:</p>
<pre><code class="language-shell">Set-ExecutionPolicy Unrestricted</code></pre>
<p>Jak moc je to &quot;velká bezpečnost díra&quot; si musí každý zhodnotit sám.</p>
<p>Restartujeme PowerShell. Pokud už máme nastavené odpovídající písmo a jsme například v <code>nodejs</code> projektu, uvidíme opět kontextové informace.</p>
<p><img decoding="async" src="http://wordpress.hardwired.dev/wp-content/uploads/2022/10/virtual-gallery-powershell.jpg" alt="" /></p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2022%2F10%2F09%2Fstarship-pro-widlaky%2F&#038;via=hessevalentino" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2022/10/09/starship-pro-widlaky/">Starship pro Widláky</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
