Abstract
Reverse engineering of executable programs, by disassembling them and then using program analyses to recover high level semantic information, plays an important role in attacks against software systems, and can facilitate software piracy. This paper introduces a novel technique to complicate reverse engineering. The idea is to change the program code repeatedly as it executes, thereby thwarting correct disassembly. The technique can be made as secure as the least secure component of opaque variables and pseudorandom number generators.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
Aucsmith, D.: Tamper resistant software: an implementation. In: Anderson, R. (ed.) IH 1996. LNCS, vol. 1174, pp. 317–333. Springer, Heidelberg (1996)
Bala, V., Duesterwald, E., Banerjia, S.: Dynamo: a transparent dynamic optimization system. In: Proc. SIGPLAN 2000 Conference on Programming Language Design and Implementation, pp. 1–12 (2000)
Buck, B., Hollingsworth, J.: An API for runtime code patching. The International Journal of High Performance Computing Applications 14(4), 317–329 (2000)
Cifuentes, C., Gough, K.J.: Decompilation of binary programs. Software - Practice & Experience, 811–829 (July 1995)
Collberg, C., Thomborson, C., Low, D.: Manufacturing cheap, resilient, and stealthy opaque constructs. In: Principles of Programming Languages 1998, POPL 1998, pp. 184–196 (1998)
Collberg, C.S., Thomborson, C.: Watermarking, tamper-proofing, and obfuscation - tools for software protection. IEEE Transactions on Software Engineering 28, 735–746 (2002)
Collberg, C.S., Thomborson, C.D., Low, D.: Breaking abstractions and unstructuring data structures. In: International Conference on Computer Languages, pp. 28–38 (1998)
Cook, S.A.: The complexity of theorem-proving procedures. In: Proc. 3rd ACM Symposium on Theory of Computing, pp. 151–158 (1971)
Cormen, T., Leiserson, C., Rivest, R., Stein, C.: Introduction to Algorithms. McGraw-Hill, New York (1991)
De Bus, B., De Sutter, B., Van Put, L., Chanet, D., De Bosschere, K.: Link-time optimization of ARM binaries. In: Proc. of the 2004 ACM SIGPLAN/SIGBED Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES), pp. 211–220 (2004)
Debray, S.K., Evans, W.: Profile-guided code compression. In: Proc. ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation (PLDI 2002), pp. 95–105 (June 2002)
Engler, D., Hsieh, W., Kaashoek, F.: c: A language for high-level, efficient, and machine-independent dynamic code generation. In: Symposium on Principles of Programming Languages, pp. 131–144 (1996)
Hicks, M., Moore, J., Nettles, S.: Dynamic software updating. In: Proc. SIGPLAN Conference on Programming Language Design and Implementation, pp. 13–23 (2001)
Hudak, P., Young, J.: Higher-order strictness analysis in the untyped lambda calculus. In: Proc. 13th ACM Symposium on Principles of Programming Languages, pp. 97–109 (January 1986)
Jenkins, R.: Isaac. In: Fast Software Encryption, pp. 41–49 (1996)
Kanzaki, Y., Monden, A., Nakamura, M., ichi Matsumoto, K.: Exploiting self-modification mechanism for program protection. In: Proc. of the 27th Annual International Computer Software and Applications Conference
Leone, M., Lee, P.: A Declarative Approach to Run-Time Code Generation. In: Workshop on Compiler Support for System Software (WCSSS) (1996)
Lie, D., et al.: Architectural support for copy and tamper resistant software. In: Proc. 9th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS-IX), pp. 168–177 (2000)
Masticola, S., Ryder, B.: Non-concurrency analysis. In: PPOPP 1993: Proceedings of the fourth ACM SIGPLAN symposium on Principles and practice of parallel programming, pp. 129–138. ACM Press, New York (1993)
Noel, F., Hornof, L., Consel, C., Lawall, J.L.: Automatic, template-based run-time specialization: Implementation and experimental study. In: Proceedings of the 1998 International Conference on Computer Languages, pp. 132–142 (1998)
Ogiso, T., Sakabe, Y., Soshi, M., Miyaji, A.: Software obfuscation on a theoretical basis and its implementation. IEICE Transactions on Fundamentals, 176–186 (2003)
Schwarz, B., Debray, S., Andrews, G.: Disassembly of executable code revisited. In: WCRE 2002: Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE 2002), pp. 45–54. IEEE Computer Society, Los Alamitos (2002)
Stockmeyer, L.J., Meyer, A.R.: Word problems requiring exponential time. In: Proc. 5th ACM Symposium on Theory of Computing, pp. 1–9 (1973)
Viega, J.: Practical random number generation in software. In: Proc. 19th Annual Computer Security Applications Conference, pp. 129–141 (2003)
Wang, C., Davidson, J., Hill, J., Knight, J.: Protection of software-based survivability mechanisms. In: International Conference of Dependable Systems and Networks, Goteborg, Sweden (July 2001)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2006 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Madou, M., Anckaert, B., Moseley, P., Debray, S., De Sutter, B., De Bosschere, K. (2006). Software Protection Through Dynamic Code Mutation. In: Song, JS., Kwon, T., Yung, M. (eds) Information Security Applications. WISA 2005. Lecture Notes in Computer Science, vol 3786. Springer, Berlin, Heidelberg. https://doi.org/10.1007/11604938_15
Download citation
DOI: https://doi.org/10.1007/11604938_15
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-31012-9
Online ISBN: 978-3-540-33153-7
eBook Packages: Computer ScienceComputer Science (R0)