What I’ve Been Reading

Life can only be understood backwards, but it must be lived forwards.”

Søren Kierkegaard

In technology, predicting the future is risky business. Tracing parallels and contrasts between future and old technologies, in the best tradition of Odlyzko’s papers on the comparative history of technology, is the only foolproof way to reason about the future, with the only shortcoming of being forewarned that in hindsight, everything is obvious and foreseeable. The following books are the best sources to learn about the rising of past-centuries networks, before the Internet:

  • [amazon_link id=“0801846145” target=“_blank” ]Networks of Power: Electrification in Western Society[/amazon_link]. Through the looking-glass of Tom Hughes’ systematizing theory of Complex Systems, the best recollection of the battle of electrical standards (AC vs. DC), full of details of the similarities and differences of electric expansion in Germany, England and United States due to the impact of the state of affairs of each country.
  • [amazon_link id=“0393061264” target=“_blank” ]Railroaded: the Transcontinentals and the Making of Modern America[/amazon_link]. As the first infrastructure built in capitalism, it transformed the legal-economic system of its day to the current one we live within. Its fact-based approach is the best strength of the narrative, which otherwise should be read with distance and perspective to properly detach from the author’s opinions.
  • [amazon_link id=“0521131855” target=“_blank” ]Energy and the English Industrial Revolution[/amazon_link]. A masterpiece and the best short book on the Industrial Revolution, by one of the most important economic historian. You can get a taste of its content at this article written by the author itself.

Obfuscating Android C Native Code

I’ve got way too many emails from this blog, but one has found my attention: a reader has emailed me asking for advice on Android Native Code obfuscation, in the same line of previous posts. It’s pretty clear that ProGuard it’s an excellent solution for the main language of the Android platform, Java, but there is no clear alternative for native development in C/C++ with ARM binaries.

The best way to frame this question is to start defining what would be the preferred tools to decompile/disassemble the binary code by Mallory, our evil cracker. Many tools have existed over the years to decompile C code (REC, DCC), Hex-Rays being the latest and most powerful one ever, so it would be the first in her tool chest. Fixed the chosen scalpel, the most effective countermeasure against that, and any decompiler, is self-modifying/metamorphic code, since it breaks their over-reliance on static binary analysis. But the downside of it being that it’s very difficult to create good, reliable self-modifying/metamorphic code, especially in these times in which almost everyone abhors assembly programming, so protecting most parts of the binary and decrypting them at program load time it’s a realistic substitute, much like UPX does (but no, it’s no protection at all).

Most people would recommend following the conventional route of code obfuscation (Mangle-It, Stunnix C/C++ Obfuscator, COBF, Thicket), but there also are some very creative approaches, vg: use the LLVM compiler infrastructure with the C back-end to produce an intermediate C representation, to be recompiled with gcc; or my favorite one, try to use a virtual machine like Oreans or Python for the most critical parts of the program.

For the sake of completeness, there has also been some very interesting papers on cryptographically-aided obfuscation, my favourite being the following one:

GDE Error: Error retrieving file — if necessary turn off error checking (404:Not Found)

And remember, enabling full compiler optimizations will always help!

Estimating the Innovator’s Dilemma

Much like Keynes’ [amazon_link id=“1169831990” target=“_blank” ]The General Theory Of Employment Interest And Money (1936)[/amazon_link] sketched the general picture of macroeconomics, leaving the hard-work of figuring the concrete equations and their variable estimation to the then nascent field of macroeconomics, Christensen’s [amazon_link id=“0060521996” target=“_blank” ]The Innovator’s Dilemma[/amazon_link] derived an acclaimed general theory of innovation through real-world examples, initiating a very fertile ground for modelling and quantification. And the following paper is the first to tackle the problem of creating a fully detailed innovation model around the canonical case of incumbent’s delay.

Download (PDF9KB)

The most interesting part is the measurement of four different forces that determine the incumbent-entrant timing gap in technology adoption, next in their actual order of importance: the very significant option value of waiting; a smaller cannibalization’s effect; and trivial sunk-cost advantages over entrants and preemption motives for this issue, but strong determinants of innovation and evolution.

And what’s more important, the absolute relevance of this very same case and models to the modern evolution of drives towards SSD and hybrid technologies.

Bön Voyage, Minitel

It’s decision time for Minitel, and its fate has been sealed. With many lessons for tomorrow, the parallels of state intervention between Minitel and Internet left much to ponder: albeit decisive for their existence in their first years, the lack of controlling restraint exhibited by the French government, not only in its censorship impetus but especially in the commercial side of the venture, ruined its international diffusion.