RSSAmplifier

Blog

Rambo Codes

Gui Rambo writes about his coding and reverse engineering adventures.

rambo.codesRSS feed ↗29 posts

Latest posts

Sherlocked before it was born: LightBuddy

A couple of months ago, I was a few minutes away from joining a video call in my office when I noticed I hadn’t set up my ring light yet. I use a ring light for video calls because the lighting in my office comes mostly from the top. That lighting is perfectly fine for working, but it casts shadows under the eyes and chin that are exacerbated by the built-in camera in my Studio Display. I don’t…

A Privacy Mechanism That Backfired

Some bugs are more interesting than others . Last time I mentioned how CVE-2025-24091 was one of my favorite iOS vulnerabilities so far. That was because I wasn’t yet allowed to disclose my actual favorite! This post is about CVE-2025-31212, the most ironic vulnerability I’ve ever found, and here's why... Transparency, Consent, and Control As those who read my reports already know, Apple’s…

Cracking The Dave & Buster’s Anomaly

I was listening to an episode of one of my favorite podcasts this weekend. The show is called Search Engine , and every episode tries to answer a question that can’t be easily answered through an actual search engine (or even AI). This episode grabbed my attention because it was about an iOS bug, and a really weird one. The bug is that, if you try to send an audio message using the Messages app to…

How a Single Line Of Code Could Brick Your iPhone

This is the story of how I found one of my favorite iOS vulnerabilities so far. It’s one of my favorites because of how simple it was to implement an exploit for it. There’s also the fact that it uses a legacy public API that’s still relied upon by many components of Apple’s operating systems, and that many developers have never heard of. Darwin Notifications Most iOS developers are likely used to…

macOS Security Bugs Exposed Safari History and Device Location to Unauthorized Apps

If you’ve been reading my previous posts about security vulnerabilities that I discovered on Apple’s operating systems, you’ve probably noticed a pattern of bugs being caused by improper validation of clients by XPC services. So it’s probably not a surprise that the latest CVEs also fall into that category, but the first one that I'm going to talk about has a slight twist. CVE-2023-23506/28192:…

SiriSpy - iOS bug allowed apps to eavesdrop on your conversations with Siri

TL;DR: Any app with access to Bluetooth could record your conversations with Siri and audio from the iOS keyboard dictation feature when using AirPods or Beats headsets. This would happen without the app requesting microphone access permission and without the app leaving any trace that it was listening to the microphone. Access to Sensitive Data on Apple's Platforms One of the biggest myths when…

Creating custom extension points for Mac apps with ExtensionKit

This year's WWDC introduced many new APIs, two of which caught my attention: ExtensionFoundation and ExtensionKit. We've been able to develop extensions for Apple's apps and operating systems for a while, but Apple never offered a native way for third-party apps to provide custom extension points that other apps can take advantage of. With ExtensionFoundation and ExtensionKit on macOS, now we can.…

How a macOS bug could have allowed for a serious phishing attack against users

Phishing attacks are a very common threat in our digital lives. So much so that many companies try to trick their own employees into falling for fake phishing attacks in order to assess their skills when trying to identify a certain message as genuine or not. If you don’t know what a phishing attack is, here’s what Wikipedia has to say about it: Phishing is a type of social engineering where an…

MaskerAid by Casey Liss

My friend, podcaster and fellow indie developer Casey Liss has just released his latest app, MaskerAid . Rather than trying to explain the app to you, here's Casey himself: In short, MaskerAid allows you to quickly and easily add emoji to images. Plus, thanks to the magic of ✨ machine learning ✨, MaskerAid will automatically place emoji over any faces it detects. MaskerAid is free to try but you…

Encoding and decoding references to other types with Codable

I’ve been working on a new app in my spare time using the new Swift Playgrounds 4 for iPad. As mentioned in my previous post , this app is document-based. I’ve chosen the JSON format to be the underlying data format for my app’s documents because I (and possibly future users) would like to be able to have the app’s documents in version control, and dealing with merge conflicts and diffs of binary…

A document-based app in Swift Playgrounds for iPad

It’s been just a couple of weeks since Apple introduced the new Swift Playgrounds 4 for iPad , which now enables full app creation and publishing directly from an iPad, but many people are already making some really interesting projects with the app. Of course bringing app creation into a new platform that’s much more limited in general than macOS and Xcode means that Apple had to prioritize which…

Using CloudKit for content hosting and feature flags

The most common application of CloudKit by far is to store private user data with the goal of keeping their devices in sync. This is mostly what my CloudKit 101 post is focused on, as well as explaining the basic concepts of how CloudKit works and the best practices around that type of data synchronization. In that post, I did mention that you can use the public database offered by CloudKit for…

Programming the ESP8266 on an M1 Mac

Programming microcontrollers is something I’ve always liked to do, there’s something very satisfying about writing code that controls things in “real life”, instead of just pixels on a screen. Recently, I decided it would be a fun side project to turn a cheap air humidifier into a HomeKit accessory . I started out with an Arduino board to test things out, but then people reminded me of the ESP32…

Distributing Mac apps outside the App Store, a quick start guide

The Mac has always been very different from its close relative, iOS, especially when it comes to what a user is or is not allowed to run on their system. Even with the introduction of Apple Silicon, Apple has made it very clear that the Mac is still the Mac, and is still hackable , even when running on the new architecture. What this means for us developers is that, when targeting the Mac…

Creating configurable widgets for Big Sur (UPDATED)

Update (September 29, 2020): With Xcode 12.2 beta 2, Apple has added an official template to create macOS Intents extensions. One of the most exciting additions to iOS 14, WidgetKit is also available on macOS Big Sur, where it replaces the legacy “Today extensions”. Widgets created with WidgetKit can be configured by the user in a system UI which is configured by an intent definition in Xcode. I’m…

Turning the ChibiStudio canvas into an App Clip for iOS 14

One of my favorite new things announced during this year’s WWDC was App Clips . They allow developers to offer a small experience from their app to users, without the need to install the entire app from the App Store. App Clips can be activated through a variety of methods: NFC tags, QR codes, special App Clip codes from Apple, or through a simple link somewhere, like your app’s website. When I…

The big Facebook crash of 2020 and the problem of third-party SDK creep

UPDATE JUL 10, 2020: It has come to my attention that implementing the Facebook login flow without using their SDK is against their terms of service for third-party applications , further confirming that Facebook is more interested in gathering data about an app's users than it is in providing a useful service (shocker). NOTE: I know we’re not living in the best time of our lives right now. If…

Implementing mouse pointer interactions on iPad

The new iPad Pro is here! It features a brand new LiDAR sensor and there’s also a cool new Magic Keyboard with a built-in trackpad coming in May. But the best thing about this latest Apple launch for developers is the new and improved mouse and trackpad support on iPadOS 13.4, which works on every iPad model that can run the version. The way mouse interaction works on iPad is not the same as it…

Writing command line interfaces for iOS apps

Writing automated tests like unit, integration, or UI tests can be a great way to have reproducible steps that ensure an app is working the way we expect it to. But there are some circumstances where automated testing just doesn’t cut it. Some behaviors of mobile apps have subtleties that can only be assessed by holding a device in your hand — just like your users do — and seeing how things…

CloudKit 101

Note: this article is a revision of the article I wrote back in 2017. If you’d like to listen to an informal conversation about CloudKit, check out iPhreaks episode #226 . Apple introduced CloudKit in 2014. Since then, it has received many improvements, like the ability to use it outside Apple's platforms and to use it on apps distributed outside the App Store on the Mac. Even though CloudKit is…

MVC: Many View Controllers

This article is basically the script from the talk I presented at dotSwift in Paris. If you prefer, you can watch the video . INTRO Today I want to talk about MVC. Model View Controller is the architecture iOS developers love to hate. I will be focusing most of this talk on the “C” part and what leads to single controller files getting out of hand. But before I do, let’s address the elephant in…

Common pitfalls when using Keychain Sharing on iOS

DISCLAIMER: this is not a tutorial on how to use the Keychain or Keychain Sharing. I am a huge fan of app extensions, since they allow us to expose our app’s functionality to other parts of the system without requiring the user to necessarily launch the app if they want to get something done quickly. Eventually, when you’re working on an app that requires some sort of authentication or stores any…

You can use SwiftUI today

Whenever Apple introduces a new technology for developers, there’s always the question: “Can I use this thing right now for my projects?”. The answer many times ends up being the good, old, and boring “it depends”, but more often than not it leans toward “probably better to wait for a few OS versions”. With SwiftUI, it’s the same. While there are some brave developers using it to create production…

Quick tip: clearing your app’s launch screen cache on iOS

Every time I’ve had to change something in the launch screen on any of my iOS apps, I’ve faced an issue: the system caches launch images and is really bad at clearing said cache, even after the app has been deleted. Sometimes I’d change the launch screen storyboard, delete the app and re-launch, and it would show the new storyboard, but any images referenced in the storyboard wouldn’t show up,…

Apple has locked me out of my developer account (UPDATED)

Update 2019, Nov 22: Apple reached out and resolved the situation. I’ve been unable to access my Apple developer account since August. When I try to access any part of the developer portal, like the beta downloads page or the certificates control panel, I get redirected to a contact form that reads “Need assistance with accessing your developer account?”. My developer team doesn’t show up in Xcode…

Hacking with private APIs on iPad

Using private APIs can be fun. When working with private APIs, I usually prefer to write code in Objective-C, since the runtime makes it a lot easier to use classes and call methods Apple doesn’t want you to. That’s of course when I’m working in Xcode on my Mac. But what if I want to use my other computer? You know, the one I can carry with me a lot more easily than my 15” MacBook Pro. I just…

Animations are assets: using Core Animation archives on iOS

I should start by explaining what I mean by “animations are assets”. I don’t mean that every single animation in an app must be represented by an asset and can’t be done programmatically, since that would be dumb. What I do believe in is that complex animations, especially ones that are not very dependent on dynamic data that’s only known at runtime, should be assets. I’ve always been in favor of…

An incredibly nerdy deep-dive into the AirPower charging animation

Maybe this is not common for all developers, but as an iOS developer, one of my favorite things to implement are beautiful user interfaces and cute animations. When the UX people at my job presented me with a new onboarding screen for our app, it consisted of static screens on Zeplin, without any animations specified. I asked for the Sketch file and came up with this: Needless to say, they were…

Unleashing the power of asset catalogs and bundles on iOS

Bundles and asset catalogs are features of Apple's systems every developer and app is using, even though many developers are probably not aware of their existence or how powerful they can be, especially when used together. Today, I want to talk about what those two things are, what each one of them is supposed to do and how you can use both of them together to create a theming system for an app.…