def run_data_file(data_file): emu = Emulator() ret = emu.run(data_file) outx = emu.vm.variables.copy() outx.update({'ret': ret}) return str(OrderedDict(sorted(outx.items()))).replace( 'OrderedDict([(', '{').replace(')])', '}').replace("',", "':").replace("), (", ', ')
# Arguments for the method. # args = { # 'p0': (-62, -99, -106, -125, -123, -105, -98, -37, -105, -97, -103, -41, -118, -97, -113, -103, -109, -104, -115, 111, 98, 103, 35, 52), # 'p1': 19 # } # ret = emu.run(filename, args) # print(emu.stats) # print("RESULT: %s" % ret) # print('-' * 100) emu2 = Emulator() filename = os.path.join(os.path.dirname(__file__), 'test.smali') ret = emu2.run(filename, trace=True) print(ret) print(emu2.vm.variables) exit() snippet = [ 'const/16 v5, 0x29', 'new-array v0, v5, [B', 'fill-array-data v0, :array_66', 'sput-object v0, xbd:[B', 'const/16 v0, 0xde', 'sput v0, xba:I', 'new-instance v0, Ljava/lang/StringBuilder;', 'sget-object v1, xbd:[B', 'const/4 v2, 0x6', 'aget-byte v1, v1, v2', 'int-to-byte v1, v1', 'or-int/lit8 v2, v1, 0x50', 'int-to-byte v2, v2', 'sget-object v3, xbd:[B', 'const/16 v4, 0x13', 'aget-byte v3, v3, v4', 'int-to-byte v3, v3', 'return-object v0', ':array_66', ' .array-data 1', ' 0x79t', ' -0x52t', ' 0x16t', ' 0x47t', ' 0xet', ' 0x2t', ' 0x5t', ' 0xct', ' 0x7t', ' 0x8t',
import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from smaliemu.emulator import Emulator emu = Emulator() filename = os.path.join(os.path.dirname(__file__), 'decryptor.smali') # Arguments for the method. args = { 'p0': (-62, -99, -106, -125, -123, -105, -98, -37, -105, -97, -103, -41, -118, -97, -113, -103, -109, -104, -115, 111, 98, 103, 35, 52), 'p1': 19 } ret = emu.run(filename, args) print(emu.stats) print("RESULT: %s" % ret) print('-' * 100) emu2 = Emulator() snippet = ['const/16 a, 5', 'mul-int/lit16 c,a,5'] ret = emu2.call(snippet, trace=True) print("{'a': 5, 'c': 25, 'ret': None}") print("'%s'" % ret)