<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[nixers - Security & Cryptography]]></title>
		<link>https://nixers.net/</link>
		<description><![CDATA[nixers - https://nixers.net]]></description>
		<pubDate>Tue, 12 May 2026 21:41:09 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Help needed to build a lookup tables]]></title>
			<link>https://nixers.net/Thread-Help-needed-to-build-a-lookup-tables</link>
			<pubDate>Mon, 14 Aug 2023 22:45:01 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=579">z3bra</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Help-needed-to-build-a-lookup-tables</guid>
			<description><![CDATA[Hey everyone, I need an Argon2id hash lookup table for a project I'm working on.<br />
The thing is, I need <a href="https://pub.z3bra.org/hashcrush/goal.html" target="_blank" rel="noopener" class="mycode_url">A LOT</a> of them (the final final must be around 2/3Gib).<br />
<br />
I did the math, that's ~20,000,000 hashes. Considering that my computer is old, and argon2id was literally made for this to be slow, it would take me more than 2 months computing hashes 24/7 to get this up. And I can't run my computer 24/7…<br />
<br />
So I need you help, fellow CPU burners :)<br />
<br />
If you would like to help me out, <a href="https://git.z3bra.org/hashcrush" target="_blank" rel="noopener" class="mycode_url">grab the code</a> and join the hash party !<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clone git://git.z3bra.org/hashcrush.git</code></div></div><br />
All you need to do (if you trust me, otherwise you can read all the code, it's not much) is run the following command (you can try with a low COUNT to see if it works):<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>make -j &#36;(nproc) COUNT=500000</code></div></div><br />
This will top all your CPU cores at 100%, so only run it if you're ok with that. If you want to limit it to less cores with: (X being the number of cores)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>make -j X NPROC=X</code></div></div><br />
When it's done running, please submit your "<span style="font-weight: bold;" class="mycode_b">hashes.rec</span>" file to <a href="https://up.qw.is" target="_blank" rel="noopener" class="mycode_url">https://up.qw.is</a>. The extension name is important as I archive all .rec files somewhere else (so you can use low retention times).<br />
<br />
Thanks a lot for your help, you're all legends !]]></description>
			<content:encoded><![CDATA[Hey everyone, I need an Argon2id hash lookup table for a project I'm working on.<br />
The thing is, I need <a href="https://pub.z3bra.org/hashcrush/goal.html" target="_blank" rel="noopener" class="mycode_url">A LOT</a> of them (the final final must be around 2/3Gib).<br />
<br />
I did the math, that's ~20,000,000 hashes. Considering that my computer is old, and argon2id was literally made for this to be slow, it would take me more than 2 months computing hashes 24/7 to get this up. And I can't run my computer 24/7…<br />
<br />
So I need you help, fellow CPU burners :)<br />
<br />
If you would like to help me out, <a href="https://git.z3bra.org/hashcrush" target="_blank" rel="noopener" class="mycode_url">grab the code</a> and join the hash party !<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>git clone git://git.z3bra.org/hashcrush.git</code></div></div><br />
All you need to do (if you trust me, otherwise you can read all the code, it's not much) is run the following command (you can try with a low COUNT to see if it works):<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>make -j &#36;(nproc) COUNT=500000</code></div></div><br />
This will top all your CPU cores at 100%, so only run it if you're ok with that. If you want to limit it to less cores with: (X being the number of cores)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>make -j X NPROC=X</code></div></div><br />
When it's done running, please submit your "<span style="font-weight: bold;" class="mycode_b">hashes.rec</span>" file to <a href="https://up.qw.is" target="_blank" rel="noopener" class="mycode_url">https://up.qw.is</a>. The extension name is important as I archive all .rec files somewhere else (so you can use low retention times).<br />
<br />
Thanks a lot for your help, you're all legends !]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[pass, gnupg, managing keys and migrating password-store]]></title>
			<link>https://nixers.net/Thread-pass-gnupg-managing-keys-and-migrating-password-store</link>
			<pubDate>Thu, 11 Mar 2021 11:41:04 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=2034">pfr</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-pass-gnupg-managing-keys-and-migrating-password-store</guid>
			<description><![CDATA[Hi all, a bit of a noob question here, but when it comes to gnupg and just using gpg keys in general I know nothing. <br />
<br />
I have been using GNU 'pass' to manage my passwords for some time now. Generally I will just consult an internet cheat-sheet when setting it up and I have no real idea what I'm doing. <br />
<br />
What I'd like is to keep my .password-store in a git repository, and access it from multiple devices (laptops/phones) making it easier to keep each device in sync. <br />
<br />
Currently I have 2 laptops, both with pass set up with different gpg keys.<br />
<br />
So my questions are:<ul class="mycode_list"><li>Is there any security concern in keeping your .password-store in a git repo?<br />
</li>
<li>How do I change the gpg key used on my .password-sore and can I simply copy the keys via USB to my different devices?<br />
</li>
<li>How do I set the .password-store destination so that pass can look in the git repo and not in my home folder?<br />
</li>
</ul>
I have read over the man pages, but honestly it just a little over my head and I don't want to risk loosing my passwords.<br />
<br />
I did try to run <span style="font-style: italic;" class="mycode_i">&#36; pass git init</span> but after that I'm not sure what to do. The man page gives the example:<br />
<span style="font-style: italic;" class="mycode_i">&#36; pass git remote add origin kexec.com:pass-store</span>  and I'm not sure is I should be copying this or what? I tried it once and it broke so not doing that again. <br />
<br />
Any help is greatly appreciated.]]></description>
			<content:encoded><![CDATA[Hi all, a bit of a noob question here, but when it comes to gnupg and just using gpg keys in general I know nothing. <br />
<br />
I have been using GNU 'pass' to manage my passwords for some time now. Generally I will just consult an internet cheat-sheet when setting it up and I have no real idea what I'm doing. <br />
<br />
What I'd like is to keep my .password-store in a git repository, and access it from multiple devices (laptops/phones) making it easier to keep each device in sync. <br />
<br />
Currently I have 2 laptops, both with pass set up with different gpg keys.<br />
<br />
So my questions are:<ul class="mycode_list"><li>Is there any security concern in keeping your .password-store in a git repo?<br />
</li>
<li>How do I change the gpg key used on my .password-sore and can I simply copy the keys via USB to my different devices?<br />
</li>
<li>How do I set the .password-store destination so that pass can look in the git repo and not in my home folder?<br />
</li>
</ul>
I have read over the man pages, but honestly it just a little over my head and I don't want to risk loosing my passwords.<br />
<br />
I did try to run <span style="font-style: italic;" class="mycode_i">&#36; pass git init</span> but after that I'm not sure what to do. The man page gives the example:<br />
<span style="font-style: italic;" class="mycode_i">&#36; pass git remote add origin kexec.com:pass-store</span>  and I'm not sure is I should be copying this or what? I tried it once and it broke so not doing that again. <br />
<br />
Any help is greatly appreciated.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Cyber security/Hacking materials]]></title>
			<link>https://nixers.net/Thread-Cyber-security-Hacking-materials</link>
			<pubDate>Thu, 28 Nov 2019 19:58:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=579">z3bra</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Cyber-security-Hacking-materials</guid>
			<description><![CDATA[I rwcently stumbled upon <a href="https://www.hackthebox.eu" target="_blank" rel="noopener" class="mycode_url">https://www.hackthebox.eu</a>, a hacker's community with challenges and vulnerable hosts for the members to compete/learn/discuss about cyber security. This seem cool, but I have no freaking idea how to hack my way into the website (please don't spoil me!).<br />
<br />
As I'm leaning more and more toward security in my career, I though it would be interesting to learn about these practices and get a bit into it to improve my security skills.<br />
<br />
I know about all those "metasploit", "jack the ripper", ... things. But they look like pre-packed stuff you fire once, let run for 2 hours and then you get a reverse shell withou knowing why.<br />
<br />
I would like to get my hands dirty, and know what's under the hood. Is anyone here knowledgeable on the topic?<br />
Do you know about resources for complete newbies?<br />
<br />
Share your experience!]]></description>
			<content:encoded><![CDATA[I rwcently stumbled upon <a href="https://www.hackthebox.eu" target="_blank" rel="noopener" class="mycode_url">https://www.hackthebox.eu</a>, a hacker's community with challenges and vulnerable hosts for the members to compete/learn/discuss about cyber security. This seem cool, but I have no freaking idea how to hack my way into the website (please don't spoil me!).<br />
<br />
As I'm leaning more and more toward security in my career, I though it would be interesting to learn about these practices and get a bit into it to improve my security skills.<br />
<br />
I know about all those "metasploit", "jack the ripper", ... things. But they look like pre-packed stuff you fire once, let run for 2 hours and then you get a reverse shell withou knowing why.<br />
<br />
I would like to get my hands dirty, and know what's under the hood. Is anyone here knowledgeable on the topic?<br />
Do you know about resources for complete newbies?<br />
<br />
Share your experience!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Key And Trust Store on Unix-like OS]]></title>
			<link>https://nixers.net/Thread-Key-And-Trust-Store-on-Unix-like-OS</link>
			<pubDate>Fri, 19 Apr 2019 17:46:16 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Key-And-Trust-Store-on-Unix-like-OS</guid>
			<description><![CDATA[Hello nixers,<br />
In this thread we'll discuss about all the kinds of trust stores found on Unix-like operating systems.<br />
<br />
For those not in the know, trust stores are places where the operating sytems generally, or the specific software, stores private and public keys (asymmetric), trusted CAs, and symmetric keys (decryption keys).<br />
<br />
<br />
There's a lot to cover on this topic, I thought of writing an article about this because I couldn't find anything online that covered it in a generic manner. That's what gets me writing anyway.<br />
<br />
Thus what we'll do in this thread is gather and ponder on this topic as much as we want. You can also nag about the whole concept of trust but that's a bit off-topic so I wouldn't advice that.<br />
<br />
<hr class="mycode_hr" />
<br />
Here goes my contribution:<br />
<br />
Let's tackle some of the stuffs regarding TLS PKI (Public Key Infrastructure).<br />
<br />
Mozilla maintains a list of trusted CAs in a certificate store that a<br />
lot of Unix-like operating system fetch through the package manager and deploy at /etc/ssl/certs.<br />
<br />
This location is accessed system wide by a lot of utilities to check the<br />
trusted certificates. It sort of has become standard, though as you'll<br />
see in a bit it's not really.<br />
<br />
You also may find a symbolic link there pointing to /etc/ca-certificates/extracted/. This all points to the same thing, there's even usr/share/ca-certificates or  /usr/lib/mozilla/certificates, /usr/lib64/mozilla/certificates, ~/.mozilla/certificates.<br />
<br />
Openssl also stores/read certificate from that location /etc/ssl, that's where you'll  find openssl.cnf for example. In this directory you can choose to store your private keys associated with certificates you've generated yourself in /etc/ssl/private. For obvious reasons, this directory should only be owned by root.<br />
<br />
But there's a catch here, openssl can be compiled with the nss library, which will have its own list of trusted CAs built-in though usually through /usr/lib/libnssckbi.so which, again, has the list of maintained trusted CAs by Mozilla (Mozilla's Network Security Services).<br />
<br />
The Chrome browser also uses nss so you might ask where the trust exclusions are stored when added. They are in &#36;HOME/.pki/nssdb or /etc/pki/nssdb globally in an sqlite3 db.<br />
<br />
Firefox also uses an sqlite3 database to store its exclusions. However, it's not in the .pki directory but right within its profile directory: &#36;HOME/.mozilla/firefox/&lt;profilename&gt;.default/cert_override.txt. Add to this that it has two (or maybe more) sqlite3 dbs in there which are basically copy of the nss trusted certs that are found globally on the system.<br />
<br />
Now what about programming languages that want to access the internet in a secure manner through TLS PKI.<br />
<br />
Most of them rely on the trusted stores mentioned previously, namely nss or /etc/ssl. However, some don't.<br />
<br />
I'm aware of one well known example with the Java language. It stores its trust store in the &#36;JAVA_HOME/jre/lib/security/cacerts which is a java keystore. The password to this keystore is "changeit". Java has a concept of security provider, and they are listed in order of preference in the java.security file. Hopefully you can find one of the provider relying on the nss.cfg, and so we have less redundancy within our system.<br />
<br />
Let's also put a hint here about certificate revocation. Sometimes, in specific cases, you can't always rely on your OS packages to update your trusted CAs and you'll need a daemon to check CRLs and OCSPs for all the trusted certs you got.<br />
<br />
One example is: dirmngr(1)<br />
<br />
<br />
Now there are two other common places that I'll tackle too.<br />
<br />
Gnupg trust store and ssh trust store. Those are in &#36;HOME/.gnupg and &#36;HOME.ssh respectively.<br />
<br />
Those directories both contains trusted certificates and your private/public pairs.<br />
<br />
Let's mention that almost all things in the crypto world uses a format called ASN.1 with DER encoding or not. GPG, X509, SSH all have it this way with some different formatting in some places.<br />
<br />
You can have a look at those here:<br />
<a href="https://davesteele.github.io/gpg/2014/09/20/anatomy-of-a-gpg-key/" target="_blank" rel="noopener" class="mycode_url">https://davesteele.github.io/gpg/2014/09...a-gpg-key/</a><br />
<a href="https://www.hanselman.com/blog/DecodingAnSSHKeyFromPEMToBASE64ToHEXToASN1ToPrimeDecimalNumbers.aspx" target="_blank" rel="noopener" class="mycode_url">https://www.hanselman.com/blog/DecodingA...mbers.aspx</a><br />
<a href="https://cipherious.wordpress.com/2013/05/13/constructing-an-x-509-certificate-using-asn-1/" target="_blank" rel="noopener" class="mycode_url">https://cipherious.wordpress.com/2013/05...ing-asn-1/</a><br />
<br />
And here's a useful link:<br />
<br />
<a href="https://wiki.gentoo.org/wiki/Certificates" target="_blank" rel="noopener" class="mycode_url">https://wiki.gentoo.org/wiki/Certificates</a><br />
<br />
<hr class="mycode_hr" />
<br />
So nixers, what do you have to say about trust stores on Unix-like OS. Anything to add to what I've mentioned. There's a lot I've deliberately left out. Maybe talk about interfacing with keystores on a hardware security module through pkcs#11, like a yubikey, that could be used for OTP. Maybe we can talk about all the utilities that can be used to manipulate, create, and display in a human readable format the certificates, public/private pairs, and more (openssl, keytool, certutil, etc..). We can also talk about building your own PKI. We can talk about what specific language do to handle cryptographic keystores, what you like about it. Or maybe simply share a link you've found useful. Or maybe we can talk about package management and how maintainers should sign their packages. Or just express your opinion about anything.<br />
<br />
We could go into secret management, PAM, crypto protocols and different libraries, and MAC (Mandatory access control, think SELinux and others) as a whole but that would be too big for a single thread. If you want to do that we can open a new one. Let's attack trust and key stores in this thread.<br />
<br />
What's your take on trust and key stores?]]></description>
			<content:encoded><![CDATA[Hello nixers,<br />
In this thread we'll discuss about all the kinds of trust stores found on Unix-like operating systems.<br />
<br />
For those not in the know, trust stores are places where the operating sytems generally, or the specific software, stores private and public keys (asymmetric), trusted CAs, and symmetric keys (decryption keys).<br />
<br />
<br />
There's a lot to cover on this topic, I thought of writing an article about this because I couldn't find anything online that covered it in a generic manner. That's what gets me writing anyway.<br />
<br />
Thus what we'll do in this thread is gather and ponder on this topic as much as we want. You can also nag about the whole concept of trust but that's a bit off-topic so I wouldn't advice that.<br />
<br />
<hr class="mycode_hr" />
<br />
Here goes my contribution:<br />
<br />
Let's tackle some of the stuffs regarding TLS PKI (Public Key Infrastructure).<br />
<br />
Mozilla maintains a list of trusted CAs in a certificate store that a<br />
lot of Unix-like operating system fetch through the package manager and deploy at /etc/ssl/certs.<br />
<br />
This location is accessed system wide by a lot of utilities to check the<br />
trusted certificates. It sort of has become standard, though as you'll<br />
see in a bit it's not really.<br />
<br />
You also may find a symbolic link there pointing to /etc/ca-certificates/extracted/. This all points to the same thing, there's even usr/share/ca-certificates or  /usr/lib/mozilla/certificates, /usr/lib64/mozilla/certificates, ~/.mozilla/certificates.<br />
<br />
Openssl also stores/read certificate from that location /etc/ssl, that's where you'll  find openssl.cnf for example. In this directory you can choose to store your private keys associated with certificates you've generated yourself in /etc/ssl/private. For obvious reasons, this directory should only be owned by root.<br />
<br />
But there's a catch here, openssl can be compiled with the nss library, which will have its own list of trusted CAs built-in though usually through /usr/lib/libnssckbi.so which, again, has the list of maintained trusted CAs by Mozilla (Mozilla's Network Security Services).<br />
<br />
The Chrome browser also uses nss so you might ask where the trust exclusions are stored when added. They are in &#36;HOME/.pki/nssdb or /etc/pki/nssdb globally in an sqlite3 db.<br />
<br />
Firefox also uses an sqlite3 database to store its exclusions. However, it's not in the .pki directory but right within its profile directory: &#36;HOME/.mozilla/firefox/&lt;profilename&gt;.default/cert_override.txt. Add to this that it has two (or maybe more) sqlite3 dbs in there which are basically copy of the nss trusted certs that are found globally on the system.<br />
<br />
Now what about programming languages that want to access the internet in a secure manner through TLS PKI.<br />
<br />
Most of them rely on the trusted stores mentioned previously, namely nss or /etc/ssl. However, some don't.<br />
<br />
I'm aware of one well known example with the Java language. It stores its trust store in the &#36;JAVA_HOME/jre/lib/security/cacerts which is a java keystore. The password to this keystore is "changeit". Java has a concept of security provider, and they are listed in order of preference in the java.security file. Hopefully you can find one of the provider relying on the nss.cfg, and so we have less redundancy within our system.<br />
<br />
Let's also put a hint here about certificate revocation. Sometimes, in specific cases, you can't always rely on your OS packages to update your trusted CAs and you'll need a daemon to check CRLs and OCSPs for all the trusted certs you got.<br />
<br />
One example is: dirmngr(1)<br />
<br />
<br />
Now there are two other common places that I'll tackle too.<br />
<br />
Gnupg trust store and ssh trust store. Those are in &#36;HOME/.gnupg and &#36;HOME.ssh respectively.<br />
<br />
Those directories both contains trusted certificates and your private/public pairs.<br />
<br />
Let's mention that almost all things in the crypto world uses a format called ASN.1 with DER encoding or not. GPG, X509, SSH all have it this way with some different formatting in some places.<br />
<br />
You can have a look at those here:<br />
<a href="https://davesteele.github.io/gpg/2014/09/20/anatomy-of-a-gpg-key/" target="_blank" rel="noopener" class="mycode_url">https://davesteele.github.io/gpg/2014/09...a-gpg-key/</a><br />
<a href="https://www.hanselman.com/blog/DecodingAnSSHKeyFromPEMToBASE64ToHEXToASN1ToPrimeDecimalNumbers.aspx" target="_blank" rel="noopener" class="mycode_url">https://www.hanselman.com/blog/DecodingA...mbers.aspx</a><br />
<a href="https://cipherious.wordpress.com/2013/05/13/constructing-an-x-509-certificate-using-asn-1/" target="_blank" rel="noopener" class="mycode_url">https://cipherious.wordpress.com/2013/05...ing-asn-1/</a><br />
<br />
And here's a useful link:<br />
<br />
<a href="https://wiki.gentoo.org/wiki/Certificates" target="_blank" rel="noopener" class="mycode_url">https://wiki.gentoo.org/wiki/Certificates</a><br />
<br />
<hr class="mycode_hr" />
<br />
So nixers, what do you have to say about trust stores on Unix-like OS. Anything to add to what I've mentioned. There's a lot I've deliberately left out. Maybe talk about interfacing with keystores on a hardware security module through pkcs#11, like a yubikey, that could be used for OTP. Maybe we can talk about all the utilities that can be used to manipulate, create, and display in a human readable format the certificates, public/private pairs, and more (openssl, keytool, certutil, etc..). We can also talk about building your own PKI. We can talk about what specific language do to handle cryptographic keystores, what you like about it. Or maybe simply share a link you've found useful. Or maybe we can talk about package management and how maintainers should sign their packages. Or just express your opinion about anything.<br />
<br />
We could go into secret management, PAM, crypto protocols and different libraries, and MAC (Mandatory access control, think SELinux and others) as a whole but that would be too big for a single thread. If you want to do that we can open a new one. Let's attack trust and key stores in this thread.<br />
<br />
What's your take on trust and key stores?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Simple encryption software]]></title>
			<link>https://nixers.net/Thread-Simple-encryption-software</link>
			<pubDate>Fri, 05 Apr 2019 12:00:19 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=579">z3bra</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Simple-encryption-software</guid>
			<description><![CDATA[Hello fellow crypto friends!<br />
<br />
I need your help on a small piece of software I'm working on: <a href="http://git.z3bra.org/safe/file/README.html" target="_blank" rel="noopener" class="mycode_url">safe</a>.<br />
<br />
It is a <a href="https://www.passwordstore.org/" target="_blank" rel="noopener" class="mycode_url">pass(1)</a>-like application used to store passwords, but I want to drop usage of asymmetric keys and use only a master password instead (ie. symmetric encryption), so all I need to do to unlock my password store is a master password.<br />
<br />
There is one neat feature that I like with gpg though: gpg-agent. I would like to have something similar with my master password approach, so I don't have to type my password every time I want to encrypt/decrypt a password.<br />
<br />
I know that there are multiple security implications with it, but I'm no security expert, so I would like your input/advice on this topic.<br />
<br />
From the top of my head, here are the security concerns I should have:<br />
<ul class="mycode_list"><li>DO NOT store master password in memory --&gt; sha256() it<br />
</li>
<li>DO NOT store secrets in memory --&gt; ???? I don't think I can avoid that. At least I can store smaller "chunks" for in/output<br />
</li>
<li>NEVER keep decrypted secrets in memory --&gt; memset() the secrets address after usage<br />
</li>
<li>NEVER write decrypted secrets anywhere --&gt; output to stdout only<br />
</li>
</ul>
<br />
What should I add to this list? Are there things I should change?<br />
<br />
<span style="font-style: italic;" class="mycode_i">BONUS QUESTION:</span><br />
<span style="text-decoration: line-through;" class="mycode_s">Do you guys understand how the "encrypt(3)" function from unistd.h works (don't judge me) ?<br />
It seems to take a 64bits message and return the 64bits equivalent, encrypted. Which means that my encrypted message will have the same size as the ciphertext... I'm not security expert, but it looks like a security issue right?</span><br />
Answering my own question from the man page:<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Because they employ the DES block cipher, which is no longer considered secure, crypt(), crypt_r(), setkey(), and setkey_r() were removed in glibc 2.28.  Applications should switch to a modern cryptography library, such as libgcrypt.</blockquote>
<br />
Thanks for your help!]]></description>
			<content:encoded><![CDATA[Hello fellow crypto friends!<br />
<br />
I need your help on a small piece of software I'm working on: <a href="http://git.z3bra.org/safe/file/README.html" target="_blank" rel="noopener" class="mycode_url">safe</a>.<br />
<br />
It is a <a href="https://www.passwordstore.org/" target="_blank" rel="noopener" class="mycode_url">pass(1)</a>-like application used to store passwords, but I want to drop usage of asymmetric keys and use only a master password instead (ie. symmetric encryption), so all I need to do to unlock my password store is a master password.<br />
<br />
There is one neat feature that I like with gpg though: gpg-agent. I would like to have something similar with my master password approach, so I don't have to type my password every time I want to encrypt/decrypt a password.<br />
<br />
I know that there are multiple security implications with it, but I'm no security expert, so I would like your input/advice on this topic.<br />
<br />
From the top of my head, here are the security concerns I should have:<br />
<ul class="mycode_list"><li>DO NOT store master password in memory --&gt; sha256() it<br />
</li>
<li>DO NOT store secrets in memory --&gt; ???? I don't think I can avoid that. At least I can store smaller "chunks" for in/output<br />
</li>
<li>NEVER keep decrypted secrets in memory --&gt; memset() the secrets address after usage<br />
</li>
<li>NEVER write decrypted secrets anywhere --&gt; output to stdout only<br />
</li>
</ul>
<br />
What should I add to this list? Are there things I should change?<br />
<br />
<span style="font-style: italic;" class="mycode_i">BONUS QUESTION:</span><br />
<span style="text-decoration: line-through;" class="mycode_s">Do you guys understand how the "encrypt(3)" function from unistd.h works (don't judge me) ?<br />
It seems to take a 64bits message and return the 64bits equivalent, encrypted. Which means that my encrypted message will have the same size as the ciphertext... I'm not security expert, but it looks like a security issue right?</span><br />
Answering my own question from the man page:<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Because they employ the DES block cipher, which is no longer considered secure, crypt(), crypt_r(), setkey(), and setkey_r() were removed in glibc 2.28.  Applications should switch to a modern cryptography library, such as libgcrypt.</blockquote>
<br />
Thanks for your help!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA['Secure' group chat software]]></title>
			<link>https://nixers.net/Thread-Secure-group-chat-software</link>
			<pubDate>Wed, 05 Jul 2017 08:14:21 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1786">sff</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Secure-group-chat-software</guid>
			<description><![CDATA[I want to migrate me and my friend group from FB chat to a more secure/privacy-minded chat group.<br />
<br />
Almost everyone uses Linux altough there are some Windows users. Being able to chat from a PC and a smartphone is also pretty important.<br />
<br />
Any ideas what to use?]]></description>
			<content:encoded><![CDATA[I want to migrate me and my friend group from FB chat to a more secure/privacy-minded chat group.<br />
<br />
Almost everyone uses Linux altough there are some Windows users. Being able to chat from a PC and a smartphone is also pretty important.<br />
<br />
Any ideas what to use?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[This incident will be reported]]></title>
			<link>https://nixers.net/Thread-This-incident-will-be-reported</link>
			<pubDate>Mon, 03 Jul 2017 09:00:12 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=579">z3bra</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-This-incident-will-be-reported</guid>
			<description><![CDATA[I always though this would be some legacy unused feature of sudo(1), thinking that you had to read some dark parts of /var/log/secure logs (something nobody ever does)...<br />
<br />
But I shit you not, this happened today:<br />
<br />
<img src="https://p.iotek.org/had.png" alt="[Image: had.png]" class="mycode_img" loading="lazy" /><br />
<br />
I felt... betrayed! THIS IS <span style="font-style: italic;" class="mycode_i">ACTUALLY</span> REPORTED!]]></description>
			<content:encoded><![CDATA[I always though this would be some legacy unused feature of sudo(1), thinking that you had to read some dark parts of /var/log/secure logs (something nobody ever does)...<br />
<br />
But I shit you not, this happened today:<br />
<br />
<img src="https://p.iotek.org/had.png" alt="[Image: had.png]" class="mycode_img" loading="lazy" /><br />
<br />
I felt... betrayed! THIS IS <span style="font-style: italic;" class="mycode_i">ACTUALLY</span> REPORTED!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tox]]></title>
			<link>https://nixers.net/Thread-Tox</link>
			<pubDate>Wed, 10 May 2017 17:21:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1773">buttcake</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Tox</guid>
			<description><![CDATA[I've been using the toxic client for a while and even though I knew about ratox I did not try it because I never really used suckless type software before.<br />
<br />
Is there currently any way I can pipe the passphrase required for an encrypted tox profile from let's say, pass ? Like how toxic has 'password_eval' ?<br />
<br />
Also general tox thread, I'd be interested in reading your experiences regarding various clients since I've only used toxic so far.]]></description>
			<content:encoded><![CDATA[I've been using the toxic client for a while and even though I knew about ratox I did not try it because I never really used suckless type software before.<br />
<br />
Is there currently any way I can pipe the passphrase required for an encrypted tox profile from let's say, pass ? Like how toxic has 'password_eval' ?<br />
<br />
Also general tox thread, I'd be interested in reading your experiences regarding various clients since I've only used toxic so far.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Loosing the root password]]></title>
			<link>https://nixers.net/Thread-Loosing-the-root-password</link>
			<pubDate>Thu, 08 Sep 2016 03:39:06 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Loosing-the-root-password</guid>
			<description><![CDATA[Hello fello nixers,<br />
This thread is about what to do if you lost your root password.<br />
<br />
Context: My friend lost his root password and his current user automatically logs into the system without entering any password, so he doesn't remember this one either.<br />
<br />
The solutions I could think of:<ul class="mycode_list"><li>Boot from a live CD and edit the /etc/passwd to make his default user have root privileges, check validity of the file with pwck, log back in to change the root password, set everything back to normal.<br />
</li>
<li>Boot from a live CD and edit /etc/shadow to put a hash I'm sure of or an empty one. (I've been looking but couldn't find a tool that generates that password so I'm just going to copy it from another box).<br />
</li>
<li>Boot from a live CD and change the sudoers file to allow his user to be root without entering a password.<br />
</li>
<li>This doesn't apply here but for BSDs booting into single user mode allows changing the root password. ( <a href="https://www.openbsd.org/faq/faq8.html" target="_blank" rel="noopener" class="mycode_url">https://www.openbsd.org/faq/faq8.html</a> )<br />
</li>
</ul>
<br />
This will only work if the hard disk is not encrypted, and it's not so it's fine.<br />
<br />
I have found those too:<br />
<a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-q-and-a-root-passwd.html" target="_blank" rel="noopener" class="mycode_url">https://access.redhat.com/documentation/...asswd.html</a><br />
This one is a way to boot into single user mode linux by appending to the GRUB line:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ro root=LABEL=/</code></div></div>It then gives you a root shell where you can change the password.<br />
<br />
<a href="http://askubuntu.com/questions/24006/how-do-i-reset-a-lost-administrative-password" target="_blank" rel="noopener" class="mycode_url">http://askubuntu.com/questions/24006/how...e-password</a><br />
<a href="https://help.ubuntu.com/community/LostPassword" target="_blank" rel="noopener" class="mycode_url">https://help.ubuntu.com/community/LostPassword</a><br />
<br />
Kind of the same spirit, choosing to boot into a rescue mode and then mounting the file system and changing the password.<br />
<br />
There's also a mention to add this line to the grub:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>init=/bin/bash</code></div></div>Which I assume will use bash as the init process and thus letting you have full control over the OS (<a href="https://wiki.archlinux.org/index.php/Kernel_parameters" target="_blank" rel="noopener" class="mycode_url">source</a> and <a href="https://www.kernel.org/doc/Documentation/kernel-parameters.txt" target="_blank" rel="noopener" class="mycode_url">here</a>).<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;">
Parameters of the linux kernel:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>parameter &nbsp;&nbsp;&nbsp;&nbsp;Description<br />
root= &nbsp;&nbsp;&nbsp;&nbsp;Root filesystem.<br />
rootflags= &nbsp;&nbsp;&nbsp;&nbsp;Root filesystem mount options.<br />
ro &nbsp;&nbsp;&nbsp;&nbsp;Mount root device read-only on boot (default1).<br />
rw &nbsp;&nbsp;&nbsp;&nbsp;Mount root device read-write on boot.<br />
initrd= &nbsp;&nbsp;&nbsp;&nbsp;Specify the location of the initial ramdisk.<br />
init= &nbsp;&nbsp;&nbsp;&nbsp;Run specified binary instead of /sbin/init (symlinked to systemd in Arch) as init process.<br />
init=/bin/sh &nbsp;&nbsp;&nbsp;&nbsp;Boot to shell.<br />
systemd.unit= &nbsp;&nbsp;&nbsp;&nbsp;Boot to a specified target.<br />
nomodeset &nbsp;&nbsp;&nbsp;&nbsp;Disable Kernel mode setting.<br />
zswap.enabled &nbsp;&nbsp;&nbsp;&nbsp;Enable Zswap.<br />
video=&lt;videosetting&gt; &nbsp;&nbsp;&nbsp;&nbsp;Override framebuffer video defaults.</code></div></div></div></div></div>
<br />
Do you have any other tips or suggestions?<br />
<br />
<a href="http://www.unix.com/answers-to-frequently-asked-questions/14327-lost-root-password-cant-login-root.html" target="_blank" rel="noopener" class="mycode_url">Here's</a> a bunch of resources on the topic.]]></description>
			<content:encoded><![CDATA[Hello fello nixers,<br />
This thread is about what to do if you lost your root password.<br />
<br />
Context: My friend lost his root password and his current user automatically logs into the system without entering any password, so he doesn't remember this one either.<br />
<br />
The solutions I could think of:<ul class="mycode_list"><li>Boot from a live CD and edit the /etc/passwd to make his default user have root privileges, check validity of the file with pwck, log back in to change the root password, set everything back to normal.<br />
</li>
<li>Boot from a live CD and edit /etc/shadow to put a hash I'm sure of or an empty one. (I've been looking but couldn't find a tool that generates that password so I'm just going to copy it from another box).<br />
</li>
<li>Boot from a live CD and change the sudoers file to allow his user to be root without entering a password.<br />
</li>
<li>This doesn't apply here but for BSDs booting into single user mode allows changing the root password. ( <a href="https://www.openbsd.org/faq/faq8.html" target="_blank" rel="noopener" class="mycode_url">https://www.openbsd.org/faq/faq8.html</a> )<br />
</li>
</ul>
<br />
This will only work if the hard disk is not encrypted, and it's not so it's fine.<br />
<br />
I have found those too:<br />
<a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-q-and-a-root-passwd.html" target="_blank" rel="noopener" class="mycode_url">https://access.redhat.com/documentation/...asswd.html</a><br />
This one is a way to boot into single user mode linux by appending to the GRUB line:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ro root=LABEL=/</code></div></div>It then gives you a root shell where you can change the password.<br />
<br />
<a href="http://askubuntu.com/questions/24006/how-do-i-reset-a-lost-administrative-password" target="_blank" rel="noopener" class="mycode_url">http://askubuntu.com/questions/24006/how...e-password</a><br />
<a href="https://help.ubuntu.com/community/LostPassword" target="_blank" rel="noopener" class="mycode_url">https://help.ubuntu.com/community/LostPassword</a><br />
<br />
Kind of the same spirit, choosing to boot into a rescue mode and then mounting the file system and changing the password.<br />
<br />
There's also a mention to add this line to the grub:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>init=/bin/bash</code></div></div>Which I assume will use bash as the init process and thus letting you have full control over the OS (<a href="https://wiki.archlinux.org/index.php/Kernel_parameters" target="_blank" rel="noopener" class="mycode_url">source</a> and <a href="https://www.kernel.org/doc/Documentation/kernel-parameters.txt" target="_blank" rel="noopener" class="mycode_url">here</a>).<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;">
Parameters of the linux kernel:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>parameter &nbsp;&nbsp;&nbsp;&nbsp;Description<br />
root= &nbsp;&nbsp;&nbsp;&nbsp;Root filesystem.<br />
rootflags= &nbsp;&nbsp;&nbsp;&nbsp;Root filesystem mount options.<br />
ro &nbsp;&nbsp;&nbsp;&nbsp;Mount root device read-only on boot (default1).<br />
rw &nbsp;&nbsp;&nbsp;&nbsp;Mount root device read-write on boot.<br />
initrd= &nbsp;&nbsp;&nbsp;&nbsp;Specify the location of the initial ramdisk.<br />
init= &nbsp;&nbsp;&nbsp;&nbsp;Run specified binary instead of /sbin/init (symlinked to systemd in Arch) as init process.<br />
init=/bin/sh &nbsp;&nbsp;&nbsp;&nbsp;Boot to shell.<br />
systemd.unit= &nbsp;&nbsp;&nbsp;&nbsp;Boot to a specified target.<br />
nomodeset &nbsp;&nbsp;&nbsp;&nbsp;Disable Kernel mode setting.<br />
zswap.enabled &nbsp;&nbsp;&nbsp;&nbsp;Enable Zswap.<br />
video=&lt;videosetting&gt; &nbsp;&nbsp;&nbsp;&nbsp;Override framebuffer video defaults.</code></div></div></div></div></div>
<br />
Do you have any other tips or suggestions?<br />
<br />
<a href="http://www.unix.com/answers-to-frequently-asked-questions/14327-lost-root-password-cant-login-root.html" target="_blank" rel="noopener" class="mycode_url">Here's</a> a bunch of resources on the topic.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[firejail]]></title>
			<link>https://nixers.net/Thread-firejail</link>
			<pubDate>Fri, 02 Sep 2016 17:08:05 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1613">robotchaos</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-firejail</guid>
			<description><![CDATA[Just wanted to see what you guys think of firejail. Anyone tried it?<br />
<br />
<a href="https://firejail.wordpress.com/" target="_blank" rel="noopener" class="mycode_url">https://firejail.wordpress.com/</a><br />
<br />
I started playing with it yesterday and I have to say, I am certainly impressed. The default profile when loading `firejail st` protects most of the stuff I was concerned about. I used st to load a shell as an example to see what I could access. It denied access to /boot, /sbin, sudo explicitly, .password-store, .gnupg, .ssh, sets ~/bin to read-only, and most of your config files get set to read-only as well. Like I said, running a shell in this firejail was only a test. I actually only run firefox, ssh ( client ), nodejs, nginx, surf, libreoffice, pidgin, and evolution in a firejail. <br />
<br />
I was looking for something to protect my sensitive files from internet-facing applications, such as surf and firefox. So if something happened, it couldn't run away with my data. firejail seems to fit this bill rather nicely.<br />
<br />
In fact, with the --private=dir switch, you can run the program in its own private home directory if you wanted to go that far.]]></description>
			<content:encoded><![CDATA[Just wanted to see what you guys think of firejail. Anyone tried it?<br />
<br />
<a href="https://firejail.wordpress.com/" target="_blank" rel="noopener" class="mycode_url">https://firejail.wordpress.com/</a><br />
<br />
I started playing with it yesterday and I have to say, I am certainly impressed. The default profile when loading `firejail st` protects most of the stuff I was concerned about. I used st to load a shell as an example to see what I could access. It denied access to /boot, /sbin, sudo explicitly, .password-store, .gnupg, .ssh, sets ~/bin to read-only, and most of your config files get set to read-only as well. Like I said, running a shell in this firejail was only a test. I actually only run firefox, ssh ( client ), nodejs, nginx, surf, libreoffice, pidgin, and evolution in a firejail. <br />
<br />
I was looking for something to protect my sensitive files from internet-facing applications, such as surf and firefox. So if something happened, it couldn't run away with my data. firejail seems to fit this bill rather nicely.<br />
<br />
In fact, with the --private=dir switch, you can run the program in its own private home directory if you wanted to go that far.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Unix Forensic]]></title>
			<link>https://nixers.net/Thread-Unix-Forensic</link>
			<pubDate>Sun, 03 Jul 2016 13:48:54 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Unix-Forensic</guid>
			<description><![CDATA[(This is part of the podcast discussion extension)<br />
<br />
<br />
Unix Forensic<br />
<br />
Link of the recording [ <a href="https://github.com/nixers-projects/podcast/blob/master/nixers-podcast-2016-07-03.mp3?raw=true" target="_blank" rel="noopener" class="mycode_url">https://github.com/nixers-projects/podca...3?raw=true</a> ]<br />
<br />
Your Unix box has been p0wn3d, what do you do?]]></description>
			<content:encoded><![CDATA[(This is part of the podcast discussion extension)<br />
<br />
<br />
Unix Forensic<br />
<br />
Link of the recording [ <a href="https://github.com/nixers-projects/podcast/blob/master/nixers-podcast-2016-07-03.mp3?raw=true" target="_blank" rel="noopener" class="mycode_url">https://github.com/nixers-projects/podca...3?raw=true</a> ]<br />
<br />
Your Unix box has been p0wn3d, what do you do?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Reverse Engineering Tools on Linux]]></title>
			<link>https://nixers.net/Thread-Reverse-Engineering-Tools-on-Linux</link>
			<pubDate>Wed, 06 Apr 2016 22:17:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=378">kirby</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Reverse-Engineering-Tools-on-Linux</guid>
			<description><![CDATA[This is a completely rewritten version of my <a href="https://nixers.net/showthread.php?tid=1863&amp;pid=16253#pid16253" target="_blank" rel="noopener" class="mycode_url">original post</a> now that I have more experience. I'm still a novice, but I've done some real malware analysis and some exercises and generally feel like the post should reflect my updated feelings.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Reverse engineering is seen as a primarily Windows-based activity. Basically all malware samples you reverse will be Windows-based, and some of the best tools such as <a href="http://ollydbg.de" target="_blank" rel="noopener" class="mycode_url">OllyDbg</a> are Windows exclusive. This post aims to look at what tools and resources are available for Linux and to evaluate them.<br />
<br />
Before that, however, I'd like to quickly mention you can get Windows virtual machine images for all manner of hypervisors free from Microsoft <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/" target="_blank" rel="noopener" class="mycode_url">here</a>. They're meant for testing your web apps on IE, but just boot it up, install all your tools and save a snapshot - what are they going to do. With that out the way, let's look at some native tools.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">IDA</span><br />
<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;"><img src="https://d2.alternativeto.net/dist/s/9408b42b-f339-e011-8d53-0200d897d049_1_full.gif?format=jpg" alt="[Image: 9408b42b-f339-e011-8d53-0200d897d049_1_f...format=jpg]" class="mycode_img" loading="lazy" /></div></div></div>
<br />
IDA (the Interactive Disassembler) from Hex-Rays has it's reputation as the best static analysis tool available, and for good reason, it's very good. It provides a very useful disassembly, graphing functions, comprehensive searching, imports and references to these imports, and much more. With this brings a ridiculous price tag which I'm sure puts it out of range of anyone here. Thankfully, Hex-Rays offer a free <a href="https://www.hex-rays.com/products/ida/support/download_freeware.shtml" target="_blank" rel="noopener" class="mycode_url">demo version</a>. It is a tad limited in what it can disassemble, and you can't save. You can get around the latter issue with virtual machine snapshots if you're so inclined.<br />
<br />
Documentation-wise, IDA's reputation means it has a strong user base and thus plenty of resources are available, including <a href="https://www.nostarch.com/idapro2.htm" target="_blank" rel="noopener" class="mycode_url">entire books</a>. I found I didn't have a clue what to do, but on reading the dedicated chapter in <a href="https://www.nostarch.com/malware" target="_blank" rel="noopener" class="mycode_url">Practical Malware Analysis</a>, I picked it up no problem and now find it very intuitive. That said, Hex-Ray's own website seems a bit sparse, a lot of the pages seem out of date. I haven't ever had to go there for technical help though.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">angr</span><br />
<br />
angr is a Python symbolic execution engine framework. Symbolic execution is a very interesting field and not one that any of the other tools here provide to my knowledge. The Wikipedia page likely explains it better than I can, but in essence it involves traversing a program and storing values as expressions of of other values. This allows the user to perform constraint solving to obtain possible values for unknown variables.<br />
<br />
As an example, say you're doing a CrackMe. Instead of reversing the entire algorithm, you could work out how the stack is setup and replicate this in angr. You could then point angr at a start address and tell it to reach a certain end address - the 'success' one. Once it gets there, you have the state of the program stored as a Python object and can tell angr to solve for what the input that lead to this state - the key - was. There are plenty of examples of exactly this.<br />
<br />
This is a very powerful tool when used correctly. That's the catch though - learning angr is no simple task outside of the most basic of examples such as what I provided, and the angr documentation is very lacking at the moment. It is being worked on, however, and in my 5 week period I spent with it, the documentation was actively updated and improved. Definitely worth a look at.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">gdb</span><br />
<br />
Chances are you already have the GNU debugger installed, especially if you've ever written some C. It's quite a bare-bones debugger and contains everything you'd expect - breakpoints, memory dumps and register views etc, but the reversing experience is very clunky and annoying to navigate in my opinion - you simply need to keep your eyes on more things than gdb is willing to give in a nice view at once. It's age does mean that any information is pretty quick and easy to find, which is pretty good.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">gdb-peda</span><br />
<br />
gdb can be extended with scripts, and <a href="https://github.com/longld/peda" target="_blank" rel="noopener" class="mycode_url">peda</a> is a Python script that aims to add more on top of the gdb base. I think it's got popular enough to come as default on Kali. This adds a few commands which prove useful in reverse engineering and exploit development, and it provides extra information such as register views and a printout of the stack by default. It also has colours.<br />
<br />
That said, I don't really like gdb-peda. I personally feel as though it suffers many of the same problems as gdb, while also making the output cluttered without it being that useful (the stack printout doesn't show the entire stack of a function, for example). That said I have a couple of coworkers who swear by it, so give it a try.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">radare2</span><br />
<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;"><img src="http://img.wonderhowto.com/img/46/95/63582290276530/0/reverse-engineering-with-radare2-quick-introduction.1280x600.jpg" alt="[Image: reverse-engineering-with-radare2-quick-i...80x600.jpg]" class="mycode_img" loading="lazy" /></div></div></div>
<br />
<a href="http://radare.org/r/" target="_blank" rel="noopener" class="mycode_url">radare2</a> is a terminal-based tool that allows for both static and dynamic analysis (use the -d switch for the debugger! I've had to point this out to a couple of people). I personally really like it, and it's the best terminal option in my opinion.<br />
<br />
When used statically, the 'analyse all' command (aa) can be used to give a text output not dissimilar to that of IDA's. From there on you can rename variables and functions to your hearts content. It even has ASCII <a href="http://ctfhacker.com/assets/images/cmu/cmu1_4.png" target="_blank" rel="noopener" class="mycode_url">graphs</a>, though I personally found them a bit too awkward to use in the same manner as I would with a GUI.<br />
<br />
The debugger provides pretty much all the options you could require, with a sensible syntax. Every function is documented within the program, and this help is easy to access as well. There's also the <a href="https://www.gitbook.com/book/radare/radare2book/details" target="_blank" rel="noopener" class="mycode_url">radare2 book</a> in terms of documentation. Together these resources are very useful and have answered pretty much any question I have eventually, but this comes at the expense of it being basically the only documentation I can find. Googling questions rarely got me results.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">edb</span><br />
<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;"><img src="https://linux-cdn.softpedia.com/screenshots/EDB-Evan-s-Debugger_1.png" alt="[Image: EDB-Evan-s-Debugger_1.png]" class="mycode_img" loading="lazy" /></div></div></div>
<br />
<a href="https://github.com/eteran/edb-debugger" target="_blank" rel="noopener" class="mycode_url">edb</a> is a Qt4 (5?) app that very clearly takes a lot of inspiration from OllyDbg, right down to the keyboard shortcuts. Having used Olly all week I was going to write how edb didn't have as many features, but honestly after giving it a quick look the two seem incredibly similar. edb also comes with some decent plugins by default, such as a ROP tool. The creator himself says it is not a full release as the documentation is lacking, so keep that in mind. Otherwise this looks pretty good.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Additional Tools</span><br />
<br />
Reverse engineering isn't just about reading assembly, and there are a few more tools available to Linux users that can be of use. <br />
<br />
* 'strings' will dump all the strings in a program, which is useful for finding constants.<br />
* 'strace' provides all the system calls a binary makes.<br />
* 'xxd' can be used for hexdumps<br />
* Any good scripting language such as Python or Perl can be made to good use for printing binary constants, going quick hex calculations in the terminal, etc.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Practice</span><br />
<br />
Reverse engineering is a hard, long and very thought-intensive process a lot of the time, so practice is always good. The <a href="https://github.com/RPISEC/MBE" target="_blank" rel="noopener" class="mycode_url">RPISEC Modern Binary Exploitation</a> course materials are free online, and provide a Linux VM with gdb-peda and radare2 to try out the challenges on. You could also get the files from GitHub and run them locally if you prefer other tools.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Further Reading</span><br />
<br />
* <a href="http://wiki.yobi.be/wiki/Reverse-Engineering" target="_blank" rel="noopener" class="mycode_url">RE Wiki</a><br />
* <a href="http://beginners.re/" target="_blank" rel="noopener" class="mycode_url">Reverse Engineering for Beginners</a><br />
* <a href="https://reddit.com/r/ReverseEngineering" target="_blank" rel="noopener" class="mycode_url">/r/ReverseEngineering</a><br />
* <a href="https://reddit.com/r/malware" target="_blank" rel="noopener" class="mycode_url">/r/malware</a><br />
<br />
Thanks for reading! Feel free to PM any questions, and give any suggestions.]]></description>
			<content:encoded><![CDATA[This is a completely rewritten version of my <a href="https://nixers.net/showthread.php?tid=1863&amp;pid=16253#pid16253" target="_blank" rel="noopener" class="mycode_url">original post</a> now that I have more experience. I'm still a novice, but I've done some real malware analysis and some exercises and generally feel like the post should reflect my updated feelings.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Reverse engineering is seen as a primarily Windows-based activity. Basically all malware samples you reverse will be Windows-based, and some of the best tools such as <a href="http://ollydbg.de" target="_blank" rel="noopener" class="mycode_url">OllyDbg</a> are Windows exclusive. This post aims to look at what tools and resources are available for Linux and to evaluate them.<br />
<br />
Before that, however, I'd like to quickly mention you can get Windows virtual machine images for all manner of hypervisors free from Microsoft <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/" target="_blank" rel="noopener" class="mycode_url">here</a>. They're meant for testing your web apps on IE, but just boot it up, install all your tools and save a snapshot - what are they going to do. With that out the way, let's look at some native tools.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">IDA</span><br />
<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;"><img src="https://d2.alternativeto.net/dist/s/9408b42b-f339-e011-8d53-0200d897d049_1_full.gif?format=jpg" alt="[Image: 9408b42b-f339-e011-8d53-0200d897d049_1_f...format=jpg]" class="mycode_img" loading="lazy" /></div></div></div>
<br />
IDA (the Interactive Disassembler) from Hex-Rays has it's reputation as the best static analysis tool available, and for good reason, it's very good. It provides a very useful disassembly, graphing functions, comprehensive searching, imports and references to these imports, and much more. With this brings a ridiculous price tag which I'm sure puts it out of range of anyone here. Thankfully, Hex-Rays offer a free <a href="https://www.hex-rays.com/products/ida/support/download_freeware.shtml" target="_blank" rel="noopener" class="mycode_url">demo version</a>. It is a tad limited in what it can disassemble, and you can't save. You can get around the latter issue with virtual machine snapshots if you're so inclined.<br />
<br />
Documentation-wise, IDA's reputation means it has a strong user base and thus plenty of resources are available, including <a href="https://www.nostarch.com/idapro2.htm" target="_blank" rel="noopener" class="mycode_url">entire books</a>. I found I didn't have a clue what to do, but on reading the dedicated chapter in <a href="https://www.nostarch.com/malware" target="_blank" rel="noopener" class="mycode_url">Practical Malware Analysis</a>, I picked it up no problem and now find it very intuitive. That said, Hex-Ray's own website seems a bit sparse, a lot of the pages seem out of date. I haven't ever had to go there for technical help though.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">angr</span><br />
<br />
angr is a Python symbolic execution engine framework. Symbolic execution is a very interesting field and not one that any of the other tools here provide to my knowledge. The Wikipedia page likely explains it better than I can, but in essence it involves traversing a program and storing values as expressions of of other values. This allows the user to perform constraint solving to obtain possible values for unknown variables.<br />
<br />
As an example, say you're doing a CrackMe. Instead of reversing the entire algorithm, you could work out how the stack is setup and replicate this in angr. You could then point angr at a start address and tell it to reach a certain end address - the 'success' one. Once it gets there, you have the state of the program stored as a Python object and can tell angr to solve for what the input that lead to this state - the key - was. There are plenty of examples of exactly this.<br />
<br />
This is a very powerful tool when used correctly. That's the catch though - learning angr is no simple task outside of the most basic of examples such as what I provided, and the angr documentation is very lacking at the moment. It is being worked on, however, and in my 5 week period I spent with it, the documentation was actively updated and improved. Definitely worth a look at.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">gdb</span><br />
<br />
Chances are you already have the GNU debugger installed, especially if you've ever written some C. It's quite a bare-bones debugger and contains everything you'd expect - breakpoints, memory dumps and register views etc, but the reversing experience is very clunky and annoying to navigate in my opinion - you simply need to keep your eyes on more things than gdb is willing to give in a nice view at once. It's age does mean that any information is pretty quick and easy to find, which is pretty good.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">gdb-peda</span><br />
<br />
gdb can be extended with scripts, and <a href="https://github.com/longld/peda" target="_blank" rel="noopener" class="mycode_url">peda</a> is a Python script that aims to add more on top of the gdb base. I think it's got popular enough to come as default on Kali. This adds a few commands which prove useful in reverse engineering and exploit development, and it provides extra information such as register views and a printout of the stack by default. It also has colours.<br />
<br />
That said, I don't really like gdb-peda. I personally feel as though it suffers many of the same problems as gdb, while also making the output cluttered without it being that useful (the stack printout doesn't show the entire stack of a function, for example). That said I have a couple of coworkers who swear by it, so give it a try.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">radare2</span><br />
<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;"><img src="http://img.wonderhowto.com/img/46/95/63582290276530/0/reverse-engineering-with-radare2-quick-introduction.1280x600.jpg" alt="[Image: reverse-engineering-with-radare2-quick-i...80x600.jpg]" class="mycode_img" loading="lazy" /></div></div></div>
<br />
<a href="http://radare.org/r/" target="_blank" rel="noopener" class="mycode_url">radare2</a> is a terminal-based tool that allows for both static and dynamic analysis (use the -d switch for the debugger! I've had to point this out to a couple of people). I personally really like it, and it's the best terminal option in my opinion.<br />
<br />
When used statically, the 'analyse all' command (aa) can be used to give a text output not dissimilar to that of IDA's. From there on you can rename variables and functions to your hearts content. It even has ASCII <a href="http://ctfhacker.com/assets/images/cmu/cmu1_4.png" target="_blank" rel="noopener" class="mycode_url">graphs</a>, though I personally found them a bit too awkward to use in the same manner as I would with a GUI.<br />
<br />
The debugger provides pretty much all the options you could require, with a sensible syntax. Every function is documented within the program, and this help is easy to access as well. There's also the <a href="https://www.gitbook.com/book/radare/radare2book/details" target="_blank" rel="noopener" class="mycode_url">radare2 book</a> in terms of documentation. Together these resources are very useful and have answered pretty much any question I have eventually, but this comes at the expense of it being basically the only documentation I can find. Googling questions rarely got me results.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">edb</span><br />
<br />
<div ><div class="quotetitle"><input type="button" ckass="spoilerbutton" value="Show" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';        this.innerText = ''; this.value = 'Hide'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Show'; }" /></div><div class="quotecontent"><div style="display: none;"><img src="https://linux-cdn.softpedia.com/screenshots/EDB-Evan-s-Debugger_1.png" alt="[Image: EDB-Evan-s-Debugger_1.png]" class="mycode_img" loading="lazy" /></div></div></div>
<br />
<a href="https://github.com/eteran/edb-debugger" target="_blank" rel="noopener" class="mycode_url">edb</a> is a Qt4 (5?) app that very clearly takes a lot of inspiration from OllyDbg, right down to the keyboard shortcuts. Having used Olly all week I was going to write how edb didn't have as many features, but honestly after giving it a quick look the two seem incredibly similar. edb also comes with some decent plugins by default, such as a ROP tool. The creator himself says it is not a full release as the documentation is lacking, so keep that in mind. Otherwise this looks pretty good.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Additional Tools</span><br />
<br />
Reverse engineering isn't just about reading assembly, and there are a few more tools available to Linux users that can be of use. <br />
<br />
* 'strings' will dump all the strings in a program, which is useful for finding constants.<br />
* 'strace' provides all the system calls a binary makes.<br />
* 'xxd' can be used for hexdumps<br />
* Any good scripting language such as Python or Perl can be made to good use for printing binary constants, going quick hex calculations in the terminal, etc.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Practice</span><br />
<br />
Reverse engineering is a hard, long and very thought-intensive process a lot of the time, so practice is always good. The <a href="https://github.com/RPISEC/MBE" target="_blank" rel="noopener" class="mycode_url">RPISEC Modern Binary Exploitation</a> course materials are free online, and provide a Linux VM with gdb-peda and radare2 to try out the challenges on. You could also get the files from GitHub and run them locally if you prefer other tools.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Further Reading</span><br />
<br />
* <a href="http://wiki.yobi.be/wiki/Reverse-Engineering" target="_blank" rel="noopener" class="mycode_url">RE Wiki</a><br />
* <a href="http://beginners.re/" target="_blank" rel="noopener" class="mycode_url">Reverse Engineering for Beginners</a><br />
* <a href="https://reddit.com/r/ReverseEngineering" target="_blank" rel="noopener" class="mycode_url">/r/ReverseEngineering</a><br />
* <a href="https://reddit.com/r/malware" target="_blank" rel="noopener" class="mycode_url">/r/malware</a><br />
<br />
Thanks for reading! Feel free to PM any questions, and give any suggestions.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[A user for only one program]]></title>
			<link>https://nixers.net/Thread-A-user-for-only-one-program</link>
			<pubDate>Tue, 29 Dec 2015 04:38:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=80">venam</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-A-user-for-only-one-program</guid>
			<description><![CDATA[Hello fellow nixers,<br />
This thread is about providing access to a program as a service but securing the source code.<br />
<br />
I'm working on a project in a scripting language and I'd like to offer it as an online service. I'm not sure on how to proceed.<br />
<br />
I was thinking of providing people with a user on a VPS which only has executable permission on the program. In that case they'll be able to use it but won't be able to leak it.<br />
<br />
Jail and others might be an option but when it's only for a single executable I don't think they're well suited.<br />
<br />
Yes, this isn't GNU world...<br />
<br />
What do you think of the software as a service as a script that's executable only by the user? Any other ideas/suggestions/tips?]]></description>
			<content:encoded><![CDATA[Hello fellow nixers,<br />
This thread is about providing access to a program as a service but securing the source code.<br />
<br />
I'm working on a project in a scripting language and I'd like to offer it as an online service. I'm not sure on how to proceed.<br />
<br />
I was thinking of providing people with a user on a VPS which only has executable permission on the program. In that case they'll be able to use it but won't be able to leak it.<br />
<br />
Jail and others might be an option but when it's only for a single executable I don't think they're well suited.<br />
<br />
Yes, this isn't GNU world...<br />
<br />
What do you think of the software as a service as a script that's executable only by the user? Any other ideas/suggestions/tips?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[crypto-currency talk]]></title>
			<link>https://nixers.net/Thread-crypto-currency-talk</link>
			<pubDate>Mon, 28 Sep 2015 15:46:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=1033">xero</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-crypto-currency-talk</guid>
			<description><![CDATA[so let's talk about crypto-currency, bitcoin, alt-coins, wallets, etc.<br />
<br />
what tools/services do you use to manage your coins? do you still mine/pool? what cool stuff do you do w/ your coins?]]></description>
			<content:encoded><![CDATA[so let's talk about crypto-currency, bitcoin, alt-coins, wallets, etc.<br />
<br />
what tools/services do you use to manage your coins? do you still mine/pool? what cool stuff do you do w/ your coins?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Things you do to help secure your OS?]]></title>
			<link>https://nixers.net/Thread-Things-you-do-to-help-secure-your-OS</link>
			<pubDate>Thu, 24 Sep 2015 19:21:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://nixers.net/member.php?action=profile&uid=0">October</a>]]></dc:creator>
			<guid isPermaLink="false">https://nixers.net/Thread-Things-you-do-to-help-secure-your-OS</guid>
			<description><![CDATA[One of the things I did recently was full disk encryption. Also disabling root login with SSH.<br />
<br />
What do you do?]]></description>
			<content:encoded><![CDATA[One of the things I did recently was full disk encryption. Also disabling root login with SSH.<br />
<br />
What do you do?]]></content:encoded>
		</item>
	</channel>
</rss>