Выбрать главу

  It was only then that they told him that Wats had gotten away.

  Good for Wats, he thought.

  A guard led him to the roof, to the VTOL plane waiting on the helipad; its wings rotated, its engines turned to the sky for vertical take-off. The engines were whining already. They ushered him up the stairs, and inside he found Rangan and Ilya, and the agent who would come with them to retrieve the Nexus code from San Francisco.

  "Buckle up," the agent – who introduced himself as Myers – said over the sound of the engines. "There's a head in the back. Don't expect any beverage service."

  Kade strapped himself in. Outside the cabin, the engines began to hum, and then to roar. All three of them remained silent as the plane rose slowly into the air, affording them a view of the city. Kade's window faced north, he thought. Where the wing did not obscure it, he could see a river – the Potomac? – and across that the Washington Monument and the Capitol. Then the engines swiveled gradually forward, and the plane picked up horizontal speed as well as altitude, and the city receded into the distance.

  Kade looked over at Ilya. She was withdrawn into herself. She felt tense, wound up. He couldn't see Rangan with the seat back between them, but he could feel his friend's frustration and self doubt. He wanted to talk to them, but he didn't want to do so in any way Myers could hear.

  He went Inside, found what he was looking for – ModOS's built-in chat app. He typed the words out on the mental keyboard in his mind, and the text-based chat program sent them to Rangan and Ilya. [kade] Don't react. We need to talk.

  He felt their surprise. They'd forgotten about this app. A moment later he saw Ilya's response.

  [ilya] Yeah. Definitely.

  [rangan]+1

  [kade] Put on a movie or something. Put your headphones on. Rangan, you first.

  It was a relief to be talking again. He could sense the mood lighten a tiny bit for all of them. Rangan did something in front of him. A minute or so later Ilya dialed up a nature documentary on her seat-back TV screen.

  [kade] Wats got away.

  [ilya] They told me the same.

  [kade] They offered me a deal. Give them Nexus and do a job for them, and no one goes to jail.

  [ilya] You took it. [kade] Yes.

  [ilya] I can't believe you're giving them Nexus 5. [rangan] It was that or life in jail.

  [kade] And jail for everyone else at the party. [ilya] Do you have any idea what they'll do with Nexus? What the CIA will do?

  He could feel her anger.

  [kade] I know. But they were going to get it anyway. From the drives at lab or the backups at my place or Rangan's…

  [rangan] He's right. Once they knew it existed, it was too late.

  [ilya] You're going to have an awful lot of blood on your hands, then.

  [kade] Probably. But there's one thing we can do. [rangan] What?

  [kade] We can make sure we have a back door into their version.

  [rangan] They already know about the back door. [kade] A new one. One they can't find. [rangan] How?

  [kade] Remember that article we read last term? The Thompson hack?

  He felt Rangan get it instantly. [rangan] Have the compiler inject it… It'd be in the binary, but gone from the source…

  [kade] And have the ModOS compiler inject into the Nexus compiler…

  [rangan] Yeah, yeah… Do we have time? How long is this flight going to take?

  [ilya] 5 hours. I'm not following this hack.

  Kade explained.

  The Nexus OS existed in two forms. It existed as human-readable source code that Kade and Rangan or any programmer could read, understand, and modify. And it existed in a binary form that Nexus nodes could understand – sequences of raw ones and zeroes that were almost impossible to work with directly as a human.

  Between the source code and the binary instructions was the compiler, the program that converted human-readable source code into Nexus-readable binary code. Kade and Rangan would use the compiler to insert their back doors.

  Every time the compiler ran, it would search the Nexus OS source code for their new back doors. If the back doors weren't there, the compiler would add them before creating the binary version. The only evidence of the back doors would be in the binary version that was nearly incomprehensible to humans.

  Finally, they would run the same hack on the compiler itself. The compiler's source code would contain no hint of the logic to insert the back doors. That would exist only in the compiler's binaries. Any time their workstation version of ModOS recompiled the compiler, it would insert all the logic of the hack.

  Rangan felt thoughtful to Kade. Anxious still. He was thinking about the costs of being caught. He came to a decision. [rangan]OK. What the fuck. Let's do this thing.

  Rangan and Kade pulled up their development environments and linked them. Ilya linked to their environments and watched over their virtual shoulders. They thought through the plan, divided the tasks up as they turned it from a vague idea into a concrete list of things to do.

  Plan complete, they set to work. It went quickly at first. The backdoors they cloned from their existing overrides, changing only the passwords. The code in the compiler was conceptually simple. But as they coded, they hit bugs, each one a frustration. They checked the clock constantly. Minutes went by as they worked. An hour. A compiler crash frustrated them for twenty minutes. The fix was trivial once they understood it. A second hour had passed. One of the back doors was leaking memory. How could that be? They'd copied the code from the back door they already had. They figured it out. This fix took longer. A third hour passed.

  At hour four, the back doors were working and the Nexus compiler was adding them. Rangan forced the /obfuscate flag on, instructing the compiler to scatter the new code far and wide as seemingly disconnected, innocuous instructions in the binary, making reverse-engineering what they'd done even more difficult. Next they needed to change the workstation compiler to add the backdoor code to the Nexus compiler. Rangan got on that.

  Kade turned his attention to the second phase. He wanted to be able to use the back door without the person running Nexus OS knowing. He needed support for hidden processes. ModOS had that in some form. It was simple in theory, but there were so many tendrils.

  He took large chunks of ModOS code they'd never used and brought them back into Nexus OS. The back doors would connect them to a hidden super-user account. That would do most of what he wanted. Logging would be off for that account. Yes. How to hide the memory usage?

  Shit. His ears were popping. They were landing. He looked out the window. Fuck. They were at SFO, the airport closest to UCSF. How long from SFO to lab? Twenty minutes? Twenty-five? Shit. Rangan was done. Kade still had to finish up.

  Could he hide the memory usage? He didn't see how. He'd have to leave it in. Were there other telltales someone could find? Think, think. Logfiles. Had he gotten them all? Network traces? No easy way to hide those. He'd have to leave them in.