<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ave&#39;s Blog</title>
    <link>https://wf.lavatech.top/ave/</link>
    <description></description>
    <pubDate>Sun, 05 Apr 2026 05:43:37 +0000</pubDate>
    <item>
      <title>bigbigvpn: Experimenting with making an ephemeral, self-hosted, PAYG VPN service</title>
      <link>https://wf.lavatech.top/ave/bigbigvpn</link>
      <description>&lt;![CDATA[Introduction&#xA;&#xA;bigbigvpn is an ephemeral VPN self-hosting managing system. You give it API keys from your favorite VPS providers, and it allows you to get VPNs on all countries they support.&#xA;&#xA;You pick a country, hit connect, and in a minute or so it finishes setting everything up and automatically connects you to the VPN. You disconnect (or be offline for a configurable amount of time), and it automatically deletes the server.&#xA;&#xA;You get the best of both worlds, with very low prices, dynamic IPs, large amount of locations AND the comfort of self-hosting.&#xA;&#xA;!--more--&#xA;&#xA;It mostly started as a &#34;would be nice&#34; and then quickly turned into a quick 6 hour PoC. I stopped working on it for a while, but picked it back up to add more features as I ended up using it more and more, and I finally feel like I&#39;m comfortable sharing what I accomplished so far alongside some thoughts about the whole concept.&#xA;&#xA;I was supposed to post this 2 weeks ago (even said so on twitter), but life happened, and I decided to delay the PoC until it got to a state where it represented the whole potential, and that&#39;s the state now.&#xA;&#xA;Demos&#xA;&#xA;Please note that this is just a PoC at the moment, and while it works fairly well, it&#39;s not as polished as I&#39;d like:&#xA;&#xA;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube-nocookie.com/embed/0Rjc8z1QdkI&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen/iframe&#xA;&#xA;As a note, bigbigvpn can currently have providers configured with a weight value. While both DigitalOcean and Hetzner provide servers in Germany (and I have them both configured), in the video it automatically picked Hetzner there as I had a higher weight set on it.&#xA;&#xA;Post release edit: My very cool friends Mary and Linuxgemini had some ideas and helped implement them, and now server spin up takes significantly less, down to ~30-40s on hetzner.&#xA;&#xA;(Also available as some asciinema recordings: Connecting to a server on Hetzner, Connecting to a server on scaleway, Getting region list)&#xA;&#xA;Conclusions from the &#34;experiment&#34;&#xA;&#xA;(Please do note that I have a conflict of interest as the developer of the project.)&#xA;&#xA;I do think that the idea of ephemeral VPN servers is fairly viable as long as you&#39;re willing to wait 60-90s for a server to spin up, are okay with the fact that there&#39;s little to no tooling or clients right now, and most importantly, need the benefits it provides.&#xA;&#xA;Many VPS providers offer hourly pricing, and most of them (that I&#39;ve used) just charge for one hour when you initially spin them up, though there&#39;s some exceptions (like Scaleway). This makes them quite viable for short term use.&#xA;&#xA;There are some stuff that can be improved from a technical perspective that I intend to address (see the next section), but even with those covered, several shortcomings remain:&#xA;&#xA;Your IP is still not shared with others, though you&#39;re not on the same one all the time. This is a step up from traditional self-hosting.&#xA;Some VPS providers (Hetzner etc) don&#39;t give you a random IP on every server creation, but seem to effectively reserve an IP to hand out back to your next server creation for a while after you delete it. This is good if you accidentally fat fingered the prod server away, and bad if you&#39;re looking for a VPN service with dynamic IPs.&#xA;Many commercial VPN services have tons of locations, and the 3 VPS providers bigbigvpn currently supports add up to &#34;just&#34; 11 countries. Even if more providers were added, it might not be possible to get to a similar number of countries.&#xA;Compared to both commercial VPN services and self-hosting, payments can get very segmented depending on how many providers you enable.&#xA;Compared to commercial VPN services, registering is a slower process, and in many cases can involve a KYC process (Hetzner required me to send over my passport several years ago, and Scaleway is slowly rolling out ID verification too). This may not be desirable to all, but it&#39;s a compromise I&#39;m okay with, the saying does go &#34;Be gay, be law abiding&#34; after all.&#xA;&#xA;Going forward&#xA;&#xA;Overall, bigbigvpn was intended to be quick experiment that I&#39;d stop thinking about after a few hours, but after I talked about it with friends, quite a few of them expressed that it may be actually useful, and as such I do intend to continue working on it. It&#39;s quite fun anyways :)&#xA;&#xA;Right now, bigbigvpn code is not something I&#39;m ready to publish. While most of the server related bits are fairly clean (and as such will be carried over), web bits were fairly rushed, and I still make breaking changes to the API on a regular basis.&#xA;&#xA;I have significant changes in mind and will do a complete redesign of many parts of it, and intend to open source the proper implementation early on in the development cycle.&#xA;&#xA;Some of the changes I want to make include:&#xA;&#xA;Multiple device support per server/location, so you can connect from both your phone and PC at the same time, or even add your friend to your current VPN box.&#xA;Multiple user support, so you don&#39;t have to also pay a server to manage the server-side code if you don&#39;t want to. We&#39;ll probably host an instance on lavatech too.&#xA;Better accounting for pricing schemes (for example, Scaleway charges for first 3 hours on DEV1-S spinup, so it doesn&#39;t make sense to delete server until that time)&#xA;More clients, most notably mobile clients.&#xA;Support for more providers, or perhaps even just terraform.&#xA;Preparing images and just creating VPSes from those to have faster start times. I also intend to experiment with optimizing other parts of the process to minimize the spinup time.&#xA;&#xA;I&#39;ll likely be publishing the repositories under https://gitlab.com/bigbiglarge and if there&#39;s enough interest I may post more updates here in my blog.&#xA;&#xA;Thanks for reading this post! I&#39;ve also posted some parts I cut out from this blog post (like how we got the idea, why I want this etc) over in my side blog in case you want to read more.&#xA;&#xA;(tag: #bigbigvpn)]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="introduction" id="introduction">Introduction</h2>

<p>bigbigvpn is an ephemeral VPN self-hosting managing system. You give it API keys from your favorite VPS providers, and it allows you to get VPNs on all countries they support.</p>

<p>You pick a country, hit connect, and in a minute or so it finishes setting everything up and automatically connects you to the VPN. You disconnect (or be offline for a configurable amount of time), and it automatically deletes the server.</p>

<p>You get the best of both worlds, with very low prices, dynamic IPs, large amount of locations AND the comfort of self-hosting.</p>



<p>It mostly started as a “would be nice” and then quickly turned into a quick 6 hour PoC. I stopped working on it for a while, but picked it back up to add more features as I ended up using it more and more, and I finally feel like I&#39;m comfortable sharing what I accomplished so far alongside some thoughts about the whole concept.</p>

<p>I was supposed to post this 2 weeks ago (<a href="https://twitter.com/warnvod/status/1355711728001175563" rel="nofollow">even said so on twitter</a>), but life happened, and I decided to delay the PoC until it got to a state where it represented the whole potential, and that&#39;s the state now.</p>

<h2 id="demos" id="demos">Demos</h2>

<p>Please note that this is just a PoC at the moment, and while it works fairly well, it&#39;s not as polished as I&#39;d like:</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/0Rjc8z1QdkI" frameborder="0" allowfullscreen=""></iframe>

<p>As a note, bigbigvpn can currently have providers configured with a weight value. While both DigitalOcean and Hetzner provide servers in Germany (and I have them both configured), in the video it automatically picked Hetzner there as I had a higher weight set on it.</p>

<p><strong>Post release edit:</strong> My very cool friends Mary and Linuxgemini had some ideas and helped implement them, and now server spin up takes significantly less, down to ~30-40s on hetzner.</p>

<p>(Also available as some asciinema recordings: <a href="https://asciinema.org/a/xJl3G27Vv2SKutE2jkr3TeN3Z" rel="nofollow">Connecting to a server on Hetzner</a>, <a href="https://asciinema.org/a/kfVzhnCJ2ro2G8hYHQeIAeKGl" rel="nofollow">Connecting to a server on scaleway</a>, <a href="https://asciinema.org/a/mXo9wdRC1C49njgCW3SONLQJc" rel="nofollow">Getting region list</a>)</p>

<h2 id="conclusions-from-the-experiment" id="conclusions-from-the-experiment">Conclusions from the “experiment”</h2>

<p>(Please do note that I have a conflict of interest as the developer of the project.)</p>

<p>I do think that the idea of ephemeral VPN servers is fairly viable as long as you&#39;re willing to wait 60-90s for a server to spin up, are okay with the fact that there&#39;s little to no tooling or clients right now, and most importantly, need the benefits it provides.</p>

<p>Many VPS providers offer hourly pricing, and most of them (that I&#39;ve used) just charge for one hour when you initially spin them up, though there&#39;s some exceptions (like Scaleway). This makes them quite viable for short term use.</p>

<p>There are some stuff that can be improved from a technical perspective that I intend to address (see the next section), but even with those covered, several shortcomings remain:</p>
<ul><li>Your IP is still not shared with others, though you&#39;re not on the same one all the time. This is a step up from traditional self-hosting.</li>
<li>Some VPS providers (Hetzner etc) don&#39;t give you a random IP on every server creation, but seem to effectively reserve an IP to hand out back to your next server creation for a while after you delete it. This is good if you accidentally fat fingered the prod server away, and bad if you&#39;re looking for a VPN service with dynamic IPs.</li>
<li>Many commercial VPN services have tons of locations, and the 3 VPS providers bigbigvpn currently supports add up to “just” 11 countries. Even if more providers were added, it might not be possible to get to a similar number of countries.</li>
<li>Compared to both commercial VPN services and self-hosting, payments can get very segmented depending on how many providers you enable.</li>
<li>Compared to commercial VPN services, registering is a slower process, and in many cases can involve a KYC process (Hetzner required me to send over my passport several years ago, and Scaleway is slowly rolling out ID verification too). This may not be desirable to all, but it&#39;s a compromise I&#39;m okay with, the saying does go “Be gay, be law abiding” after all.</li></ul>

<h2 id="going-forward" id="going-forward">Going forward</h2>

<p>Overall, bigbigvpn was intended to be quick experiment that I&#39;d stop thinking about after a few hours, but after I talked about it with friends, quite a few of them expressed that it may be actually useful, and as such I do intend to continue working on it. It&#39;s quite fun anyways :)</p>

<p>Right now, bigbigvpn code is not something I&#39;m ready to publish. While most of the server related bits are fairly clean (and as such will be carried over), web bits were fairly rushed, and I still make breaking changes to the API on a regular basis.</p>

<p>I have significant changes in mind and will do a complete redesign of many parts of it, and intend to open source the proper implementation early on in the development cycle.</p>

<p>Some of the changes I want to make include:</p>
<ul><li>Multiple device support per server/location, so you can connect from both your phone and PC at the same time, or even add your friend to your current VPN box.</li>
<li>Multiple user support, so you don&#39;t have to also pay a server to manage the server-side code if you don&#39;t want to. We&#39;ll probably host an instance on <a href="https://lavate.ch" rel="nofollow">lavatech</a> too.</li>
<li>Better accounting for pricing schemes (for example, Scaleway charges for first 3 hours on DEV1-S spinup, so it doesn&#39;t make sense to delete server until that time)</li>
<li>More clients, most notably mobile clients.</li>
<li>Support for more providers, or perhaps even just terraform.</li>
<li>Preparing images and just creating VPSes from those to have faster start times. I also intend to experiment with optimizing other parts of the process to minimize the spinup time.</li></ul>

<p>I&#39;ll likely be publishing the repositories under <a href="https://gitlab.com/bigbiglarge" rel="nofollow">https://gitlab.com/bigbiglarge</a> and if there&#39;s enough interest I may post more updates here in my blog.</p>

<p>Thanks for reading this post! I&#39;ve also posted some parts I cut out from this blog post (like how we got the idea, why I want this etc) <a href="https://wf.lavatech.top/ave-but-random/bits-i-cut-out-from-the-main-bigbigvpn-post" rel="nofollow">over in my side blog</a> in case you want to read more.</p>

<p>(tag: <a href="/ave/tag:bigbigvpn" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">bigbigvpn</span></a>)</p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/bigbigvpn</guid>
      <pubDate>Sun, 31 Jan 2021 04:39:40 +0000</pubDate>
    </item>
    <item>
      <title>Verifying the Turkish ID validity the hard (or easy?) way</title>
      <link>https://wf.lavatech.top/ave/tckk-verification</link>
      <description>&lt;![CDATA[How does a Turkish ID work anyways&#xA;&#xA;Official image of the TCKK&#xA;&#xA;The Turkish ID Card, aka TCKK, is a smartcard, quite an interesting one actually. It has two separate chips for contact and contactless. Both run a locally developed smartcard OS (AKİS/&#34;Akıllı Kart İşletim Sistemi&#34;, lit &#34;Smart Card Operating System&#34;). It can theoretically use a locally developed IC (UKTÜM), but none of my IDs so far had it.&#xA;&#xA;!--more--&#xA;&#xA;The contactless interface&#xA;&#xA;On the contactless (NFC) interface, it&#39;s an ISO/IEC 14443A based ICAO 9303-compliant eMRTD (Electronic Machine Readable Travel Document). I&#39;ve done quite a bit of work recently to add eMRTD support to Proxmark3 and it can read my ID perfectly, but that&#39;s a blog post for another day.&#xA;&#xA;The contact interface&#xA;&#xA;On the contact interface, however, it&#39;s a completely different beast: It&#39;s based on a number of Turkish Standards \[1\], and it&#39;s seemingly quite secure.&#xA;&#xA;It has various applets like ID verification, e-signature (both by your identity, and your dedicated e-imza cert, though latter wasn&#39;t deployed yet I believe) and emergency health information. Sadly, however, it&#39;s not well documented publicly (other than some exceptions \[4\], and all these cool features are simply... unused.&#xA;&#xA;Dumping the cert&#xA;&#xA;I&#39;ve dumped my first TCKK cert on my first ever TCKK back in 2018 by sniffing USB communications\[7\], and wrote a tool to automate it back in 2019 when I renewed my ID to get my image updated, and finally got to use it again when I got a new ID in 2020 after I lost my wallet in Leipzig after 36c3 \[2\].&#xA;&#xA;Anyhow, today I open sourced that script and another one. I&#39;ll probably be publishing more over there in the future, especially as I understand ISO/IEC 7816-4 and ASN.1 better after implementing ICAO 9303, so I will simply go over using that.&#xA;&#xA;This isn&#39;t intended to be a &#34;TCKK verification for the masses&#34; post, so I&#39;ll skip through the simple details.&#xA;&#xA;Clone TCKKTools, install python3.6+, install dependencies, plug in your favorite contact smart card reader (I use an ACS ACR39U), put in your ID with the chip facing up. You&#39;ll likely also want to install openssl as we&#39;ll be using that for converting the certificate and verifying it.&#xA;&#xA;Run python3 dumpcert.py, and it should dump your certificate as a file called cert.der:&#xA;&#xA;Cert dump procedure and the dumped der file shown on a terminal&#xA;&#xA;You can convert the cert from der to pem with openssl x509 -in cert.der -inform der -out cert.pem.&#xA;&#xA;You can view certificate details with openssl x509 -in cert.pem -text.&#xA;&#xA;Verifying the cert \[3\]&#xA;&#xA;First off, ensure that you converted the certificate to pem format and that you have openssl installed.&#xA;&#xA;Secondly, let&#39;s grab the required files. Download the following URLs (do be aware that the .crl url is fairly big, around 350MB):&#xA;&#xA;http://depo.tckk.gov.tr/kok/kokshs.v1.crt&#xA;http://depo.tckk.gov.tr/kyshs/kyshs.v1.crt&#xA;http://depo.tckk.gov.tr/kyshs/kyshs.v1.crl&#xA;&#xA;So... there&#39;s an odd thing where kokshs is a der and kyshs is a pem file (where kyshs lacks a newline on the file ending), so the procedure is a little odd. In any case...&#xA;&#xA;Convert CRL to a PEM&#xA;openssl crl -inform DER -in kyshs.v1.crl -outform PEM -out crl.pem&#xA;Add a newline to kyshs.v1.crt&#xA;echo &#34;&#34;     kyshs.v1.crt&#xA;Convert the kokshs.v1.crt file to a PEM&#xA;openssl x509 -in kokshs.v1.crt -inform der -out kok.pem&#xA;Join intermediary cert with root cert to create a cert chain&#xA;cat kyshs.v1.crt kok.pem   chain.pem&#xA;Join chain and CRL into a single CRL chain&#xA;cat chain.pem crl.pem   crlchain.pem&#xA;&#xA;Additionally, you may have issues verifying the certificate as the CRL at the time of writing has expired (roughly 2 weeks ago), so we&#39;ll be skipping CRL expiry checks. If this is no longer the case in the future (see \[5\] for more info on how you can check), drop the -nochecktime. See \[6\] for more info on what happens if you run without that.&#xA;&#xA;To verify the certificate, run this command:&#xA;&#xA;openssl verify -nochecktime -crlcheck -CAfile crlchain.pem cert.pem&#xA;&#xA;It should take a while, but it will go through the whole CRL and verify your TCKK cert&#39;s validity.&#xA;&#xA;If you see a message like this, then your TCKK certificate is valid:&#xA;&#xA;cert.pem: OK&#xA;&#xA;However, if you see one like this, then it isn&#39;t:&#xA;&#xA;C = TR, serialNumber = 1234568902, CN = ACAR HASAN&#xA;error 23 at 0 depth lookup: certificate revoked&#xA;error cert2017.pem: verification failed&#xA;&#xA;Conclusion&#xA;&#xA;I&#39;ve been curious if my old ID certificates that I was keeping around were in the long, long CRL that govt publishes, but only got around to checking today. It was nice to see that they were indeed in there.&#xA;&#xA;I&#39;ve also been meaning to publish some of the TCKK research I made, and publishing this and the two scripts over at TCKKTools feels good. I look forward to publishing more stuff.&#xA;&#xA;Disclosure&#xA;&#xA;This is just one of the many ways to verify the identity of someone using the TCKK. This may not be a legally acceptable way of verifying someone&#39;s ID for actual commercial purposes (I simply haven&#39;t checked them).&#xA;&#xA;Notes&#xA;&#xA;1: TS 13582, TS 13583, TS 13584, TS 13585, TS 13678, TS 13679, TS 13680, TS 13681.&#xA;&#xA;2: Funny story actually. I got through the whole event without losing anything, then dropped my wallet in Leipzig Hbf at an Aldi. Almost missed my flight searching it. Called my banks on Sbahn to cancel my cards. When I got to the airport there was a &#34;Final Call&#34; for me, Turkish Airlines staff warned me that I was late but that they&#39;d let me through, and airport staff practically pushed me to the front of the passport line. Border control dude still took his sweet time counting the amount of days I spent in Germany before finally letting me through. I was the last to board. I ended up getting my NVI date while taxiing to gate on Istanbul Airport. But in the end everything ended up working out and I ended up getting everything reissued, which is okay I guess.&#xA;&#xA;3: Huge shoutouts to this article on raymii.org as I based the CRL verification on that.&#xA;&#xA;4: There&#39;s apparently a person called Furkan Duman who&#39;s working on a company developing ID verification technologies who&#39;s posted some tidbits in Turkish on his blog, I didn&#39;t get a chance to read stuff very much so far, but they look quite interesting: https://furkanduman.com/blog/category/tckk&#xA;&#xA;5: Run openssl crl -in crl.pem -text -noout | grep &#34;Next Update&#34;. You can safely Ctrl-c after the first output, otherwise it&#39;ll go through the whole file for no good reason. If the shown date is past current date, then the CRL has expired.&#xA;&#xA;6: Running without -nochecktime leads to a rather confusing output from openssl. You still get the same output when feeding it invalid certificates, but you also get error 12 at 0 depth lookup: CRL has expired. However, on valid certificates, while you don&#39;t get error 23 at 0 depth lookup: certificate revoked like you do on invalids, you still get the CRL has expired line, and that leads to a verification failure, which ends up being a little confusing.&#xA;&#xA;7: Huge shoutouts to linuxgemini for informing me this was possible (and overall sparking my interest in smartcards and RFID tech) and showing me how to do it on a cold election day in Ankara when I flew back to vote.]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="how-does-a-turkish-id-work-anyways" id="how-does-a-turkish-id-work-anyways">How does a Turkish ID work anyways</h2>

<p><img src="https://elixi.re/t/lxbcaw8uq.png" alt="Official image of the TCKK"></p>

<p>The Turkish ID Card, aka TCKK, is a smartcard, quite an interesting one actually. It has two separate chips for contact and contactless. Both run a locally developed smartcard OS (AKİS/“Akıllı Kart İşletim Sistemi”, lit “Smart Card Operating System”). It can theoretically use a locally developed IC (UKTÜM), but none of my IDs so far had it.</p>



<h3 id="the-contactless-interface" id="the-contactless-interface">The contactless interface</h3>

<p>On the contactless (NFC) interface, it&#39;s an ISO/IEC 14443A based ICAO 9303-compliant eMRTD (Electronic Machine Readable Travel Document). I&#39;ve done quite a bit of work recently to add eMRTD support to Proxmark3 and it can read my ID perfectly, but that&#39;s a blog post for another day.</p>

<h3 id="the-contact-interface" id="the-contact-interface">The contact interface</h3>

<p>On the contact interface, however, it&#39;s a completely different beast: It&#39;s based on a number of Turkish Standards [<a href="#notes" rel="nofollow">1</a>], and it&#39;s seemingly quite secure.</p>

<p>It has various applets like ID verification, e-signature (both by your identity, and your dedicated e-imza cert, though latter wasn&#39;t deployed yet I believe) and emergency health information. Sadly, however, it&#39;s not well documented publicly (other than some exceptions [<a href="#notes" rel="nofollow">4</a>], and all these cool features are simply... unused.</p>

<h2 id="dumping-the-cert" id="dumping-the-cert">Dumping the cert</h2>

<p>I&#39;ve dumped my first TCKK cert on my first ever TCKK back in 2018 by sniffing USB communications[<a href="#notes" rel="nofollow">7</a>], and wrote a tool to automate it back in 2019 when I renewed my ID to get my image updated, and finally got to use it again when I got a new ID in 2020 after I lost my wallet in Leipzig after 36c3 [<a href="#notes" rel="nofollow">2</a>].</p>

<p>Anyhow, today I open sourced that script and another one. I&#39;ll probably be publishing more over there in the future, especially as I understand ISO/IEC 7816-4 and ASN.1 better after implementing ICAO 9303, so I will simply go over using that.</p>

<p>This isn&#39;t intended to be a “TCKK verification for the masses” post, so I&#39;ll skip through the simple details.</p>

<p>Clone <a href="https://gitlab.com/a/tckktools" rel="nofollow">TCKKTools</a>, install python3.6+, install dependencies, plug in your favorite contact smart card reader (I use an ACS ACR39U), put in your ID with the chip facing up. You&#39;ll likely also want to install <code>openssl</code> as we&#39;ll be using that for converting the certificate and verifying it.</p>

<p>Run <code>python3 dumpcert.py</code>, and it should dump your certificate as a file called <code>cert.der</code>:</p>

<p><img src="https://elixi.re/i/bj97yxqs.png" alt="Cert dump procedure and the dumped der file shown on a terminal"></p>

<p>You can convert the cert from der to pem with <code>openssl x509 -in cert.der -inform der -out cert.pem</code>.</p>

<p>You can view certificate details with <code>openssl x509 -in cert.pem -text</code>.</p>

<h2 id="verifying-the-cert-3-notes" id="verifying-the-cert-3-notes">Verifying the cert [<a href="#notes" rel="nofollow">3</a>]</h2>

<p>First off, ensure that you converted the certificate to <code>pem</code> format and that you have openssl installed.</p>

<p>Secondly, let&#39;s grab the required files. Download the following URLs (do be aware that the .crl url is fairly big, around 350MB):</p>

<pre><code>http://depo.tckk.gov.tr/kok/kokshs.v1.crt
http://depo.tckk.gov.tr/kyshs/kyshs.v1.crt
http://depo.tckk.gov.tr/kyshs/kyshs.v1.crl
</code></pre>

<p>So... there&#39;s an odd thing where kokshs is a der and kyshs is a pem file (where kyshs lacks a newline on the file ending), so the procedure is a little odd. In any case...</p>

<pre><code># Convert CRL to a PEM
openssl crl -inform DER -in kyshs.v1.crl -outform PEM -out crl.pem
# Add a newline to kyshs.v1.crt
echo &#34;&#34; &gt;&gt; kyshs.v1.crt
# Convert the kokshs.v1.crt file to a PEM
openssl x509 -in kokshs.v1.crt -inform der -out kok.pem
# Join intermediary cert with root cert to create a cert chain
cat kyshs.v1.crt kok.pem &gt; chain.pem
# Join chain and CRL into a single CRL chain
cat chain.pem crl.pem &gt; crl_chain.pem
</code></pre>

<p>Additionally, you may have issues verifying the certificate as the CRL at the time of writing has expired (<a href="https://elixi.re/i/2e7esaki.png" rel="nofollow">roughly 2 weeks ago</a>), so we&#39;ll be skipping CRL expiry checks. If this is no longer the case in the future (see [<a href="#notes" rel="nofollow">5</a>] for more info on how you can check), drop the <code>-no_check_time</code>. See [<a href="#notes" rel="nofollow">6</a>] for more info on what happens if you run without that.</p>

<p>To verify the certificate, run this command:</p>

<pre><code>openssl verify -no_check_time -crl_check -CAfile crl_chain.pem cert.pem
</code></pre>

<p>It should take a while, but it will go through the whole CRL and verify your TCKK cert&#39;s validity.</p>

<p>If you see a message like this, then your TCKK certificate is valid:</p>

<pre><code>cert.pem: OK
</code></pre>

<p>However, if you see one like this, then it isn&#39;t:</p>

<pre><code>C = TR, serialNumber = 1234568902, CN = ACAR HASAN
error 23 at 0 depth lookup: certificate revoked
error cert2017.pem: verification failed
</code></pre>

<h2 id="conclusion" id="conclusion">Conclusion</h2>

<p>I&#39;ve been curious if my old ID certificates that I was keeping around were in the long, <em>long</em> CRL that govt publishes, but only got around to checking today. It was nice to see that they were indeed in there.</p>

<p>I&#39;ve also been meaning to publish some of the TCKK research I made, and publishing this and the two scripts over at TCKKTools feels good. I look forward to publishing more stuff.</p>

<h2 id="disclosure" id="disclosure">Disclosure</h2>

<p>This is just one of the many ways to verify the identity of someone using the TCKK. This may not be a legally acceptable way of verifying someone&#39;s ID for actual commercial purposes (I simply haven&#39;t checked them).</p>

<h2 id="notes" id="notes">Notes</h2>

<p><strong><a href="#the-contact-interface" rel="nofollow">1</a>:</strong> TS 13582, TS 13583, TS 13584, TS 13585, TS 13678, TS 13679, TS 13680, TS 13681.</p>

<p><strong><a href="#dumping-the-cert" rel="nofollow">2</a>:</strong> Funny story actually. I got through the whole event without losing anything, then dropped my wallet in Leipzig Hbf at an Aldi. Almost missed my flight searching it. Called my banks on Sbahn to cancel my cards. When I got to the airport there was a “Final Call” for me, Turkish Airlines staff warned me that I was late but that they&#39;d let me through, and airport staff practically pushed me to the front of the passport line. Border control dude still took his sweet time counting the amount of days I spent in Germany before finally letting me through. I was the last to board. I ended up getting my NVI date while taxiing to gate on Istanbul Airport. But in the end everything ended up working out and I ended up getting everything reissued, which is okay I guess.</p>

<p><strong><a href="#verifying-the-cert" rel="nofollow">3</a>:</strong> Huge shoutouts to <a href="https://raymii.org/s/articles/OpenSSL_manually_verify_a_certificate_against_a_CRL.html" rel="nofollow">this article on raymii.org</a> as I based the CRL verification on that.</p>

<p><strong><a href="#the-contact-interface" rel="nofollow">4</a>:</strong> There&#39;s apparently a person called Furkan Duman who&#39;s working on a company developing ID verification technologies who&#39;s posted some tidbits in Turkish on his blog, I didn&#39;t get a chance to read stuff very much so far, but they look quite interesting: <a href="https://furkanduman.com/blog/category/tckk" rel="nofollow">https://furkanduman.com/blog/category/tckk</a></p>

<p><strong><a href="#verifying-the-cert" rel="nofollow">5</a>:</strong> Run <code>openssl crl -in crl.pem -text -noout | grep &#34;Next Update&#34;</code>. You can safely Ctrl-c after the first output, otherwise it&#39;ll go through the whole file for no good reason. If the shown date is past current date, then the CRL has expired.</p>

<p><strong><a href="#verifying-the-cert" rel="nofollow">6</a>:</strong> Running without <code>-no_check_time</code> leads to a rather confusing output from openssl. You still get the same output when feeding it invalid certificates, but you also get <code>error 12 at 0 depth lookup: CRL has expired</code>. However, on valid certificates, while you don&#39;t get <code>error 23 at 0 depth lookup: certificate revoked</code> like you do on invalids, you still get the CRL has expired line, and that leads to a verification failure, which ends up being a little confusing.</p>

<p><strong><a href="#dumping-the-cert" rel="nofollow">7</a>:</strong> Huge shoutouts to linuxgemini for informing me this was possible (and overall sparking my interest in smartcards and RFID tech) and showing me how to do it on a cold election day in Ankara when I flew back to vote.</p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/tckk-verification</guid>
      <pubDate>Sun, 20 Dec 2020 21:59:27 +0000</pubDate>
    </item>
    <item>
      <title>USB modem hell: Getting a fallback network for $5</title>
      <link>https://wf.lavatech.top/ave/usb-modem-hell-getting-a-fallback-network-for-5</link>
      <description>&lt;![CDATA[aka &#34;How to use a ZTE MF110/MF627/MF636/MF190 on Linux in 2020&#34;&#xA;&#xA;I was looking at random cheap networking stuff on the Turkish ebay clone the other day when I stumbled upon the good old 3G modems.&#xA;&#xA;I always wanted one, and at some point one entered the house, but I never got a chance to use it, and I no longer am on good terms with the person who owns it now. I also ended up being given one by my grandparents several years ago, but I managed to break the sim slot before I could test it by storing a sim converter in it without the actual sim, which got stuck on the pins, and the attempts to pull it out led to the pins being destroyed. Ouch.&#xA;&#xA;So, after all this time, I wanted to finally give it a shot, and they were being sold for as cheap as $3.5 + shipment, so I ordered the first one I saw, which was an &#34;Avea Jet&#34; model. It arrived this morning in a bootleg nutella box, and I had to pay like $2 to shipment. Yup. Can&#39;t make that shit up.&#xA;&#xA;!--more--&#xA;&#xA;But yeah, the modem was inside that, wrapped in bubble wrap. I quickly opened it up, grabbed a SIM that has an actual data plan, found an appropriate SIM converter, stuffed it in:&#xA;&#xA;So... I plugged it into my computer... and it didn&#39;t show up as a modem on neither modemmanager when I ran mmcli --list-modems, nor on dmesg:&#xA;&#xA;Uh oh.&#xA;&#xA;Back when my grandparents gave me their old one years ago, I didn&#39;t need to install drivers or do any special config for it to be detected, but I was running Ubuntu 16.04 back then.&#xA;&#xA;This suddenly got me worried. What if the relevant kernel module was dropped since then? What if arch doesn&#39;t build it in? What if this device never got supported? What if the modem itself was broken? What if the modem is carrier locked (I was using a Turkcell SIM)?&#xA;&#xA;I plugged it into the only Windows computer to try and figure out stuff, but that left me with more concerns, especially about the modem itself being broken, as the CD drive just decided to not load after some time, and as I couldn&#39;t see the modem in device manager.&#xA;&#xA;So I started searching, and stumbled upon this arch wiki page, and it&#39;s pretty much the basis of this blog post.&#xA;&#xA;I already had many of the software needed such as modemmanager, usbutils and mobile-broadband-provider-info, but turns out I also needed usbmodeswitch and also optionally nm-connection-editor for easy configuration of the settings (nmtui doesn&#39;t support it), and modem-manager-gui if you want a GUI for SMS.&#xA;&#xA;The whole thing boiled down to:&#xA;&#xA;pacman -S mobile-broadband-provider-info modemmanager usbutils usbmodeswitch --needed&#xA;# pacman -S nm-connection-editor modem-manager-gui --needed  # these are optional&#xA;systemctl enable --now ModemManager&#xA;&#xA;But even after that, I was a little scared. usb_modeswitch --help talked about modes for huawei, cisco and many other manufacturers, but ZTE was missing from that list:&#xA;&#xA;I sighed. I took a deep breath, and I re-plugged the modem and... what do you know, it showed up as a modem on dmesg and mmcli:&#xA;&#xA;First off I opened modem-manager-gui, and sent a text to my girlfriend, who was able to confirm that she got it:&#xA;&#xA;Being relieved that there&#39;s no apparent SIM lock or any other modem issues, I booted up nm-connection-editor, hit +, picked Mobile Broadband, and followed the wizard:&#xA;&#xA;After saving, I finally booted up nmtui, disconnected from wifi and connected to the mobile broadband network:&#xA;&#xA;And voila. I&#39;m now writing this blog post while on a mobile network.&#xA;&#xA;It&#39;s not fast by any means, but at least I can fall back to this in an emergency:&#xA;&#xA;We&#39;re also planning having a similar setup on a colo with an IoT SIM so that we can still access the network if anything goes wrong.&#xA;&#xA;That&#39;s all! Hope you enjoyed this blog post.&#xA;&#xA;Optional reading after this post: A retrospective of 3G routers in Turkey]]&gt;</description>
      <content:encoded><![CDATA[<p><em>aka “How to use a ZTE MF110/MF627/MF636/MF190 on Linux in 2020”</em></p>

<p>I was looking at random cheap networking stuff on the Turkish ebay clone the other day when I stumbled upon the good old 3G modems.</p>

<p>I always wanted one, and at some point one entered the house, but I never got a chance to use it, and I no longer am on good terms with the person who owns it now. I also ended up being given one by my grandparents several years ago, but I managed to break the sim slot before I could test it by storing a sim converter in it without the actual sim, which got stuck on the pins, and the attempts to pull it out led to the pins being destroyed. Ouch.</p>

<p>So, after all this time, I wanted to finally give it a shot, and they were being sold for as cheap as $3.5 + shipment, so I ordered the first one I saw, which was an “Avea Jet” model. It arrived this morning in a bootleg nutella box, and I had to pay like $2 to shipment. Yup. Can&#39;t make that shit up.</p>



<p><img src="https://lasagna.cat/t/ltxhvb8z4.png" alt=""></p>

<p>But yeah, the modem was inside that, wrapped in bubble wrap. I quickly opened it up, grabbed a SIM that has an actual data plan, found an appropriate SIM converter, stuffed it in:</p>

<p><img src="https://lasagna.cat/t/l3yphitj6.png" alt=""></p>

<p>So... I plugged it into my computer... and it didn&#39;t show up as a modem on neither modemmanager when I ran <code>mmcli --list-modems</code>, nor on dmesg:</p>

<p><img src="https://lasagna.cat/t/l4en04ou3.png" alt=""></p>

<p>Uh oh.</p>

<p>Back when my grandparents gave me their old one years ago, I didn&#39;t need to install drivers or do any special config for it to be detected, but I was running Ubuntu 16.04 back then.</p>

<p>This suddenly got me worried. What if the relevant kernel module was dropped since then? What if arch doesn&#39;t build it in? What if this device never got supported? What if the modem itself was broken? What if the modem is carrier locked (I was using a Turkcell SIM)?</p>

<p>I plugged it into the only Windows computer to try and figure out stuff, but that left me with more concerns, especially about the modem itself being broken, as the CD drive just decided to not load after some time, and as I couldn&#39;t see the modem in device manager.</p>

<p>So I started searching, and stumbled upon <a href="https://wiki.archlinux.org/index.php/USB_3G_Modem" rel="nofollow">this arch wiki page</a>, and it&#39;s pretty much the basis of this blog post.</p>

<p>I already had many of the software needed such as <code>modemmanager</code>, <code>usbutils</code> and <code>mobile-broadband-provider-info</code>, but turns out I also needed <code>usb_modeswitch</code> and also optionally <code>nm-connection-editor</code> for easy configuration of the settings (nmtui doesn&#39;t support it), and <code>modem-manager-gui</code> if you want a GUI for SMS.</p>

<p>The whole thing boiled down to:</p>

<pre><code># pacman -S mobile-broadband-provider-info modemmanager usbutils usb_modeswitch --needed
# pacman -S nm-connection-editor modem-manager-gui --needed  # these are optional
# systemctl enable --now ModemManager
</code></pre>

<p>But even after that, I was a little scared. <code>usb_modeswitch --help</code> talked about modes for huawei, cisco and many other manufacturers, but ZTE was missing from that list:</p>

<p><img src="https://lasagna.cat/t/ln6k2jwim.png" alt=""></p>

<p>I sighed. I took a deep breath, and I re-plugged the modem and... what do you know, it showed up as a modem on dmesg and mmcli:</p>

<p><img src="https://lasagna.cat/t/l3wjay5kc.png" alt=""></p>

<p><img src="https://lasagna.cat/t/ljsvjvmkd.png" alt=""></p>

<p>First off I opened modem-manager-gui, and sent a text to my girlfriend, who was able to confirm that she got it:</p>

<p><img src="https://lasagna.cat/t/lt241p5v6.png" alt=""></p>

<p>Being relieved that there&#39;s no apparent SIM lock or any other modem issues, I booted up <code>nm-connection-editor</code>, hit <code>+</code>, picked <code>Mobile Broadband</code>, and followed the wizard:</p>

<p><img src="https://lasagna.cat/t/leorobspj.png" alt=""></p>

<p><img src="https://lasagna.cat/t/l0liqn7cg.png" alt=""></p>

<p><img src="https://lasagna.cat/t/lu2cq29wt.png" alt=""></p>

<p><img src="https://lasagna.cat/t/lizqje0us.png" alt=""></p>

<p><img src="https://lasagna.cat/t/lolt3nc3e.png" alt=""></p>

<p><img src="https://lasagna.cat/t/lnvbaqdjm.png" alt=""></p>

<p><img src="https://lasagna.cat/t/l2slg3rzp.png" alt=""></p>

<p>After saving, I finally booted up <code>nmtui</code>, disconnected from wifi and connected to the mobile broadband network:</p>

<p><img src="https://lasagna.cat/t/l74sjfa9r.png" alt=""></p>

<p>And voila. I&#39;m now writing this blog post while on a mobile network.</p>

<p>It&#39;s not fast by any means, but at least I can fall back to this in an emergency:</p>

<p><img src="https://www.speedtest.net/result/9488861098.png" alt=""></p>

<p><img src="https://www.speedtest.net/result/9488894034.png" alt=""></p>

<p><img src="https://www.speedtest.net/result/9488916451.png" alt=""></p>

<p>We&#39;re also planning having a similar setup on a colo with an IoT SIM so that we can still access the network if anything goes wrong.</p>

<p>That&#39;s all! Hope you enjoyed this blog post.</p>

<p>Optional reading after this post: <a href="https://wf.lavatech.top/ave-but-random/a-retrospective-of-3g-routers-in-turkey" rel="nofollow">A retrospective of 3G routers in Turkey</a></p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/usb-modem-hell-getting-a-fallback-network-for-5</guid>
      <pubDate>Sat, 23 May 2020 14:41:44 +0000</pubDate>
    </item>
    <item>
      <title>Router Misadventures: Dumping Superonline&#39;s ISP Fiber Router on a budget</title>
      <link>https://wf.lavatech.top/ave/router-misadventures</link>
      <description>&lt;![CDATA[Superonline, aka SOL, aka Turkcell Superonline, aka AS34984 is one of the largest ISPs in Turkey.&#xA;&#xA;One of the ads from the ISP, modified to say oof&#xA;&#xA;I&#39;ve been using their 100/5Mbps unlimited fiber service (their highest-end plan, other than the 1000Mbps one that has its own listing and costs 1000TRY/mo) for over a year now.&#xA;&#xA;Let me tell you: I suffered a lot. Anything from random internet cuts to constant network-wide slowdowns whenever we watched anything on Netflix. I was constantly spammed with calls trying to sell me Turkcell TV+ (even when I told them that I don&#39;t watch TV countless times), and roughly 5 months before my contract expired, trying to sell me expensive and lengthy contract renewals.&#xA;&#xA;!--more--&#xA;&#xA;And even when it worked, it wasn&#39;t as fast as promised, at least over WiFi (5GHz):&#xA;&#xA;Speedtest.net showing 45/20&#xA;&#xA;Meet the routers&#xA;&#xA;Huawei HG253&#xA;&#xA;When I first got my Home Internet, I was given a Huawei HG253, a rather bad router: No 5GHz WiFi, horrible DHCP (can&#39;t even set static assignments), etc.&#xA;&#xA;This is a rather hated router according to bad internet forums apparently (yes, I called donanimhaber bad, bite me).&#xA;&#xA;Back then I set up a pihole instance at home just to deal with the DHCP issues (and ofc, also to block some ads).&#xA;&#xA;All in all, this is how it looked like (before I did cable management haha I never did):&#xA;&#xA;Huawei HG253&#xA;&#xA;Thankfully though, the HG253 had a security vulnerability that ended up in my favor: It sent the PPPoE password to the client on the UI, and just marked the field as a password. You can literally just check the page source and get the PPPoE password. Back then I realized this and noted down the credentials (more on this later).&#xA;&#xA;The HG253 had at least one public firmware (link of my HG253 files archive, including a user guide and firmware), and had SSH enabled.&#xA;&#xA;I extracted this firmware and pretty much just explored it Back Then™, but found nothing too interesting. I think I found some hashed credentials but never bothered with hashcat-ing them. SSH was also out of question, it was ancient and even when I forced ciphers it liked to error out, I couldn&#39;t get very far with it.&#xA;&#xA;I don&#39;t remember exactly what happened to this router, but IIRC it just died one day, and upon calling the support line, they replaced it with a...&#xA;&#xA;Huawei HG255S&#xA;&#xA;The HG255S, my current ISP Router, is a fairly decent router compared to HG253 and overall to other ISP routers I&#39;ve used so far: It has 5 GHz WiFi (but it sucks, you saw the speedtests earlier), decent DHCP (after the HG253 it felt nice to have), 3G modem support, built-in SIP and DECT, USB port with Samba and FTP support, etc.&#xA;&#xA;Huawei HG255S&#xA;&#xA;However, as you may expect, most of these features are either locked down or behind a paywall. I&#39;d honestly love to be able to modify the SIP settings so that I can have a DECT network at home that connects to my SIP network, but SOL only allows buying phone service from them. The SIP settings menu is removed from UI. More on all this later, this is what finally brought me to the point of replacing the router.&#xA;&#xA;I still kept my Pihole install with this setup in order to not lose my DHCP and DNS data if my ISP ever swapped my routers again, and at that point, I was already doing a bunch of other odd stuff on that Pi anyways (like running openhab2).&#xA;&#xA;&#34;So just replace the router&#34;&#xA;&#xA;Well... Superonline doesn&#39;t allow you to replace their router if you&#39;re a fiber customer. The PPPoE credentials are not given to you even if you ask for them unless you&#39;re an enterprise customer (Relevant page for enterprise customers).&#xA;&#xA;They hate the idea of you replacing the router. Whenever I call the support line with a technical problem they ask if my router is the one they gave or not.&#xA;&#xA;There&#39;s literally no technical reason for this I can see, it&#39;s all red tape: The fiber cable doesn&#39;t even plug into the router, they give you a free GPON:&#xA;&#xA;Huawei HG8010 GPON&#xA;&#xA;The fiber cable goes into that and terminates as a female RJ45 port, which then gets plugged into the WAN port on their router. After that, it&#39;s just PPPoE.&#xA;&#xA;I&#39;ve previously looked into getting an inexpensive router that can run DD-WRT or OpenWRT to plug into the ISP router (and to limit the use of the ISP router to just serving the DD-WRT/OpenWRT router instead), but the things I found were either incredibly high end or simply unavailable. I ordered a router that can run OpenWRT couple months ago, and the order got canceled saying that they don&#39;t actually have any left. I gave up.&#xA;&#xA;The straw that broke the camel&#39;s back&#xA;&#xA;Couple weeks back, I was looking into messing with the HG255S again, mostly to figure out how I can get my own SIP stuff running on it so that I wouldn&#39;t have to worry about the horrible SIP implementation on my Cisco phone, and so that I could free an Ethernet port.&#xA;&#xA;While doing my usual scouring to find any new information, I stumbled upon this specific post on a bad Turkish forum mentioning them running OpenWRT on the Xiaomi Mini router, and asking if moving to that would get them better performance. I quickly checked N11 (Turkish amazon, basically) and saw that there&#39;s some other Xiaomi Mi Routers, specifically the Mi Router 4 and 4A (Gigabit Edition). I checked their OpenWRT compatibility, and after seeing that they&#39;re supported, I ordered a 4A for merely 230TRY.&#xA;&#xA;I considered getting something better that costs more, but due to COVID-19, I am trying to lower my expenses.&#xA;&#xA;I also went ahead and dropped ~120TRY for a bunch of different programmers to have around, lol.&#xA;&#xA;More on the Mi Router 4A&#xA;&#xA;It&#39;s a Xiaomi Mi Router (to be called MiR) 3Gv2, in which 3Gv2 is just 3G, but worse. If you can get one of those, go ahead. Sadly though, they&#39;re not available in Turkey. It has 3 gigabit Ethernet ports, one for WAN. It has 2.4GHz and 5GHz WiFi.&#xA;&#xA;It has support for OpenWRT snapshots, though it was broken as part of the move to Kernel 5.4 for over a week now. I talk more about this later.&#xA;&#xA;It runs their own OpenWRT fork called MiWiFi:&#xA;&#xA;MiWiFi&#xA;&#xA;MiWiFi is fairly decent and honestly, is pretty usable by default. However, as you might expect, it&#39;s not very extensible. I wanted to use Wireguard with this router, and MiWiFi simply didn&#39;t offer that (though it did have built-in PPTP and L2TP). There are also some privacy concerns I have with Xiaomi due to the amount of telemetry my Xiaomi Mi phone sends.&#xA;&#xA;It has two ways of getting proper OpenWRT on it:&#xA;&#xA;The physical way&#xA;&#xA;You can go the physical way by opening up the device, dumping the SPI, changing the uboot parameters, then flashing it back.&#xA;&#xA;This is safer as you have a point to recover to if you somehow manage to softbrick, but in the end, there are people who posted their own images on the Internet (which will change your MAC address btw, you&#39;ll need to edit your MAC back if you flash those images).&#xA;&#xA;While noting down that I was unable to successfully dump the SPI as I couldn&#39;t get the programmer to see it, I was unable to find enough information on several parts of this process before I could even attempt it, so here are some tips:&#xA;&#xA;[For the most part, follow this guide](&#xA;https://forum.openwrt.org/t/xiaomi-wifi-router-3g-v2/42584/46)&#xA;There are two Phillips screws on these spots, after you unscrew them you need to pry open the back, I recommend using a card to do this.&#xA;Different versions of spiflash have different names for the GD25Q128C chip, for me, it was GD25Q127C/GD25Q128C. Check yours with flashrom -L | grep -B1 -A1 GD25Q128C. If it&#39;s on a newline (like this), then you have to include the string from the last line too.&#xA;&#xA;Software (OpenWRTInvasion)&#xA;&#xA;The other approach is to take the lazy approach and use the software exploit, OpenWRTInvasion. This is what I ended up doing in the end.&#xA;&#xA;FWIW, to get stok (session token), open the panel (http://192.168.31.1) and log in. It will be on the URL:&#xA;&#xA;stok&#xA;&#xA;OpenWRT on MiR 4A time&#xA;&#xA;Shortly after it arrived, I ended up installing a build from the OpenWRT forum, as the latest builds reportedly soft-bricked the device. I spent the day setting it up and learning how to use Luci (the Web UI) and OpenWRT.&#xA;&#xA;Sadly though, I realized shortly after that I wouldn&#39;t be able to run Wireguard on it for some time as:&#xA;&#xA;MiR 4A doesn&#39;t have stable releases, just snapshots.&#xA;The build I installed was an unofficial build (I later tried another build and it was one too).&#xA;Snapshots do not have packages for older versions (except kmods, but obviously only for official builds-- I tried force installing one with a matching kernel version, but it obviously didn&#39;t work as it couldn&#39;t match the symbols).&#xA;The OpenWRT image builder uses the latest packages from the repo.&#xA;Official snapshots do not get archived, which means that I couldn&#39;t switch to an official version.&#xA;&#xA;So a couple days later, I decided to make my own build. Being scared of bricking my router (even if I could recover from it, I didn&#39;t want the hassle), I ended up hours trying to find which commit was the last safe one and then realized that the version I&#39;m running included a git hash in the version code. Oops. I ended up going with that one.&#xA;&#xA;So I set up an OpenWRT build environment and built it for the first time, and while praying to tech gods to not lead to a brick, I flashed it.&#xA;&#xA;And it worked... though it was missing Luci and a bunch of other packages as I compiled them as modules, not as mandatory. Apparently, module means that you just get the ipks, while mandatory means that you get the ipks AND it gets built into the image.&#xA;&#xA;I SSH&#39;d in and installed the Luci modules I compiled (it was painful, it&#39;s like 10 packages), then did another build with everything set as mandatory.&#xA;&#xA;And sure enough, it worked! I quickly posted my build and talked about my success in the OpenWRT forum.&#xA;&#xA;All basic functionality worked as expected AND it had the wireguard kmod, so I could call it a success, right? Well, no.&#xA;&#xA;I just couldn&#39;t get wireguard to work, it did show as connected on the router, but when I checked on the peers, it didn&#39;t show up. I never used OpenWRT before so I had no idea if I was doing something wrong or not, so I simply noted that down on the forum post and moved on.&#xA;&#xA;The next day though, someone who&#39;s an OpenWRT dev posted about a patch they proposed to fix the issue on master. I quickly applied the patch, improved the set of packages I include, compiled, flashed, confirmed that it worked and posted a build to the forum.&#xA;&#xA;I had to reset the settings to get it to work due to these DTS changes, and after a reconfiguration, I was happy to see that wireguard actually worked... mostly.&#xA;&#xA;While it did work for IPv4, IPv6 just kept not working. This happened when I tried 6in4 too, which is rather annoying as I&#39;ve been wanting IPv6 at home or some time. I think IPv6 is just broken somehow. I&#39;ll dig into it more later.&#xA;&#xA;Edit, a couple days later: IPv6 on router was okay, however there were two issues:&#xA;&#xA;The server I was Wireguarding to ended up having constant issues due to upstream, leading to IPv6 downtime for some time (without me realizing it, oops).&#xA;I had no idea how to properly distribute an IPv6 block to LAN with Wireguard, and I still don&#39;t. Yell at me with instructions here.&#xA;&#xA;Anyhow, I got it working. See the conclusion for more details.&#xA;&#xA;This is mostly where the state of affairs is right now. A modified version of the proposed patch was merged into master, and I also posted a build including that, but there&#39;s not much noteworthy there, nothing in the build was changed.&#xA;&#xA;Extracting SOL&#39;s PPPoE creds&#xA;&#xA;And as promised, what you came for: PPPoE magic.&#xA;&#xA;Well, first of all, I tried using the PPPoE credentials I extracted from the HG253, but they didn&#39;t work. It&#39;d probably work if I still had the HG253, but it probably changed when my router was being changed to an HG255S. That&#39;s all there is to the &#34;I&#39;ll get to this later&#34;. Yep.&#xA;&#xA;There are guides out there that talk about how you can extract the credentials, but these are all aimed at people who don&#39;t use Linux, basically writing guides that are helpful to people who aren&#39;t familiar with Linux, but wasting the time of those who are familiar. Some are better tho, but IMO could be improved.&#xA;&#xA;Here&#39;s my take at it:&#xA;&#xA;Log into your router, find the PPPoE username. It should look like this: 123456789123@fiber. Note it down.&#xA;Install rp-pppoe&#xA;&#xA;On Debian-based distros: # apt install pppoe&#xA;&#xA;On Arch-based distros: # pacman -S rp-pppoe&#xA;&#xA;Edit /etc/ppp/pppoe-server-options&#xA;&#xA;Change the contents to:&#xA;&#xA;PPP options for the PPPoE server&#xA;LIC: GPL&#xA;require-pap&#xA;login&#xA;lcp-echo-interval 10&#xA;lcp-echo-failure 2&#xA;show-password&#xA;debug&#xA;logfile /var/log/pppoe-server-log&#xA;&#xA;Edit /etc/ppp/pap-secrets&#xA;&#xA;Change the contents to (replace REPLACETHISWITHYOURUSERNAME with your username):&#xA;&#xA;Secrets for authentication using PAP&#xA;client        server  secret                  IP addresses&#xA;&#34;REPLACETHISWITHYOURUSERNAME&#34;  &#34;&#34;&#xA;&#xA;Create the log file for rp-pppoe: # touch /var/log/pppoe-server-log; chmod 0774 /var/log/pppoe-server-log&#xA;Find your ethernet interface with ip a. Mine looks like enp3s0, it&#39;s what I&#39;ll use in the future commands, replace that with your own.&#xA;Shut down your router, plug in a cable to the WAN port, plug the other end to your computer.&#xA;Run # pppoe-server -F -I enp3s0 -O /etc/ppp/pppoe-server-options on a terminal, replace enp3s0 with your own interface.&#xA;Run # tail -f /var/log/pppoe-server-log on another terminal&#xA;Turn on your router, wait for a little until you see lines like this:&#xA;&#xA;rcvd [PAP AuthReq id=0x7 user=&#34;no@fiber&#34; password=&#34;no&#34;]&#xA;sent [PAP AuthNak id=0x7 &#34;Session started successfully&#34;]&#xA;PAP peer authentication failed for no@fiber&#xA;sent [LCP TermReq id=0x2 &#34;Authentication failed&#34;]&#xA;&#xA;and&#xA;&#xA;  script /usr/bin/pppoe -n -I enp3s0 -e 7:no:no:no:no:no:no -S &#39;&#39;, pid 4767&#xA;Script /usr/bin/pppoe -n -I enp3s0 -e 7:no:no:no:no:no:no -S &#39;&#39; finished (pid 4767), status = 0x1&#xA;&#xA;Take the password from the first block, and the MAC address from the second one (ignore the 7: or whatever number from the start).&#xA;&#xA;Now you have everything you need to replace your SOL router.&#xA;&#xA;Finally: Replacing the ISP router with a MiR 4A&#xA;&#xA;This is the simple part.&#xA;&#xA;Plug the cable from GPON to your router.&#xA;&#xA;Log onto Luci, edit WAN (and disable WAN6), change type to PPPoE, put in the username and password we got earlier into the PAP/CHAP username and password fields like this:&#xA;&#xA;PPPoE settings&#xA;&#xA;Then save and apply.&#xA;&#xA;ssh into your router, edit /etc/config/network, find config interface &#39;wan&#39;. Add a line to it (with proper indents) with something like option macaddr &#39;no:no:no:no:no:no&#39;-- replace no:no:no:no:no:no with the MAC address we found earlier.&#xA;&#xA;Then finally run service network restart, and you&#39;ll be free from the curse that is Superonline&#39;s ISP routers.&#xA;&#xA;In conclusion&#xA;&#xA;My wifi speeds are MUCH better now :)&#xA;&#xA;97/20 speedtest&#xA;&#xA;And I can connect to our internal network without needing to VPN on the device itself :D&#xA;&#xA;Me accessing a server on edgebleed&#xA;&#xA;Soon I&#39;ll even be able to have IPv6 at home :P&#xA;&#xA;I even have IPv6 at home, thanks to linuxgemini :3&#xA;&#xA;IPv6 test showing IPv4 from SOL and IPv6 from Lasagna Ltd&#xA;&#xA;Also: Capitalism is a failure, and free market ideologies are a joke. You don&#39;t get companies competing for cheaper prices, better service and less restrictions, you get companies all limiting their customers and all of them fucking them over in different ways. I am forced to use SOL because VodafoneNet and TT both have a contract minimum of 2 years, TT is unreliable AF, and TurkNet Fiber is unavailable in 99% of Turkey, including where I live, and everyone else are just resellers.&#xA;&#xA;Bonus vent&#xA;&#xA;*: I constantly turned down their offers as they were all worse than what I was already getting, or were slower than 100Mbps. I was also lied to, saying that fees would go up after the new year due to BTK), which was simply wrong, they still sell the same plan for the same price I started out my contract with. I ended up calling them 2 weeks before my contract expiry date, telling them exactly what I want (100Mbps, with contracts no longer than a year), they came up with a 15 month 100Mbps plan for 135TRY for the first 6 months, then 160TRY for the next 9. I kinda hesitated for the 15 months thing, but I said meh and agreed to it.]]&gt;</description>
      <content:encoded><![CDATA[<p>Superonline, aka SOL, aka Turkcell Superonline, aka AS34984 is one of the largest ISPs in Turkey.</p>

<p><img src="https://elixi.re/t/ldzuwb1h8.png" alt="One of the ads from the ISP, modified to say oof"></p>

<p>I&#39;ve been using their <a href="https://www.superonline.net/kampanyalar/diger-kampanyalar/turkcell-fiber-platin-paketler-kampanyasi" rel="nofollow">100/5Mbps unlimited fiber service</a> (their highest-end plan, <a href="https://www.superonline.net/kampanyalar/fiber-kampanyalari/1000-Mbps-" rel="nofollow">other than the 1000Mbps one</a> that has its own listing and costs 1000TRY/mo) for over a year now.</p>

<p>Let me tell you: I suffered a lot. Anything from random internet cuts to constant network-wide slowdowns whenever we watched anything on Netflix. I was constantly spammed with calls trying to sell me Turkcell TV+ (even when I told them that I don&#39;t watch TV countless times), and roughly 5 months before my contract expired, trying to sell me expensive and lengthy contract renewals<a href="#bonus-vent" rel="nofollow">*</a>.</p>



<p>And even when it worked, it wasn&#39;t as fast as promised, at least over WiFi (5GHz):</p>

<p><img src="https://www.speedtest.net/result/9261174641.png" alt="Speedtest.net showing 45/20"></p>

<h2 id="meet-the-routers" id="meet-the-routers">Meet the routers</h2>

<h3 id="huawei-hg253" id="huawei-hg253">Huawei HG253</h3>

<p>When I first got my Home Internet, I was given a Huawei HG253, a rather bad router: No 5GHz WiFi, horrible DHCP (can&#39;t even set static assignments), etc.</p>

<p>This is a rather hated router according to bad internet forums apparently (yes, I called donanimhaber bad, bite me).</p>

<p>Back then I set up a pihole instance at home just to deal with the DHCP issues (and ofc, also to block some ads).</p>

<p>All in all, this is how it looked like (before I did cable management <del>haha I never did</del>):</p>

<p><img src="https://elixi.re/t/lo8702bqr.png" alt="Huawei HG253"></p>

<p>Thankfully though, the HG253 had a security vulnerability that ended up in my favor: It sent the PPPoE password to the client on the UI, and just marked the field as a password. You can literally just check the page source and get the PPPoE password. Back then I realized this and noted down the credentials (more on this later).</p>

<p>The HG253 had at least one public firmware (<a href="https://elixi.re/t/lt3sfw9bv.zip" rel="nofollow">link of my HG253 files archive, including a user guide and firmware</a>), and had SSH enabled.</p>

<p>I extracted this firmware and pretty much just explored it Back Then™, but found nothing too interesting. I think I found some hashed credentials but never bothered with hashcat-ing them. SSH was also out of question, it was ancient and even when I forced ciphers it liked to error out, I couldn&#39;t get very far with it.</p>

<p>I don&#39;t remember exactly what happened to this router, but IIRC it just died one day, and upon calling the support line, they replaced it with a...</p>

<h3 id="huawei-hg255s" id="huawei-hg255s">Huawei HG255S</h3>

<p>The HG255S, my current ISP Router, is a fairly decent router compared to HG253 and overall to other ISP routers I&#39;ve used so far: It has 5 GHz WiFi (but it sucks, you saw the speedtests earlier), decent DHCP (after the HG253 it felt nice to have), 3G modem support, built-in SIP and DECT, USB port with Samba and FTP support, etc.</p>

<p><img src="https://elixi.re/t/low1wtmga.jpg" alt="Huawei HG255S"></p>

<p>However, as you may expect, most of these features are either locked down or behind a paywall. I&#39;d honestly love to be able to modify the SIP settings so that I can have a DECT network at home that connects to my SIP network, but SOL only allows buying phone service from them. The SIP settings menu is removed from UI. More on all this later, this is what finally brought me to the point of replacing the router.</p>

<p>I still kept my Pihole install with this setup in order to not lose my DHCP and DNS data if my ISP ever swapped my routers again, and at that point, I was already doing a bunch of other odd stuff on that Pi anyways (like running openhab2).</p>

<h2 id="so-just-replace-the-router" id="so-just-replace-the-router">“So just replace the router”</h2>

<p>Well... Superonline doesn&#39;t allow you to replace their router if you&#39;re a fiber customer. The PPPoE credentials are not given to you even if you ask for them unless you&#39;re an enterprise customer (<a href="https://www.superonline.net/kurumsal/yardim/hizmet-kanallari/dijital-kanallar/fiberadsl-sifremi-nasil-alabilirim" rel="nofollow">Relevant page for enterprise customers</a>).</p>

<p>They <em>hate</em> the idea of you replacing the router. Whenever I call the support line with a technical problem they ask if my router is the one they gave or not.</p>

<p>There&#39;s literally no technical reason for this I can see, it&#39;s all red tape: The fiber cable doesn&#39;t even plug into the router, they give you a free GPON:</p>

<p><img src="https://elixi.re/t/lg1ueodv9.jpg" alt="Huawei HG8010 GPON"></p>

<p>The fiber cable goes into that and terminates as a female RJ45 port, which then gets plugged into the WAN port on their router. After that, it&#39;s just PPPoE.</p>

<p>I&#39;ve previously looked into getting an inexpensive router that can run DD-WRT or OpenWRT to plug into the ISP router (and to limit the use of the ISP router to just serving the DD-WRT/OpenWRT router instead), but the things I found were either incredibly high end or simply unavailable. I ordered a router that can run OpenWRT couple months ago, and the order got canceled saying that they don&#39;t actually have any left. I gave up.</p>

<h2 id="the-straw-that-broke-the-camel-s-back" id="the-straw-that-broke-the-camel-s-back">The straw that broke the camel&#39;s back</h2>

<p>Couple weeks back, I was looking into messing with the HG255S again, mostly to figure out how I can get my own SIP stuff running on it so that I wouldn&#39;t have to worry about the horrible SIP implementation on my Cisco phone, and so that I could free an Ethernet port.</p>

<p>While doing my usual scouring to find any new information, I stumbled upon <a href="https://forum.donanimhaber.com//mesaj/yonlen/142615822" rel="nofollow">this specific post</a> on a bad Turkish forum mentioning them running OpenWRT on the Xiaomi Mini router, and asking if moving to that would get them better performance. I quickly checked N11 (Turkish amazon, basically) and saw that there&#39;s some other Xiaomi Mi Routers, specifically the Mi Router 4 and 4A (Gigabit Edition). I checked their OpenWRT compatibility, and after seeing that they&#39;re supported, I ordered a 4A for merely 230TRY.</p>

<p>I considered getting something better that costs more, but due to COVID-19, I am trying to lower my expenses.</p>

<p>I also went ahead and dropped ~120TRY for a bunch of different programmers to have around, lol.</p>

<h3 id="more-on-the-mi-router-4a" id="more-on-the-mi-router-4a">More on the Mi Router 4A</h3>

<p>It&#39;s a Xiaomi Mi Router (to be called MiR) 3Gv2, in which 3Gv2 is just 3G, but worse. If you can get one of those, go ahead. Sadly though, they&#39;re not available in Turkey. It has 3 gigabit Ethernet ports, one for WAN. It has 2.4GHz and 5GHz WiFi.</p>

<p>It has support for OpenWRT snapshots, though it was broken as part of the move to Kernel 5.4 for over a week now. I talk more about this later.</p>

<p>It runs their own OpenWRT fork called MiWiFi:</p>

<p><img src="https://elixi.re/t/l0l413zeb.png" alt="MiWiFi"></p>

<p>MiWiFi is fairly decent and honestly, is pretty usable by default. However, as you might expect, it&#39;s not very extensible. I wanted to use Wireguard with this router, and MiWiFi simply didn&#39;t offer that (though it did have built-in PPTP and L2TP). There are also some privacy concerns I have with Xiaomi due to the amount of telemetry my Xiaomi Mi phone sends.</p>

<p>It has two ways of getting proper OpenWRT on it:</p>

<h4 id="the-physical-way" id="the-physical-way">The physical way</h4>

<p>You can go the physical way by opening up the device, dumping the SPI, changing the uboot parameters, then flashing it back.</p>

<p>This is safer as you have a point to recover to if you somehow manage to softbrick, but in the end, there are people who posted their own images on the Internet (which will change your MAC address btw, you&#39;ll need to edit your MAC back if you flash those images).</p>

<p>While noting down that I was unable to successfully dump the SPI as I couldn&#39;t get the programmer to see it, I was unable to find enough information on several parts of this process before I could even attempt it, so here are some tips:</p>
<ul><li><a href="https://forum.openwrt.org/t/xiaomi-wifi-router-3g-v2/42584/46" rel="nofollow">For the most part, follow this guide</a></li>
<li><a href="https://elixi.re/t/lwp2vq53f.jpg" rel="nofollow">There are two Phillips screws on these spots</a>, after you unscrew them you need to pry open the back, I recommend using a card to do this.</li>
<li>Different versions of spiflash have different names for the <code>GD25Q128C</code> chip, for me, it was <code>GD25Q127C/GD25Q128C</code>. Check yours with <code>flashrom -L | grep -B1 -A1 GD25Q128C</code>. If it&#39;s on a newline (<a href="https://elixi.re/t/l15s8h8ww.png" rel="nofollow">like this</a>), then you have to include the string from the last line too.</li></ul>

<h4 id="software-openwrtinvasion" id="software-openwrtinvasion">Software (OpenWRTInvasion)</h4>

<p>The other approach is to take the lazy approach and use <a href="https://github.com/acecilia/OpenWRTInvasion" rel="nofollow">the software exploit, OpenWRTInvasion</a>. This is what I ended up doing in the end.</p>

<p>FWIW, to get stok (session token), open the panel (<a href="http://192.168.31.1" rel="nofollow">http://192.168.31.1</a>) and log in. It will be on the URL:</p>

<p><img src="https://elixi.re/t/lhn7y28yi.png" alt="stok"></p>

<h3 id="openwrt-on-mir-4a-time" id="openwrt-on-mir-4a-time">OpenWRT on MiR 4A time</h3>

<p>Shortly after it arrived, I ended up installing a build from the OpenWRT forum, as the latest builds reportedly soft-bricked the device. I spent the day setting it up and learning how to use Luci (the Web UI) and OpenWRT.</p>

<p>Sadly though, I realized shortly after that I wouldn&#39;t be able to run Wireguard on it for some time as:</p>
<ul><li>MiR 4A doesn&#39;t have stable releases, just snapshots.</li>
<li>The build I installed was an unofficial build (I later tried another build and it was one too).</li>
<li>Snapshots do not have packages for older versions (except kmods, but obviously only for official builds— I tried force installing one with a matching kernel version, but it obviously didn&#39;t work as it couldn&#39;t match the symbols).</li>
<li>The OpenWRT image builder uses the latest packages from the repo.</li>
<li>Official snapshots do not get archived, which means that I couldn&#39;t switch to an official version.</li></ul>

<p>So a couple days later, I decided to make my own build. Being scared of bricking my router (even if I could recover from it, I didn&#39;t want the hassle), I ended up hours trying to find which commit was the last safe one and then realized that the version I&#39;m running included a git hash in the version code. Oops. I ended up going with that one.</p>

<p>So I set up an OpenWRT build environment and built it for the first time, and while praying to tech gods to not lead to a brick, I flashed it.</p>

<p>And it worked... though it was missing Luci and a bunch of other packages as I compiled them as modules, not as mandatory. Apparently, module means that you just get the ipks, while mandatory means that you get the ipks AND it gets built into the image.</p>

<p>I SSH&#39;d in and installed the Luci modules I compiled (it was painful, it&#39;s like 10 packages), then did another build with everything set as mandatory.</p>

<p>And sure enough, it worked! <a href="https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-programmer/36685/498" rel="nofollow">I quickly posted my build and talked about my success in the OpenWRT forum</a>.</p>

<p>All basic functionality worked as expected AND it had the wireguard kmod, so I could call it a success, right? Well, no.</p>

<p>I just couldn&#39;t get wireguard to work, it did show as connected on the router, but when I checked on the peers, it didn&#39;t show up. I never used OpenWRT before so I had no idea if I was doing something wrong or not, so I simply noted that down on the forum post and moved on.</p>

<p>The next day though, <a href="https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-programmer/36685/509?u=ave" rel="nofollow">someone who&#39;s an OpenWRT dev posted about a patch they proposed to fix the issue on master</a>. I quickly applied the patch, improved the set of packages I include, compiled, flashed, confirmed that it worked <a href="https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-programmer/36685/518?u=ave" rel="nofollow">and posted a build to the forum</a>.</p>

<p>I had to reset the settings to get it to work <a href="https://github.com/openwrt/openwrt/commit/30644bc579e771e4b6dcc165ca966124e0259e1e#diff-a0859b8f2d604a5ea50a3e976bfb51de" rel="nofollow">due to these DTS changes</a>, and after a reconfiguration, I was happy to see that wireguard actually worked... mostly.</p>

<p><del>While it did work for IPv4, IPv6 just kept not working. This happened when I tried 6in4 too, which is rather annoying as I&#39;ve been wanting IPv6 at home or some time. I think IPv6 is just broken somehow. I&#39;ll dig into it more later.</del></p>

<p>Edit, a couple days later: IPv6 on router was okay, however there were two issues:</p>
<ul><li>The server I was Wireguarding to ended up having constant issues due to upstream, leading to IPv6 downtime for some time (without me realizing it, oops).</li>
<li>I had no idea how to properly distribute an IPv6 block to LAN with Wireguard, and I still don&#39;t. <a href="mailto:routermisadventuresblog@ave.zone" rel="nofollow">Yell at me with instructions here</a>.</li></ul>

<p>Anyhow, I got it working. See the conclusion for more details.</p>

<p>This is mostly where the state of affairs is right now. A modified version of the proposed patch was merged into master, <a href="https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-programmer/36685/525?u=ave" rel="nofollow">and I also posted a build including that</a>, but there&#39;s not much noteworthy there, nothing in the build was changed.</p>

<h3 id="extracting-sol-s-pppoe-creds" id="extracting-sol-s-pppoe-creds">Extracting SOL&#39;s PPPoE creds</h3>

<p>And as promised, what you came for: PPPoE magic.</p>

<p>Well, first of all, I tried using the PPPoE credentials I extracted from the HG253, but they didn&#39;t work. It&#39;d probably work if I still had the HG253, but it probably changed when my router was being changed to an HG255S. That&#39;s all there is to the “I&#39;ll get to this later”. Yep.</p>

<p><a href="https://www.youtube.com/watch?v=W8kOC4CSLP8" rel="nofollow">There are guides out there</a> that talk about how you can extract the credentials, but these are all aimed at people who don&#39;t use Linux, basically writing guides that are helpful to people who aren&#39;t familiar with Linux, but wasting the time of those who are familiar. <a href="https://www.technopat.net/sosyal/konu/rehber-superonline-wan-fiber-kullanici-sifresi-oegrenme.615937/" rel="nofollow">Some are better tho</a>, but IMO could be improved.</p>

<p>Here&#39;s my take at it:</p>
<ul><li>Log into your router, find the PPPoE username. It should look like this: <code>123456789123@fiber</code>. Note it down.</li>
<li>Install <code>rp-pppoe</code></li></ul>

<p>On Debian-based distros: <code># apt install pppoe</code></p>

<p>On Arch-based distros: <code># pacman -S rp-pppoe</code></p>
<ul><li>Edit <code>/etc/ppp/pppoe-server-options</code></li></ul>

<p>Change the contents to:</p>

<pre><code># PPP options for the PPPoE server
# LIC: GPL
require-pap
login
lcp-echo-interval 10
lcp-echo-failure 2
show-password
debug
logfile /var/log/pppoe-server-log
</code></pre>
<ul><li>Edit <code>/etc/ppp/pap-secrets</code></li></ul>

<p>Change the contents to (replace <code>REPLACETHISWITHYOURUSERNAME</code> with your username):</p>

<pre><code># Secrets for authentication using PAP
# client        server  secret                  IP addresses
&#34;REPLACETHISWITHYOURUSERNAME&#34; * &#34;&#34;
</code></pre>
<ul><li>Create the log file for rp-pppoe: <code># touch /var/log/pppoe-server-log; chmod 0774 /var/log/pppoe-server-log</code></li>
<li>Find your ethernet interface with <code>ip a</code>. Mine looks like enp3s0, it&#39;s what I&#39;ll use in the future commands, replace that with your own.</li>
<li>Shut down your router, plug in a cable to the WAN port, plug the other end to your computer.</li>
<li>Run <code># pppoe-server -F -I enp3s0 -O /etc/ppp/pppoe-server-options</code> on a terminal, replace <code>enp3s0</code> with your own interface.</li>
<li>Run <code># tail -f /var/log/pppoe-server-log</code> on another terminal</li>
<li>Turn on your router, wait for a little until you see lines like this:</li></ul>

<pre><code>rcvd [PAP AuthReq id=0x7 user=&#34;no@fiber&#34; password=&#34;no&#34;]
sent [PAP AuthNak id=0x7 &#34;Session started successfully&#34;]
PAP peer authentication failed for no@fiber
sent [LCP TermReq id=0x2 &#34;Authentication failed&#34;]
</code></pre>

<p>and</p>

<pre><code>  script /usr/bin/pppoe -n -I enp3s0 -e 7:no:no:no:no:no:no -S &#39;&#39;, pid 4767
Script /usr/bin/pppoe -n -I enp3s0 -e 7:no:no:no:no:no:no -S &#39;&#39; finished (pid 4767), status = 0x1
</code></pre>

<p>Take the password from the first block, and the MAC address from the second one (ignore the <code>7:</code> or whatever number from the start).</p>

<p>Now you have everything you need to replace your SOL router.</p>

<h3 id="finally-replacing-the-isp-router-with-a-mir-4a" id="finally-replacing-the-isp-router-with-a-mir-4a">Finally: Replacing the ISP router with a MiR 4A</h3>

<p>This is the simple part.</p>

<p>Plug the cable from GPON to your router.</p>

<p>Log onto Luci, edit WAN (and disable WAN6), change type to PPPoE, put in the username and password we got earlier into the PAP/CHAP username and password fields like this:</p>

<p><img src="https://elixi.re/t/ljy0rnfzu.png" alt="PPPoE settings"></p>

<p>Then save and apply.</p>

<p>ssh into your router, edit <code>/etc/config/network</code>, find <code>config interface &#39;wan&#39;</code>. Add a line to it (with proper indents) with something like <code>option macaddr &#39;no:no:no:no:no:no&#39;</code>— replace <code>no:no:no:no:no:no</code> with the MAC address we found earlier.</p>

<p>Then finally run <code>service network restart</code>, and you&#39;ll be free from the curse that is Superonline&#39;s ISP routers.</p>

<h2 id="in-conclusion" id="in-conclusion">In conclusion</h2>

<p>My wifi speeds are MUCH better now :)</p>

<p><img src="https://www.speedtest.net/result/9291178546.png" alt="97/20 speedtest"></p>

<p>And I can connect to our internal network without needing to VPN on the device itself :D</p>

<p><img src="https://elixi.re/t/lnghltecf.png" alt="Me accessing a server on edgebleed"></p>

<p><del>Soon I&#39;ll even be able to have IPv6 at home :P</del></p>

<p><a href="https://twitter.com/warnvod/status/1251285310085967873" rel="nofollow">I even have IPv6 at home, thanks to linuxgemini</a> :3</p>

<p><img src="https://elixi.re/t/lofsk3zhr.png" alt="IPv6 test showing IPv4 from SOL and IPv6 from Lasagna Ltd"></p>

<p>Also: Capitalism is a failure, and free market ideologies are a joke. You don&#39;t get companies competing for cheaper prices, better service and less restrictions, you get companies all limiting their customers and all of them fucking them over in different ways. I am forced to use SOL because VodafoneNet and TT both have a contract minimum of 2 years, TT is unreliable AF, and TurkNet Fiber is unavailable in 99% of Turkey, including where I live, and everyone else are just resellers.</p>

<h2 id="bonus-vent" id="bonus-vent">Bonus vent</h2>

<p>*: I constantly turned down their offers as they were all worse than what I was already getting, or were slower than 100Mbps. I was also lied to, saying that fees would go up after the new year due to <a href="https://en.wikipedia.org/wiki/Information_and_Communication_Technologies_Authority_(Turkey)" rel="nofollow">BTK</a>, which was simply wrong, they still sell the same plan for the same price I started out my contract with. I ended up calling them 2 weeks before my contract expiry date, telling them exactly what I want (100Mbps, with contracts no longer than a year), they came up with a 15 month 100Mbps plan for 135TRY for the first 6 months, then 160TRY for the next 9. I kinda hesitated for the 15 months thing, but I said meh and agreed to it.</p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/router-misadventures</guid>
      <pubDate>Thu, 16 Apr 2020 11:14:23 +0000</pubDate>
    </item>
    <item>
      <title>Pinebook Pro Keyboard Shenanigans</title>
      <link>https://wf.lavatech.top/ave/pinebook-pro-keyboard-shenanigans</link>
      <description>&lt;![CDATA[I&#39;m not the fastest typer, and I don&#39;t really use 10 fingers- I tend to use 7-8, but in general, I try to minimize the amount of keypresses that I make. This means that I use shortcuts and dedicated keys as much as I can. One example of this (that involves the delete key) is how I press delete instead of right arrow and backspace.&#xA;&#xA;And ever since I got my Pinebook Pro, I felt the distinct lack of a delete key.&#xA;&#xA;!--more--&#xA;&#xA;What&#39;s worse was the fact that in place of a delete key was a power key, one that, once tapped, depending on the DE either showed a power menu, or shut off the PBP:&#xA;&#xA;Power button on PBP&#39;s keyboard, in place of delete key, at top right corner of keyboard, as an actual keyboard key (official image from Pine64 Store, modified with circle around power button)&#xA;&#xA;One of the first things after I installed Manjaro ARM was disabling the power button&#39;s system shutdown effects in /etc/systemd/logind.conf, by setting HandlePowerKey=ignore (and restarting systemd-logind, which fyi kills X session)&#xA;&#xA;Later on, to actually get it to work as a delete key I used something I did long ago, and just got the keycode from xev and set it with xmodmap to delete.&#xA;&#xA;This wasn&#39;t perfect by any means, it had some delay, and some software like gimp just ignored it (which made image editing a lot more painful).&#xA;&#xA;Then the project working on improving the keyboard and touchpad ended up releasing an update, one that allowed people to make their own keymappings.&#xA;&#xA;I saw this while at work, put a note for myself:&#xA;&#xA;The original note from February 9&#xA;&#xA;I&#39;ve been meaning to put aside some time to try and implement this behavior in the firmware itself, but I just couldn&#39;t find the time or the energy.&#xA;&#xA;Until today.&#xA;&#xA;The setup&#xA;&#xA;I don&#39;t have much of a story to tell tbh. I cloned the repo, downloaded the requirements, compiled the tools.&#xA;&#xA;I compiled and installed firmware/src/keymaps/defaultiso.h (by following instructions on firmware/src/README.md) just to see if it works or not, it did, so I continued on.&#xA;&#xA;After setting up this new firmware, I did notice that some functionality worked differently though, such as:&#xA;&#xA;numlock didn&#39;t turn ha3f 6f the 2eyb6ard 5nt6 a n40-ad (numlock didn&#39;t turn half of the keyboard into a numpad), but simply allowed the numpad area on the keyboard to be used with fn keys, which is a much better way of doing things.&#xA;Fn+F3 no longer pressed p. p.&#xA;Keyboard/Touchpad name changed from the actual part name to &#34;Pine64 Pinebook Pro&#34;, breaking my xinput set-prop settings. Simply renaming the device on the commands fixed this.&#xA;Sleep button combination (Fn+Esc) did not work (I don&#39;t use this combination, but the fact that it had the image on the keyboard and worked prior to the flashing bothered me).&#xA;&#xA;The tinkering&#xA;&#xA;I copied the file defaultiso.h to aveiso.h, trying to figure out how it&#39;s structured. I tried to find the power button, and I couldn&#39;t find it.&#xA;&#xA;There was this vague keyboard shaped array with key mappings, and I did get how one half of them worked, but I couldn&#39;t understand how the other half did:&#xA;&#xA;The keyboard shaped array&#xA;&#xA;Well, I dug in the codebase for a couple hours, trying to figure out everything, and it finally made sense.&#xA;&#xA;FR, FS and FK are just arrays that are mapped to fnsregular, fnsspecial and fnskeypad arrays in the same file respectively. This is all explained on the firmware/src/README.md.&#xA;&#xA;The number (such as 6 on FR(6)) given as argument is the index from said array.&#xA;&#xA;An example entry of REGFN(KCZ, KCNUBS) means that default action is KCZ, while action when Fn is held down is KCNUBS.&#xA;&#xA;KC means keycode, and they&#39;re mapped in firmware/src/include/keycodes.h. Do note that not all descriptions are correct in practice though, one example is that KCSYSTEMPOWER says 0xA5, but 0xA5 is actually used for brightness up (I explain why this is the case later).&#xA;&#xA;The R() function used on rest of the keyboard are &#34;Regular&#34; keys, ones that have no actions with Fn. They&#39;re directly passed on to their KC versions.&#xA;&#xA;If you hate yourself, you can also supply regular integers in place of any of the aforementioned functions and anywhere where you see a KC, and this did help when I was trying to understand how things work.&#xA;&#xA;FK is only able to be used with Fn keys when numlock is open. I&#39;m not exactly sure what the difference of FR and FS are outside of semantics. (Looking at my own PR, I regret using FR instead of FS as I&#39;m not fitting the semantics properly. Functionality seems the same though.)&#xA;&#xA;I ended up implementing the sleep button combination, and I learned a lot about keyboards while trying to figure out how I could even emulate the power button. I have some links that I used during my adventure at the bottom of this article. I sent a PR with that patch and it got merged.&#xA;&#xA;The realization&#xA;&#xA;After asking around on the Pine64 #pinebook channel, I was told by a helpful person that the power button is wired to the SoC directly, and that SoC sends the power key input itself (or rather, that this input was handled by the device tree in the linux kernel and turned into an actual emulated keypress).&#xA;&#xA;Most importantly however, they said that it could be remapped with udev. Now, I had only used udev rules to date,and it got me rather confused as I had no idea how one would remap anything with that. That got me to research how to do that, and I learned about a tool that I never used before: evtest.&#xA;&#xA;And sure enough, I found it:&#xA;&#xA;gpio-key-power on evtest&#39;s device list&#xA;&#xA;Upon picking gpio-key-power and hitting the key, I immediately saw the keypress (this image was taken after the change, so it says KEYDELETE, before the change it used to say KEYPOWER):&#xA;&#xA;Power key press event on evtest&#xA;&#xA;Upon more research, I learned how to write hwdb entries in udev, not rules. Similarly, I found an already existing hwdb file in /etc/udev/hwdb.d/10-usb-kbd.hwdb, which explained why the KCSYSTEMPOWER key was mapped to brightness up: Because the hwdb was set up this way. For reference, here&#39;s what it looks like:&#xA;&#xA;evdev:input:b0003v258Ap001E&#xA;  KEYBOARDKEY700a5=brightnessdown&#xA;  KEYBOARDKEY700a6=brightnessup&#xA;  KEYBOARDKEY70066=sleep&#xA;&#xA;This also explained to me why KCPOWER caused a sleep action and not a power key action when done through the builtin keyboard (but not through the dedicated power button).&#xA;&#xA;The ending&#xA;&#xA;I quickly wrote a hwdb file myself on /etc/udev/hwdb.d/20-power-button.hwdb:&#xA;&#xA;evdev:name:gpio-key-power&#xA;  KEYBOARDKEY0=delete&#xA;&#xA;And upon recreating the hwdb file with # systemd-hwdb update and triggering the hwdb with # udevadm trigger /dev/input/event2, the power button started working as a proper delete key.&#xA;&#xA;evtest saw it as KEYDELETE, the delay when tapping it rapidly vanished, and stuff like gimp started to acknowledge it. Now I just need to avoid holding it down.&#xA;&#xA;Handy resources&#xA;&#xA;Detailed definitions for the keycodes: https://github.com/qmk/qmkfirmware/blob/master/docs/keycodes.md&#xA;Explanation of the difference between KCPOWER and KCSYSTEMPOWER (aka KCPWR) (was helpful as I was confused as to why they were different): https://github.com/qmk/qmk_firmware/issues/1994&#xA;More keycode definitions: http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc&#xA;A question from askubuntu that made me realize that udev hwdbs exist: https://askubuntu.com/questions/877404/how-to-remap-xf86sleep-key-to-space-xmodmap-xkbcomp-udev-fail&#xA;A blog post that was essential to me figuring out how to use hwdbs: http://who-t.blogspot.com/2019/02/adding-entries-to-udev-hwdb.html]]&gt;</description>
      <content:encoded><![CDATA[<p>I&#39;m not the fastest typer, and I don&#39;t really use 10 fingers- I tend to use 7-8, but in general, I try to minimize the amount of keypresses that I make. This means that I use shortcuts and dedicated keys as much as I can. One example of this (that involves the delete key) is how I press delete instead of right arrow and backspace.</p>

<p>And ever since I got my Pinebook Pro, I felt the distinct lack of a delete key.</p>



<p>What&#39;s worse was the fact that in place of a delete key was a power key, one that, once tapped, depending on the DE either showed a power menu, or shut off the PBP:</p>

<p><img src="https://elixi.re/t/l2llk7bpp.png" alt="Power button on PBP&#39;s keyboard, in place of delete key, at top right corner of keyboard, as an actual keyboard key (official image from Pine64 Store, modified with circle around power button)"></p>

<p>One of the first things after I installed Manjaro ARM was disabling the power button&#39;s system shutdown effects in <code>/etc/systemd/logind.conf</code>, by setting <code>HandlePowerKey=ignore</code> (and restarting <code>systemd-logind</code>, which fyi kills X session)</p>

<p>Later on, to actually get it to work as a delete key I used something I did long ago, and just got the keycode from xev and set it with xmodmap to delete.</p>

<p>This wasn&#39;t perfect by any means, it had some delay, and some software like gimp just ignored it (which made image editing a lot more painful).</p>

<p>Then <a href="https://github.com/jackhumbert/pinebook-pro-keyboard-updater" rel="nofollow">the project working on improving the keyboard and touchpad</a> ended up releasing an update, one that allowed people to make their own keymappings.</p>

<p>I saw this while at work, put a note for myself:</p>

<p><img src="https://elixi.re/t/lhpeyg6su.png" alt="The original note from February 9"></p>

<p>I&#39;ve been meaning to put aside some time to try and implement this behavior in the firmware itself, but I just couldn&#39;t find the time or the energy.</p>

<p>Until today.</p>

<h2 id="the-setup" id="the-setup">The setup</h2>

<p>I don&#39;t have much of a story to tell tbh. I cloned the repo, downloaded the requirements, compiled the tools.</p>

<p>I compiled and installed <code>firmware/src/keymaps/default_iso.h</code> (by following instructions on <code>firmware/src/README.md</code>) just to see if it works or not, it did, so I continued on.</p>

<p>After setting up this new firmware, I did notice that some functionality worked differently though, such as:</p>
<ul><li>numlock didn&#39;t turn ha3f 6f the 2eyb6ard 5nt6 a n40-ad (numlock didn&#39;t turn half of the keyboard into a numpad), but simply allowed the numpad area on the keyboard to be used with fn keys, which is a much better way of doing things.</li>
<li>Fn+F3 no longer pressed p. p.</li>
<li>Keyboard/Touchpad name changed from the actual part name to “Pine64 Pinebook Pro”, breaking my <code>xinput set-prop</code> settings. Simply renaming the device on the commands fixed this.</li>
<li>Sleep button combination (Fn+Esc) did not work (I don&#39;t use this combination, but the fact that it had the image on the keyboard and worked prior to the flashing bothered me).</li></ul>

<h2 id="the-tinkering" id="the-tinkering">The tinkering</h2>

<p>I copied the file <code>default_iso.h</code> to <code>ave_iso.h</code>, trying to figure out how it&#39;s structured. I tried to find the power button, and I couldn&#39;t find it.</p>

<p>There was this vague keyboard shaped array with key mappings, and I did get how one half of them worked, but I couldn&#39;t understand how the other half did:</p>

<p><img src="https://elixi.re/t/lzg31hqmz.png" alt="The keyboard shaped array"></p>

<p>Well, I dug in the codebase for a couple hours, trying to figure out everything, and it finally made sense.</p>

<p>FR, FS and FK are just arrays that are mapped to <code>fns_regular</code>, <code>fns_special</code> and <code>fns_keypad</code> arrays in the same file respectively. This is all explained on the <code>firmware/src/README.md</code>.</p>

<p>The number (such as 6 on <code>FR(6)</code>) given as argument is the index from said array.</p>

<p>An example entry of <code>REG_FN(KC_Z, KC_NUBS)</code> means that default action is <code>KC_Z</code>, while action when Fn is held down is <code>KC_NUBS</code>.</p>

<p><code>KC</code> means keycode, and they&#39;re mapped in <code>firmware/src/include/keycodes.h</code>. Do note that not all descriptions are correct in practice though, one example is that <code>KC_SYSTEM_POWER</code> says <code>0xA5</code>, but <code>0xA5</code> is actually used for brightness up (I explain why this is the case later).</p>

<p>The <code>R()</code> function used on rest of the keyboard are “Regular” keys, ones that have no actions with Fn. They&#39;re directly passed on to their <code>KC_</code> versions.</p>

<p>If you hate yourself, you can also supply regular integers in place of any of the aforementioned functions and anywhere where you see a <code>KC_</code>, and this did help when I was trying to understand how things work.</p>

<p>FK is only able to be used with Fn keys when numlock is open. I&#39;m not exactly sure what the difference of FR and FS are outside of semantics. (Looking at <a href="https://github.com/jackhumbert/pinebook-pro-keyboard-updater/pull/17" rel="nofollow">my own PR</a>, I regret using FR instead of FS as I&#39;m not fitting the semantics properly. Functionality seems the same though.)</p>

<p>I ended up implementing the sleep button combination, and I learned a lot about keyboards while trying to figure out how I could even emulate the power button. I have some links that I used during my adventure at the bottom of this article. <a href="https://github.com/jackhumbert/pinebook-pro-keyboard-updater/pull/17" rel="nofollow">I sent a PR with that patch</a> and it got merged.</p>

<h2 id="the-realization" id="the-realization">The realization</h2>

<p>After asking around on the Pine64 <a href="/ave/tag:pinebook" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">pinebook</span></a> channel, I was told by a helpful person that the power button is wired to the SoC directly, and that SoC sends the power key input itself (or rather, that this input was handled by the device tree in the linux kernel and turned into an actual emulated keypress).</p>

<p>Most importantly however, they said that it could be remapped with udev. Now, I had only used udev rules to date,and it got me rather confused as I had no idea how one would remap anything with that. That got me to research how to do that, and I learned about a tool that I never used before: <code>evtest</code>.</p>

<p>And sure enough, I found it:</p>

<p><img src="https://elixi.re/t/ld3gjigis.png" alt="gpio-key-power on evtest&#39;s device list"></p>

<p>Upon picking <code>gpio-key-power</code> and hitting the key, I immediately saw the keypress (this image was taken after the change, so it says <code>KEY_DELETE</code>, before the change it used to say <code>KEY_POWER</code>):</p>

<p><img src="https://elixi.re/t/l43s0gmnd.png" alt="Power key press event on evtest"></p>

<p>Upon more research, I learned how to write <code>hwdb</code> entries in udev, not <code>rules</code>. Similarly, I found an already existing hwdb file in <code>/etc/udev/hwdb.d/10-usb-kbd.hwdb</code>, which explained why the <code>KC_SYSTEM_POWER</code> key was mapped to brightness up: Because the hwdb was set up this way. For reference, here&#39;s what it looks like:</p>

<pre><code>evdev:input:b0003v258Ap001E*
  KEYBOARD_KEY_700a5=brightnessdown
  KEYBOARD_KEY_700a6=brightnessup
  KEYBOARD_KEY_70066=sleep
</code></pre>

<p>This also explained to me why <code>KC_POWER</code> caused a sleep action and not a power key action when done through the builtin keyboard (but not through the dedicated power button).</p>

<h2 id="the-ending" id="the-ending">The ending</h2>

<p>I quickly wrote a hwdb file myself on <code>/etc/udev/hwdb.d/20-power-button.hwdb</code>:</p>

<pre><code>evdev:name:gpio-key-power*
  KEYBOARD_KEY_0=delete
</code></pre>

<p>And upon recreating the hwdb file with <code># systemd-hwdb update</code> and triggering the hwdb with <code># udevadm trigger /dev/input/event2</code>, the power button started working as a proper delete key.</p>

<p><code>evtest</code> saw it as <code>KEY_DELETE</code>, the delay when tapping it rapidly vanished, and stuff like gimp started to acknowledge it. Now I just need to avoid holding it down.</p>

<h2 id="handy-resources" id="handy-resources">Handy resources</h2>
<ul><li>Detailed definitions for the keycodes: <a href="https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md" rel="nofollow">https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md</a></li>
<li>Explanation of the difference between KC<em>POWER and KC</em>SYSTEM<em>POWER (aka KC</em>PWR) (was helpful as I was confused as to why they were different): <a href="https://github.com/qmk/qmk_firmware/issues/1994" rel="nofollow">https://github.com/qmk/qmk_firmware/issues/1994</a></li>
<li>More keycode definitions: <a href="http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc" rel="nofollow">http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc</a></li>
<li>A question from askubuntu that made me realize that udev hwdbs exist: <a href="https://askubuntu.com/questions/877404/how-to-remap-xf86sleep-key-to-space-xmodmap-xkbcomp-udev-fail" rel="nofollow">https://askubuntu.com/questions/877404/how-to-remap-xf86sleep-key-to-space-xmodmap-xkbcomp-udev-fail</a></li>
<li>A blog post that was essential to me figuring out how to use hwdbs: <a href="http://who-t.blogspot.com/2019/02/adding-entries-to-udev-hwdb.html" rel="nofollow">http://who-t.blogspot.com/2019/02/adding-entries-to-udev-hwdb.html</a></li></ul>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/pinebook-pro-keyboard-shenanigans</guid>
      <pubDate>Sun, 15 Mar 2020 21:13:13 +0000</pubDate>
    </item>
    <item>
      <title>WOGSD: ikmon</title>
      <link>https://wf.lavatech.top/ave/wogsd-ikmon</link>
      <description>&lt;![CDATA[Winter of Getting Stuff Done is a seasonal theme I have set for Winter Season of 2020, based on CGP Grey&#39;s video. It&#39;s about getting stuff that I wanted to finish for some time done and not jumping onto new ideas all the time.&#xA;&#xA;I&#39;ve been interested in public transportation for many years, and the systems that are used for collecting fares (as they&#39;re sadly paid). In Istanbul, a mifare desfire EV1 card called istanbulkart is used for this purpose. Here&#39;s the page for it.&#xA;&#xA;!--more--&#xA;&#xA;I use public transportation every single workday, and I try to optimize my path in terms of both cost and time. (And internet connectivity, which is why I try to go for Marmaray whenever I can.)&#xA;&#xA;To help myself (and others) optimize in terms of cost, I wrote up a simple tool after talking about istanbulkart with a coworker today. Specifically, he was trying to decide if he wants to get a &#34;mavi kart&#34; (lit. blue card, a name with your picture, name and ID number on it. Only difference from anonymous card that I know is that it allows you to get a monthly subscription- &#34;abonman&#34;).&#xA;&#xA;I had the idea to write up a quick script to get a sum of all your istanbulkart expenses in the last month, so I wrote a quick script while we were in marmaray.&#xA;&#xA;An early screenshot&#xA;&#xA;(Actually, it didn&#39;t even look like this. It used floats so it was just a big jumbled mess, it didn&#39;t show card name or currency, in fact the card number was hardcoded, and it also didn&#39;t account for refunds, which is also the case on the picture above but not in the final result)&#xA;&#xA;Later in the day I extended the code and cleaned it a lot, and here&#39;s the result: https://gitlab.com/a/ikmon&#xA;&#xA;Output of final result of ikmon&#xA;&#xA;It&#39;s a small project that took me an hour or two to hack together, but I hope you enjoy it regardless.]]&gt;</description>
      <content:encoded><![CDATA[<p><em>Winter of Getting Stuff Done is a seasonal theme I have set for Winter Season of 2020, <a href="https://twitter.com/warnvod/status/1223758199939125249" rel="nofollow">based on CGP Grey&#39;s video</a>. It&#39;s about getting stuff that I wanted to finish for some time done and not jumping onto new ideas all the time.</em></p>

<p>I&#39;ve been interested in public transportation for many years, and the systems that are used for collecting fares (as they&#39;re sadly paid). In Istanbul, a mifare desfire EV1 card called istanbulkart is used for this purpose. <a href="https://www.istanbulkart.istanbul/" rel="nofollow">Here&#39;s the page for it</a>.</p>



<p>I use public transportation every single workday, and I try to optimize my path in terms of both cost and time. (And internet connectivity, which is why I try to go for Marmaray whenever I can.)</p>

<p>To help myself (and others) optimize in terms of cost, I wrote up a simple tool after talking about istanbulkart with a coworker today. Specifically, he was trying to decide if he wants to get a “mavi kart” (lit. blue card, a name with your picture, name and ID number on it. Only difference from anonymous card that I know is that it allows you to get a monthly subscription- “abonman”).</p>

<p>I had the idea to write up a quick script to get a sum of all your istanbulkart expenses in the last month, so I wrote a quick script while we were in marmaray.</p>

<p><img src="https://cdn.discordapp.com/attachments/609280388191223808/681886842760462367/ikmon.png" alt="An early screenshot"></p>

<p>(Actually, it didn&#39;t even look like this. It used floats so it was just a big jumbled mess, it didn&#39;t show card name or currency, in fact the card number was hardcoded, and it also didn&#39;t account for refunds, which is also the case on the picture above but not in the final result)</p>

<p>Later in the day I extended the code and cleaned it a lot, and here&#39;s the result: <a href="https://gitlab.com/a/ikmon" rel="nofollow">https://gitlab.com/a/ikmon</a></p>

<p><img src="https://elixi.re/t/le1ciqf2d.png" alt="Output of final result of ikmon"></p>

<p>It&#39;s a small project that took me an hour or two to hack together, but I hope you enjoy it regardless.</p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/wogsd-ikmon</guid>
      <pubDate>Tue, 25 Feb 2020 17:18:23 +0000</pubDate>
    </item>
    <item>
      <title>WOGSD: Introducing Waluthy, an open source, CLI-based Authy client</title>
      <link>https://wf.lavatech.top/ave/wogsd-introducing-waluthy-an-open-source-cli-based-authy-client</link>
      <description>&lt;![CDATA[Winter of Getting Stuff Done is a seasonal theme I have set for Winter Season of 2020, based on CGP Grey&#39;s video. It&#39;s about getting stuff that I wanted to finish for some time done and not jumping onto new ideas all the time.&#xA;&#xA;I&#39;ve been meaning to figure out a promising alternative to Authy ever since Chrome Apps got killed back in 2017, especially as that was the only way to use Authy on a desktop computer back then.&#xA;&#xA;Since then, Authy made their own electron app, which is the same thing as the chrome app, it just runs a separate chromium instance.&#xA;&#xA;Image of the Authy Desktop app, courtesy of ArsTechnica&#xA;&#xA;Initially, this covered my needs. I could access my tokens on my laptop, and that&#39;s sort of all I asked for.&#xA;&#xA;But each time I launched it, waited for a couple seconds for it to load, scrambled in it to find the right entry, hit copy, alt-tabbed, pasted, alt-tabbed again and shut down Authy Desktop, I died a bit more inside. It just took too long, and required way too much interaction. Surely, there must be a better way to do this, right?&#xA;&#xA;!--more--&#xA;&#xA;Sadly, I couldn&#39;t find any. So I took my time reverse engineering Authy, and hackily reimplemented the parts I needed to get it to work. It took me a weekend, but I had it done back in November and I did find a crypto weakness (more on that later), though I hadn&#39;t implemented everything back then. Notably, while I had code for Authy OTP generation, I hadn&#39;t actually implemented the API for it, especially as it had a more sophisticated sync mechanism.&#xA;&#xA;State of early Waluthy&#xA;&#xA;Still, out of dozens of keys, only 3 required use me to launch Authy&#39;s desktop app, which was good enough. And I could just drop to a terminal, type cauthy hetz and I&#39;d immediately have Hetzner&#39;s TOTP code in my clipboard.&#xA;&#xA;Sadly (and thankfully), the &#34;died inside more as I did this&#34; thing still happened ever time I had to do it. I wanted to implement other stuff I wanted to implement, but my laziness kept winning.&#xA;&#xA;Until today (well, yesterday).&#xA;&#xA;Waluthy&#xA;&#xA;Yesterday night, I sat down and started implementing more and more APIs.&#xA;&#xA;After an hour or two, I got far enough that I was able to do authentication:&#xA;&#xA;Authentication prompt on phone&#xA;&#xA;After a short break, I returned and implemented Authy TOTPs:&#xA;&#xA;Me getting both regular and Authy TOTPs in a row&#xA;&#xA;I asked for a better name for the project than &#34;authy-cli&#34;, especially as I wanted to make it clear that it&#39;s not affiliated with Authy, so I asked in our discord guild. This particular reply led to the cursed name of the project:&#xA;&#xA;&#34;you always name your projects stupid shit: authy wauthy&#34; - &#34;I... I was thinking cauthy, but I&#39;m now tempted to call it waluthy&#34;&#xA;&#xA;After this I extended argparser support so that I could have authentication, sync and token copying etc done from one single script, and finally implemented an interactive authentication:&#xA;&#xA;Interactive authentication&#xA;&#xA;And I silently released it around UTC+3 4AM. The release was silent mostly because I wanted to get some more work done on it before I posted it (also I wanted this blog post done).&#xA;&#xA;Still, the people that I shared it with seemed to enjoy it, because there were cool logo ideas (by julian, eden, eden and me). I went with the second from last one there by eden for reasons.&#xA;&#xA;Today, I went back and fixed a couple bugs, moved accounts into config file and implemented a local encryption feature (hopefully without the same crypto weaknesses I detailed below) so that data isn&#39;t stored plaintext.&#xA;&#xA;Waluthy functioning with crypto&#xA;&#xA;I think it&#39;s ready enough for me to make a less-silent release, so here it is. The louder release of Waluthy.&#xA;&#xA;Enjoy: https://gitlab.com/a/waluthy&#xA;&#xA;The (Small) Crypto Weaknesses&#xA;&#xA;Basically, there&#39;s 2 weaknesses that I spotted, both related to the &#34;Backup Password&#34; feature:&#xA;&#xA;The IV is 0x00*16, effectively meaning that their AES-128-CBC is actually AES-128-ECB.&#xA;&#xA;The key is derived using PBKDF2 HMAC using user&#39;s password, which is good. However, depending on the settings you use, it can be a make or break. Authy uses SHA1 with 1000 rounds.&#xA;&#xA;Going by this old, 2017 gist, you can get upwards of 101.3 GH/s with a 8x1080Ti rig, which, if I&#39;m interpreting stuff properly, means around 100M password attempts per second.&#xA;&#xA;Neither of these are big issues, but all in all I do not trust the backup password feature to protect my TOTP tokens anymore in the event that my Authy account (or Authy servers) get breached.&#xA;&#xA;Why didn&#39;t I report these to Authy, you might ask. Simple: They&#39;re owned by Twilio, and their bugcrowd is shared with Twilio. While it is in scope...&#xA;&#xA;Authy in &#34;in scope&#34; list&#xA;&#xA;It is considered &#34;Other&#34;, which means that I&#39;d practically get no bounty nor kudos for this:&#xA;&#xA;Payouts for different scopes and authy not being in primary or secondary scopes, meaning Nothing to $500&#xA;&#xA;I&#39;m fine with that, it&#39;s a free service without ads or in-app purchases after all, but...&#xA;&#xA;Disclosures not allowed, even after bug is fixed&#xA;&#xA;Yeah, no, that&#39;s not okay. Users deserve to know that this is the case, or if it gets fixed, was the case.]]&gt;</description>
      <content:encoded><![CDATA[<p><em>Winter of Getting Stuff Done is a seasonal theme I have set for Winter Season of 2020, <a href="https://twitter.com/warnvod/status/1223758199939125249" rel="nofollow">based on CGP Grey&#39;s video</a>. It&#39;s about getting stuff that I wanted to finish for some time done and not jumping onto new ideas all the time.</em></p>

<p>I&#39;ve been meaning to figure out a promising alternative to Authy ever since <a href="https://arstechnica.com/gadgets/2017/12/google-shuts-down-the-apps-section-of-the-chrome-web-store/" rel="nofollow">Chrome Apps got killed back in 2017</a>, especially as that was the only way to use Authy on a desktop computer back then.</p>

<p>Since then, Authy made their own electron app, which is the same thing as the chrome app, it just runs a separate chromium instance.</p>

<p><img src="https://elixi.re/t/lofpx27bb.png" alt="Image of the Authy Desktop app, courtesy of ArsTechnica"></p>

<p>Initially, this covered my needs. I could access my tokens on my laptop, and that&#39;s sort of all I asked for.</p>

<p>But each time I launched it, waited for a couple seconds for it to load, scrambled in it to find the right entry, hit copy, alt-tabbed, pasted, alt-tabbed again and shut down Authy Desktop, I died a bit more inside. It just took too long, and required way too much interaction. Surely, there must be a better way to do this, right?</p>



<p>Sadly, I couldn&#39;t find any. So I took my time reverse engineering Authy, and hackily reimplemented the parts I needed to get it to work. It took me a weekend, but I had it done back in November and I did find a crypto weakness (more on that later), though I hadn&#39;t implemented everything back then. Notably, while I had code for Authy OTP generation, I hadn&#39;t actually implemented the API for it, especially as it had a more sophisticated sync mechanism.</p>

<p><img src="https://elixi.re/t/l9f377dyq.png" alt="State of early Waluthy"></p>

<p>Still, out of dozens of keys, only 3 required use me to launch Authy&#39;s desktop app, which was good enough. And I could just drop to a terminal, type <code>cauthy hetz</code> and I&#39;d immediately have Hetzner&#39;s TOTP code in my clipboard.</p>

<p>Sadly (and thankfully), the “died inside more as I did this” thing still happened ever time I had to do it. I wanted to implement other stuff I wanted to implement, but my laziness kept winning.</p>

<p>Until today (well, yesterday).</p>

<h2 id="waluthy" id="waluthy">Waluthy</h2>

<p>Yesterday night, I sat down and started implementing more and more APIs.</p>

<p>After an hour or two, I got far enough that I was able to do authentication:</p>

<p><img src="https://elixi.re/t/ln5j756fz.jpg" alt="Authentication prompt on phone"></p>

<p>After a short break, I returned and implemented Authy TOTPs:</p>

<p><img src="https://elixi.re/t/ljn6nlz42.png" alt="Me getting both regular and Authy TOTPs in a row"></p>

<p>I asked for a better name for the project than “authy-cli”, especially as I wanted to make it clear that it&#39;s not affiliated with Authy, so I asked in our discord guild. This particular reply led to the cursed name of the project:</p>

<p><img src="https://elixi.re/t/l7p1q19e9.png" alt="&#34;you always name your projects stupid shit: authy wauthy&#34; - &#34;I... I was thinking cauthy, but I&#39;m now tempted to call it waluthy&#34;"></p>

<p>After this I extended argparser support so that I could have authentication, sync and token copying etc done from one single script, and finally implemented an interactive authentication:</p>

<p><img src="https://elixi.re/t/lhzsrst93.png" alt="Interactive authentication"></p>

<p>And I silently released it around UTC+3 4AM. The release was silent mostly because I wanted to get some more work done on it before I posted it (also I wanted this blog post done).</p>

<p>Still, the people that I shared it with seemed to enjoy it, because <a href="https://media.discordapp.net/attachments/423137608151859201/674058202093977600/unknown.png" rel="nofollow">there were</a> <a href="https://cdn.discordapp.com/attachments/545685659701084161/674058244666163210/unknown.png" rel="nofollow">cool</a> <a href="https://cdn.discordapp.com/attachments/545685659701084161/674062457421037602/l.png" rel="nofollow">logo</a> <a href="https://media.discordapp.net/attachments/545685659701084161/674058285808353290/waluthy-logo.png" rel="nofollow">ideas</a> (by julian, eden, eden and me). I went with <a href="https://cdn.discordapp.com/attachments/545685659701084161/674062457421037602/l.png" rel="nofollow">the second from last one there</a> by <a href="https://edensg.me" rel="nofollow">eden</a> for <a href="https://elixi.re/t/l128lr8vw.png" rel="nofollow">reasons</a>.</p>

<p>Today, I went back and fixed a couple bugs, moved accounts into config file and implemented a local encryption feature (hopefully without the same crypto weaknesses I detailed below) so that data isn&#39;t stored plaintext.</p>

<p><img src="https://elixi.re/t/lv28jszww.png" alt="Waluthy functioning with crypto"></p>

<p>I think it&#39;s ready enough for me to make a less-silent release, so here it is. The louder release of Waluthy.</p>

<p>Enjoy: <a href="https://gitlab.com/a/waluthy" rel="nofollow">https://gitlab.com/a/waluthy</a></p>

<h2 id="the-small-crypto-weaknesses" id="the-small-crypto-weaknesses">The (Small) Crypto Weaknesses</h2>

<p>Basically, there&#39;s 2 weaknesses that I spotted, both related to the “Backup Password” feature:</p>
<ul><li><p>The IV is 0x00*16, effectively meaning that their AES-128-CBC is actually AES-128-ECB.</p></li>

<li><p>The key is derived using PBKDF2 HMAC using user&#39;s password, which is good. However, depending on the settings you use, it can be a make or break. Authy uses SHA1 with 1000 rounds.</p></li></ul>

<p><a href="https://gist.github.com/epixoip/ace60d09981be09544fdd35005051505" rel="nofollow">Going by this old, 2017 gist</a>, you can get upwards of 101.3 GH/s with a 8x1080Ti rig, which, if I&#39;m interpreting stuff properly, means around 100M password attempts per second.</p>

<p>Neither of these are big issues, but all in all I do not trust the backup password feature to protect my TOTP tokens anymore in the event that my Authy account (or Authy servers) get breached.</p>

<p>Why didn&#39;t I report these to Authy, you might ask. Simple: They&#39;re owned by Twilio, and their bugcrowd is shared with Twilio. While it is in scope...</p>

<p><img src="https://elixi.re/t/luj981drl.png" alt="Authy in &#34;in scope&#34; list"></p>

<p>It is considered “Other”, which means that I&#39;d practically get no bounty nor kudos for this:</p>

<p><img src="https://elixi.re/t/lq7ef3akb.png" alt="Payouts for different scopes and authy not being in primary or secondary scopes, meaning Nothing to $500"></p>

<p>I&#39;m fine with that, it&#39;s a free service without ads or in-app purchases after all, but...</p>

<p><img src="https://elixi.re/t/lxtztz50x.png" alt="Disclosures not allowed, even after bug is fixed"></p>

<p>Yeah, no, that&#39;s not okay. Users deserve to know that this is the case, or if it gets fixed, was the case.</p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/wogsd-introducing-waluthy-an-open-source-cli-based-authy-client</guid>
      <pubDate>Mon, 03 Feb 2020 21:06:23 +0000</pubDate>
    </item>
    <item>
      <title>WOGSD: Physically removing the buzzer from ACR122U</title>
      <link>https://wf.lavatech.top/ave/wogsd-physically-removing-the-buzzer-from-acr122u</link>
      <description>&lt;![CDATA[Winter of Getting Stuff Done is a seasonal theme I have set for Winter Season of 2020, based on CGP Grey&#39;s video. It&#39;s about getting stuff that I wanted to finish for some time done and not jumping onto new ideas all the time.&#xA;&#xA;The issue at hand&#xA;&#xA;ACS ACR122U is an inexpensive NFC reader/writer based on the NXP PN532 chip. It&#39;s what I do most of my NFC experimentation on.&#xA;&#xA;Other than the limitations of it, I have one big issue with it: It has a loud, monotone buzzer.&#xA;&#xA;!--more--&#xA;&#xA;Datasheet of ACR122U showing the buzzer, saying that it&#39;s monotone&#xA;&#xA;You can disable it of course...&#xA;&#xA;ACR122U API document showing APDU format to disable the buzzer&#xA;&#xA;However it obviously does not persist between connections, and you cannot send APDUs to it unless there&#39;s a card on it. And it buzzes when it detects a card.&#xA;&#xA;So, there&#39;s no easy way to prevent the buzzer from making a noise at least once using software alone, which I was reminded about again today by linuxgemini:&#xA;&#xA;Linuxgemini&#39;s message pretty much summing up the section above&#xA;&#xA;How I solved it&#xA;&#xA;I already had my soldering iron and screwdrivers out from some stuff I was tinkering with this morning, and had my ACR122U out from last night. That made me wonder if there was an easy way to get rid of the buzzer.&#xA;&#xA;I looked around on internet to see if anyone had done it before, but I couldn&#39;t find anything. Closest thing to an internal view I found was this, from this page on NFC Tools wiki.&#xA;&#xA;So I took it apart (fwiw, the 4 screws are under the 4 rubber feet, I recommend putting a small screwdriver under the large sides of the feet to remove them with least pain and damage).&#xA;&#xA;Inside of ACR122U&#xA;&#xA;More inside of ACR122U, nothing too visible as a buzzer&#xA;&#xA;I was a bit baffled as I couldn&#39;t see anything resembling a traditional buzzer, but I suspected that it was the big cube that had 1839+ written on it:&#xA;&#xA;The suspected buzzer&#xA;&#xA;But a quick search for 1839+ buzzer didn&#39;t give me much. However, I saw many similar ICs when I searched for SMD buzzer, which likely meant that I was on the right track:&#xA;&#xA;Google image search for &#34;SMD buzzer&#34;&#xA;&#xA;I searched around more, searching for &#39;1839+&#34; &#34;SMD&#34; buzzer, and found a page selling hard to find parts. One of them included CSS-J4B20-SMT by CUI Inc with date code 1839+:&#xA;&#xA;Aforementioned entry of 1839+ with CSS-J4B20-SMT&#xA;&#xA;I quickly pulled up the page for CSS-J4B20-SMT-TR, and indeed, it was a SMD buzzer. I searched more, and found the datasheet for CSS-J4B20-SMT too, and that was also a SMD buzzer. The one I saw on board didn&#39;t look that much like it, but I pulled out my multimeter and was able to verify that it did indeed have voltage flowing in this direction when it beeped.&#xA;&#xA;So, I desoldered it. This is my first time actually desoldering an IC, so I&#39;m happy that I managed to do so without damaging anything nearby (except a tiny bit of internal plastic, but it doesn&#39;t cause harm):&#xA;&#xA;Inside of ACR122U with the buzzer removed&#xA;&#xA;One concern we had with linuxgemini was that it may have been used as a resistor too, and I was worried that I might end up needing to solder a resistor in its place to make it work, but thankfully (as I am horrible with electrical engineering stuff) I didn&#39;t need to. I verified that it worked by reading the entirety of a card before closing it back up, and it succeeded.&#xA;&#xA;So now I have an ACR122U that will never ever buzz again. Hurray. That&#39;s what I call a success. (And now I&#39;m tempted to practice removing more ICs by borrowing linuxgemini&#39;s ACR122U and desoldering the buzzer on that too).]]&gt;</description>
      <content:encoded><![CDATA[<p><em>Winter of Getting Stuff Done is a seasonal theme I have set for Winter Season of 2020, <a href="https://twitter.com/warnvod/status/1223758199939125249" rel="nofollow">based on CGP Grey&#39;s video</a>. It&#39;s about getting stuff that I wanted to finish for some time done and not jumping onto new ideas all the time.</em></p>

<h2 id="the-issue-at-hand" id="the-issue-at-hand">The issue at hand</h2>

<p>ACS ACR122U is an inexpensive NFC reader/writer based on the NXP PN532 chip. It&#39;s what I do most of my NFC experimentation on.</p>

<p>Other than the limitations of it, I have one big issue with it: It has a loud, monotone buzzer.</p>



<p><img src="https://elixi.re/t/lto6rornw.png" alt="Datasheet of ACR122U showing the buzzer, saying that it&#39;s monotone"></p>

<p>You can disable it of course...</p>

<p><img src="https://elixi.re/t/lrw2g4i55.png" alt="ACR122U API document showing APDU format to disable the buzzer"></p>

<p>However it obviously does not persist between connections, and you cannot send APDUs to it unless there&#39;s a card on it. And it buzzes when it detects a card.</p>

<p>So, there&#39;s no easy way to prevent the buzzer from making a noise at least once using software alone, which I was reminded about again today by linuxgemini:</p>

<p><img src="https://elixi.re/t/lxjnqnh78.png" alt="Linuxgemini&#39;s message pretty much summing up the section above"></p>

<h2 id="how-i-solved-it" id="how-i-solved-it">How I solved it</h2>

<p>I already had my soldering iron and screwdrivers out from some stuff I was tinkering with this morning, and had my ACR122U out from last night. That made me wonder if there was an easy way to get rid of the buzzer.</p>

<p>I looked around on internet to see if anyone had done it before, but I couldn&#39;t find anything. <a href="https://elixi.re/t/li8v6p86f.jpg" rel="nofollow">Closest thing to an internal view I found was this</a>, from <a href="http://nfc-tools.org/index.php/ACR122" rel="nofollow">this page on NFC Tools wiki</a>.</p>

<p>So I took it apart (fwiw, the 4 screws are under the 4 rubber feet, I recommend putting a small screwdriver under the large sides of the feet to remove them with least pain and damage).</p>

<p><img src="https://elixi.re/t/ly715n63a.jpg" alt="Inside of ACR122U"></p>

<p><img src="https://elixi.re/t/loiwz9w38.jpg" alt="More inside of ACR122U, nothing too visible as a buzzer"></p>

<p>I was a bit baffled as I couldn&#39;t see anything resembling a traditional buzzer, but I suspected that it was the big cube that had <code>1839+</code> written on it:</p>

<p><img src="https://elixi.re/t/lokmnt39z.jpg" alt="The suspected buzzer"></p>

<p>But a quick search for <code>1839+ buzzer</code> didn&#39;t give me much. However, I saw many similar ICs when I searched for <code>SMD buzzer</code>, which likely meant that I was on the right track:</p>

<p><img src="https://i.elixi.re/t/l2up9ar2s.png" alt="Google image search for &#34;SMD buzzer&#34;"></p>

<p>I searched around more, searching for <code>&#39;1839+&#34; &#34;SMD&#34; buzzer</code>, and found a page selling hard to find parts. One of them included <code>CSS-J4B20-SMT</code> by CUI Inc with date code <code>1839+</code>:</p>

<p><img src="https://i.elixi.re/t/lmefsyr1t.png" alt="Aforementioned entry of 1839+ with CSS-J4B20-SMT"></p>

<p>I quickly pulled up the <a href="https://www.cuidevices.com/product/audio/buzzers/audio-transducers/css-j4b20-smt-tr" rel="nofollow">page for CSS-J4B20-SMT<strong>-TR</strong></a>, and indeed, it was a SMD buzzer. I searched more, and <a href="https://elixi.re/t/lh9m504a3.pdf" rel="nofollow">found the datasheet for CSS-J4B20-SMT too</a>, and that was also a SMD buzzer. The one I saw on board didn&#39;t look that much like it, but I pulled out my multimeter and was able to verify that it did indeed have voltage flowing <a href="https://elixi.re/t/lan1gmxop.jpg" rel="nofollow">in this direction</a> when it beeped.</p>

<p>So, I desoldered it. This is my first time actually desoldering an IC, so I&#39;m happy that I managed to do so without damaging anything nearby (except a tiny bit of internal plastic, but it doesn&#39;t cause harm):</p>

<p><img src="https://elixi.re/t/l3dv8v5iq.jpg" alt="Inside of ACR122U with the buzzer removed"></p>

<p>One concern we had with linuxgemini was that it may have been used as a resistor too, and I was worried that I might end up needing to solder a resistor in its place to make it work, but thankfully (as I am horrible with electrical engineering stuff) I didn&#39;t need to. I verified that it worked by reading the entirety of a card before closing it back up, and it succeeded.</p>

<p>So now I have an ACR122U that will never ever buzz again. Hurray. That&#39;s what I call a success. (And now I&#39;m tempted to practice removing more ICs by borrowing linuxgemini&#39;s ACR122U and desoldering the buzzer on that too).</p>
]]></content:encoded>
      <guid>https://wf.lavatech.top/ave/wogsd-physically-removing-the-buzzer-from-acr122u</guid>
      <pubDate>Sun, 02 Feb 2020 14:10:55 +0000</pubDate>
    </item>
  </channel>
</rss>