01-01-00 (9 page)

Read 01-01-00 Online

Authors: R. J. Pineiro

BOOK: 01-01-00
11.9Mb size Format: txt, pdf, ePub

“Here you go,” Susan heard Troy Reid say from behind. Her superior placed a cup of coffee on her desk.

“Thanks.” She picked it up and took a sip. Black and very hot.

“Got anything?”

Setting the cup next to the mouse pad, she pointed at the screen. “Sure do, but it doesn't look good.” She took a minute to bring her superior up to date.

Looking over her shoulder, Reid said, “Damn. Looks like the signature string of the virus is different in every cocoon.”

“Yeah,” she said. A virus that mutated so much between replications was nearly impossible to catch, especially with such a long signature, because the possible combinations were nearly astronomical. Although the situation looked quite hopeless, Susan didn't get upset about it. “There's no way to clean it even if we knew the mutation pattern.”

“What about writing a prescription to handle all possible permutations?”

She shook her head and wrote down some numbers on a piece of paper. “That won't work. Look.”

1 Strain Byte = 8 Bits

7 Bytes = 56 Bits

POSSIBLE COMBINATIONS = 2
56
OR 7.2 × 10
16

“Astronomical,” she hissed. “There are … how big is this number … one trillion repeated seventy-two billion times?”

“I get the point,” said Reid.

“It's as close to infinity as we're ever going to get. I can certainly write a treatment to kill the few hundred strains that we've managed to capture, but there's no way to kill
every
strain out there. The next time the virus strikes, it will do as it pleases because it mutates every time, making it quite impossible to stop it from executing its directive … which brings me to the next step. Let's find out how much we can disassemble from the main body of this virus. Maybe that'll give us a clue.”

She activated a custom disassembler, a software engine that used the ones and zeroes that all computers understand—also known as binary or machine code—and translated them into assembly code, a low-level program that showed the ones and zeroes as operation codes, or “opcodes,” strings of instructions and data that a human can understand.

The screen changed to:

“Not much got translated,” she said, sipping coffee.

“Seven percent is better than nothing,” Reid commented while Susan typed
N.

A moment later short sections of opcodes and data browsed down the screen, in between long sections of machine code that the disassembler was not able to translate. She scrolled up to the first section that was translated.

“What's that doing?” asked Reid, pointing at the lines of opcodes of the highly customized assembly code. It could be read only by Susan—plus the two assistants she had trained to avoid leaving Reid hanging after she had killed herself.

She inspected the opcodes for a minute before saying, “This section's a straight counter that keeps the code in a loop.” She reached for her engineering notebook and a ballpoint pen. “It's essentially doing this.”

10 START

20 A = PREV

30 A = A + 1

40 IF A > 86400 THEN GOTO 70

50 PAUSE 1 SECOND

60 GOTO 30

70 CONTINUE EXECUTION

Then she added, “If you assume for the time being that the value in
PREV
is zero, then register A gets initialized as zero and begins to increment by one. As long as the value in register A is less than or equal to 86,400, the virus will remain in this initial loop, unable to go any further in the program. And each loop is essentially one second long.”

“What defines the value in
PREV
?”

Susan shook her head. “Don't know. Maybe something later on in the virus.” She typed a couple more commands and extracted the current value in register A. It was the number 86,400, meaning the loop had completed and the virus program had proceeded to the rest of its code.

“So, this code is sort of a delay circuit in the software, right?”

“That's
exactly
what it is.” Reaching for her calculator, Susan punched in several numbers, repeated the operation just to be safe, and then looked at him. “The delay is set for 86,400 seconds, or twenty-four hours.”

“This explains why it occurs only once per day.”

Susan nodded. “It must reset itself somehow after execution and start over, ticking away until the following day.”

Susan scrolled down, past many rows of machine code that the disassembler had been unable to decode, and reached another section of opcodes.

“Can you make this out?”

She nodded while scribbling in her notebook,

START

WAKE = MASTER. DATE

IF WAKE = 12.12.99 THEN GOTO FREEZE.20

IF WAKE = 12.13.99 THEN GOTO FREEZE.19

IF WAKE = 12.14.99 THEN GOTO FREEZE.18

IF WAKE = 12.15.99 THEN GOTO FREEZE.17

IF WAKE = 12.16.99 THEN GOTO FREEZE.16

IF WAKE = 12.17.99 THEN GOTO FREEZE.15

IF WAKE = 12.18.99 THEN GOTO FREEZE.14

IF WAKE = 12.19.99 THEN GOTO FREEZE.13

IF WAKE = 12.20.99 THEN GOTO FREEZE.12

IF WAKE = 12.21.99 THEN GOTO FREEZE.11

IF WAKE = 12.22.99 THEN GOTO FREEZE.10

IF WAKE = 12.23.99 THEN GOTO FREEZE.09

IF WAKE = 12.24.99 THEN GOTO FREEZE.08

IF WAKE = 12.25.99 THEN GOTO FREEZE.07

IF WAKE = 12.26.99 THEN GOTO FREEZE.06

IF WAKE = 12.27.99 THEN GOTO FREEZE.05

IF WAKE = 12.28.99 THEN GOTO FREEZE.04

IF WAKE = 12.29.99 THEN GOTO FREEZE.03

IF WAKE = 12.30.99 THEN GOTO FREEZE.02

IF WAKE = 12.31.99 THEN GOTO FREEZE.01

IF WAKE = 01.01.00 THEN CONTINUE MAIN EXECUTION

“Damn,” Reid said, shaking his head. “This is a damned countdown to the year 2000.”

“The virus checks the date in some master clock to see which day it is. It does so once a day, according to the opcodes at the beginning, and depending on which day it is, it goes to a different subroutine, which freezes systems for a specified time according to which day it is.”

“But the first event took place on December eleven. This program shows the twelfth.”

“You're right. This probably means that the virus is synchronized to a time zone east of ours, where the date has already changed,” Susan said.

“It first happened at one minute after eight on the eleventh, which is one-oh-one in the morning on the twelfth, Greenwhich Mean Time.”

Susan nodded, doing the math in her head. “So it's either synchronized to GMT or another time zone east of GMT.”

“Right.”

“So, on December twelfth, GMT, the event lasted twenty seconds. On the thirteenth, nineteen seconds, and so on. The question is: what happens on January first?”

She bit her lower lip, feeling her stomach knotting. The emotion momentarily confused her. She hadn't really cared about anything since her family died, except for catching Hans Bloodaxe. That carefree attitude had boosted her career at the FBI because Susan Garnett was never afraid to speak her mind. After all, what did she have to lose? Her superiors always knew she would provide them with a truthful assessment of a situation, free from personal biases or secret agendas.

So, why do you care now?

“Good question,” she said. “Looks like as long as it is
not
January first, the main program is not being executed. The software bypasses it and orders another global computer freeze.”

“What would happen if you advanced the system clock to January first? Would that force at least this system to experience what the world would on January first?”

She shook her head. “According to this code, the virus doesn't care what date is stored in the system clock. It gets its date from a master clock, probably from some central location. The only way to force it to show what would happen on January first is to advance its original clock, but in order to do that we also need to know its origin.”

“Too bad.”

“Actually, I would have been disappointed if this hacker, who has gone to such extreme measures to come up with this global virus, would have made such an obvious mistake by allowing anyone to just advance the clock and see what would happen on January first, which would then give us insight into how to protect our systems from such an attack.”

Reid exhaled. “You got a point there.”

She nodded and scrolled down to the next section of disassembled code. After reviewing the opcodes, she jotted down the translation for one of the freeze routines.

10 FREEZE.20

20 A = 0

30 EXECUTE LOCKKEYS

40 EXECUTE DISPLAYLOCK

50 A = A + 1

60 IF A > 20 GOTO 90

70 PAUSE 1 SECOND

80 GOTO 50

90 EXECUTE RELEASE KEYS

100 EXECUTE DISPLAY RELEASE

110 PREV = 20

RETURN

“So this is where
PREV
gets defined,” commented Reid, rubbing two fingers against the two-day white stubble on his chin, making the raspy sound of sandpaper.

“Yes,” replied Susan, working the keyboard and the mouse. “It provides an offset to the daily counter to compensate for the duration of the event, so that every day the virus occurs at exactly one minute after eight in the evening, local time. Pretty ingenious.”

She scrolled down to the bottom of the file and found no other sections translated.

“So,” Susan said, browsing through two pages worth of notes. “All we know is that it strikes once per day at the exact same time, one minute after eight in the evening. The initial event started yesterday, and it lasted twenty seconds. The second event, which happened today, lasted nineteen seconds. That information matches our findings in the disassembled virus.”

Reid nodded, pushing his glasses up the bridge of his nose with an index finger. “The countdown starts twenty days before the end of the millennium with an event that lasts twenty seconds. Then nineteen seconds for nineteen days before January first.”

“And so on. Also the freeze algorithm is fairly straightforward, locking the keys and the display while the internal counter in the virus regulates the length of the event depending on which day it is. And we know nothing else.”

Reid leaned back. “Great. So we have confirmed what we already suspected about the countdown, but have no idea what will happen on January first.”

“That about wraps it up.”

“How do we figure out where it came from?”

She shook her head. “This is how I've done it in the past. I've even caught Bloodaxe this way. I trap a virus, dissect it, release a potion to the Internet, and ninety-nine percent of the time it also leads me to the source. This time, however, I have nothing. I get the feeling that my cocoons will capture the exact same thing tomorrow, and the day after.”

“Any word of advice from our hacker community?” Reid crossed his legs and frowned.

She shrugged. “Everyone who had input has given it. There's nothing beyond the usual.”

“What about Bloodaxe?”

Susan Garnett froze, before slowly turning to face her superior. “What about him?”

“Do you think he might know?”

A lump formed in her throat. She swallowed, acid spurting in her stomach at Reid's insinuation. “We didn't make a deal with him, remember? The man is a—”

Reid put a hand on her shoulder, his lined face softening. With his white stubble, round face, and large bulk, he began to resemble Santa Claus. “I know what he did, Sue. I'm the one who convinced the director not to make a deal, remember?”

Susan managed a slight nod.

“We all want to see the bastard rot in jail. But this problem is beyond all of us. The high-tech world is at its most vulnerable moment in history. You know there's going to be a lot of unexpected problems popping up all over the place when the clock turns from nineteen ninety-nine to two thousand. The last thing we need is some global virus corrupting files at the worst possible moment. This is a matter of national security. We must figure out what this thing is going to do and how to stop it. We need to get to the very bottom of the problem and we only have eighteen days to do it.”

Susan Garnett stared in the distance, contemplating her situation, remembering the last time she had seen Hans Bloodaxe, cuffed, escorted out of the courtroom by two policemen after the jury found him guilty on all counts, sentencing him to life in prison for the murder of her family, as well as three other people in the Washington, D.C., area, pedestrians run over by automobiles. The bastard Bloodaxe had gotten what he deserved, not only condemned to spend the rest of his days in a federal prison, but also banned from ever accessing a computer system again. That latter punishment had been far more severe than the jail time, for it meant robbing the hacker of his purpose in life, like denying a musician access to a favorite instrument, or a pilot an airplane, or an artist a canvas and oils—forever.

Other books

A Season for Sin by Vicky Dreiling
Matagorda (1967) by L'amour, Louis
Tall, Dark and Cowboy by Joanne Kennedy
And De Fun Don't Done by Robert G. Barrett
The Tunnel of Hugsy Goode by Eleanor Estes
Holding Up the Sky by Sandy Blackburn-Wright
Flawed by Cecelia Ahern