<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: rushter</title><link>https://news.ycombinator.com/user?id=rushter</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 28 Apr 2026 18:18:57 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rushter" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: Hexora – detection and analysis of malicious Python scripts]]></title><description><![CDATA[
<p>I made a new library to detect malicious and harmful behaviour in Python scripts. It uses static analysis with semantic modeling. Even when the code is pretty obfuscated, it can still detect it.<p>For example, it can infer that<p><pre><code>    getattr(sys.modules["built"+"ins"], "".join(reversed(["al","ev"])))("1+1")

</code></pre>
Is basically:<p><pre><code>    eval("1+1").

</code></pre>
Currently, I'm testing it on public files where some of them implement malicious behavior, as well as past malicious packages on PyPI.<p>You can see some of the detection examples here:
<a href="https://github.com/rushter/hexora/blob/main/docs/examples.md" rel="nofollow">https://github.com/rushter/hexora/blob/main/docs/examples.md</a><p>I'd love to hear your feedback and ideas on how to improve this and identify missing rules.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44996104">https://news.ycombinator.com/item?id=44996104</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 23 Aug 2025 14:08:34 +0000</pubDate><link>https://github.com/rushter/hexora</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=44996104</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44996104</guid></item><item><title><![CDATA[Show HN: Hexora – static analysis tool for malicious Python scripts]]></title><description><![CDATA[
<p>I made a new library to detect malicious and harmful behaviour in Python scripts.<p>There are alternative libraries, but they usually rely on regexes, which can be fragile and tricked. My library uses AST and tracks some of the obfuscation techniques, such as import/call reassignment.<p>Currently, I'm testing it on public files where some of them implement malicious behavior, as well as past malicious packages on PyPI.<p>You can see some of the detection examples here:<p><a href="https://github.com/rushter/hexora/blob/main/docs/examples.md" rel="nofollow">https://github.com/rushter/hexora/blob/main/docs/examples.md</a><p>I'd love to hear your feedback and ideas on how to improve this and identify missing rules.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44957024">https://news.ycombinator.com/item?id=44957024</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 19 Aug 2025 22:58:11 +0000</pubDate><link>https://github.com/rushter/hexora</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=44957024</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44957024</guid></item><item><title><![CDATA[New comment by rushter in "Ask HN: Could you share your personal blog here?"]]></title><description><![CDATA[
<p><a href="https://rushter.com" rel="nofollow noreferrer">https://rushter.com</a><p>Most of my posts are about Python's internals and some security stuff</p>
]]></description><pubDate>Tue, 04 Jul 2023 17:41:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=36590023</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=36590023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36590023</guid></item><item><title><![CDATA[How to turn an ordinary gzip archive into a database]]></title><description><![CDATA[
<p>Article URL: <a href="https://rushter.com/blog/gzip-indexing/">https://rushter.com/blog/gzip-indexing/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=24270880">https://news.ycombinator.com/item?id=24270880</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 25 Aug 2020 13:04:34 +0000</pubDate><link>https://rushter.com/blog/gzip-indexing/</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=24270880</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24270880</guid></item><item><title><![CDATA[New comment by rushter in "How to track and display profile views on GitHub"]]></title><description><![CDATA[
<p>Github does not send any extra information.<p><pre><code>    "GET /counter.svg HTTP/1.1" 200 565 "-" "github-camo (62249a1c)"

</code></pre>
I've reverted the badge.</p>
]]></description><pubDate>Thu, 09 Jul 2020 15:42:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=23781448</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23781448</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23781448</guid></item><item><title><![CDATA[New comment by rushter in "How to track and display profile views on GitHub"]]></title><description><![CDATA[
<p>You can't view profile statistics right now.
Personally, my intent was to demonstrate the concept.
I don't have plans using it.</p>
]]></description><pubDate>Thu, 09 Jul 2020 15:40:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=23781430</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23781430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23781430</guid></item><item><title><![CDATA[New comment by rushter in "How to track and display profile views on GitHub"]]></title><description><![CDATA[
<p>I've removed it because it does not display relevant information anymore (someone fetches ten times a second via wget).<p>I also don't have plans to use it in the future. I wanted to demonstrate the concept.</p>
]]></description><pubDate>Thu, 09 Jul 2020 15:38:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=23781409</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23781409</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23781409</guid></item><item><title><![CDATA[New comment by rushter in "How to track and display profile views on GitHub"]]></title><description><![CDATA[
<p>You can check it here <a href="https://github.com/dwyl/hits" rel="nofollow">https://github.com/dwyl/hits</a><p>Also <a href="https://twitter.com/holman/status/427937383376379904" rel="nofollow">https://twitter.com/holman/status/427937383376379904</a></p>
]]></description><pubDate>Thu, 09 Jul 2020 15:18:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=23781187</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23781187</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23781187</guid></item><item><title><![CDATA[New comment by rushter in "How to track and display profile views on GitHub"]]></title><description><![CDATA[
<p>I agree, but I think such information should be available to all people.
Some people will be doing this anyway, and they can hide this by using a transparent pixel.</p>
]]></description><pubDate>Thu, 09 Jul 2020 14:58:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=23780990</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23780990</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23780990</guid></item><item><title><![CDATA[New comment by rushter in "How to track and display profile views on GitHub"]]></title><description><![CDATA[
<p>I did some research before writing an article. GitHub started proxying images in 2014, and there are a lot of repositories that use this technique to keep their stats. I think GitHub is OK with that.</p>
]]></description><pubDate>Thu, 09 Jul 2020 14:56:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=23780962</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23780962</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23780962</guid></item><item><title><![CDATA[How to track and display profile views on GitHub]]></title><description><![CDATA[
<p>Article URL: <a href="https://rushter.com/blog/github-profile-markdown/">https://rushter.com/blog/github-profile-markdown/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=23780530">https://news.ycombinator.com/item?id=23780530</a></p>
<p>Points: 208</p>
<p># Comments: 108</p>
]]></description><pubDate>Thu, 09 Jul 2020 14:21:04 +0000</pubDate><link>https://rushter.com/blog/github-profile-markdown/</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=23780530</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23780530</guid></item><item><title><![CDATA[New comment by rushter in "Memory Management in Python"]]></title><description><![CDATA[
<p>Yes, it can, by calling the free function.<p>Which framework do you use for deep learning? It can allocate some object on its own.<p>Can you give me some stats when using a model and after it's no longer in use and can't be accessible?  You can get it by calling the sys._debugmallocstats() function.</p>
]]></description><pubDate>Mon, 05 Aug 2019 15:15:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=20614829</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=20614829</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20614829</guid></item><item><title><![CDATA[New comment by rushter in "Memory Management in Python"]]></title><description><![CDATA[
<p>Author of the article here.<p>I don't think system allocators are clever enough to process and allocate 100-500k of very small objects each minute when Python is performing something very intensive.<p>It's a pretty standard way to speedup allocation for dynamic languages. Game developers use similar techniques as well.<p>I have some stats on Python's allocator:<p><a href="https://rushter.com/blog/python-object-allocation-statistics/" rel="nofollow">https://rushter.com/blog/python-object-allocation-statistics...</a></p>
]]></description><pubDate>Mon, 05 Aug 2019 05:51:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=20611599</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=20611599</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20611599</guid></item><item><title><![CDATA[New comment by rushter in "Optimization tricks in Python: lists and tuples"]]></title><description><![CDATA[
<p>My article describes the tricks which are used inside the Python <i>interpreter</i>. Every improvement in the interpreter saves an insane amount of computing power considering its popularity.</p>
]]></description><pubDate>Thu, 14 Jun 2018 18:52:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=17314324</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=17314324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17314324</guid></item><item><title><![CDATA[New comment by rushter in "Optimization tricks in Python: lists and tuples"]]></title><description><![CDATA[
<p>Maybe I've missed something, but you can also get the same id (it's basically an address in the memory) because of the how memory allocation works. There is a special allocator in CPython, which preallocates big chunks of memory and constantly reusing it without allocation overhead. I have an article on this too.</p>
]]></description><pubDate>Thu, 14 Jun 2018 17:59:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=17313786</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=17313786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17313786</guid></item><item><title><![CDATA[New comment by rushter in "Optimization tricks in Python: lists and tuples"]]></title><description><![CDATA[
<p>Thanks, it's a typo, I was referring to the mutable object (list).</p>
]]></description><pubDate>Thu, 14 Jun 2018 13:21:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=17311449</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=17311449</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17311449</guid></item><item><title><![CDATA[Writing a simple SOCKS server in Python]]></title><description><![CDATA[
<p>Article URL: <a href="https://rushter.com/blog/python-socks-server/">https://rushter.com/blog/python-socks-server/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=16911429">https://news.ycombinator.com/item?id=16911429</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 24 Apr 2018 10:48:17 +0000</pubDate><link>https://rushter.com/blog/python-socks-server/</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=16911429</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16911429</guid></item><item><title><![CDATA[Show HN: Python bindings to Modest engine (fast HTML parser with CSS selectors)]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/rushter/selectolax#">https://github.com/rushter/selectolax#</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=15820705">https://news.ycombinator.com/item?id=15820705</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 30 Nov 2017 23:43:06 +0000</pubDate><link>https://github.com/rushter/selectolax#</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=15820705</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15820705</guid></item><item><title><![CDATA[Things you should know about garbage collection in Python]]></title><description><![CDATA[
<p>Article URL: <a href="http://rushter.com/blog/python-garbage-collector/#">http://rushter.com/blog/python-garbage-collector/#</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=15424480">https://news.ycombinator.com/item?id=15424480</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 07 Oct 2017 16:44:39 +0000</pubDate><link>http://rushter.com/blog/python-garbage-collector/#</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=15424480</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15424480</guid></item><item><title><![CDATA[CPython internals: Arbitrary-precision integer implementation]]></title><description><![CDATA[
<p>Article URL: <a href="https://rushter.com/blog/python-integer-implementation/">https://rushter.com/blog/python-integer-implementation/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=15285737">https://news.ycombinator.com/item?id=15285737</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 19 Sep 2017 15:55:10 +0000</pubDate><link>https://rushter.com/blog/python-integer-implementation/</link><dc:creator>rushter</dc:creator><comments>https://news.ycombinator.com/item?id=15285737</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15285737</guid></item></channel></rss>