Homeland (Doctorow novel)

Homeland is a novel by Cory Doctorow, published by Tor Books. It is a sequel to Doctorow's earlier novel, Little Brother. It was released in hardback on February 5, 2013 and subsequently released[1] for download under a Creative Commons (CC-BY-NC-ND) license on Doctorow's website two weeks later on February 19, 2013.

HOMELAND
AuthorCory Doctorow
CountryUnited States
LanguageEnglish
SubjectTerrorism, cryptography, computer hackers, Department of Homeland Security, privacy, police state, Dystopian Young Adult Fiction
GenreFiction / Cyberpunk
PublisherTor Teen
Publication date
February 5, 2013
Media typeBook
Pages400
ISBN978-0-7653-3369-8
Preceded byLittle Brother 
Followed byLawful interception 

The novel includes two afterword essays by computer security researcher and hacker Jacob Appelbaum, and computer programmer and Internet activist Aaron Swartz.

Characters

  • Marcus Yallow – Main protagonist, Marcus is a college dropout who previously led the charge against the Department of Homeland Security in Little Brother.
  • Angela Carvelli (Ange) – Marcus' girlfriend.
  • Joseph Noss – Independent candidate for California State Senate. After being introduced by Mitch Kapor at Burning Man, Joe eventually employs Marcus as CTO of his campaign.
  • Carrie Johnstone – Main antagonist, Johnstone is now head of security at Zyz, a fictional military contractor.
  • Masha – Now a friend of Marcus, gives Marcus the docs about Carrie Johnstone's dirty work as leverage against Carrie
  • Jolu – One of Marcus' friends who helps him as he attempts to distribute the contents of the USB file Masha gives him.

Dedications

Homeland is dedicated to Doctorow's wife and daughter, Alice and Poesy.[2] As in Little Brother, Doctorow also dedicates each e-book chapter of Homeland to a different bookstore: Chapters/Indigo, BakkaPhoenix Books, Barnes & Noble, Wild Rumpus, University Book Store at the University of Washington, Mysterious Galaxy, Anderson's Bookshops, Borderlands Books, The Tattered Cover, Uncle Hugo's, RiverRun Bookstore, Gibson's Bookstore, Busboys and Poets, Politics and Prose, Books of Wonder, Powell's Books, Amazon, Forbidden Planet.

DMCA takedown

In May 2013, 20th Century Fox sent a DMCA takedown request to Google to remove links to Cory Doctorow's novel Homeland, on the basis that 20th Century Fox owns an unrelated TV series with same title.

When contacted by TorrentFreak, Doctorow expressed that he was "incandescent with rage" and jokingly added "BRING ME THE SEVERED HEAD OF RUPERT MURDOCH!"[3][4]

Technologies mentioned in the book

gollark: I can come up with a thing to transmit ubqmachine™ details to osmarks.net or whatever which people can embed in their code.
gollark: It's an x86-64 system using debian or something.
gollark: > `import hashlib`Hashlib is still important!> `for entry, ubq323 in {**globals(), **__builtins__, **sys.__dict__, **locals(), CONSTANT: Entry()}.items():`Iterate over a bunch of things. I think only the builtins and globals are actually used.The stuff under here using `blake2s` stuff is actually written to be ridiculously unportable, to hinder analysis. This caused issues when trying to run it, so I had to hackily patch in the `/local` thing a few minutes before the deadline.> `for PyObject in gc.get_objects():`When I found out that you could iterate over all objects ever, this had to be incorporated somehow. This actually just looks for some random `os` function, and when it finds it loads the obfuscated code.> `F, G, H, I = typing(lookup[7]), typing(lookup[8]), __import__("functools"), lambda h, i, *a: F(G(h, i))`This is just a convoluted way to define `enumerate(range))` in one nice function.> `print(len(lookup), lookup[3], typing(lookup[3])) #`This is what actually loads the obfuscated stuff. I think.> `class int(typing(lookup[0])):`Here we subclass `complex`. `complex` is used for 2D coordinates within the thing, so I added some helper methods, such as `__iter__`, allowing unpacking of complex numbers into real and imaginary parts, `abs`, which generates a complex number a+ai, and `ℝ`, which provvides the floored real parts of two things.> `class Mаtrix:`This is where the magic happens. It actually uses unicode homoglyphs again, for purposes.> `self = typing("dab7d4733079c8be454e64192ce9d20a91571da25fc443249fc0be859b227e5d")`> `rows = gc`I forgot what exactly the `typing` call is looking up, but these aren't used for anything but making the fake type annotations work.> `def __init__(rows: self, self: rows):`This slightly nonidiomatic function simply initializes the matrix's internals from the 2D array used for inputs.> `if 1 > (typing(lookup[1]) in dir(self)):`A convoluted way to get whether something has `__iter__` or not.
gollark: If you guess randomly the chance of getting none right is 35%ish.
gollark: Anyway, going through #12 in order:> `import math, collections, random, gc, hashlib, sys, hashlib, smtplib, importlib, os.path, itertools, hashlib`> `import hashlib`We need some libraries to work with. Hashlib is very important, so to be sure we have hashlib we make sure to keep importing it.> `ℤ = int`> `ℝ = float`> `Row = "__iter__"`Create some aliases for int and float to make it mildly more obfuscated. `Row` is not used directly in anywhere significant.> `lookup = [...]`These are a bunch of hashes used to look up globals/objects. Some of them are not actually used. There is deliberately a comma missing, because of weird python string concattey things.```pythondef aes256(x, X): import hashlib A = bytearray() for Α, Ҙ in zip(x, hashlib.shake_128(X).digest(x.__len__())): A.append(Α ^ Ҙ) import zlib, marshal, hashlib exec(marshal.loads(zlib.decompress(A)))```Obviously, this is not actual AES-256. It is abusing SHAKE-128's variable length digests to implement what is almost certainly an awful stream cipher. The arbitrary-length hash of our key, X, is XORed with the data. Finally, the result of this is decompressed, loaded (as a marshalled function, which is extremely unportable bytecode I believe), and executed. This is only used to load one piece of obfuscated code, which I may explain later.> `class Entry(ℝ):`This is also only used once, in `typing` below. Its `__init__` function implements Rule 110 in a weird and vaguely golfy way involving some sets and bit manipulation. It inherits from float, but I don't think this does much.> `#raise SystemExit(0)`I did this while debugging the rule 110 but I thought it would be fun to leave it in.> `def typing(CONSTANT: __import__("urllib3")):`This is an obfuscated way to look up objects and load our obfuscated code.> `return getattr(Entry, CONSTANT)`I had significant performance problems, so this incorporates a cache. This was cooler™️ than dicts.

References

  1. "Free CC-licensed ebook of Homeland is live!".
  2. Doctorow, Cory (2013). Homeland. Tor Books. For Alice and Poesy, who make me whole.
  3. Biggs, John. "Fox Shuts Down Cory Doctorow's Homeland Book In Overzealous DMCA takedown". TechCrunch. Retrieved 2016-12-12.
  4. "Fox Censors Cory Doctorow's "Homeland" Novel From Google - TorrentFreak". TorrentFreak. 2013-04-20. Retrieved 2016-12-12.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.