Manual DeObfuscation

Manual De-obfuscation Techniques

рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬрд┐рд╕реЗ de-obfuscation рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рдЧрд╛рдЗрдб de-obfuscation рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдХрдиреАрдХреЛрдВ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкреИрдЯрд░реНрди рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдпрд╛рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

Strategies for Static De-obfuscation

рдЬрдм obfuscated code рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЕрдкрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:

  • DEX bytecode (Java): рдПрдХ рдкреНрд░рднрд╛рд╡реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ de-obfuscation рддрд░реАрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдлрд┐рд░ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ Java рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛрд╣рд░рд╛рдирд╛ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рдХреНрд╖рд┐рдд рддрддреНрд╡реЛрдВ рдкрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • Java рдФрд░ Native Code: рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ de-obfuscation рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ Python рдЬреИрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд░рдгрдиреАрддрд┐ рдпрд╣ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХ рд▓рдХреНрд╖реНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред

Identifying Obfuscation

рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ de-obfuscation рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИред рдкреНрд░рдореБрдЦ рд╕рдВрдХреЗрддрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • Java рдФрд░ Android рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЙрд▓рдЭрди, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреА рд╣реИред

  • рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЬреЛ assets рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ рдпрд╛ DexClassLoader рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИрдВ, рдЬреЛ рдХреЛрдб рдЕрдирдкреИрдХрд┐рдВрдЧ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИрдВред

  • рдЕрдЬреНрдЮрд╛рдд JNI рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде Native Libraries рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдореВрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

Dynamic Analysis in De-obfuscation

рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ, рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкреИрдЯрд░реНрди рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдЬреЛ рдХреЛрдб рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрд░рд╛рджреЗ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред

Applications of Dynamic Analysis

  • Runtime Decryption: рдХрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдпрд╛ рдХреЛрдб рдЦрдВрдбреЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЗрди рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рддрддреНрд╡реЛрдВ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдХреНрд╖рдг рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдирдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИред

  • Identifying Obfuscation Techniques: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ, рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рддрдХрдиреАрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХреЛрдб рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди, рдкреИрдХрд░, рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рдХреЛрдб рдЬрдирд░реЗрд╢рдиред

  • Uncovering Hidden Functionality: рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕рднреА рдХреЛрдб рдкрдереЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╢рд░реНрддрд╛рдиреБрд╕рд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдРрд╕реА рдЫрд┐рдкреА рд╣реБрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

References and Further Reading

  • BlackHat USA 2018: тАЬUnpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis LibraryтАЭ [video]

  • рдпрд╣ рдЯреЙрдХ рдПрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдПрдВрдЯреА-рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдореВрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдореВрд▓ рдХреЛрдб рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред

  • REcon 2019: тАЬThe Path to the Payload: Android EditionтАЭ [video]

  • рдпрд╣ рдЯреЙрдХ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рддрдХрдиреАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ Java рдХреЛрдб рдореЗрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ Android рдмреЛрдЯрдиреЗрдЯ рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рдерд╛ред

Last updated