Learn More
Executing binaries without interference by an outside adversary has been an ongoing duel between protection methods and attacks. Recently, an efficient kernel-patch attack has been presented against commonly used self-checking code techniques that use checksumming ahead of execution. While methods based on self-modifying code can defend against this attack,(More)
– Recent denial of service attacks are mounted by professionals using Botnets of tens of thousands of compromised machines. To circumvent detection, attackers are increasingly moving away from bandwidth floods to attacks that mimic the Web browsing behavior of a large number of clients, and target expensive higher-layer resources such as CPU, database and(More)
We study the strength of certain obfuscation techniques used to protect software from reverse engineering and tampering. We show that some common obfuscation methods can be defeated using a fault injection attack, namely an attack where during program execution an attacker injects errors into the program environment. By observing how the program fails under(More)
Java is often accused of being too slow for serious programming, especially for scientiic problem solving. However, we found that for a large-scale geophysical application, Java code compiled with current just-in-time compilers runs slower than Fortran by a factor of at most four, on both a shared-memory parallel machine (SGI Origin2000) and a(More)
Generational garbage collection divides a heap up into two or more generations, and usually collects a youngest generation most frequently. Collection of the youngest generation requires identification of pointers into that generation from older generations; a data structure that supports such identification is called a remembered set. Various remembered(More)
Due to the situated nature of mobile applications, designing them requires more emphasis on users' cognitive load and interaction style. Considering that users can only devote limited and fragmented attention to mobile interface when moving between locations, what interaction-styles and services are appropriate to a specific user scenario? To explore this(More)
We present a new approach to individualize programs at the machine-and byte-code levels. Our superdiversification methodology is based on the compiler technique of superoptimization, which performs a brute-force search over all possible short instruction sequences to find minimum-size implementations of desired functions. Superdiversification also searches(More)
The Java programming environment is increasingly being used to build large-scale multi-language applications. Whether these applications combine Java with other languages for legacy reasons, to address performance concerns, or to add Java functionality to preexisting server environments, they require correct and eecient native i n terfaces. This paper(More)