D
David Buchanan
da.vidbuchanan.co.uk · Personal blog · on HN since 2021
David Buchanan's blog on hacking, reverse engineering, Python tricks and protocol quirks such as Bluesky's ATProto and PNG file tricks.
What HN saysCommenters cite it on ATProto account migration and identity, a series on a CHIP-8 emulator, and Python SIMD-style tricks.
42HN people shared it
19linked it in comments
40stories submitted
3.2Kstory points
3 months agolast shared
2021people per year2026
Most-shared posts
- 1Adversarial ATProto PDS Migration6 people · 8 points · first shared 2025 · discussion on HN
- 2The Quest for Netflix on Asahi Linux6 people · 5 points · first shared 2023 · discussion on HN
- 3SIMD in Pure Python5 people · 258 points · first shared 2024 · 21 comments on HN
- 4Jailbreaking RabbitOS4 people · 1.1K points · first shared 2024 · 265 comments on HN
- 5Shell permission errors for busy coding agents4 people · 4 points · first shared 2025 · discussion on HN
- 6Exploiting ACropalypse: Recovering Truncated PNGs4 people · 1 points · first shared 2023 · discussion on HN
- 7Can you get root with only a cigarette lighter?3 people · 682 points · first shared 2024 · 150 comments on HN
- 8PNG files can be animated via network latency3 people · 511 points · first shared 2021 · 106 comments on HN
- 9Hijacking Bluesky Identities with a Malleable Deputy3 people · 4 points · first shared 2023 · discussion on HN
- 10Colliding Secure Hashes3 people · 3 points · first shared 2023 · 1 comments on HN
- 11S32 Unix Clock3 people · 3 points · first shared 2023 · discussion on HN
- 12Text Editors Should Be Worse2 people · 18 points · first shared 2024 · 13 comments on HN
- 13Show HN: CSS Gradient Fixer2 people · 7 points · first shared 2021 · 3 comments on HN
- 14V8 Heap pwn and /dev/memes – WebOS Root LPE2 people · 4 points · first shared 2021 · discussion on HN
- 15UofTCTF 2025: An AES Timing Side-Channel2 people · 3 points · first shared 2025 · discussion on HN
What HN people wrote when they linked it
Retr0id · 2024-04-30
My favourite quote from this series of blog posts:
> One thing to note about this instruction [FX1E] is that it will quite happily let you sail off into the uncharted waters of memory beyond the on-board 4K, because it will only wrap when the offset takes the address beyond 65535. The Chip-8 programmer must ensure it contains a meaningful value.
https://www.laurencescotford.net/2020/07/19/chip-8-on-the-cosmac-vip-i…
This behaviour doesn't matter much on a COSMAC VIP, but on modern emulators it presents an opportunity for OOB accesses, and you'd be amazed how many independent implementations stumbled across this same bug. I wrote about exploiting one of them (to achieve an emulator escape) here https://www.da.vidbuchanan.co.uk/blog/bggp3.html
kyle-rb · 2026-07-10
If you don't like BlueSky managing your keys, the alternative to did:plc is did:web. Unfortunately, afaiu, it's not possible to migrate[0]. If this is something you really care about, and you trust yourself to manage your own private keys, you should probably bite the bullet and do it now. Make a pinned post on the old account to point to the new one.
That's the one part you can't migrate; everything else you can change while retaining your followers, posts, etc.
Setting your handle to a domain name via DNS[1] is intended to be easy for non-technical users (especially with registrars adding one-click forms for doing so) and also decoupled from actual PDS hosting. Many users just want their handle to reflect their identity on the web, and are ok trusting BlueSky to host their PDS for free.
Migrating to a new PDS is possible in both the cooperative case[2] or in the adversarial case[3]. The gist is that A: you should take regular backups by exporting your account data, and B: if you're using did:plc instead of did:web, you should register a backup key that has a higher priority than the key held by your PDS, so a malicious PDS can't simply migrate you back.
[0] https://github.com/bluesky-social/atproto/discussions/2705
[1] Alternatively there's an option for HTTP handle resolution instead via `/.well-known/atproto-did`
[2] https://atproto.com/specs/account#pds-account-migration
[3] https://www.da.vidbuchanan.co.uk/blog/adversarial-pds-migration.html
danabramov · 2025-10-04
Neither of these is quite right.
In AT, data is tied to identity (DID), not handles or hosting. That’s what my article tried to explain.
If you lose the “handle” domain, all it means is that you won’t have a valid handle (which apps will tell you about) but your posts will remain up (they’re still addressable by your DID, which is how apps look things up). In the Bluesky app, for example, it would say “invalid handle” instead of your username. However, it’ll work. It’s the same situation as what happens if your domain expires or you delete your records. Your data is still there, you’re still “followed“ by the same people, etc. A handle is just an alias.
All you’ll need to do is to change the handle, thereby attaching a new domain, through any app that has the “change handle” flow. (It’s enough to have one app that gives you free ones.)
With hosting, it is similar (although there are barriers which need to be lowered). If your repo shuts down, you absolutely can move it somewhere else provided that you have a backup of it. Backups are trivial to automate on AT so this is something I expect hosting providers to offer. There are already third-party apps that regularly do backups for you. And you can export your repository from some clients as well (eg from the official Bluesky client).
In the “happy” case, your hosting will cooperate with moving your repo to another host. See https://pdsmoover.com/info.html for the happy case.
For the “unhappy” case where your old hosting…
gruez · 2022-02-24
That still might be to your eyes. The relevant effects are:
1. effects from your eyes (from looking at the strobing image)
2. PWM brightness controls causing your recordings to look like they strobe
The site in the OP wasn't working, so I tried a demo site instead: https://www.da.vidbuchanan.co.uk/strobegate.html. I looked at the strobing image, closed the tab, and sure enough my monitor (IPS, 60hz) was showing some signs of flickering. It disappeared after a few minutes. However, I performed a second test where I opened the site and didn't look at it with my eyes. The strobe after effect did not show up. Even though I didn't look at the monitor, I verified afterwards that a strobe was shown by a phone video recording. I also did a slo-mo video recording of my monitor without any visible strobe effect, and there was visible strobing in the recording, probably from the shitty PWM. You should follow a similar procedure to rule out whether it's something with your eyes or not.
zahlman · 2026-07-29
For the "SWAB" techniques discussed in the previous piece (https://www.da.vidbuchanan.co.uk/blog/python-swar.html), using 5 bits per cell might be just fine anyway. In fact, because of how CPython implements bigints (with 15- or 30- bit "limbs", so that there's space for carries when doing addition) it lines up better with the memory layout (none of the cell values straddles a machine word boundary).
verdverm · 2026-06-21
How to adversarial migrate: https://www.da.vidbuchanan.co.uk/blog/adversarial-pds-migration.html
*requires your own PLC key, which the vast majority of users do not have, protonmail has good prior art here (imo)
vsgherzi · 2026-03-12
a lot of people seem to not understand what used to go into running chrome on arm64 devices, this blog goes over it pretty well
https://www.da.vidbuchanan.co.uk/blog/netflix-on-asahi.html
yellowapple · 2025-08-08
rrgok · 2025-05-02
I tried with the demo, but full content search does not work. I don't know if the demo is randomly generated, anyway this is the test I did.
Text to search in the top search bar: RRP
Page that contains that term: https://www.da.vidbuchanan.co.uk/blog/r1-jailbreak.html
Result found: 0
Does this search the content of the archived pages?
CharlesW · 2025-01-10
Announcement: https://www.da.vidbuchanan.co.uk/blog/unix-clock.html
jasonpeacock · 2025-01-09
mroche · 2024-07-01
Quick search turned up this:
SIMD in Pure Python
https://www.da.vidbuchanan.co.uk/blog/python-swar.html
Don't let the "SIMD in Python" section fool you, it's a short stop on Numpy before putting it aside.
notpushkin · 2023-11-11
If you're willing to run a blob for DRM support, you can get it running in any Chromium flavour. (I would rather prefer torrents, though.)
Related: The Quest for Netflix on Asahi Linux – https://www.da.vidbuchanan.co.uk/blog/netflix-on-asahi.html
albert_e · 2023-03-23
so this is very similar to the Acropalypse vulnerability recently published about Google Pixel Pro phones?
https://www.da.vidbuchanan.co.uk/blog/exploiting-acropalypse.html
kzrdude · 2023-03-19
Explanation here https://www.da.vidbuchanan.co.uk/blog/exploiting-acropalypse.html
e4e5 · 2023-03-18
Nice write-up here: https://www.da.vidbuchanan.co.uk/blog/exploiting-acropalypse.html
MontagFTB · 2021-12-17
Apple is optimizing some PNGs so they can encode/decode them in parallel. These PNGs are still compliant PNGs, so non-Apple decoders can still read them. This optimization includes an `iDOT` chunk that macOS handles but other PNG readers do not, enabling the optimization. There is a bug in the macOS parallel decoder, however, causing these images to look different on macOS than they do elsewhere. (Even within the same macOS instance, you can get two different results from the same image.) The author has also created a PNG that demonstrates a race condition within the macOS PNG decoder: https://www.da.vidbuchanan.co.uk/widgets/pngdiff/race.html
therein · 2021-09-08
Something similar with APNG:
https://www.da.vidbuchanan.co.uk/adamation/image.png
OneDeuxTriSeiGo · 2025-09-07
This isn't strictly true. If you can sign a did document (i.e. you've set up a recovery key), even if your old PDS refuses to cooperate (or disappears entirely) you can still move to a new PDS and deactivate your account on the old PDS (as this is done via your did document)[1]. It's not exactly trivial to do currently but tools are being developed that automate the process and render all this down into easy to use apps.
> or if you get banned from the PLC directory
This is technically true (for did:plc users) but this isn't a thing that's happened in the past and in the event it happens in the future (or even is seriously discussed in the future), did:plc will be in a substantially different situation than it is currently and the community should be situated by then to handle a federated or coordinated PLC directory.
1. https://www.da.vidbuchanan.co.uk/blog/adversarial-pds-migration.html