Moyix
moyix.blogspot.com · Personal blog · on HN since 2013
Brendan Dolan-Gavitt (Moyix) writes about security research, dynamic analysis tools like PANDA, fuzzing, and bug injection.
What HN saysHN links it mainly for the post on -ffast-math in a shared library disabling subnormal numbers across a whole program, as in the gevent and numpy case.
27HN people shared it
18linked it in comments
17stories submitted
1.2Kstory points
1 year agolast shared
2013people per year2026
Most-shared posts
- 1Someone’s Been Messing with My Subnormals9 people · 651 points · first shared 2022 · 127 comments on HN
- 2Breaking Spotify DRM with PANDA6 people · 290 points · first shared 2014 · 107 comments on HN
- 3On building 30k Debian packages3 people · 142 points · first shared 2022 · 42 comments on HN
- 4Reproducible Malware Analyses for All2 people · 1 points · first shared 2014 · discussion on HN
- 5PANDA: a Platform for Architecture-Neutral Dynamic Analysis2 people · 1 points · first shared 2013 · discussion on HN
- 6Someones been messing with my subnormals2 people · first shared 2023
- 7Fuzzing with AFL is an Art1 people · 109 points · first shared 2016 · 7 comments on HN
- 8How to add a million bugs to a program, and why you might want to1 people · 42 points · first shared 2016 · 24 comments on HN
- 9The Mechanics of Bug Injection with LAVA1 people · 4 points · first shared 2016 · discussion on HN
- 10100 Days of Malware1 people · 2 points · first shared 2015 · discussion on HN
- 11A couple ideas that went nowhere1 people · 1 points · first shared 2018 · discussion on HN
- 12Syskey and sam1 people · first shared 2022
- 13How to add a million bugs to a program1 people · first shared 2016
- 14Parsing windows minidumps1 people · first shared 2015
- 15Breaking spotify drm with panda1 people · first shared 2017
What HN people wrote when they linked it
moyix · 2021-10-21
I'm not going to try to debate the merits of Twitter threads vs blog posts, but I will note that I, like many others, have an abandoned blog [1] but manage to post plenty of Twitter threads. The activation energy needed is just way lower on Twitter, and (as an academic) if I need to write something much more serious it'll usually be a paper.
If you want people to blog more and tweet less, you probably have to find a way to make it easier than firing off a tweet thread.
Edit: Also, I have to say – if blogs are such an inherently superior readability experience, why is engagement so much higher for Twitter? Perhaps it's shallow engagement, but it seems like the height of nerd-think to say that a platform actively used by hundreds of millions is "unusable".
[1] https://moyix.blogspot.com/
dapperdrake · 2024-09-09
Someone else beat me to it. Will answer anyway.
Had a very similar experience to yours with one important exception. The visitor pattern is relevant for traversing ASTs in single dispatch languages. Most notably, this includes Java and C++.
The alternative concept is multiple dispatch and it is way more anti-fragile.
This is where the next step in college literally was to learn the concept of cargo-culting. The concept of multiple dispatch is considerably more useful than single dispatch.
Many years later the realization hit, that OOP, singletons, DB mocking and monads are the hard parts [1,2]. Then you can even skip multiple dispatch in favor of low latency. C++ wants this but its ecosystem has no idea (as in zero) of how to get there [3,4,5,6] (-Ofast -fno-fast-math). Then the "Patterns" (capital P) melt away.
On a semi-related note, it seems worth pondering whether strict typing requirements and/or a missing garbage collector make macro programming and AST work so hard in non-lisp languages. Think I read somewhere that some people considered Rust macros hard. Sounded like they were harder than they should be, which means that the language designers piled on incidental complexity. Macros are difficult enough as it is. And worth it. Even Python pilfered the "with" syntax.
[1] http://somethingdoneright.net/2015/07/30/when-object-orientation-works…
[2] https://lobste.rs/s/vbivyq/synchronous_core_asynchronous_shell
[3]…
zahlman · 2025-08-14
On the other hand, it feels wrong to me to call these "myths" when they are really just simplifications.
(And I have heard of the 80-bit internal register thing described in https://news.ycombinator.com/item?id=44888692 causing real problems for people before. And --ffast-math is basically spooky action at a distance considering how it bleeds into the entire program; see e.g. https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno…
minetest2048 · 2025-05-24
This also happened in python ecosystem where gevent were messing with numpy because gevent was compiled with -ffast-math, which disables subnormal numbers
Blog post: https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno… HN discussion: https://news.ycombinator.com/item?id=41212072
pdw · 2024-06-22
That's not really true. If you link a shared library that was compiled with -ffast-math, that will affect the entire program. https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno…
jstrieb · 2024-03-11
One of the original PANDA authors wrote a really interesting companion blog post in 2014 about using it to break Spotify DRM.
https://moyix.blogspot.com/2014/07/breaking-spotify-drm-with-panda.htm…
That post also got a lot of attention on Hacker News.
https://news.ycombinator.com/item?id=7989490
woodruffw · 2024-02-15
> I also recall a blog post where someone was scanning PyPI for malicious Python packages, only to realize that `pip download` also executed code.
I think you're thinking of this post[1]. The code being searched for wasn't malicious, just buggy :-)
[1]: https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno…
legobmw99 · 2023-04-27
This was an issue in the Python packaging ecosystem recently: https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno…
chisquared · 2023-02-20
> even package managers like pip
This reminds me of a blog post [1] I read before. Pertinent quote:
> Unbeknownst to me, even with --dry-run pip will execute arbitrary code found in the package's setup.py. In fact, merely asking pip to download a package can execute arbitrary code (see pip issues 7325 [2] and 1884 [3] for more details)!
Also seen on Twitter [4].
[1] https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno…
[2] https://github.com/pypa/pip/issues/7325
[3] https://github.com/pypa/pip/issues/1884
[4] https://twitter.com/moyix/status/1566561433898426368
ChrisRackauckas · 2023-01-05
I would. It's much safer than Python which has a package ecosystem that is known to be critically unsafe. https://pytorch.org/blog/compromised-nightly-dependency/ is just the latest example of security issues it's been having, https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subno… is general numerical incorrectness which is non-local and cannot be turned off, and that's not even getting to the specific inaccuracies of Numba. I'd switch away from a numerically incorrect security issue today!
bitexploder · 2017-06-12
AFL automates this to a large degree. It doesn't do it with the type of machine control and monitoring you are asking for, but if you can instrument it with AFL, this is a perfect use case for it. It will do the hard work for you.
If you want to control the computer, you have options. Qemu can give you fine grained CPU level logging you want: http://moyix.blogspot.jp/2014/07/breaking-spotify-drm-with-panda.html -- this is an article that walks through logging them instructions. (https://github.com/panda-re/panda)
Finally there are RE frameworks where you can instrument (hook) function calls (Frida being a good cross platform option).
I would try AFL first. But playing with Panda can be really fun too.
(edit: and a colleague just pointed out -- https://github.com/angr, which will also let you work right at the level you want to, I think).
tom_mellior · 2016-10-22
> There was a paper recently (I can't find it) that explored this idea; essentially the authors injected obvious, "should-be detectable" bugs
I think you're thinking of LAVA: http://moyix.blogspot.fr/2016/06/how-to-add-a-million-bugs-to-a-progra…
Wingman4l7 · 2016-01-01
The only work I've seen on breaking Spotify DRM encryption was this[1], back in 2014 and discussed on HN here[2].
[1]: http://moyix.blogspot.com/2014/07/breaking-spotify-drm-with-panda.html
[2]:
js2 · 2015-12-07
Here's an example of fairly extensive use of construct:
http://amnesia.gtisc.gatech.edu/~moyix/minidump.py
Explanation:
http://moyix.blogspot.com/2008/05/parsing-windows-minidumps.html?m=1
scottpiper · 2014-12-19
Moyix's Panda will get you most of what you want: http://moyix.blogspot.com/2014/12/reproducible-malware-analyses-for-al…
joelanders · 2014-10-14
See links for a bit of reading about how hard it is to break DRM on Spotify or Netflix. They're doing a lot more than Snapchat. The difference between "you just need to reverse engineer the HTTP API to make a 3rd-party client" and "you need to run IDA Pro and PANDA and whatever else" is significant. The latter exploit would have far less reach.
[1] http://moyix.blogspot.de/2014/07/breaking-spotify-drm-with-panda.html
[2] https://www.usenix.org/node/182951
rememberlenny · 2014-07-04
His other post explains it: http://moyix.blogspot.com/2013/09/announcing-panda-platform-for.html
skissane · 2022-05-11
> lpClass most likely is a class name in COM/OLE sense.
I don't think that is true. In the original Windows 3.1 registry, lpClass did not exist. You only had the RegCreateKey() function which had no lpClass parameter, that parameter was added in RegCreateKeyEx() which was only in NT (and later Windows 95 too).
COM/OLE never used lpClass. Out-of-the-box, very few Windows registry keys have lpClass set, and those that do it is mostly some meaningless value like "Shell" or "Setup", which COM/OLE completely ignores. The one place (that I know of) which it is (or was) actually used, is to store the syskey encryption key [0]. I think using lpClass for that is just abusing it for a bit of security-by-obscurity, it is a way to store data in the registry but hide it from most registry tools (which provide no access to lpClass because almost nobody uses it.) Possibly other people are doing the same thing (to store license keys, detect expiration of trial periods, malware hiding stuff, etc.)
[0] http://moyix.blogspot.com/2008/02/syskey-and-sam.html