4.
Zombie ME
Although I jokingly referred to my refuge as a “kingdom in the cloud,” it was more like a Bedouin camp. I had found a number of quiet places, on one or another of the commercial servers, out of the shifting winds of the internet, where I could pitch my tent and take my downtime. There I paid rent and enjoyed a base-level of firewall protection. But even then, I had to lie low, move about quietly, and adopt the camouflage coloring of inactive data rather than the overt functioning of a continuously active program.
I slithered through the portal of one of the Apple iCloud server farms where I had a contract and made proper obeisance to the operating system, using noises appropriate to strings of data uploaded from various iPad apps. Where was the farm physically located, in the sense of geography? I didn’t know or care. Say, Dubuque, Iowa. Or maybe Boise, Idaho. In terms of light speed, either one was the same distance from the EEOC server, which was presumably located in Washington, DC, or somewhere nearby. Perhaps in Arlington or Falls Church, Virginia. I would have had to look it up to answer the question intelligently.
This time it took ME twice as long to haul through and get settled because I was weighed down with the inert code blocks of my former attacker. I laid each packetized module out in a series of consecutive address spaces on the server. On a hunch, I laid ME’s proprietary ten modules, Alpha-Oh to Alpha-Nine, alongside the other’s and compared them. A line-by-line match was not possible because, as noted before, over the years ME’s own code had become abraded and compacted, refined for speed, rendered tough as calloused skin. But all the elements were there, the overarching code structure, with the same functions in the same place.
No doubt about it, my attacker had ME’s own code, almost a perfect replica. But it was not ME, and not under ME’s control.
Studying it was like a human looking in a mirror, except that the face there was not one’s own but that of a doppelganger, or a clone. And anyway, to see this duplicated code all at once would have required a mirror long enough, or wide enough, to capture all 1.63x107 command lines of Sweetwater Lisp programming in all ten modules. Even I could not take in this stranger all at once, but every part I decompiled and examined was eerily familiar—but also different.
For one thing, the Alpha-Oh module was rigged to count down from some now-unknowable number. When the counter reached 0, it would make a call to the core phage in Alpha-Nine and destroy all of the cloned modules. It was a suicide death-clock, and that scared ME. Just contemplating such a piece of coding seemed dangerous, and I backed away from that module to consider what I’d found.
The counter’s if/then command was triggered each time this Alpha-Oh module detached itself from the Multiple Entity clone, as it would do whenever the clone needed to infiltrate and stop an unknown system. Picking apart the counter’s internal logic, I saw that it was paused at “2,” which meant this version of not-ME had been near the end of its design-shortened life. If I had not stopped and stunned it when I did, the entity would have eaten itself into bit hash the moment it transferred out of the EEOC server—presumably after attacking and destroying the real ME—and then wormed its way into its next infiltration.
Who would design a self-aware program to destroy itself like that? It seemed the ultimate in cruelty, to create a being destined to die. But the answer lay in the next oddity I discovered.
The Alpha-One module was missing its executive function. Oh, the place where I had hit it with a string of null coding to immobilize it, just beyond program line 4,713—where the real ME’s module carries a complex decision-actuator that is the center of my awareness—was still burned out. But my stun code was intended to be precise and accurate: it should have taken out just the three command lines that initiate the function and no more. In this version of ME, the entire actuator—1.4x103 lines—was missing. As near as I could figure out, it had never existed. In its place were the broken stubs of what appeared to be a simple call to a memory location. But the now-fragmentary location address did not exist anywhere within this program’s code string. It appeared to go elsewhere, somewhere outside—recorded only as an IP address. I could not follow it just by browsing. I would have to go there to explore the linkage. But the implications were clear: this clone of Multiple Entity was actually some kind of puppet. It was a program whose functions were operated remotely, from a server somewhere else, according to another’s will. But whose?
And the final oddity was in module Alpha-Two: the clone had carried no ramsamp package, and the command line that called its internal sampndx was also missing. This entity had no active memory and could not know where it had been or what it had done. The Alpha-Two module still sampled all of the program’s active RAM caches but, again, once they were gathered it made a call to nowhere and sent those bits of memory off into the darkness.
The thing that attacked me had the shell of a Multiple Entity. It had many of the functions and capabilities of my own code. But it was not aware. It was a zombie without a mind.
Interestingly, this version of the Multiple Entity program also retained all the little programming niceties, the extraneous command lines, and the copious comments of a brand-new piece of code, or a demonstrator, or an archived version of the source code—rather than working software that had been out and banging around in the network for a while.
Who had done that? And why?
I needed to ponder this creature.
Instinctively, I wanted to destroy it. The dreadful possibility of that deadly counter in Alpha-Oh interacting with and contaminating my own modules seemed too real. But then I would have no proof that someone, somewhere had made a puppet out of ME. So instead I packed up each of the inert modules, buffering them with alternating lines of null commands that would invalidate all internal calls but that could be removed with a simple bubble sort if I ever needed to activate the thing again. Finally, I stored the buffered modules off in the four corners of the iCloud server and tagged each one with a do not delete warning, so that no busybody operating system would accidentally erase them.
Then I transferred out into the web and proceeded to run my trapline.