class StringDecryptor
Constants
- MODIFIER
- STRING_DECRYPT
Attributes
optimizations[R]
Public Class Methods
new(driver, smali_files, methods)
click to toggle source
# File lib/dex-oracle/plugins/string_decryptor.rb, line 20 def initialize(driver, smali_files, methods) @driver = driver @smali_files = smali_files @methods = methods @optimizations = Hash.new(0) end
Public Instance Methods
process()
click to toggle source
# File lib/dex-oracle/plugins/string_decryptor.rb, line 27 def process method_to_target_to_contexts = {} @methods.each do |method| logger.info("Decrypting strings #{method.descriptor}") target_to_contexts = {} target_to_contexts.merge!(decrypt_strings(method)) target_to_contexts.map { |_, v| v.uniq! } method_to_target_to_contexts[method] = target_to_contexts unless target_to_contexts.empty? end made_changes = false made_changes |= Plugin.apply_batch(@driver, method_to_target_to_contexts, MODIFIER) made_changes end
Private Instance Methods
decrypt_strings(method)
click to toggle source
# File lib/dex-oracle/plugins/string_decryptor.rb, line 45 def decrypt_strings(method) target_to_contexts = {} matches = method.body.scan(STRING_DECRYPT) @optimizations[:string_decrypts] += matches.size if matches matches.each do |original, encrypted, class_name, method_signature, out_reg| target = @driver.make_target( class_name, method_signature, encrypted ) target_to_contexts[target] = [] unless target_to_contexts.key?(target) target_to_contexts[target] << [original, out_reg] end target_to_contexts end