angr 9.2.149__py3-none-macosx_10_9_x86_64.whl → 9.2.150__py3-none-macosx_10_9_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of angr might be problematic. Click here for more details.
- angr/__init__.py +1 -1
- angr/__main__.py +100 -37
- angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +2 -1
- angr/analyses/decompiler/utils.py +17 -0
- angr/analyses/disassembly.py +2 -1
- angr/analyses/patchfinder.py +1 -1
- angr/analyses/typehoon/typehoon.py +4 -1
- angr/engines/pcode/lifter.py +7 -0
- angr/lib/angr_native.dylib +0 -0
- angr/utils/graph.py +51 -27
- {angr-9.2.149.dist-info → angr-9.2.150.dist-info}/METADATA +6 -6
- {angr-9.2.149.dist-info → angr-9.2.150.dist-info}/RECORD +16 -16
- {angr-9.2.149.dist-info → angr-9.2.150.dist-info}/WHEEL +0 -0
- {angr-9.2.149.dist-info → angr-9.2.150.dist-info}/entry_points.txt +0 -0
- {angr-9.2.149.dist-info → angr-9.2.150.dist-info}/licenses/LICENSE +0 -0
- {angr-9.2.149.dist-info → angr-9.2.150.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
angr/__main__.py
CHANGED
|
@@ -1,38 +1,93 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import argparse
|
|
4
|
-
import
|
|
4
|
+
import logging
|
|
5
|
+
import re
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
from collections.abc import Generator
|
|
5
8
|
|
|
9
|
+
import angr
|
|
6
10
|
from angr.analyses.decompiler import DECOMPILATION_PRESETS
|
|
7
11
|
from angr.analyses.decompiler.structuring import STRUCTURER_CLASSES, DEFAULT_STRUCTURER
|
|
8
12
|
from angr.analyses.decompiler.utils import decompile_functions
|
|
9
13
|
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from angr.knowledge_plugins.functions import Function
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
log = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
NUMERIC_ARG_RE = re.compile(r"^(0x)?[a-fA-F0-9]+$")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def parse_function_args(proj: angr.Project, func_args: list[str] | None) -> Generator[Function]:
|
|
12
26
|
"""
|
|
13
|
-
|
|
27
|
+
Generate a sequence of functions in the project kb by their identifier in func_args.
|
|
28
|
+
|
|
29
|
+
:param proj: Project to query.
|
|
30
|
+
:param func_args: Sequence of function identifiers to query. None for all functions.
|
|
14
31
|
"""
|
|
32
|
+
if func_args is None:
|
|
33
|
+
yield from sorted(proj.kb.functions.values(), key=lambda f: f.addr)
|
|
34
|
+
return
|
|
15
35
|
|
|
16
|
-
|
|
17
|
-
|
|
36
|
+
for func_arg in func_args:
|
|
37
|
+
if func_arg in proj.kb.functions:
|
|
38
|
+
yield proj.kb.functions[func_arg]
|
|
39
|
+
continue
|
|
18
40
|
|
|
41
|
+
if NUMERIC_ARG_RE.match(func_arg):
|
|
42
|
+
func_addr = int(func_arg, 0)
|
|
43
|
+
if func_addr in proj.kb.functions:
|
|
44
|
+
yield proj.kb.functions[func_addr]
|
|
45
|
+
continue
|
|
19
46
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
47
|
+
log.error('Function "%s" not found', func_arg)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def disassemble(args):
|
|
51
|
+
"""
|
|
52
|
+
Disassemble functions.
|
|
53
|
+
"""
|
|
54
|
+
loader_main_opts_kwargs = {}
|
|
55
|
+
if args.base_addr is not None:
|
|
56
|
+
loader_main_opts_kwargs["base_addr"] = args.base_addr
|
|
57
|
+
|
|
58
|
+
proj = angr.Project(args.binary, auto_load_libs=False, main_opts=loader_main_opts_kwargs)
|
|
59
|
+
proj.analyses.CFG(normalize=True, data_references=True)
|
|
60
|
+
|
|
61
|
+
for func in parse_function_args(proj, args.functions):
|
|
62
|
+
try:
|
|
63
|
+
if func.is_plt or func.is_syscall or func.is_alignment or func.is_simprocedure:
|
|
64
|
+
continue
|
|
65
|
+
func.pp(show_bytes=True, min_edge_depth=10)
|
|
66
|
+
except Exception as e: # pylint:disable=broad-exception-caught
|
|
67
|
+
if not args.catch_exceptions:
|
|
68
|
+
raise
|
|
69
|
+
log.exception(e)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def decompile(args):
|
|
73
|
+
"""
|
|
74
|
+
Decompile functions.
|
|
75
|
+
"""
|
|
76
|
+
decompilation = decompile_functions(
|
|
77
|
+
args.binary,
|
|
78
|
+
functions=args.functions,
|
|
79
|
+
structurer=args.structurer,
|
|
80
|
+
catch_errors=args.catch_exceptions,
|
|
81
|
+
show_casts=not args.no_casts,
|
|
82
|
+
base_address=args.base_addr,
|
|
83
|
+
preset=args.preset,
|
|
27
84
|
)
|
|
85
|
+
print(decompilation)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def main():
|
|
89
|
+
parser = argparse.ArgumentParser(description="The angr CLI allows you to decompile and analyze binaries.")
|
|
28
90
|
parser.add_argument("binary", help="The path to the binary to analyze.")
|
|
29
|
-
parser.add_argument(
|
|
30
|
-
"--functions",
|
|
31
|
-
help="""
|
|
32
|
-
The functions to analyze under the current command. Functions can either be expressed as names found in the
|
|
33
|
-
symbols of the binary or as addresses like: 0x401000.""",
|
|
34
|
-
nargs="+",
|
|
35
|
-
)
|
|
36
91
|
parser.add_argument(
|
|
37
92
|
"--catch-exceptions",
|
|
38
93
|
help="""
|
|
@@ -49,40 +104,48 @@ def main(args=sys.argv[1:], out=sys.stdout):
|
|
|
49
104
|
type=lambda x: int(x, 0),
|
|
50
105
|
default=None,
|
|
51
106
|
)
|
|
52
|
-
|
|
53
|
-
|
|
107
|
+
subparsers = parser.add_subparsers(metavar="command", required=True)
|
|
108
|
+
|
|
109
|
+
decompile_cmd_parser = subparsers.add_parser("decompile", aliases=["dec"], help=decompile.__doc__)
|
|
110
|
+
decompile_cmd_parser.set_defaults(func=decompile)
|
|
111
|
+
decompile_cmd_parser.add_argument(
|
|
54
112
|
"--structurer",
|
|
55
113
|
help="The structuring algorithm to use for decompilation.",
|
|
56
114
|
choices=STRUCTURER_CLASSES.keys(),
|
|
57
115
|
default=DEFAULT_STRUCTURER.NAME,
|
|
58
116
|
)
|
|
59
|
-
|
|
117
|
+
decompile_cmd_parser.add_argument(
|
|
60
118
|
"--no-casts",
|
|
61
119
|
help="Do not show type casts in the decompiled output.",
|
|
62
120
|
action="store_true",
|
|
63
121
|
default=False,
|
|
64
122
|
)
|
|
65
|
-
|
|
123
|
+
decompile_cmd_parser.add_argument(
|
|
66
124
|
"--preset",
|
|
67
125
|
help="The configuration preset to use for decompilation.",
|
|
68
126
|
choices=DECOMPILATION_PRESETS,
|
|
69
127
|
default="default",
|
|
70
128
|
)
|
|
129
|
+
decompile_cmd_parser.add_argument(
|
|
130
|
+
"--functions",
|
|
131
|
+
help="""
|
|
132
|
+
The functions to decompile. Functions can either be expressed as names found in the
|
|
133
|
+
symbols of the binary or as addresses like: 0x401000.""",
|
|
134
|
+
nargs="+",
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
disassemble_cmd_parser = subparsers.add_parser("disassemble", aliases=["dis"], help=disassemble.__doc__)
|
|
138
|
+
disassemble_cmd_parser.set_defaults(func=disassemble)
|
|
139
|
+
disassemble_cmd_parser.add_argument(
|
|
140
|
+
"--functions",
|
|
141
|
+
help="""
|
|
142
|
+
The functions to disassemble. Functions can either be expressed as names found in the
|
|
143
|
+
symbols of the binary or as addresses like: 0x401000.""",
|
|
144
|
+
nargs="+",
|
|
145
|
+
)
|
|
71
146
|
|
|
72
|
-
args = parser.parse_args(
|
|
73
|
-
|
|
74
|
-
decompilation = decompile_functions(
|
|
75
|
-
args.binary,
|
|
76
|
-
functions=args.functions,
|
|
77
|
-
structurer=args.structurer,
|
|
78
|
-
catch_errors=args.catch_exceptions,
|
|
79
|
-
show_casts=not args.no_casts,
|
|
80
|
-
base_address=args.base_addr,
|
|
81
|
-
preset=args.preset,
|
|
82
|
-
)
|
|
83
|
-
print(decompilation, file=out)
|
|
84
|
-
else:
|
|
85
|
-
parser.print_help(file=out)
|
|
147
|
+
args = parser.parse_args()
|
|
148
|
+
args.func(args)
|
|
86
149
|
|
|
87
150
|
|
|
88
151
|
if __name__ == "__main__":
|
|
@@ -8,6 +8,7 @@ from ailment.expression import Op
|
|
|
8
8
|
from angr.analyses.decompiler.structuring.structurer_nodes import ConditionNode
|
|
9
9
|
from angr.analyses.decompiler.utils import (
|
|
10
10
|
structured_node_is_simple_return,
|
|
11
|
+
structured_node_is_simple_return_strict,
|
|
11
12
|
sequence_to_statements,
|
|
12
13
|
structured_node_has_multi_predecessors,
|
|
13
14
|
)
|
|
@@ -44,7 +45,7 @@ class FlipBooleanWalker(SequenceWalker):
|
|
|
44
45
|
and node.true_node is not None
|
|
45
46
|
and node.false_node is None
|
|
46
47
|
and idx < len(seq_node.nodes) - 1
|
|
47
|
-
and
|
|
48
|
+
and structured_node_is_simple_return_strict(seq_node.nodes[idx + 1])
|
|
48
49
|
and node not in type1_condition_nodes
|
|
49
50
|
):
|
|
50
51
|
# Type 2: Special Filter:
|
|
@@ -723,6 +723,23 @@ def structured_node_is_simple_return(
|
|
|
723
723
|
return False
|
|
724
724
|
|
|
725
725
|
|
|
726
|
+
def structured_node_is_simple_return_strict(node: BaseNode | SequenceNode | MultiNode | ailment.Block) -> bool:
|
|
727
|
+
"""
|
|
728
|
+
Returns True iff the node exclusively contains a return statement.
|
|
729
|
+
"""
|
|
730
|
+
if isinstance(node, (SequenceNode, MultiNode)) and node.nodes:
|
|
731
|
+
flat_blocks = _flatten_structured_node(node)
|
|
732
|
+
if len(flat_blocks) != 1:
|
|
733
|
+
return False
|
|
734
|
+
node = flat_blocks[-1]
|
|
735
|
+
|
|
736
|
+
return (
|
|
737
|
+
isinstance(node, ailment.Block)
|
|
738
|
+
and len(node.statements) == 1
|
|
739
|
+
and isinstance(node.statements[0], ailment.Stmt.Return)
|
|
740
|
+
)
|
|
741
|
+
|
|
742
|
+
|
|
726
743
|
def is_statement_terminating(stmt: ailment.statement.Statement, functions) -> bool:
|
|
727
744
|
if isinstance(stmt, ailment.Stmt.Return):
|
|
728
745
|
return True
|
angr/analyses/disassembly.py
CHANGED
|
@@ -1159,6 +1159,7 @@ class Disassembly(Analysis):
|
|
|
1159
1159
|
show_bytes: bool = False,
|
|
1160
1160
|
ascii_only: bool | None = None,
|
|
1161
1161
|
color: bool = True,
|
|
1162
|
+
min_edge_depth: int = 0,
|
|
1162
1163
|
) -> str:
|
|
1163
1164
|
"""
|
|
1164
1165
|
Render the disassembly to a string, with optional edges and addresses.
|
|
@@ -1288,7 +1289,7 @@ class Disassembly(Analysis):
|
|
|
1288
1289
|
for f, t in sorted(edges_by_line, key=lambda e: abs(e[0] - e[1])):
|
|
1289
1290
|
add_edge_to_buffer(edge_buf, ref_buf, f, t, lambda s: ansi_color(s, edge_col), ascii_only=ascii_only)
|
|
1290
1291
|
add_edge_to_buffer(ref_buf, ref_buf, f, t, ascii_only=ascii_only)
|
|
1291
|
-
max_edge_depth = max(map(len, ref_buf))
|
|
1292
|
+
max_edge_depth = max(*map(len, ref_buf), min_edge_depth)
|
|
1292
1293
|
|
|
1293
1294
|
# Justify edge and combine with disassembly
|
|
1294
1295
|
for i, line in enumerate(buf):
|
angr/analyses/patchfinder.py
CHANGED
|
@@ -97,7 +97,7 @@ class PatchFinderAnalysis(Analysis):
|
|
|
97
97
|
# - Looking for instruction partials broken by a patch (nodecode)
|
|
98
98
|
# - Unusual stack manipulation
|
|
99
99
|
|
|
100
|
-
atypical_alignments: list[
|
|
100
|
+
atypical_alignments: list[AtypicallyAlignedFunction]
|
|
101
101
|
possibly_patched_out: list[PatchedOutFunctionality]
|
|
102
102
|
|
|
103
103
|
def __init__(self):
|
|
@@ -263,7 +263,10 @@ class Typehoon(Analysis):
|
|
|
263
263
|
max_offset = offsets[-1]
|
|
264
264
|
field0_size = 1
|
|
265
265
|
if not isinstance(field0, TopType):
|
|
266
|
-
|
|
266
|
+
try:
|
|
267
|
+
field0_size = field0.size
|
|
268
|
+
except NotImplementedError:
|
|
269
|
+
field0_size = 1
|
|
267
270
|
count = (max_offset + field0_size) // alignment
|
|
268
271
|
return Array(field0, count=count)
|
|
269
272
|
|
angr/engines/pcode/lifter.py
CHANGED
|
@@ -427,6 +427,13 @@ class IRSB:
|
|
|
427
427
|
|
|
428
428
|
return exits
|
|
429
429
|
|
|
430
|
+
@property
|
|
431
|
+
def is_noop_block(self) -> bool:
|
|
432
|
+
"""
|
|
433
|
+
Returns True if this block is a no-op block (i.e. it has no instructions and no jumps).
|
|
434
|
+
"""
|
|
435
|
+
return not any(op.opcode != pypcode.OpCode.IMARK for op in self._ops)
|
|
436
|
+
|
|
430
437
|
#
|
|
431
438
|
# private methods
|
|
432
439
|
#
|
angr/lib/angr_native.dylib
CHANGED
|
Binary file
|
angr/utils/graph.py
CHANGED
|
@@ -672,9 +672,40 @@ class GraphUtils:
|
|
|
672
672
|
addrs_to_index = {n.addr: i for (i, n) in enumerate(post_order)}
|
|
673
673
|
return sorted(nodes, key=lambda n: addrs_to_index[n.addr], reverse=True)
|
|
674
674
|
|
|
675
|
+
@staticmethod
|
|
676
|
+
def _sort_node(node):
|
|
677
|
+
"""
|
|
678
|
+
A sorter to make a deterministic order of nodes.
|
|
679
|
+
"""
|
|
680
|
+
if hasattr(node, "addr"):
|
|
681
|
+
return node.addr
|
|
682
|
+
return node
|
|
683
|
+
|
|
684
|
+
@staticmethod
|
|
685
|
+
def _sort_edge(edge):
|
|
686
|
+
"""
|
|
687
|
+
A sorter to make a deterministic order of edges.
|
|
688
|
+
"""
|
|
689
|
+
_src, _dst = edge
|
|
690
|
+
src_addr, dst_addr = 0, 0
|
|
691
|
+
if hasattr(_src, "addr"):
|
|
692
|
+
src_addr = _src.addr
|
|
693
|
+
elif isinstance(_src, int):
|
|
694
|
+
src_addr = _src
|
|
695
|
+
|
|
696
|
+
if hasattr(_dst, "addr"):
|
|
697
|
+
dst_addr = _dst.addr
|
|
698
|
+
elif isinstance(_dst, int):
|
|
699
|
+
dst_addr = _dst
|
|
700
|
+
|
|
701
|
+
return src_addr + dst_addr
|
|
702
|
+
|
|
675
703
|
@staticmethod
|
|
676
704
|
def quasi_topological_sort_nodes(
|
|
677
|
-
graph: networkx.DiGraph,
|
|
705
|
+
graph: networkx.DiGraph,
|
|
706
|
+
nodes: list | None = None,
|
|
707
|
+
loop_heads: list | None = None,
|
|
708
|
+
panic_mode_threshold: int = 3000,
|
|
678
709
|
) -> list:
|
|
679
710
|
"""
|
|
680
711
|
Sort a given set of nodes from a graph based on the following rules:
|
|
@@ -688,6 +719,7 @@ class GraphUtils:
|
|
|
688
719
|
:param graph: A local transition graph of the function.
|
|
689
720
|
:param nodes: A list of nodes to sort. None if you want to sort all nodes inside the graph.
|
|
690
721
|
:param loop_heads: A list of nodes that should be treated loop heads.
|
|
722
|
+
:param panic_mode_threshold: Threshold of nodes in an SCC to begin aggressively removing edges.
|
|
691
723
|
:return: A list of ordered nodes.
|
|
692
724
|
"""
|
|
693
725
|
|
|
@@ -703,27 +735,8 @@ class GraphUtils:
|
|
|
703
735
|
# find all strongly connected components in the graph
|
|
704
736
|
sccs = [scc for scc in networkx.strongly_connected_components(graph) if len(scc) > 1]
|
|
705
737
|
|
|
706
|
-
def _sort_edge(edge):
|
|
707
|
-
"""
|
|
708
|
-
A sorter to make a deterministic order of edges.
|
|
709
|
-
"""
|
|
710
|
-
_src, _dst = edge
|
|
711
|
-
src_addr, dst_addr = 0, 0
|
|
712
|
-
if hasattr(_src, "addr"):
|
|
713
|
-
src_addr = _src.addr
|
|
714
|
-
elif isinstance(_src, int):
|
|
715
|
-
src_addr = _src
|
|
716
|
-
|
|
717
|
-
if hasattr(_dst, "addr"):
|
|
718
|
-
dst_addr = _dst.addr
|
|
719
|
-
elif isinstance(_dst, int):
|
|
720
|
-
dst_addr = _dst
|
|
721
|
-
|
|
722
|
-
return src_addr + dst_addr
|
|
723
|
-
|
|
724
738
|
# collapse all strongly connected components
|
|
725
|
-
|
|
726
|
-
for src, dst in edges:
|
|
739
|
+
for src, dst in sorted(graph.edges(), key=GraphUtils._sort_edge):
|
|
727
740
|
scc_index = GraphUtils._components_index_node(sccs, src)
|
|
728
741
|
if scc_index is not None:
|
|
729
742
|
src = SCCPlaceholder(scc_index)
|
|
@@ -754,7 +767,13 @@ class GraphUtils:
|
|
|
754
767
|
ordered_nodes = []
|
|
755
768
|
for n in tmp_nodes:
|
|
756
769
|
if isinstance(n, SCCPlaceholder):
|
|
757
|
-
GraphUtils._append_scc(
|
|
770
|
+
GraphUtils._append_scc(
|
|
771
|
+
graph,
|
|
772
|
+
ordered_nodes,
|
|
773
|
+
sccs[n.scc_id],
|
|
774
|
+
loop_head_candidates=loop_heads,
|
|
775
|
+
panic_mode_threshold=panic_mode_threshold,
|
|
776
|
+
)
|
|
758
777
|
else:
|
|
759
778
|
ordered_nodes.append(n)
|
|
760
779
|
|
|
@@ -771,7 +790,11 @@ class GraphUtils:
|
|
|
771
790
|
|
|
772
791
|
@staticmethod
|
|
773
792
|
def _append_scc(
|
|
774
|
-
graph: networkx.DiGraph,
|
|
793
|
+
graph: networkx.DiGraph,
|
|
794
|
+
ordered_nodes: list,
|
|
795
|
+
scc: set,
|
|
796
|
+
loop_head_candidates: list | None = None,
|
|
797
|
+
panic_mode_threshold: int = 3000,
|
|
775
798
|
) -> None:
|
|
776
799
|
"""
|
|
777
800
|
Append all nodes from a strongly connected component to a list of ordered nodes and ensure the topological
|
|
@@ -780,6 +803,7 @@ class GraphUtils:
|
|
|
780
803
|
:param graph: The graph where all nodes belong to.
|
|
781
804
|
:param ordered_nodes: Ordered nodes.
|
|
782
805
|
:param scc: A set of nodes that forms a strongly connected component in the graph.
|
|
806
|
+
:param panic_mode_threshold: Threshold of nodes in an SCC to begin aggressively removing edges.
|
|
783
807
|
"""
|
|
784
808
|
|
|
785
809
|
loop_head = None
|
|
@@ -817,8 +841,8 @@ class GraphUtils:
|
|
|
817
841
|
break
|
|
818
842
|
|
|
819
843
|
if loop_head is None:
|
|
820
|
-
#
|
|
821
|
-
loop_head =
|
|
844
|
+
# pick the first one
|
|
845
|
+
loop_head = sorted(scc, key=GraphUtils._sort_node)[0]
|
|
822
846
|
|
|
823
847
|
subgraph: networkx.DiGraph = graph.subgraph(scc).copy()
|
|
824
848
|
for src, _ in list(subgraph.in_edges(loop_head)):
|
|
@@ -828,8 +852,8 @@ class GraphUtils:
|
|
|
828
852
|
# will take too long to converge if we only remove one node out of the component each time. we introduce a
|
|
829
853
|
# panic mode that will aggressively remove edges
|
|
830
854
|
|
|
831
|
-
if len(subgraph) >
|
|
832
|
-
for n0, n1 in sorted(dfs_back_edges(subgraph, loop_head), key=
|
|
855
|
+
if len(subgraph) > panic_mode_threshold and len(subgraph.edges) > len(subgraph) * 1.4:
|
|
856
|
+
for n0, n1 in sorted(dfs_back_edges(subgraph, loop_head), key=GraphUtils._sort_edge):
|
|
833
857
|
subgraph.remove_edge(n0, n1)
|
|
834
858
|
if len(subgraph.edges) <= len(subgraph) * 1.4:
|
|
835
859
|
break
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.150
|
|
4
4
|
Summary: A multi-architecture binary analysis toolkit, with the ability to perform dynamic symbolic execution and various static analyses on binaries
|
|
5
5
|
License: BSD-2-Clause
|
|
6
6
|
Project-URL: Homepage, https://angr.io/
|
|
@@ -17,13 +17,13 @@ Description-Content-Type: text/markdown
|
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: cxxheaderparser
|
|
19
19
|
Requires-Dist: GitPython
|
|
20
|
-
Requires-Dist: ailment==9.2.
|
|
21
|
-
Requires-Dist: archinfo==9.2.
|
|
20
|
+
Requires-Dist: ailment==9.2.150
|
|
21
|
+
Requires-Dist: archinfo==9.2.150
|
|
22
22
|
Requires-Dist: cachetools
|
|
23
23
|
Requires-Dist: capstone==5.0.3
|
|
24
24
|
Requires-Dist: cffi>=1.14.0
|
|
25
|
-
Requires-Dist: claripy==9.2.
|
|
26
|
-
Requires-Dist: cle==9.2.
|
|
25
|
+
Requires-Dist: claripy==9.2.150
|
|
26
|
+
Requires-Dist: cle==9.2.150
|
|
27
27
|
Requires-Dist: mulpyplexer
|
|
28
28
|
Requires-Dist: networkx!=2.8.1,>=2.0
|
|
29
29
|
Requires-Dist: protobuf>=5.28.2
|
|
@@ -31,7 +31,7 @@ Requires-Dist: psutil
|
|
|
31
31
|
Requires-Dist: pycparser>=2.18
|
|
32
32
|
Requires-Dist: pydemumble
|
|
33
33
|
Requires-Dist: pyformlang
|
|
34
|
-
Requires-Dist: pyvex==9.2.
|
|
34
|
+
Requires-Dist: pyvex==9.2.150
|
|
35
35
|
Requires-Dist: rich>=13.1.0
|
|
36
36
|
Requires-Dist: sortedcontainers
|
|
37
37
|
Requires-Dist: sympy
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
2
|
-
angr/__main__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=DwSePTIbe8xdMgBvvZlfejFZYiB6mXcJjYv_z_rrli0,9153
|
|
2
|
+
angr/__main__.py,sha256=AK9V6uPZ58UuTKmmiH_Kgn5pG9AvjnmJCPOku69A-WU,4993
|
|
3
3
|
angr/annocfg.py,sha256=0NIvcuCskwz45hbBzigUTAuCrYutjDMwEXtMJf0y0S0,10742
|
|
4
4
|
angr/blade.py,sha256=NhesOPloKJC1DQJRv_HBT18X7oNxK16JwAfNz2Lc1o0,15384
|
|
5
5
|
angr/block.py,sha256=0-qh5KiE1F8FZXgDpRG5Hk-OhZrTBrCmMi9oGXE21rU,14834
|
|
@@ -41,14 +41,14 @@ angr/analyses/complete_calling_conventions.py,sha256=nVrDHhCV3cawD_KxkAYj2fsszAs
|
|
|
41
41
|
angr/analyses/congruency_check.py,sha256=QeYRrdrs_iluLLnKz3KUHkCTPRVl5PgM2T0ZXd786HA,16165
|
|
42
42
|
angr/analyses/datagraph_meta.py,sha256=Ng0jqLD5ucRn_fBXhYq3l6scs3kczRk6Sk-Sen1forc,3414
|
|
43
43
|
angr/analyses/ddg.py,sha256=AWPPsL2bfTAua5meuQfPFL6b29PLpCLZzw-LGCv5iVo,63214
|
|
44
|
-
angr/analyses/disassembly.py,sha256=
|
|
44
|
+
angr/analyses/disassembly.py,sha256=iwKQZ7mqQCdGV3IO-kVMif8-c6tSbKuhq2uIb0JFkK0,46341
|
|
45
45
|
angr/analyses/disassembly_utils.py,sha256=Pj9vnyji9fBDL3a3vAo2D3H4CfB-XrvVDLIsNXrp9pU,2877
|
|
46
46
|
angr/analyses/dominance_frontier.py,sha256=kRoOCr3EaIUW1YnvtjmKFJW65zYsJHNe-HtVx2LR15s,2002
|
|
47
47
|
angr/analyses/find_objects_static.py,sha256=27uxIeRA8nJ1XiuGay0oGVYKDvWOI9HFVSuPVXHJT7U,10264
|
|
48
48
|
angr/analyses/init_finder.py,sha256=lSiBfmKExmhK7wsLGsBaJYQKjW9t7S5mlcH3U--B6CI,9259
|
|
49
49
|
angr/analyses/loop_analysis.py,sha256=up6N3SZzya6N6OlKldo_MP36DqiY_tMbVdFWSM8fByU,9311
|
|
50
50
|
angr/analyses/loopfinder.py,sha256=eNH41_3MW10ccwzw6SGsAuILTKttxikDm2e3c-FUlVI,7030
|
|
51
|
-
angr/analyses/patchfinder.py,sha256=
|
|
51
|
+
angr/analyses/patchfinder.py,sha256=yf8FwkWPVOrvMRA90dKZizVz4s4QE-upq6B0Xxn8wj8,5063
|
|
52
52
|
angr/analyses/pathfinder.py,sha256=_prNqmRUSuSt2ZCP8qbvNN7pw7mtM8pWr9IL0AO6XL8,11496
|
|
53
53
|
angr/analyses/proximity_graph.py,sha256=-g7pNpbP2HQhKW3w1Eff23K8vAsgWWYoe3wVxRh3Lhk,16066
|
|
54
54
|
angr/analyses/reassembler.py,sha256=UXrDQNJtn4RUurpbIyMVpQ3AZ0VGVQZatoGHziEHvU0,98357
|
|
@@ -126,7 +126,7 @@ angr/analyses/decompiler/return_maker.py,sha256=pKn9_y5VXqTeJnD5uzLLd9sH_Dp_9wkP
|
|
|
126
126
|
angr/analyses/decompiler/seq_to_blocks.py,sha256=bB-1m8oBO59AlAp6izAROks3BBxFW8zigLlrIMt6Yfs,564
|
|
127
127
|
angr/analyses/decompiler/sequence_walker.py,sha256=FsTQSMAm28xOdI0tbLS0UE51jDNBn0yR8etWmKqeoVw,9898
|
|
128
128
|
angr/analyses/decompiler/stack_item.py,sha256=4HpYE54sOnODzMLrNX1m-Mb9RlQYjojJqNKjjDz9jxU,814
|
|
129
|
-
angr/analyses/decompiler/utils.py,sha256=
|
|
129
|
+
angr/analyses/decompiler/utils.py,sha256=li5ijfTZpkRvDFh0zvLj90jyoBLDIgDapc9suc5OT6s,40443
|
|
130
130
|
angr/analyses/decompiler/ccall_rewriters/__init__.py,sha256=TrnykR5cGCXy85f8OApJBjWSQ8WQSzjrnpND2fODWG8,207
|
|
131
131
|
angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=llCGH-p9AzfECO_fWTsSUYhX1SzIUr1BKRDTLfc8aXs,23426
|
|
132
132
|
angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=VbCENcybYUGrBD6U1Bp4nonNeEf05z_qhrpHBcyJw_4,496
|
|
@@ -157,7 +157,7 @@ angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=fdMyGtykG9
|
|
|
157
157
|
angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py,sha256=YtzDxrc3k_aWwNbqN_U4QXDJBYhJ66TLRan1NFjs1V0,7072
|
|
158
158
|
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=YFYerod0qOGYoZdiKCaA8h3-NK3YR8aAw44zYZc8dl0,17287
|
|
159
159
|
angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=PJMJ0INWiINSkv1eD5QsMJS81XtfuyKqoqe6NTkU120,4715
|
|
160
|
-
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=
|
|
160
|
+
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=DFJjYsWf_PXNsUBX98Jh0JsWd3XXEdzbyhQrnEK8Fjw,5118
|
|
161
161
|
angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=AyAJEiResDPqEzNDOb_CbNVJL0xmwgS2mdf3V49_Wng,25446
|
|
162
162
|
angr/analyses/decompiler/optimization_passes/ite_expr_converter.py,sha256=eeKEkoT0WphueWZd5P07cfa9lTBK3BzL0jUyOx4XmJQ,7820
|
|
163
163
|
angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=PE_DnoBzk-86_8nyTPZ8En2ox_o3GQuI-rNJBd2aS-Y,13777
|
|
@@ -365,7 +365,7 @@ angr/analyses/typehoon/lifter.py,sha256=hxYJmM_A0Kl6YgY7NyWBtA3ieaY49Ey3ESCHC61l
|
|
|
365
365
|
angr/analyses/typehoon/simple_solver.py,sha256=w1qiSIFYWsQMqyayMzDRNZKH6xRnDdXyCi08dA_eCoI,54842
|
|
366
366
|
angr/analyses/typehoon/translator.py,sha256=_UE1JC4KNDXXl4plula9OApK1ee07z9BFdX9HKa5uqw,10568
|
|
367
367
|
angr/analyses/typehoon/typeconsts.py,sha256=jQEVziyt3LnctrSrCtbUSPi-0tjl8DKoLMFfaOEG3lI,7939
|
|
368
|
-
angr/analyses/typehoon/typehoon.py,sha256=
|
|
368
|
+
angr/analyses/typehoon/typehoon.py,sha256=gi1DMDbqP8TkpxNiNoaTKPGW01Hy_2iPJS-gedeWagY,12110
|
|
369
369
|
angr/analyses/typehoon/typevars.py,sha256=cvbeeEDapb0LgGgtgUVpbhAcfuaylk7vEiwCqPxvtQo,16332
|
|
370
370
|
angr/analyses/typehoon/variance.py,sha256=3wYw3of8uoar-MQ7gD6arALiwlJRW990t0BUqMarXIY,193
|
|
371
371
|
angr/analyses/unpacker/__init__.py,sha256=tBXwDMFKN0Hp8YP0DK-c6deo0Muc_LNopvoKKbzp3Tc,190
|
|
@@ -429,7 +429,7 @@ angr/engines/pcode/behavior.py,sha256=ycNNTNHlCJFG6fPtOwRHbI3c0fkY5pYyPA--k3Kz-W
|
|
|
429
429
|
angr/engines/pcode/cc.py,sha256=brVglfSNnpDbRRcG-KO9EZ5NMMlmtDzP1n4kap7gKRY,3236
|
|
430
430
|
angr/engines/pcode/emulate.py,sha256=36RgLy9bmpB3r_RCyDh3iudhKyaaBtlvLYPf3X1LlOA,16732
|
|
431
431
|
angr/engines/pcode/engine.py,sha256=aFVvBYkVzZ8A5NkC2SblDU6Mlfk0ioVn7xDhp0iG8-8,9930
|
|
432
|
-
angr/engines/pcode/lifter.py,sha256=
|
|
432
|
+
angr/engines/pcode/lifter.py,sha256=cR4Oh6wgjEpAjMvMREdYpGtPOHKEZuf3UnmCm4d4UuE,52481
|
|
433
433
|
angr/engines/soot/__init__.py,sha256=0EUiUmGrPhM-MG9nrvJDYi9cIBrCTx1wff3Z7nRkTGs,92
|
|
434
434
|
angr/engines/soot/engine.py,sha256=rHKbnO9YBOAd1DJ-a33vAMseFt_b3iDhArTFdgmyVsc,17065
|
|
435
435
|
angr/engines/soot/exceptions.py,sha256=if9tvb-SDUb3JVZAhUBOYxbmS_8Aq-7gsVa2kh76O5U,258
|
|
@@ -571,7 +571,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=5PhqVOtTZ27lCjJ9wp7akUeJydqILbyC
|
|
|
571
571
|
angr/knowledge_plugins/xrefs/xref.py,sha256=U2H1rfffp5EXoh0awlGxMBxA4K5MIwl3CXjV3Uih3tA,4856
|
|
572
572
|
angr/knowledge_plugins/xrefs/xref_manager.py,sha256=1n373rtV91xicAfSUresRigsZ6qCBhPOaJKrN_SW3QY,4157
|
|
573
573
|
angr/knowledge_plugins/xrefs/xref_types.py,sha256=LcQ9pD4E4XlC51Us49xiqAoGAFGpnCrpYO4mOzILiKI,308
|
|
574
|
-
angr/lib/angr_native.dylib,sha256=
|
|
574
|
+
angr/lib/angr_native.dylib,sha256=0UHQeNhsPHjQooO8mjRzzT5tFb1OLoXTnqriuKlw8bs,264696
|
|
575
575
|
angr/misc/__init__.py,sha256=FoUwjk1DhqlIsr2sBN0MlR8MnSOGQv9QJhxmq32RYuA,355
|
|
576
576
|
angr/misc/ansi.py,sha256=nPJHC0SKfqasMQZ0LxdmmIYojjmk4nr5jI6FrzoTwS0,811
|
|
577
577
|
angr/misc/autoimport.py,sha256=iZagpuPwZWczUTYIqs-JkDMQjftMqc_cchcm7OBFiEg,3450
|
|
@@ -1370,7 +1370,7 @@ angr/utils/enums_conv.py,sha256=fA6qeoRZ6Cj6gCIS_PZbP4PX7E8IybnYQ90OZGnBVrc,2746
|
|
|
1370
1370
|
angr/utils/env.py,sha256=aO4N2h7DUsUQtTgnC5J_oPHvMxJRur20m5UFSkmy4XU,398
|
|
1371
1371
|
angr/utils/formatting.py,sha256=OWzSfAlKcL09cEtcqxszYWHsRO9tih7hvXD2K9kUZc8,4343
|
|
1372
1372
|
angr/utils/funcid.py,sha256=Rd4r8juv2IpeMtCpPp4wxJoEZTnZZ1NsxdT42tvrKVA,6353
|
|
1373
|
-
angr/utils/graph.py,sha256=
|
|
1373
|
+
angr/utils/graph.py,sha256=yCsmWXU_S-EfOT-I2iAqwZWVi5ASUC3mKCSF8ZGBmzo,31566
|
|
1374
1374
|
angr/utils/lazy_import.py,sha256=7Mx-y-aZFsXX9jNxvEcXT-rO8tL8rknb6D6RbSFOI1M,343
|
|
1375
1375
|
angr/utils/library.py,sha256=z3rFYm7ePZTXNZJuKiQrR0SnlbVb-OzkX0t0U44nXDk,7181
|
|
1376
1376
|
angr/utils/loader.py,sha256=5PtUlonkbqENNg3AMJ4YI3-g5dyyXJ0GP83SwO2dECY,1951
|
|
@@ -1383,9 +1383,9 @@ angr/utils/types.py,sha256=5EDtrusFLf1fIcMz8fgJiPPsUhpEm0bf_oqZ_PSRje0,1836
|
|
|
1383
1383
|
angr/utils/ssa/__init__.py,sha256=ohP9IJh9ZvdVH8nH-ZrYA8hwIi8L98XQ6NMNL6q_pJ0,13649
|
|
1384
1384
|
angr/utils/ssa/tmp_uses_collector.py,sha256=rSpvMxBHzg-tmvhsfjn3iLyPEKzaZN-xpQrdslMq3J4,793
|
|
1385
1385
|
angr/utils/ssa/vvar_uses_collector.py,sha256=O2aNZeM5DL8qatyhYuMhgbYGFp6Onm2yr9pKq1wRjA0,1347
|
|
1386
|
-
angr-9.2.
|
|
1387
|
-
angr-9.2.
|
|
1388
|
-
angr-9.2.
|
|
1389
|
-
angr-9.2.
|
|
1390
|
-
angr-9.2.
|
|
1391
|
-
angr-9.2.
|
|
1386
|
+
angr-9.2.150.dist-info/licenses/LICENSE,sha256=PmWf0IlSz6Jjp9n7nyyBQA79Q5C2ma68LRykY1V3GF0,1456
|
|
1387
|
+
angr-9.2.150.dist-info/METADATA,sha256=ArmKS_xO7TD2tYLOgol_yy5ANcGpXDh5PQB8wbMzKKg,4910
|
|
1388
|
+
angr-9.2.150.dist-info/WHEEL,sha256=YJko8HaqWL7RZj-eYXRM0Eg6Tr2R-DY8R8lYY8AybKM,106
|
|
1389
|
+
angr-9.2.150.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1390
|
+
angr-9.2.150.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1391
|
+
angr-9.2.150.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|