androguard.decompiler.dad package

Submodules

androguard.decompiler.dad.dast module

This file is a simplified version of writer.py that outputs an AST instead of source code.

class androguard.decompiler.dad.dast.JSONWriter(graph, method)

Bases: object

add(val)
get_ast()
get_cond(node)
visit_cond_node(cond)
visit_ins(op)
visit_loop_node(loop)
visit_node(node)
visit_return_node(ret)
visit_statement_node(stmt)
visit_switch_node(switch)
visit_throw_node(throw)
visit_try_node(try_node)
androguard.decompiler.dad.dast.array_access(arr, ind)
androguard.decompiler.dad.dast.array_creation(tn, params, dim)
androguard.decompiler.dad.dast.array_initializer(params, tn=None)
androguard.decompiler.dad.dast.assignment(lhs, rhs, op='')
androguard.decompiler.dad.dast.binary_infix(op, left, right)
androguard.decompiler.dad.dast.cast(tn, arg)
androguard.decompiler.dad.dast.dummy(*args)
androguard.decompiler.dad.dast.expression_stmt(expr)
androguard.decompiler.dad.dast.field_access(triple, left)
androguard.decompiler.dad.dast.if_stmt(cond_expr, scopes)
androguard.decompiler.dad.dast.jump_stmt(keyword)
androguard.decompiler.dad.dast.literal(result, tt)
androguard.decompiler.dad.dast.literal_bool(b)
androguard.decompiler.dad.dast.literal_class(desc)
androguard.decompiler.dad.dast.literal_double(f)
androguard.decompiler.dad.dast.literal_float(f)
androguard.decompiler.dad.dast.literal_hex_int(b)
androguard.decompiler.dad.dast.literal_int(b)
androguard.decompiler.dad.dast.literal_long(b)
androguard.decompiler.dad.dast.literal_null()
androguard.decompiler.dad.dast.literal_string(s)
androguard.decompiler.dad.dast.local(name)
androguard.decompiler.dad.dast.local_decl_stmt(expr, decl)
androguard.decompiler.dad.dast.loop_stmt(isdo, cond_expr, body)
androguard.decompiler.dad.dast.method_invocation(triple, name, base, params)
androguard.decompiler.dad.dast.parenthesis(expr)
androguard.decompiler.dad.dast.parse_descriptor(desc)
androguard.decompiler.dad.dast.return_stmt(expr)
androguard.decompiler.dad.dast.statement_block()
androguard.decompiler.dad.dast.switch_stmt(cond_expr, ksv_pairs)
androguard.decompiler.dad.dast.throw_stmt(expr)
androguard.decompiler.dad.dast.try_stmt(tryb, pairs)
androguard.decompiler.dad.dast.typen(baset, dim)
androguard.decompiler.dad.dast.unary_postfix(left, op)
androguard.decompiler.dad.dast.unary_prefix(op, left)
androguard.decompiler.dad.dast.var_decl(typen, var)
androguard.decompiler.dad.dast.visit_arr_data(value)
androguard.decompiler.dad.dast.visit_decl(var, init_expr=None)
androguard.decompiler.dad.dast.visit_expr(op)
androguard.decompiler.dad.dast.visit_ins(op, isCtor=False)
androguard.decompiler.dad.dast.write_inplace_if_possible(lhs, rhs)

androguard.decompiler.dad.basic_blocks module

class androguard.decompiler.dad.basic_blocks.BasicBlock(name, block_ins)

Bases: androguard.decompiler.dad.node.Node

add_ins(new_ins_list)
add_variable_declaration(variable)
get_ins()
get_loc_with_ins()
number_ins(num)
remove_ins(loc, ins)
set_catch_type(_type)
class androguard.decompiler.dad.basic_blocks.CatchBlock(node)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

visit(visitor)
visit_exception(visitor)
class androguard.decompiler.dad.basic_blocks.CondBlock(name, block_ins)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

neg()
update_attribute_with(n_map)
visit(visitor)
visit_cond(visitor)
class androguard.decompiler.dad.basic_blocks.Condition(cond1, cond2, isand, isnot)

Bases: object

get_ins()
get_loc_with_ins()
neg()
visit(visitor)
class androguard.decompiler.dad.basic_blocks.LoopBlock(name, cond)

Bases: androguard.decompiler.dad.basic_blocks.CondBlock

get_ins()
get_loc_with_ins()
neg()
update_attribute_with(n_map)
visit(visitor)
visit_cond(visitor)
class androguard.decompiler.dad.basic_blocks.ReturnBlock(name, block_ins)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

visit(visitor)
class androguard.decompiler.dad.basic_blocks.ShortCircuitBlock(name, cond)

Bases: androguard.decompiler.dad.basic_blocks.CondBlock

get_ins()
get_loc_with_ins()
neg()
visit_cond(visitor)
class androguard.decompiler.dad.basic_blocks.StatementBlock(name, block_ins)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

visit(visitor)
class androguard.decompiler.dad.basic_blocks.SwitchBlock(name, switch, block_ins)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

add_case(case)
copy_from(node)
order_cases()
update_attribute_with(n_map)
visit(visitor)
class androguard.decompiler.dad.basic_blocks.ThrowBlock(name, block_ins)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

visit(visitor)
class androguard.decompiler.dad.basic_blocks.TryBlock(node)

Bases: androguard.decompiler.dad.basic_blocks.BasicBlock

add_catch_node(node)
property num
visit(visitor)
androguard.decompiler.dad.basic_blocks.build_node_from_block(block, vmap, gen_ret, exception_type=None)

androguard.decompiler.dad.control_flow module

androguard.decompiler.dad.control_flow.catch_struct(graph, idoms)
androguard.decompiler.dad.control_flow.derived_sequence(graph)

Compute the derived sequence of the graph G The intervals of G are collapsed into nodes, intervals of these nodes are built, and the process is repeated iteratively until we obtain a single node (if the graph is not irreducible)

androguard.decompiler.dad.control_flow.identify_structures(graph, idoms)
androguard.decompiler.dad.control_flow.if_struct(graph, idoms)
androguard.decompiler.dad.control_flow.intervals(graph)

Compute the intervals of the graph Returns interval_graph: a graph of the intervals of G interv_heads: a dict of (header node, interval)

androguard.decompiler.dad.control_flow.loop_follow(start, end, nodes_in_loop)
androguard.decompiler.dad.control_flow.loop_struct(graphs_list, intervals_list)
androguard.decompiler.dad.control_flow.loop_type(start, end, nodes_in_loop)
androguard.decompiler.dad.control_flow.mark_loop(graph, start, end, interval)
androguard.decompiler.dad.control_flow.mark_loop_rec(graph, node, s_num, e_num, interval, nodes_in_loop)
androguard.decompiler.dad.control_flow.short_circuit_struct(graph, idom, node_map)
androguard.decompiler.dad.control_flow.switch_struct(graph, idoms)
androguard.decompiler.dad.control_flow.update_dom(idoms, node_map)
androguard.decompiler.dad.control_flow.while_block_struct(graph, node_map)

androguard.decompiler.dad.dataflow module

class androguard.decompiler.dad.dataflow.BasicReachDef(graph, params)

Bases: object

run()
class androguard.decompiler.dad.dataflow.DummyNode(name)

Bases: androguard.decompiler.dad.node.Node

get_loc_with_ins()
androguard.decompiler.dad.dataflow.build_def_use(graph, lparams)

Builds the Def-Use and Use-Def (DU/UD) chains of the variables of the method.

androguard.decompiler.dad.dataflow.clear_path(graph, reg, loc1, loc2)

Check that the path from loc1 to loc2 is clear. We have to check that there is no side effect between the two location points. We also have to check that the variable reg is not redefined along one of the possible pathes from loc1 to loc2.

androguard.decompiler.dad.dataflow.clear_path_node(graph, reg, loc1, loc2)
androguard.decompiler.dad.dataflow.dead_code_elimination(graph, du, ud)

Run a dead code elimination pass. Instructions are checked to be dead. If it is the case, we remove them and we update the DU & UD chains of its variables to check for further dead instructions.

androguard.decompiler.dad.dataflow.group_variables(lvars, DU, UD)
androguard.decompiler.dad.dataflow.place_declarations(graph, dvars, du, ud)
androguard.decompiler.dad.dataflow.reach_def_analysis(graph, lparams)
androguard.decompiler.dad.dataflow.register_propagation(graph, du, ud)

Propagate the temporary registers between instructions and remove them if necessary. We process the nodes of the graph in reverse post order. For each instruction in the node, we look at the variables that it uses. For each of these variables we look where it is defined and if we can replace it with its definition. We have to be careful to the side effects some instructions may have. To do the propagation, we use the computed DU and UD chains.

androguard.decompiler.dad.dataflow.split_variables(graph, lvars, DU, UD)
androguard.decompiler.dad.dataflow.update_chain(graph, loc, du, ud)

Updates the DU chain of the instruction located at loc such that there is no more reference to it so that we can remove it. When an instruction is found to be dead (i.e it has no side effect, and the register defined is not used) we have to update the DU chain of all the variables that may me used by the dead instruction.

androguard.decompiler.dad.decompile module

class androguard.decompiler.dad.decompile.DvClass(dvclass, vma)

Bases: object

This is a wrapper for ClassDefItem inside the decompiler.

At first, methods contains a list of EncodedMethods, which are successively replaced by DvMethod in the process of decompilation.

get_ast()
get_methods()
get_source()
get_source_ext()
process(doAST=False)
process_method(num, doAST=False)
show_source()
class androguard.decompiler.dad.decompile.DvMachine(name)

Bases: object

Wrapper class for a Dalvik Object, like a DEX or ODEX file.

The wrapper allows to take a Dalvik file and get a list of Classes out of it. The DvMachine can take either an APK file directly, where all DEX files from the multidex are used, or a single DEX or ODEX file as an argument.

At first, classes contains only ClassDefItem as values. Then these objects are replaced by DvClass items successively.

get_ast()

Processes each class with AST enabled and returns a dictionary with all single ASTs Classnames as keys.

Returns

an dictionary for all classes

Return type

dict

get_class(class_name)

Return the DvClass with the given name

The name is partially matched against the known class names and the first result is returned. For example, the input foobar will match on Lfoobar/bla/foo;

Parameters

class_name (str) –

Returns

the class matching on the name

Return type

DvClass

get_classes()

Return a list of classnames contained in this machine. The format of each name is Lxxx;

Returns

list of class names

process()

Process all classes inside the machine.

This calls process() on each DvClass.

process_and_show()

Run process() and show_source() after each other.

show_source()

Calls show_source on all classes inside the machine. This prints the source to stdout.

This calls show_source() on each DvClass.

class androguard.decompiler.dad.decompile.DvMethod(methanalysis)

Bases: object

This is a wrapper around MethodAnalysis and EncodedMethod inside the decompiler.

get_ast()
get_source()
get_source_ext()
process(doAST=False)
show_source()
androguard.decompiler.dad.decompile.get_field_ast(field)
androguard.decompiler.dad.decompile.main()

androguard.decompiler.dad.graph module

class androguard.decompiler.dad.graph.GenInvokeRetName

Bases: object

last()
new()
set_to(ret)
class androguard.decompiler.dad.graph.Graph

Bases: object

Stores a CFG (Control Flow Graph), which is a directed graph.

The CFG defines an entry node entry, a single exit node exit, a list of nodes nodes and a list of edges edges.

add_catch_edge(e1, e2)
add_edge(e1, e2)
add_node(node)

Adds the given node to the graph, without connecting it to anyhting else.

Parameters

node (androguard.decompiler.dad.node.Node) – node to add

all_preds(node)
all_sucs(node)
compute_rpo()

Number the nodes in reverse post order. An RPO traversal visit as many predecessors of a node as possible before visiting the node itself.

draw(name, dname, draw_branches=True)

Writes the current graph as a PNG file

Parameters
  • name (str) – filename (without .png)

  • dname (str) – directory of the output png

  • draw_branches

Returns

get_ins_from_loc(loc)
get_node_from_loc(loc)
immediate_dominators()
number_ins()
post_order()

Yields the :class`~androguard.decompiler.dad.node.Node`s of the graph in post-order i.e we visit all the children of a node before visiting the node itself.

preds(node)
remove_ins(loc)
remove_node(node)

Remove the node from the graph, removes also all connections.

Parameters

node (androguard.decompiler.dad.node.Node) – the node to remove

sucs(node)
androguard.decompiler.dad.graph.bfs(start)

Breadth first search

Yields all nodes found from the starting point

Parameters

start – start node

androguard.decompiler.dad.graph.construct(start_block, vmap, exceptions)

Constructs a CFG

Parameters
Return type

Graph

androguard.decompiler.dad.graph.dom_lt(graph)

Dominator algorithm from Lengauer-Tarjan

androguard.decompiler.dad.graph.make_node(graph, block, block_to_node, vmap, gen_ret)
androguard.decompiler.dad.graph.simplify(graph)

Simplify the CFG by merging/deleting statement nodes when possible: If statement B follows statement A and if B has no other predecessor besides A, then we can merge A and B into a new statement node. We also remove nodes which do nothing except redirecting the control flow (nodes which only contains a goto).

androguard.decompiler.dad.graph.split_if_nodes(graph)

Split IfNodes in two nodes, the first node is the header node, the second one is only composed of the jump condition.

androguard.decompiler.dad.instruction module

class androguard.decompiler.dad.instruction.ArrayExpression

Bases: androguard.decompiler.dad.instruction.IRForm

class androguard.decompiler.dad.instruction.ArrayLengthExpression(array)

Bases: androguard.decompiler.dad.instruction.ArrayExpression

get_type()
get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.ArrayLoadExpression(arg, index, _type)

Bases: androguard.decompiler.dad.instruction.ArrayExpression

get_type()
get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.ArrayStoreInstruction(rhs, array, index, _type)

Bases: androguard.decompiler.dad.instruction.IRForm

get_used_vars()
has_side_effect()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.AssignExpression(lhs, rhs)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_rhs()
get_used_vars()
has_side_effect()
is_call()
is_propagable()
remove_defined_var()
replace(old, new)
replace_lhs(new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.BaseClass(name, descriptor=None)

Bases: androguard.decompiler.dad.instruction.IRForm

is_const()
visit(visitor)
class androguard.decompiler.dad.instruction.BinaryCompExpression(op, arg1, arg2, _type)

Bases: androguard.decompiler.dad.instruction.BinaryExpression

visit(visitor)
class androguard.decompiler.dad.instruction.BinaryExpression(op, arg1, arg2, _type)

Bases: androguard.decompiler.dad.instruction.IRForm

get_used_vars()
has_side_effect()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.BinaryExpression2Addr(op, dest, arg, _type)

Bases: androguard.decompiler.dad.instruction.BinaryExpression

class androguard.decompiler.dad.instruction.BinaryExpressionLit(op, arg1, arg2)

Bases: androguard.decompiler.dad.instruction.BinaryExpression

class androguard.decompiler.dad.instruction.CastExpression(op, atype, arg)

Bases: androguard.decompiler.dad.instruction.UnaryExpression

get_type()
get_used_vars()
is_const()
visit(visitor)
class androguard.decompiler.dad.instruction.CheckCastExpression(arg, _type, descriptor=None)

Bases: androguard.decompiler.dad.instruction.IRForm

get_used_vars()
is_const()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.ConditionalExpression(op, arg1, arg2)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_used_vars()
is_cond()
neg()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.ConditionalZExpression(op, arg)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_used_vars()
is_cond()
neg()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.Constant(value, atype, int_value=None, descriptor=None)

Bases: androguard.decompiler.dad.instruction.IRForm

get_int_value()
get_type()
get_used_vars()
is_const()
visit(visitor)
class androguard.decompiler.dad.instruction.FillArrayExpression(reg, value)

Bases: androguard.decompiler.dad.instruction.ArrayExpression

get_rhs()
get_used_vars()
is_propagable()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.FilledArrayExpression(asize, atype, args)

Bases: androguard.decompiler.dad.instruction.ArrayExpression

get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.IRForm

Bases: object

get_lhs()
get_rhs()
get_type()
get_used_vars()
has_side_effect()
is_call()
is_cond()
is_const()
is_ident()
is_propagable()
remove_defined_var()
replace(old, new)
replace_lhs(new)
replace_var(old, new)
set_type(_type)
visit(visitor)
class androguard.decompiler.dad.instruction.InstanceExpression(arg, klass, ftype, name)

Bases: androguard.decompiler.dad.instruction.IRForm

get_type()
get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.InstanceInstruction(rhs, lhs, klass, atype, name)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_used_vars()
has_side_effect()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.InvokeDirectInstruction(clsname, name, base, rtype, ptype, args, triple)

Bases: androguard.decompiler.dad.instruction.InvokeInstruction

class androguard.decompiler.dad.instruction.InvokeInstruction(clsname, name, base, rtype, ptype, args, triple)

Bases: androguard.decompiler.dad.instruction.IRForm

get_type()
get_used_vars()
has_side_effect()
is_call()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.InvokeRangeInstruction(clsname, name, rtype, ptype, args, triple)

Bases: androguard.decompiler.dad.instruction.InvokeInstruction

class androguard.decompiler.dad.instruction.InvokeStaticInstruction(clsname, name, base, rtype, ptype, args, triple)

Bases: androguard.decompiler.dad.instruction.InvokeInstruction

get_used_vars()
class androguard.decompiler.dad.instruction.MonitorEnterExpression(ref)

Bases: androguard.decompiler.dad.instruction.RefExpression

visit(visitor)
class androguard.decompiler.dad.instruction.MonitorExitExpression(ref)

Bases: androguard.decompiler.dad.instruction.RefExpression

visit(visitor)
class androguard.decompiler.dad.instruction.MoveExceptionExpression(ref, _type)

Bases: androguard.decompiler.dad.instruction.RefExpression

get_lhs()
get_used_vars()
has_side_effect()
replace_lhs(new)
visit(visitor)
class androguard.decompiler.dad.instruction.MoveExpression(lhs, rhs)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_rhs()
get_used_vars()
has_side_effect()
is_call()
replace(old, new)
replace_lhs(new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.MoveResultExpression(lhs, rhs)

Bases: androguard.decompiler.dad.instruction.MoveExpression

has_side_effect()
is_propagable()
visit(visitor)
class androguard.decompiler.dad.instruction.NewArrayExpression(asize, atype)

Bases: androguard.decompiler.dad.instruction.ArrayExpression

get_used_vars()
is_propagable()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.NewInstance(ins_type)

Bases: androguard.decompiler.dad.instruction.IRForm

get_type()
get_used_vars()
replace(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.NopExpression

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_used_vars()
visit(visitor)
class androguard.decompiler.dad.instruction.Param(value, atype)

Bases: androguard.decompiler.dad.instruction.Variable

is_const()
visit(visitor)
class androguard.decompiler.dad.instruction.RefExpression(ref)

Bases: androguard.decompiler.dad.instruction.IRForm

get_used_vars()
is_propagable()
replace(old, new)
replace_var(old, new)
class androguard.decompiler.dad.instruction.ReturnInstruction(arg)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.StaticExpression(cls_name, field_type, field_name)

Bases: androguard.decompiler.dad.instruction.IRForm

get_type()
replace(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.StaticInstruction(rhs, klass, ftype, name)

Bases: androguard.decompiler.dad.instruction.IRForm

get_lhs()
get_used_vars()
has_side_effect()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.SwitchExpression(src, branch)

Bases: androguard.decompiler.dad.instruction.IRForm

get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.ThisParam(value, atype)

Bases: androguard.decompiler.dad.instruction.Param

visit(visitor)
class androguard.decompiler.dad.instruction.ThrowExpression(ref)

Bases: androguard.decompiler.dad.instruction.RefExpression

visit(visitor)
class androguard.decompiler.dad.instruction.UnaryExpression(op, arg, _type)

Bases: androguard.decompiler.dad.instruction.IRForm

get_type()
get_used_vars()
replace(old, new)
replace_var(old, new)
visit(visitor)
class androguard.decompiler.dad.instruction.Variable(value)

Bases: androguard.decompiler.dad.instruction.IRForm

get_used_vars()
is_ident()
value()
visit(visitor)
visit_decl(visitor)

androguard.decompiler.dad.node module

class androguard.decompiler.dad.node.Interval(head)

Bases: object

add_node(node)
compute_end(graph)
get_end()
get_head()
class androguard.decompiler.dad.node.LoopType

Bases: object

copy()
property is_endless
property is_posttest
property is_pretest
class androguard.decompiler.dad.node.MakeProperties(name, bases, dct)

Bases: type

class androguard.decompiler.dad.node.Node(name)

Bases: object

copy_from(node)
get_end()
get_head()
update_attribute_with(n_map)
class androguard.decompiler.dad.node.NodeType

Bases: object

copy()
property is_cond
property is_return
property is_stmt
property is_switch
property is_throw

androguard.decompiler.dad.opcode_ins module

class androguard.decompiler.dad.opcode_ins.Op

Bases: object

ADD = '+'
AND = '&'
CMP = 'cmp'
DIV = '/'
EQUAL = '=='
GEQUAL = '>='
GREATER = '>'
INTSHL = '<<'
INTSHR = '>>'
LEQUAL = '<='
LONGSHL = '<<'
LONGSHR = '>>'
LOWER = '<'
MOD = '%'
MUL = '*'
NEG = '-'
NEQUAL = '!='
NOT = '~'
OR = '|'
SUB = '-'
XOR = '^'
androguard.decompiler.dad.opcode_ins.adddouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.adddouble2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.addfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.addfloat2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.addint(ins, vmap)
androguard.decompiler.dad.opcode_ins.addint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.addintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.addintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.addlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.addlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.aget(ins, vmap)
androguard.decompiler.dad.opcode_ins.agetboolean(ins, vmap)
androguard.decompiler.dad.opcode_ins.agetbyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.agetchar(ins, vmap)
androguard.decompiler.dad.opcode_ins.agetobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.agetshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.agetwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.andint(ins, vmap)
androguard.decompiler.dad.opcode_ins.andint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.andintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.andintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.andlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.andlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.aput(ins, vmap)
androguard.decompiler.dad.opcode_ins.aputboolean(ins, vmap)
androguard.decompiler.dad.opcode_ins.aputbyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.aputchar(ins, vmap)
androguard.decompiler.dad.opcode_ins.aputobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.aputshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.aputwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.arraylength(ins, vmap)
androguard.decompiler.dad.opcode_ins.assign_binary_2addr_exp(ins, val_op, op_type, vmap)
androguard.decompiler.dad.opcode_ins.assign_binary_exp(ins, val_op, op_type, vmap)
androguard.decompiler.dad.opcode_ins.assign_cast_exp(val_a, val_b, val_op, op_type, vmap)
androguard.decompiler.dad.opcode_ins.assign_cmp(val_a, val_b, val_c, cmp_type, vmap)
androguard.decompiler.dad.opcode_ins.assign_const(dest_reg, cst, vmap)
androguard.decompiler.dad.opcode_ins.assign_lit(op_type, val_cst, val_a, val_b, vmap)
androguard.decompiler.dad.opcode_ins.checkcast(ins, vmap)
androguard.decompiler.dad.opcode_ins.cmpgdouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.cmpgfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.cmpldouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.cmplfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.cmplong(ins, vmap)
androguard.decompiler.dad.opcode_ins.const(ins, vmap)
androguard.decompiler.dad.opcode_ins.const16(ins, vmap)
androguard.decompiler.dad.opcode_ins.const4(ins, vmap)
androguard.decompiler.dad.opcode_ins.constclass(ins, vmap)
androguard.decompiler.dad.opcode_ins.consthigh16(ins, vmap)
androguard.decompiler.dad.opcode_ins.conststring(ins, vmap)
androguard.decompiler.dad.opcode_ins.conststringjumbo(ins, vmap)
androguard.decompiler.dad.opcode_ins.constwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.constwide16(ins, vmap)
androguard.decompiler.dad.opcode_ins.constwide32(ins, vmap)
androguard.decompiler.dad.opcode_ins.constwidehigh16(ins, vmap)
androguard.decompiler.dad.opcode_ins.divdouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.divdouble2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.divfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.divfloat2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.divint(ins, vmap)
androguard.decompiler.dad.opcode_ins.divint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.divintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.divintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.divlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.divlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.doubletofloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.doubletoint(ins, vmap)
androguard.decompiler.dad.opcode_ins.doubletolong(ins, vmap)
androguard.decompiler.dad.opcode_ins.fillarraydata(ins, vmap, value)
androguard.decompiler.dad.opcode_ins.fillarraydatapayload(ins, vmap)
androguard.decompiler.dad.opcode_ins.fillednewarray(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.fillednewarrayrange(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.floattodouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.floattoint(ins, vmap)
androguard.decompiler.dad.opcode_ins.floattolong(ins, vmap)
androguard.decompiler.dad.opcode_ins.get_args(vmap, param_type, largs)
androguard.decompiler.dad.opcode_ins.get_variables(vmap, *variables)
androguard.decompiler.dad.opcode_ins.goto(ins, vmap)
androguard.decompiler.dad.opcode_ins.goto16(ins, vmap)
androguard.decompiler.dad.opcode_ins.goto32(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifeq(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifeqz(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifge(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifgez(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifgt(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifgtz(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifle(ins, vmap)
androguard.decompiler.dad.opcode_ins.iflez(ins, vmap)
androguard.decompiler.dad.opcode_ins.iflt(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifltz(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifne(ins, vmap)
androguard.decompiler.dad.opcode_ins.ifnez(ins, vmap)
androguard.decompiler.dad.opcode_ins.iget(ins, vmap)
androguard.decompiler.dad.opcode_ins.igetboolean(ins, vmap)
androguard.decompiler.dad.opcode_ins.igetbyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.igetchar(ins, vmap)
androguard.decompiler.dad.opcode_ins.igetobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.igetshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.igetwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.instanceof(ins, vmap)
androguard.decompiler.dad.opcode_ins.inttobyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.inttochar(ins, vmap)
androguard.decompiler.dad.opcode_ins.inttodouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.inttofloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.inttolong(ins, vmap)
androguard.decompiler.dad.opcode_ins.inttoshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.invokedirect(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokedirectrange(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokeinterface(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokeinterfacerange(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokestatic(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokestaticrange(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokesuper(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokesuperrange(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokevirtual(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.invokevirtualrange(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.iput(ins, vmap)
androguard.decompiler.dad.opcode_ins.iputboolean(ins, vmap)
androguard.decompiler.dad.opcode_ins.iputbyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.iputchar(ins, vmap)
androguard.decompiler.dad.opcode_ins.iputobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.iputshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.iputwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.load_array_exp(val_a, val_b, val_c, ar_type, vmap)
androguard.decompiler.dad.opcode_ins.longtodouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.longtofloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.longtoint(ins, vmap)
androguard.decompiler.dad.opcode_ins.monitorenter(ins, vmap)
androguard.decompiler.dad.opcode_ins.monitorexit(ins, vmap)
androguard.decompiler.dad.opcode_ins.move(ins, vmap)
androguard.decompiler.dad.opcode_ins.move16(ins, vmap)
androguard.decompiler.dad.opcode_ins.moveexception(ins, vmap, _type)
androguard.decompiler.dad.opcode_ins.movefrom16(ins, vmap)
androguard.decompiler.dad.opcode_ins.moveobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.moveobject16(ins, vmap)
androguard.decompiler.dad.opcode_ins.moveobjectfrom16(ins, vmap)
androguard.decompiler.dad.opcode_ins.moveresult(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.moveresultobject(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.moveresultwide(ins, vmap, ret)
androguard.decompiler.dad.opcode_ins.movewide(ins, vmap)
androguard.decompiler.dad.opcode_ins.movewide16(ins, vmap)
androguard.decompiler.dad.opcode_ins.movewidefrom16(ins, vmap)
androguard.decompiler.dad.opcode_ins.muldouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.muldouble2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.mulfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.mulfloat2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.mulint(ins, vmap)
androguard.decompiler.dad.opcode_ins.mulint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.mulintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.mulintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.mullong(ins, vmap)
androguard.decompiler.dad.opcode_ins.mullong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.negdouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.negfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.negint(ins, vmap)
androguard.decompiler.dad.opcode_ins.neglong(ins, vmap)
androguard.decompiler.dad.opcode_ins.newarray(ins, vmap)
androguard.decompiler.dad.opcode_ins.newinstance(ins, vmap)
androguard.decompiler.dad.opcode_ins.nop(ins, vmap)
androguard.decompiler.dad.opcode_ins.notint(ins, vmap)
androguard.decompiler.dad.opcode_ins.notlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.orint(ins, vmap)
androguard.decompiler.dad.opcode_ins.orint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.orintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.orintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.orlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.orlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.packedswitch(ins, vmap)
androguard.decompiler.dad.opcode_ins.remdouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.remdouble2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.remfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.remfloat2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.remint(ins, vmap)
androguard.decompiler.dad.opcode_ins.remint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.remintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.remintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.remlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.remlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.return_reg(ins, vmap)
androguard.decompiler.dad.opcode_ins.returnobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.returnvoid(ins, vmap)
androguard.decompiler.dad.opcode_ins.returnwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.rsubint(ins, vmap)
androguard.decompiler.dad.opcode_ins.rsubintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.sget(ins, vmap)
androguard.decompiler.dad.opcode_ins.sgetboolean(ins, vmap)
androguard.decompiler.dad.opcode_ins.sgetbyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.sgetchar(ins, vmap)
androguard.decompiler.dad.opcode_ins.sgetobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.sgetshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.sgetwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.shlint(ins, vmap)
androguard.decompiler.dad.opcode_ins.shlint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.shlintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.shllong(ins, vmap)
androguard.decompiler.dad.opcode_ins.shllong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.shrint(ins, vmap)
androguard.decompiler.dad.opcode_ins.shrint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.shrintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.shrlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.shrlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.sparseswitch(ins, vmap)
androguard.decompiler.dad.opcode_ins.sput(ins, vmap)
androguard.decompiler.dad.opcode_ins.sputboolean(ins, vmap)
androguard.decompiler.dad.opcode_ins.sputbyte(ins, vmap)
androguard.decompiler.dad.opcode_ins.sputchar(ins, vmap)
androguard.decompiler.dad.opcode_ins.sputobject(ins, vmap)
androguard.decompiler.dad.opcode_ins.sputshort(ins, vmap)
androguard.decompiler.dad.opcode_ins.sputwide(ins, vmap)
androguard.decompiler.dad.opcode_ins.store_array_inst(val_a, val_b, val_c, ar_type, vmap)
androguard.decompiler.dad.opcode_ins.subdouble(ins, vmap)
androguard.decompiler.dad.opcode_ins.subdouble2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.subfloat(ins, vmap)
androguard.decompiler.dad.opcode_ins.subfloat2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.subint(ins, vmap)
androguard.decompiler.dad.opcode_ins.subint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.sublong(ins, vmap)
androguard.decompiler.dad.opcode_ins.sublong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.throw(ins, vmap)
androguard.decompiler.dad.opcode_ins.ushrint(ins, vmap)
androguard.decompiler.dad.opcode_ins.ushrint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.ushrintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.ushrlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.ushrlong2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.xorint(ins, vmap)
androguard.decompiler.dad.opcode_ins.xorint2addr(ins, vmap)
androguard.decompiler.dad.opcode_ins.xorintlit16(ins, vmap)
androguard.decompiler.dad.opcode_ins.xorintlit8(ins, vmap)
androguard.decompiler.dad.opcode_ins.xorlong(ins, vmap)
androguard.decompiler.dad.opcode_ins.xorlong2addr(ins, vmap)

androguard.decompiler.dad.util module

androguard.decompiler.dad.util.build_path(graph, node1, node2, path=None)

Build the path from node1 to node2. The path is composed of all the nodes between node1 and node2, node1 excluded. Although if there is a loop starting from node1, it will be included in the path.

androguard.decompiler.dad.util.common_dom(idom, cur, pred)
androguard.decompiler.dad.util.create_png(cls_name, meth_name, graph, dir_name='graphs2')

Creates a PNG from a given Graph.

Parameters
androguard.decompiler.dad.util.get_access_class(access)
androguard.decompiler.dad.util.get_access_field(access)
androguard.decompiler.dad.util.get_access_method(access)
androguard.decompiler.dad.util.get_params_type(descriptor)

Return the parameters type of a descriptor (e.g (IC)V)

androguard.decompiler.dad.util.get_type(atype, size=None)

Retrieve the java type of a descriptor (e.g : I)

androguard.decompiler.dad.util.get_type_size(param)

Return the number of register needed by the type @param

androguard.decompiler.dad.util.merge_inner(clsdict)

Merge the inner class(es) of a class: e.g class A { … } class A$foo{ … } class A$bar{ … } ==> class A { class foo{…} class bar{…} … }

androguard.decompiler.dad.writer module

class androguard.decompiler.dad.writer.Writer(graph, method)

Bases: object

Transforms a method into Java code.

dec_ind(i=1)
end_ins()
inc_ind(i=1)
space()
str_ext()
visit_alength(array)
visit_aload(array, index)
visit_assign(lhs, rhs)
visit_astore(array, index, rhs, data=None)
visit_base_class(cls, data=None)
visit_binary_expression(op, arg1, arg2)
visit_cast(op, arg)
visit_catch_node(catch_node)
visit_check_cast(arg, atype)
visit_cond_expression(op, arg1, arg2)
visit_cond_node(cond)
visit_condz_expression(op, arg)
visit_constant(cst)
visit_decl(var)
visit_fill_array(array, value)
visit_filled_new_array(atype, size, args)
visit_get_instance(arg, name, data=None)
visit_get_static(cls, name)
visit_ins(ins)
visit_invoke(name, base, ptype, rtype, args, invokeInstr)
visit_loop_node(loop)
visit_monitor_enter(ref)
visit_monitor_exit(ref)
visit_move(lhs, rhs)
visit_move_exception(var, data=None)
visit_move_result(lhs, rhs)
visit_new(atype, data=None)
visit_new_array(atype, size)
visit_node(node)
visit_nop()
visit_param(param, data=None)
visit_put_instance(lhs, name, rhs, data=None)
visit_put_static(cls, name, rhs)
visit_return(arg)
visit_return_node(ret)
visit_return_void()
visit_short_circuit_condition(nnot, aand, cond1, cond2)
visit_statement_node(stmt)
visit_super()
visit_switch(arg)
visit_switch_node(switch)
visit_this()
visit_throw(ref)
visit_throw_node(throw)
visit_try_node(try_node)
visit_unary_expression(op, arg)
visit_variable(var)
write(s, data=None)
write_ext(t)
write_ind()
write_ind_visit_end(lhs, s, rhs=None, data=None)
write_ind_visit_end_ext(lhs, before, s, after, rhs=None, data=None, subsection='UNKNOWN_SUBSECTION')
write_inplace_if_possible(lhs, rhs)
write_method()
androguard.decompiler.dad.writer.string(s)

Convert a string to a escaped ASCII representation including quotation marks :param s: a string :return: ASCII escaped string

Module contents