This statement seems debatable: " Since all the contestants implement the same functionality, the main difference between their samples is their coding style. " All the (winning) contestants implement the same functionality, yes, but with possibly wildly different approaches/algorithms, so the main difference between code samples is not just "style" but what could be called "general thinking in and around the problem…
As a professional, I tend to think a distinct coding style is bad. You should try to write a code that is plain and unsurprising and reproducible. To me, this study gives us another reason that we need a more uniform/standardized methodology and good education for the software industry.
When coding style survives compilation: De-anonymizing programmers from binaries
51–60 of 74 posts
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#52This seems to indicate that modern optimizers still have a long way to go to be as effective as they could be, since broadly similar code even in different styles would end up with the same, most efficient end result(?)
They did this with optimizations off: The above mentioned executable binaries are compiled without any compiler optimizations, which are options to make binaries smaller and faster while transforming the source code more than plain compilation. As a result, compiler optimizations further normalize authorial style. Everyone's still safe with some -O* code massage.
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#53This sounds interesting. Could this be applied to Stuxnet, Duqu and malware in general, or would you require more information?
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#54This seems to indicate that modern optimizers still have a long way to go to be as effective as they could be, since broadly similar code even in different styles would end up with the same, most efficient end result(?)
They did this with optimizations off: The above mentioned executable binaries are compiled without any compiler optimizations, which are options to make binaries smaller and faster while transforming the source code more than plain compilation. As a result, compiler optimizations further normalize authorial style. Everyone's still safe with some -O* code massage.
Taken from section VI. A. " Compiler Optimization: Programmers of optimized executable binaries can be de-anonymized.":
"[...] programming style is preserved to a great extent even in the most aggressive level-3 optimization. This shows that programmers of optimized executable binaries can be de-anonymized and optimization is not a highly effective code anonymization method."
Please try and do a basic level of investigation before making claims.
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#55This sounds interesting. Could this be applied to Stuxnet, Duqu and malware in general, or would you require more information?
I thought about looking at the bitcoin implementation for finding Satoshi.
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#56Earlier quoted context omitted.
My suspicion is that most of these features wouldn't survive in an adversarial setting -- either by consciously changing your coding style or (better) using automated tools to rewrite your source code before compilation to alter the control flow structure (e.g., control flow flattening [1]). http://reverseengineering.stackexchange.com/questions/2221/w...
Another option would be safety in numbers. Take a large executable written by someone else and wear its dead code like its your own skin. Hiding your true self in there somewhere.
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#57This is an interesting article, but there's one part that I don't really understand: 'After scaling up the approach by increasing the dataset size, we de-anonymize 600 programmers with 52% accuracy.'. Isn't 52% close to a random guess? I don't get how this ties in with the rest of the paragraph either.
If they were saying that in 52% of the cases, they could guess the correct choice out of 600, then random chance alone would have been If they were saying that in 52% of cases, they could guess if some code did or did not belong to a given programmer, then it is basically a random guess.
That entirely depends on the distribution of the original sample.
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#58Don't miss the talk by Aylin starting in 50 minutes here: http://streaming.media.ccc.de/32c3/hallg/ (Recording available later ...)
Recordings will be at https://media.ccc.de/b/congress/2015
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#59Often, just running `strings | grep '/home/'` on a binary will reveal the home directory of at least one programmer involved in the compilation process.
Then yeah, you might very well find some guys /home/ path in firmware running on production basebands.
(Hi, Dojip Kim! https://www.linkedin.com/in/dojip-kim-7b0b1b6a)
Re: When coding style survives compilation: De-anonymizing programmers from binaries
#60This statement seems debatable: " Since all the contestants implement the same functionality, the main difference between their samples is their coding style. " All the (winning) contestants implement the same functionality, yes, but with possibly wildly different approaches/algorithms, so the main difference between code samples is not just "style" but what could be called "general thinking in and around the problem…
I'm not sure I agree with your conclusion. Beginners tend to look to others' code more frequently (often including copying and pasting), which means their "style" is really an amalgamation of multiple styles.
On the other hand, even when more experienced programmers look to others' code, they will still fold it into their own style, even when including large amounts of somebody else's code. Their own style shows through the entire project.
However, both of us are just hypothesizing. A great follow-up to this work would be to look at why beginners are harder to identify. I'm sure the other obvious follow up, "how to anonymize yourself", is in the works somewhere.
The other thing I'd be interested in is how well this holds up for multi-person projects. Would it be possible to identify if I submitted code to the Tor project? How much do I have to contribute before identification becomes likely.