angr 9.2.162__cp310-abi3-manylinux2014_x86_64.whl → 9.2.163__cp310-abi3-manylinux2014_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/ailment/expression.py +12 -0
- angr/analyses/cfg/cfg_base.py +1 -1
- angr/analyses/decompiler/clinic.py +6 -6
- angr/analyses/fcp/fcp.py +11 -10
- angr/analyses/flirt/flirt_sig.py +5 -2
- angr/analyses/reaching_definitions/function_handler.py +1 -1
- angr/analyses/reaching_definitions/function_handler_library/stdio.py +7 -6
- angr/analyses/reaching_definitions/function_handler_library/stdlib.py +10 -4
- angr/analyses/reaching_definitions/function_handler_library/string.py +13 -2
- angr/analyses/reaching_definitions/function_handler_library/unistd.py +7 -0
- angr/analyses/variable_recovery/engine_base.py +6 -10
- angr/project.py +5 -2
- angr/rustylib.abi3.so +0 -0
- angr/sim_type.py +2 -2
- {angr-9.2.162.dist-info → angr-9.2.163.dist-info}/METADATA +5 -5
- {angr-9.2.162.dist-info → angr-9.2.163.dist-info}/RECORD +21 -21
- {angr-9.2.162.dist-info → angr-9.2.163.dist-info}/WHEEL +0 -0
- {angr-9.2.162.dist-info → angr-9.2.163.dist-info}/entry_points.txt +0 -0
- {angr-9.2.162.dist-info → angr-9.2.163.dist-info}/licenses/LICENSE +0 -0
- {angr-9.2.162.dist-info → angr-9.2.163.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
angr/ailment/expression.py
CHANGED
|
@@ -102,6 +102,18 @@ class Const(Atom):
|
|
|
102
102
|
self.value = value
|
|
103
103
|
self.bits = bits
|
|
104
104
|
|
|
105
|
+
@property
|
|
106
|
+
def value_int(self) -> int:
|
|
107
|
+
if isinstance(self.value, int):
|
|
108
|
+
return self.value
|
|
109
|
+
raise TypeError(f"Incorrect value type; expect int, got {type(self.value)}")
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def value_float(self) -> float:
|
|
113
|
+
if isinstance(self.value, float):
|
|
114
|
+
return self.value
|
|
115
|
+
raise TypeError(f"Incorrect value type; expect float, got {type(self.value)}")
|
|
116
|
+
|
|
105
117
|
@property
|
|
106
118
|
def size(self):
|
|
107
119
|
return self.bits // 8
|
angr/analyses/cfg/cfg_base.py
CHANGED
|
@@ -1868,7 +1868,7 @@ class CFGBase(Analysis):
|
|
|
1868
1868
|
should_merge = True
|
|
1869
1869
|
functions_to_merge = set()
|
|
1870
1870
|
i = func_pos + 1
|
|
1871
|
-
while i < len(all_func_addrs):
|
|
1871
|
+
while i < len(all_func_addrs) and all_func_addrs[i] < endpoint_addr:
|
|
1872
1872
|
f_addr = all_func_addrs[i]
|
|
1873
1873
|
i += 1
|
|
1874
1874
|
f = functions[f_addr]
|
|
@@ -1216,6 +1216,7 @@ class Clinic(Analysis):
|
|
|
1216
1216
|
):
|
|
1217
1217
|
# found a single successor - replace the last statement
|
|
1218
1218
|
new_last_stmt = last_stmt.copy()
|
|
1219
|
+
assert isinstance(successors[0].addr, int)
|
|
1219
1220
|
new_last_stmt.target = ailment.Expr.Const(None, None, successors[0].addr, last_stmt.target.bits)
|
|
1220
1221
|
block.statements[-1] = new_last_stmt
|
|
1221
1222
|
|
|
@@ -1844,8 +1845,6 @@ class Clinic(Analysis):
|
|
|
1844
1845
|
if v.offset in vr.stack_offset_typevars:
|
|
1845
1846
|
tv = vr.stack_offset_typevars[v.offset]
|
|
1846
1847
|
tv_max_sizes[tv] = s
|
|
1847
|
-
# clean up existing types for this function
|
|
1848
|
-
var_manager.remove_types()
|
|
1849
1848
|
# TODO: Type inference for global variables
|
|
1850
1849
|
# run type inference
|
|
1851
1850
|
if self._must_struct:
|
|
@@ -2158,9 +2157,9 @@ class Clinic(Analysis):
|
|
|
2158
2157
|
}
|
|
2159
2158
|
else:
|
|
2160
2159
|
# global variable?
|
|
2161
|
-
global_vars = global_variables.get_global_variables(expr.
|
|
2160
|
+
global_vars = global_variables.get_global_variables(expr.value_int)
|
|
2162
2161
|
# detect if there is a related symbol
|
|
2163
|
-
if not global_vars and self.project.loader.find_object_containing(expr.
|
|
2162
|
+
if not global_vars and self.project.loader.find_object_containing(expr.value_int):
|
|
2164
2163
|
symbol = self.project.loader.find_symbol(expr.value)
|
|
2165
2164
|
if symbol is not None:
|
|
2166
2165
|
# Create a new global variable if there isn't one already
|
|
@@ -3041,12 +3040,12 @@ class Clinic(Analysis):
|
|
|
3041
3040
|
op0, op1 = addr.operands
|
|
3042
3041
|
if (
|
|
3043
3042
|
isinstance(op0, ailment.Expr.Const)
|
|
3044
|
-
and self.project.loader.find_object_containing(op0.
|
|
3043
|
+
and self.project.loader.find_object_containing(op0.value_int) is not None
|
|
3045
3044
|
):
|
|
3046
3045
|
return op0, op1
|
|
3047
3046
|
if (
|
|
3048
3047
|
isinstance(op1, ailment.Expr.Const)
|
|
3049
|
-
and self.project.loader.find_object_containing(op1.
|
|
3048
|
+
and self.project.loader.find_object_containing(op1.value_int) is not None
|
|
3050
3049
|
):
|
|
3051
3050
|
return op1, op0
|
|
3052
3051
|
return op0, op1 # best-effort guess
|
|
@@ -3279,6 +3278,7 @@ class Clinic(Analysis):
|
|
|
3279
3278
|
)
|
|
3280
3279
|
):
|
|
3281
3280
|
# found it!
|
|
3281
|
+
assert self.project.arch.sp_offset is not None
|
|
3282
3282
|
alloca_node = node
|
|
3283
3283
|
sp_equal_to = ailment.Expr.BinaryOp(
|
|
3284
3284
|
None,
|
angr/analyses/fcp/fcp.py
CHANGED
|
@@ -343,16 +343,17 @@ class FastConstantPropagation(Analysis):
|
|
|
343
343
|
engine.process(state, block=block)
|
|
344
344
|
|
|
345
345
|
# if the node ends with a function call, call _handle_function
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
346
|
+
if node in func_graph_with_callees:
|
|
347
|
+
succs = list(func_graph_with_callees.successors(node))
|
|
348
|
+
if any(isinstance(succ, (Function, HookNode)) for succ in succs):
|
|
349
|
+
callee = next(succ for succ in succs if isinstance(succ, (Function, HookNode)))
|
|
350
|
+
if isinstance(callee, HookNode):
|
|
351
|
+
# attempt to convert it into a function
|
|
352
|
+
if self.kb.functions.contains_addr(callee.addr):
|
|
353
|
+
callee = self.kb.functions.get_by_addr(callee.addr)
|
|
354
|
+
else:
|
|
355
|
+
callee = None
|
|
356
|
+
state = self._handle_function(state, callee)
|
|
356
357
|
|
|
357
358
|
states[node] = state
|
|
358
359
|
|
angr/analyses/flirt/flirt_sig.py
CHANGED
|
@@ -146,7 +146,7 @@ class FlirtSignatureParsed:
|
|
|
146
146
|
name_lst = []
|
|
147
147
|
name_end = False # in case the function name is too long...
|
|
148
148
|
for _ in range(1024): # max length of a function name
|
|
149
|
-
if next_byte < 0x20:
|
|
149
|
+
if next_byte < 0x20 or next_byte >= 0x80:
|
|
150
150
|
name_end = True
|
|
151
151
|
break
|
|
152
152
|
name_lst.append(next_byte)
|
|
@@ -347,7 +347,10 @@ class FlirtSignatureParsed:
|
|
|
347
347
|
# is it compressed?
|
|
348
348
|
if obj.features & FlirtFeatureFlag.FEATURE_COMPRESSED:
|
|
349
349
|
data = file_obj.read()
|
|
350
|
-
|
|
350
|
+
try:
|
|
351
|
+
decompressed = BytesIO(zlib.decompress(data))
|
|
352
|
+
except zlib.error as ex:
|
|
353
|
+
raise FlirtSignatureError(f"Failed to decompress FLIRT signature: {ex}") from ex
|
|
351
354
|
file_obj = decompressed
|
|
352
355
|
|
|
353
356
|
root = obj.parse_tree(file_obj, root=True)
|
|
@@ -575,7 +575,7 @@ class FunctionHandler:
|
|
|
575
575
|
sub_rda = state.analysis.project.analyses.ReachingDefinitions(
|
|
576
576
|
data.function,
|
|
577
577
|
observe_all=state.analysis._observe_all,
|
|
578
|
-
observation_points=list(state.analysis._observation_points or [])
|
|
578
|
+
observation_points=list(state.analysis._observation_points or []) + return_observation_points,
|
|
579
579
|
observe_callback=state.analysis._observe_callback,
|
|
580
580
|
dep_graph=state.dep_graph,
|
|
581
581
|
function_handler=self,
|
|
@@ -156,14 +156,14 @@ class LibcStdioHandlers(FunctionHandler):
|
|
|
156
156
|
@FunctionCallDataUnwrapped.decorate
|
|
157
157
|
def handle_impl_fread(self, state: ReachingDefinitionsState, data: FunctionCallDataUnwrapped):
|
|
158
158
|
size = state.get_concrete_value(data.args_atoms[1]) or 1
|
|
159
|
-
nmemb = state.get_concrete_value(data.args_atoms[
|
|
159
|
+
nmemb = state.get_concrete_value(data.args_atoms[2]) or 2
|
|
160
160
|
dst_atom = state.deref(data.args_atoms[0], size * nmemb)
|
|
161
161
|
data.depends(dst_atom, StdinAtom("fread", size * nmemb))
|
|
162
162
|
|
|
163
163
|
@FunctionCallDataUnwrapped.decorate
|
|
164
164
|
def handle_impl_fwrite(self, state: ReachingDefinitionsState, data: FunctionCallDataUnwrapped):
|
|
165
165
|
size = state.get_concrete_value(data.args_atoms[1]) or 1
|
|
166
|
-
nmemb = state.get_concrete_value(data.args_atoms[
|
|
166
|
+
nmemb = state.get_concrete_value(data.args_atoms[2]) or 2
|
|
167
167
|
src_atom = state.deref(data.args_atoms[0], size * nmemb)
|
|
168
168
|
data.depends(StdoutAtom("fwrite", size * nmemb), src_atom, value=state.get_values(src_atom))
|
|
169
169
|
|
|
@@ -206,8 +206,8 @@ def handle_printf(
|
|
|
206
206
|
elif fmt == "%u":
|
|
207
207
|
buf_atoms = atom
|
|
208
208
|
buf_data = state.get_concrete_value(buf_atoms)
|
|
209
|
-
if buf_data
|
|
210
|
-
|
|
209
|
+
buf_data = str(buf_data).encode() if buf_data else b"0"
|
|
210
|
+
|
|
211
211
|
elif fmt == "%d":
|
|
212
212
|
buf_atoms = atom
|
|
213
213
|
buf_data = state.get_concrete_value(buf_atoms)
|
|
@@ -215,11 +215,12 @@ def handle_printf(
|
|
|
215
215
|
if buf_data >= 2**31:
|
|
216
216
|
buf_data -= 2**32
|
|
217
217
|
buf_data = str(buf_data).encode()
|
|
218
|
+
else:
|
|
219
|
+
buf_data = b"0"
|
|
218
220
|
elif fmt == "%c":
|
|
219
221
|
buf_atoms = atom
|
|
220
222
|
buf_data = state.get_concrete_value(atom)
|
|
221
|
-
if buf_data
|
|
222
|
-
buf_data = chr(buf_data).encode()
|
|
223
|
+
buf_data = chr(buf_data).encode() if buf_data else b"0"
|
|
223
224
|
else:
|
|
224
225
|
_l.warning("Unimplemented printf format string %s", fmt)
|
|
225
226
|
buf_atoms = set()
|
|
@@ -64,21 +64,25 @@ class LibcStdlibHandlers(FunctionHandler):
|
|
|
64
64
|
buf_value = int(buf_value.decode().strip("\0"))
|
|
65
65
|
except ValueError:
|
|
66
66
|
buf_value = 0
|
|
67
|
+
else:
|
|
68
|
+
buf_value = 0 # Make the value concrete if it cannot be parsed
|
|
67
69
|
data.depends(data.ret_atoms, buf_atoms, value=buf_value)
|
|
68
70
|
|
|
69
71
|
@FunctionCallDataUnwrapped.decorate
|
|
70
72
|
def handle_impl_malloc(self, state: ReachingDefinitionsState, data: FunctionCallDataUnwrapped):
|
|
71
73
|
malloc_size = state.get_concrete_value(data.args_atoms[0]) or 48
|
|
72
74
|
heap_ptr = state.heap_allocator.allocate(malloc_size)
|
|
73
|
-
|
|
75
|
+
heap_addr = state.heap_address(heap_ptr)
|
|
76
|
+
data.depends(data.ret_atoms, value=heap_addr)
|
|
74
77
|
|
|
75
78
|
@FunctionCallDataUnwrapped.decorate
|
|
76
79
|
def handle_impl_calloc(self, state: ReachingDefinitionsState, data: FunctionCallDataUnwrapped):
|
|
77
80
|
nmemb = state.get_concrete_value(data.args_atoms[0]) or 48
|
|
78
81
|
size = state.get_concrete_value(data.args_atoms[1]) or 1
|
|
79
|
-
heap_ptr = state.
|
|
80
|
-
|
|
81
|
-
data.depends(
|
|
82
|
+
heap_ptr = state.heap_allocator.allocate(nmemb * size)
|
|
83
|
+
heap_addr = state.heap_address(heap_ptr)
|
|
84
|
+
data.depends(state.deref(heap_addr, nmemb * size), value=0)
|
|
85
|
+
data.depends(data.ret_atoms, value=heap_addr)
|
|
82
86
|
|
|
83
87
|
@FunctionCallDataUnwrapped.decorate
|
|
84
88
|
def handle_impl_getenv(self, state: ReachingDefinitionsState, data: FunctionCallDataUnwrapped):
|
|
@@ -156,6 +160,8 @@ class LibcStdlibHandlers(FunctionHandler):
|
|
|
156
160
|
def handle_impl_execve(self, state: ReachingDefinitionsState, data: FunctionCallDataUnwrapped):
|
|
157
161
|
argv_value = state.get_one_value(data.args_atoms[1])
|
|
158
162
|
if argv_value is None:
|
|
163
|
+
# Model execve with unknown argv - still has system effects
|
|
164
|
+
data.depends(SystemAtom(1), data.args_atoms[0], value=state.get_values(data.args_atoms[0]))
|
|
159
165
|
return
|
|
160
166
|
|
|
161
167
|
nonce = random.randint(1, 999999999)
|
|
@@ -30,7 +30,7 @@ class LibcStringHandlers(FunctionHandler):
|
|
|
30
30
|
dest_value = src0_value.concat(MultiValues(top_val))
|
|
31
31
|
dest_atom = state.deref(data.args_atoms[0], len(dest_value) // 8, endness=archinfo.Endness.BE)
|
|
32
32
|
else:
|
|
33
|
-
dest_value =
|
|
33
|
+
dest_value = state.top(state.arch.bits)
|
|
34
34
|
dest_atom = src0_atom
|
|
35
35
|
if src0_atom is not None and src1_atom is not None:
|
|
36
36
|
data.depends(dest_atom, src0_atom, src1_atom, value=dest_value)
|
|
@@ -109,7 +109,8 @@ class LibcStringHandlers(FunctionHandler):
|
|
|
109
109
|
src_str = state.get_values(src_atom)
|
|
110
110
|
malloc_size = len(src_str) // 8 if src_str is not None else 1
|
|
111
111
|
heap_ptr = state.heap_allocator.allocate(malloc_size)
|
|
112
|
-
|
|
112
|
+
heap_addr = state.heap_address(heap_ptr)
|
|
113
|
+
dst_atom = state.deref(heap_addr, malloc_size)
|
|
113
114
|
data.depends(dst_atom, src_atom, value=src_str)
|
|
114
115
|
data.depends(data.ret_atoms, data.args_atoms[0], value=state.get_values(data.args_atoms[0]))
|
|
115
116
|
|
|
@@ -121,6 +122,16 @@ class LibcStringHandlers(FunctionHandler):
|
|
|
121
122
|
dst_atom = state.deref(data.args_atoms[0], size)
|
|
122
123
|
if src_atom is not None:
|
|
123
124
|
data.depends(dst_atom, src_atom, value=state.get_values(src_atom))
|
|
125
|
+
else:
|
|
126
|
+
# When size is unknown, use default size and create TOP value
|
|
127
|
+
default_size = state.arch.bytes
|
|
128
|
+
src_atom = state.deref(data.args_atoms[1], default_size)
|
|
129
|
+
dst_atom = state.deref(data.args_atoms[0], default_size)
|
|
130
|
+
if src_atom is not None:
|
|
131
|
+
top_val = state.top(default_size * 8)
|
|
132
|
+
for defn in state.get_definitions(src_atom):
|
|
133
|
+
top_val = state.annotate_with_def(top_val, defn)
|
|
134
|
+
data.depends(dst_atom, src_atom, value=MultiValues(top_val))
|
|
124
135
|
data.depends(data.ret_atoms, data.args_atoms[0], value=state.get_values(data.args_atoms[0]))
|
|
125
136
|
|
|
126
137
|
@FunctionCallDataUnwrapped.decorate
|
|
@@ -32,6 +32,9 @@ class LibcUnistdHandlers(FunctionHandler):
|
|
|
32
32
|
buf_data = state.top(size * 8) if size is not None else state.top(state.arch.bits)
|
|
33
33
|
|
|
34
34
|
data.depends(dst_atom, fd_atom, value=buf_data)
|
|
35
|
+
# Model return value - number of bytes read (could be 0 to size, or -1 for error)
|
|
36
|
+
ret_val = state.top(state.arch.bits) # Unknown number of bytes read
|
|
37
|
+
data.depends(data.ret_atoms, fd_atom, value=ret_val)
|
|
35
38
|
|
|
36
39
|
handle_impl_recv = handle_impl_recvfrom = handle_impl_read
|
|
37
40
|
|
|
@@ -41,4 +44,8 @@ class LibcUnistdHandlers(FunctionHandler):
|
|
|
41
44
|
src_atom = state.deref(data.args_atoms[1], size)
|
|
42
45
|
data.depends(StdoutAtom(data.function.name, size), src_atom, value=state.get_values(src_atom))
|
|
43
46
|
|
|
47
|
+
# Model return value - number of bytes written (could be 0 to size, or -1 for error)
|
|
48
|
+
ret_val = state.top(state.arch.bits) # Unknown number of bytes written
|
|
49
|
+
data.depends(data.ret_atoms, value=ret_val)
|
|
50
|
+
|
|
44
51
|
handle_impl_send = handle_impl_write
|
|
@@ -142,6 +142,8 @@ class SimEngineVRBase(
|
|
|
142
142
|
) -> list[tuple[SimVariable, int]]:
|
|
143
143
|
data = richr_addr.data
|
|
144
144
|
|
|
145
|
+
variable: SimVariable | None = None
|
|
146
|
+
|
|
145
147
|
if self.state.is_stack_address(data):
|
|
146
148
|
# this is a stack address
|
|
147
149
|
# extract stack offset
|
|
@@ -157,7 +159,6 @@ class SimEngineVRBase(
|
|
|
157
159
|
for candidate, offset in var_candidates:
|
|
158
160
|
if isinstance(candidate, SimStackVariable) and candidate.offset == stack_offset:
|
|
159
161
|
existing_vars.append((candidate, offset))
|
|
160
|
-
variable = None
|
|
161
162
|
if existing_vars:
|
|
162
163
|
variable, _ = existing_vars[0]
|
|
163
164
|
|
|
@@ -179,12 +180,7 @@ class SimEngineVRBase(
|
|
|
179
180
|
existing_vars.append((var, var_stack_offset))
|
|
180
181
|
|
|
181
182
|
if not existing_vars:
|
|
182
|
-
existing_vars = [
|
|
183
|
-
(v, 0)
|
|
184
|
-
for v in self.state.variable_manager[self.func_addr].find_variables_by_stack_offset(
|
|
185
|
-
stack_offset
|
|
186
|
-
)
|
|
187
|
-
]
|
|
183
|
+
existing_vars = [(v, 0) for v in variable_manager.find_variables_by_stack_offset(stack_offset)]
|
|
188
184
|
|
|
189
185
|
if not existing_vars:
|
|
190
186
|
# no variables exist
|
|
@@ -193,10 +189,10 @@ class SimEngineVRBase(
|
|
|
193
189
|
stack_offset,
|
|
194
190
|
lea_size,
|
|
195
191
|
base="bp",
|
|
196
|
-
ident=
|
|
192
|
+
ident=variable_manager.next_variable_ident("stack"),
|
|
197
193
|
region=self.func_addr,
|
|
198
194
|
)
|
|
199
|
-
|
|
195
|
+
variable_manager.add_variable("stack", stack_offset, variable)
|
|
200
196
|
l.debug("Identified a new stack variable %s at %#x.", variable, self.ins_addr)
|
|
201
197
|
existing_vars.append((variable, 0))
|
|
202
198
|
|
|
@@ -563,7 +559,7 @@ class SimEngineVRBase(
|
|
|
563
559
|
|
|
564
560
|
if isinstance(stack_offset, int):
|
|
565
561
|
expr = data.data
|
|
566
|
-
if isinstance(expr, claripy.ast.
|
|
562
|
+
if isinstance(expr, claripy.ast.BV) and expr.size() > 1024:
|
|
567
563
|
# we don't write more than 256 bytes to the stack at a time for performance reasons
|
|
568
564
|
expr = expr[expr.size() - 1 : expr.size() - 1024]
|
|
569
565
|
expr = self.state.annotate_with_variables(expr, [(variable_offset, variable)])
|
angr/project.py
CHANGED
|
@@ -32,7 +32,10 @@ def load_shellcode(shellcode: bytes | str, arch, start_offset=0, load_address=0,
|
|
|
32
32
|
if not isinstance(arch, archinfo.Arch):
|
|
33
33
|
arch = archinfo.arch_from_id(arch)
|
|
34
34
|
if isinstance(shellcode, str):
|
|
35
|
-
shellcode_bytes
|
|
35
|
+
shellcode_bytes = arch.asm(shellcode, load_address, thumb=thumb)
|
|
36
|
+
if shellcode_bytes is None:
|
|
37
|
+
raise ValueError("Could not assemble shellcode")
|
|
38
|
+
assert isinstance(shellcode_bytes, bytes)
|
|
36
39
|
else:
|
|
37
40
|
shellcode_bytes = shellcode
|
|
38
41
|
if thumb:
|
|
@@ -173,7 +176,7 @@ class Project:
|
|
|
173
176
|
|
|
174
177
|
# It doesn't make any sense to have auto_load_libs
|
|
175
178
|
# if you have the concrete target, let's warn the user about this.
|
|
176
|
-
if self.concrete_target and load_options.get("auto_load_libs"
|
|
179
|
+
if self.concrete_target and load_options.get("auto_load_libs"):
|
|
177
180
|
l.critical(
|
|
178
181
|
"Incompatible options selected for this project, please disable auto_load_libs if "
|
|
179
182
|
"you want to use a concrete target."
|
angr/rustylib.abi3.so
CHANGED
|
Binary file
|
angr/sim_type.py
CHANGED
|
@@ -3342,7 +3342,7 @@ def _decl_to_type(
|
|
|
3342
3342
|
|
|
3343
3343
|
if decl.name is not None:
|
|
3344
3344
|
key = "struct " + decl.name
|
|
3345
|
-
struct = extra_types.get(key
|
|
3345
|
+
struct = extra_types.get(key)
|
|
3346
3346
|
from_global = False
|
|
3347
3347
|
if struct is None:
|
|
3348
3348
|
struct = ALL_TYPES.get(key)
|
|
@@ -3378,7 +3378,7 @@ def _decl_to_type(
|
|
|
3378
3378
|
|
|
3379
3379
|
if decl.name is not None:
|
|
3380
3380
|
key = "union " + decl.name
|
|
3381
|
-
union = extra_types.get(key
|
|
3381
|
+
union = extra_types.get(key)
|
|
3382
3382
|
from_global = False
|
|
3383
3383
|
if union is None and key in ALL_TYPES:
|
|
3384
3384
|
union = ALL_TYPES[key]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.163
|
|
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/
|
|
@@ -16,12 +16,12 @@ Description-Content-Type: text/markdown
|
|
|
16
16
|
License-File: LICENSE
|
|
17
17
|
Requires-Dist: cxxheaderparser
|
|
18
18
|
Requires-Dist: GitPython
|
|
19
|
-
Requires-Dist: archinfo==9.2.
|
|
19
|
+
Requires-Dist: archinfo==9.2.163
|
|
20
20
|
Requires-Dist: cachetools
|
|
21
21
|
Requires-Dist: capstone==5.0.3
|
|
22
22
|
Requires-Dist: cffi>=1.14.0
|
|
23
|
-
Requires-Dist: claripy==9.2.
|
|
24
|
-
Requires-Dist: cle==9.2.
|
|
23
|
+
Requires-Dist: claripy==9.2.163
|
|
24
|
+
Requires-Dist: cle==9.2.163
|
|
25
25
|
Requires-Dist: mulpyplexer
|
|
26
26
|
Requires-Dist: networkx!=2.8.1,>=2.0
|
|
27
27
|
Requires-Dist: protobuf>=5.28.2
|
|
@@ -30,7 +30,7 @@ Requires-Dist: pycparser>=2.18
|
|
|
30
30
|
Requires-Dist: pydemumble
|
|
31
31
|
Requires-Dist: pyformlang
|
|
32
32
|
Requires-Dist: pypcode<4.0,>=3.2.1
|
|
33
|
-
Requires-Dist: pyvex==9.2.
|
|
33
|
+
Requires-Dist: pyvex==9.2.163
|
|
34
34
|
Requires-Dist: rich>=13.1.0
|
|
35
35
|
Requires-Dist: sortedcontainers
|
|
36
36
|
Requires-Dist: sympy
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=lCaKZ32usElsmj2KZb9RcCXD0Pu7KBoFZOrq47UzNcs,9246
|
|
2
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
|
|
@@ -13,16 +13,16 @@ angr/factory.py,sha256=PPNWvTiWaIgzxzyoTr8ObSF-TXp1hCdbY2e-0xBePNc,17815
|
|
|
13
13
|
angr/graph_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
angr/keyed_region.py,sha256=Cx6dadqFgEvRmEHTbCJpg9mXkBtKGc_BKckHc6bk1IU,17992
|
|
15
15
|
angr/knowledge_base.py,sha256=hRoSLuLaOXmddTSF9FN5TVs7liftpBGq_IICz5AaYBk,4533
|
|
16
|
-
angr/project.py,sha256=
|
|
16
|
+
angr/project.py,sha256=AJmBgv3U8iv-hGEfnpmESVVjK16NiBAemmahLuqz7yk,38096
|
|
17
17
|
angr/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
|
18
|
-
angr/rustylib.abi3.so,sha256=
|
|
18
|
+
angr/rustylib.abi3.so,sha256=GmrsZ1drYBgTUm4YY3tY0kRQ8HMUJeOeN_oTShA8Hu0,5795520
|
|
19
19
|
angr/serializable.py,sha256=l908phj_KcqopEEL_oCufbP_H6cm3Wc9v-5xdux1-6g,1533
|
|
20
20
|
angr/sim_manager.py,sha256=w7yTfWR-P9yoN5x85eeiNpj9dTrnjpJ3o5aoFpDAPnc,39396
|
|
21
21
|
angr/sim_options.py,sha256=tfl57MFECmA7uvMMtQrRRbpG8g_A9jKOzwY6nApTW6Y,17782
|
|
22
22
|
angr/sim_procedure.py,sha256=EfXQEX-Na7iNtoqc2-KQhs7AR3tsiMYnxEF1v_lL_ok,26235
|
|
23
23
|
angr/sim_state.py,sha256=qK6XPl2Q23xEXBud_SBy1fzVPPcrlx0PEQwMtRKBaBI,33893
|
|
24
24
|
angr/sim_state_options.py,sha256=dsMY3UefvL7yZKXloubMhzUET3N2Crw-Fpw2Vd1ouZQ,12468
|
|
25
|
-
angr/sim_type.py,sha256=
|
|
25
|
+
angr/sim_type.py,sha256=3GwPtArsbtjju9evc7S6VrVsespDFXQL3VH5GVJI26U,134897
|
|
26
26
|
angr/sim_variable.py,sha256=3DssmMw5G7m_-MYToJ3LBP-ooy2UQEuI2YgxIuX3d4Y,13177
|
|
27
27
|
angr/slicer.py,sha256=DND0BERanYKafasRH9MDFAng0rSjdjmzXj2-phCD6CQ,10634
|
|
28
28
|
angr/state_hierarchy.py,sha256=qDQCUGXmQm3vOxE3CSoiqTH4OAFFOWZZt9BLhNpeOhA,8484
|
|
@@ -36,7 +36,7 @@ angr/ailment/constant.py,sha256=UG4OKm6VL3uBW_0NxlosWKBqK49gyduJjw64nBcfFfE,64
|
|
|
36
36
|
angr/ailment/converter_common.py,sha256=6MxxI3PRZBlFlIP2uZhQAa8vDvJr0nMDd-QnTbPLn6o,180
|
|
37
37
|
angr/ailment/converter_pcode.py,sha256=gKyshI--_hzO3CgSD85ehXmgrd8DzL_Zhc740U9KOdo,23721
|
|
38
38
|
angr/ailment/converter_vex.py,sha256=GQXs8_Zanek3WKqjYfUtWhYo6WokOGt213hLsT5FDZI,28164
|
|
39
|
-
angr/ailment/expression.py,sha256=
|
|
39
|
+
angr/ailment/expression.py,sha256=Q2PDFCyOFco-0MItGtnoDcQ97EqFkI75wWppioaZ0zk,48450
|
|
40
40
|
angr/ailment/manager.py,sha256=N6yMJnBdxJfj568KYZbKYERHmQIQpMf_hZPwfpdk9Y8,699
|
|
41
41
|
angr/ailment/statement.py,sha256=3JEhg-JDRrNjaeHFgO-liEIrZRW6v5sIsOqcGHiuM3A,30472
|
|
42
42
|
angr/ailment/tagged_object.py,sha256=48xIMC5WKebEpA12Zq6dQz3evvKxT3ULEu2cPdw9w-Y,1566
|
|
@@ -86,7 +86,7 @@ angr/analyses/cfg/__init__.py,sha256=-w8Vd6FD6rtjlQaQ7MxwmliFgS2zt-kZepAY4gHas04
|
|
|
86
86
|
angr/analyses/cfg/cfb.py,sha256=scykl1FJvqcTe2x69zreWi0PG_zYMbka3k6tlRwaD_g,15367
|
|
87
87
|
angr/analyses/cfg/cfg.py,sha256=dc9M91CaLeEKduYfMwpsT_01x6XyYuoNvgvcDKtbN-I,3177
|
|
88
88
|
angr/analyses/cfg/cfg_arch_options.py,sha256=_XRewFZ51SeNaxChadb6_ER7-8LW8KXeTIpoP8_iRj0,3506
|
|
89
|
-
angr/analyses/cfg/cfg_base.py,sha256=
|
|
89
|
+
angr/analyses/cfg/cfg_base.py,sha256=0O26tgKiMn31CsGzDmRo4XtgKz2G4hFaG713S_b72m4,124702
|
|
90
90
|
angr/analyses/cfg/cfg_emulated.py,sha256=wL0ABJMZ8EwKbNjrpE_eqCkZpHDt4y6lmoQOmAIcJMQ,148235
|
|
91
91
|
angr/analyses/cfg/cfg_fast.py,sha256=bNVUjqY3Zx-zB_6sCh9xf7rYAEwBLAyx2lBzBE45F60,231271
|
|
92
92
|
angr/analyses/cfg/cfg_fast_soot.py,sha256=8YgMtY_8w4nAMcHR6n-q_eFvKwsvNz0anUH7EzIL1B4,25924
|
|
@@ -122,7 +122,7 @@ angr/analyses/decompiler/block_io_finder.py,sha256=9J56W0_SQPczZ2-VoxqSv61T57foH
|
|
|
122
122
|
angr/analyses/decompiler/block_similarity.py,sha256=S1lTlXFyOmJlQa7I3y7xgLsENLS4XGET7tdD55k_6Vg,6859
|
|
123
123
|
angr/analyses/decompiler/block_simplifier.py,sha256=XcX9wsBM4AL_WWqmFrtSUDeSv0a125cC1-Q1NhmTrNE,14777
|
|
124
124
|
angr/analyses/decompiler/callsite_maker.py,sha256=QxdNvnPt0oyRtsbFLCVpWdI7NL1LdT-TlEq27X5RAqA,23150
|
|
125
|
-
angr/analyses/decompiler/clinic.py,sha256=
|
|
125
|
+
angr/analyses/decompiler/clinic.py,sha256=1TnX_kIvZ4kFoK818Tyq98ONATP82T9n7fB4akx9yHg,150921
|
|
126
126
|
angr/analyses/decompiler/condition_processor.py,sha256=g8sknCiCoBx3rXsHy2nx0VKDymSoSyLpq5zMpvFUhWg,54441
|
|
127
127
|
angr/analyses/decompiler/decompilation_cache.py,sha256=gAZtyXs-eoFj3680bTrJVAZcIoaPsFK0kayu30NYLb4,1509
|
|
128
128
|
angr/analyses/decompiler/decompilation_options.py,sha256=NDB67DI1L-stvJ4b1eQkfV26HgDJ_rG9-6PEv08G9-8,8195
|
|
@@ -298,7 +298,7 @@ angr/analyses/deobfuscator/string_obf_finder.py,sha256=bCd5Weos3Xn5nQUdoQfq2Mioo
|
|
|
298
298
|
angr/analyses/deobfuscator/string_obf_opt_passes.py,sha256=YzrsEKsUaUPshB8LqfwDso8aK7m0ySmR3i50T5ZiwNo,5360
|
|
299
299
|
angr/analyses/deobfuscator/string_obf_peephole_optimizer.py,sha256=_VQv2E2yOAZDAi53smQL5KcSLNe5FMqNUYC8jNSYXGs,1957
|
|
300
300
|
angr/analyses/fcp/__init__.py,sha256=E9dxFckDM9DijfU4RRg9SGL6xDKCz7yBBP-XSkS-S9U,115
|
|
301
|
-
angr/analyses/fcp/fcp.py,sha256=
|
|
301
|
+
angr/analyses/fcp/fcp.py,sha256=djkJsvSja_De7ptNwllmTHjvVl62BFcH_haBhwhzFtw,16373
|
|
302
302
|
angr/analyses/flirt/__init__.py,sha256=1jKkwUDhwwnxG5BRcYtwogLHLBvtZApXgvcAcHrJrdw,1293
|
|
303
303
|
angr/analyses/flirt/consts.py,sha256=9ldvicgtJZa8Hw8cWOKxGkCYtc09I2q5ZWxctXcg20w,4861
|
|
304
304
|
angr/analyses/flirt/flirt.py,sha256=UNXtUBs11WafKeMAW2BwqKJLFhOyObqmRhfCqYdsJpc,10762
|
|
@@ -306,7 +306,7 @@ angr/analyses/flirt/flirt_function.py,sha256=IHskIu5XTTCLKfmow23ig4HIqzs7oGbw7ik
|
|
|
306
306
|
angr/analyses/flirt/flirt_matcher.py,sha256=nzhvPTIlVwHrn07qLLSRvgfpyOnlNRsziDCls_xh0Gg,6353
|
|
307
307
|
angr/analyses/flirt/flirt_module.py,sha256=pUP6vbujzceJMXFxvLAPgek5Y2qPv3KTlKY8ZWHeIQU,920
|
|
308
308
|
angr/analyses/flirt/flirt_node.py,sha256=ecfJq4Ymp38zzvoZPDfLcLSR045GNOM9je-F_NPM5e0,638
|
|
309
|
-
angr/analyses/flirt/flirt_sig.py,sha256=
|
|
309
|
+
angr/analyses/flirt/flirt_sig.py,sha256=9cWSXqFBEIpui7pluMTaskfD0mVMomNt1mPXN6pIdjg,11574
|
|
310
310
|
angr/analyses/flirt/flirt_utils.py,sha256=ojZ_01s7O23vU7dN6xZL7Wyx5M3pgm43frxjbZzSmyU,819
|
|
311
311
|
angr/analyses/forward_analysis/__init__.py,sha256=Du2Ng6EzDQzQYcRCffkOKjLztqa5GBNhiLSgErIPnHE,319
|
|
312
312
|
angr/analyses/forward_analysis/forward_analysis.py,sha256=GnEcrQDNxD_yls1fllgXe90IUdc6np2uAWBRaeJc8yc,20020
|
|
@@ -360,17 +360,17 @@ angr/analyses/reaching_definitions/dep_graph.py,sha256=yOuYhAYQQSi2aN6GIWYkgzquq
|
|
|
360
360
|
angr/analyses/reaching_definitions/engine_ail.py,sha256=PPIqp8XaERWXLNUQN_ALzFcQeKHQe5nZdwoHtoLxWwg,46639
|
|
361
361
|
angr/analyses/reaching_definitions/engine_vex.py,sha256=K486MkRAvTcTFD52pJtmjWbuVw7KURtGCEC0EDhJmRk,45601
|
|
362
362
|
angr/analyses/reaching_definitions/external_codeloc.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
363
|
-
angr/analyses/reaching_definitions/function_handler.py,sha256=
|
|
363
|
+
angr/analyses/reaching_definitions/function_handler.py,sha256=MoZSB49ia7BXzdRmlYJgUFY36IDuEpY8FSn99eBjrq4,29217
|
|
364
364
|
angr/analyses/reaching_definitions/heap_allocator.py,sha256=NQ9wBolyyUlCnQl8K0Gt0XVHhQAkRhNGa1MM9gRV9s8,2626
|
|
365
365
|
angr/analyses/reaching_definitions/rd_initializer.py,sha256=z6LzV6UOWYg0G-Jnp4M16eFzOeX910YDt1rc-FEA4Kk,11156
|
|
366
366
|
angr/analyses/reaching_definitions/rd_state.py,sha256=nVtfjqGMNBCgM7yGczkBwPn7XEkfOeIO6qGyxONvcnY,22870
|
|
367
367
|
angr/analyses/reaching_definitions/reaching_definitions.py,sha256=EeA2qJZYOtnb_cbIj8YJQMCtUt_ra0faDiRCMjtw4ho,23719
|
|
368
368
|
angr/analyses/reaching_definitions/subject.py,sha256=DxhzWhZz_EJo-Cs-u-kB29M-sVxCqtfXkSv72WEYZp0,2021
|
|
369
369
|
angr/analyses/reaching_definitions/function_handler_library/__init__.py,sha256=elHg3doPsR68R3mZJM85qmDhy2OaCc347O-RaUaTDqY,458
|
|
370
|
-
angr/analyses/reaching_definitions/function_handler_library/stdio.py,sha256=
|
|
371
|
-
angr/analyses/reaching_definitions/function_handler_library/stdlib.py,sha256=
|
|
372
|
-
angr/analyses/reaching_definitions/function_handler_library/string.py,sha256=
|
|
373
|
-
angr/analyses/reaching_definitions/function_handler_library/unistd.py,sha256=
|
|
370
|
+
angr/analyses/reaching_definitions/function_handler_library/stdio.py,sha256=dPGE2mjCFCCKX-0ixzJ_dwU97QAte3jzkLZGdRMz4YQ,11416
|
|
371
|
+
angr/analyses/reaching_definitions/function_handler_library/stdlib.py,sha256=YRNWe87eQ9aJo-m0IvN_nRIqQLFJxb9kfN3cboN3218,8124
|
|
372
|
+
angr/analyses/reaching_definitions/function_handler_library/string.py,sha256=qh7XJXiSuT5dwUjnYKSo6RhGQbsMjJm97mma1gypNG0,8825
|
|
373
|
+
angr/analyses/reaching_definitions/function_handler_library/unistd.py,sha256=oO2HROZZWsjPlCLMxEo7T4M5JkYRlkc9BLLYLwY1SfQ,2370
|
|
374
374
|
angr/analyses/s_reaching_definitions/__init__.py,sha256=TyfVplxkJj8FAAAw9wegzJlcrbGwlFpIB23PdCcwrLA,254
|
|
375
375
|
angr/analyses/s_reaching_definitions/s_rda_model.py,sha256=FJSge_31FFzyzBJA1xm7dQz40TfuNna6v_RWAZMZvi0,5801
|
|
376
376
|
angr/analyses/s_reaching_definitions/s_rda_view.py,sha256=PtYGELZYBr87xKe2u5LX7V7wfMx_AwhxiGueOnfTV5A,13702
|
|
@@ -390,7 +390,7 @@ angr/analyses/unpacker/packing_detector.py,sha256=SO6aXR1gZkQ7w17AAv3C1-U2KAc0yL
|
|
|
390
390
|
angr/analyses/variable_recovery/__init__.py,sha256=eA1SHzfSx8aPufUdkvgMmBnbI6VDYKKMJklcOoCO7Ao,208
|
|
391
391
|
angr/analyses/variable_recovery/annotations.py,sha256=2va7cXnRHYqVqXeVt00QanxfAo3zanL4BkAcC0-Bk20,1438
|
|
392
392
|
angr/analyses/variable_recovery/engine_ail.py,sha256=8yqrl_qfO_DCvaIxwsa_eits5rIbly4rBEFh5W_U2O4,33709
|
|
393
|
-
angr/analyses/variable_recovery/engine_base.py,sha256=
|
|
393
|
+
angr/analyses/variable_recovery/engine_base.py,sha256=MJ6h-dq_0r-3I3ZOhR8E4So2VqxlyudNeSrAHyQCNRg,53171
|
|
394
394
|
angr/analyses/variable_recovery/engine_vex.py,sha256=5Q2S1jAr7tALa0m0okqBHBe3cUePmJlnV1Grxos1xbo,21344
|
|
395
395
|
angr/analyses/variable_recovery/irsb_scanner.py,sha256=1dL2IC7fZGuRrhmcpa2Q-G666aMPmbM8zSzmIRpLNSY,5141
|
|
396
396
|
angr/analyses/variable_recovery/variable_recovery.py,sha256=I45eVUpOOcSobA_QyXl3aRNa0kppJH_7YOj95fPPTdE,22272
|
|
@@ -1399,9 +1399,9 @@ angr/utils/types.py,sha256=688trvR0_j93sfeRgFT1npcmjNGSx99m_IPe9Xyy9WY,4967
|
|
|
1399
1399
|
angr/utils/ssa/__init__.py,sha256=xbuVllFoPane9lHACdRQP5OO99Mca-4sqpFrtoAvnxo,17464
|
|
1400
1400
|
angr/utils/ssa/tmp_uses_collector.py,sha256=digAUQpYoFR1VYfwoXlF3T1pYdDi6Pdq_ck54SjMabQ,813
|
|
1401
1401
|
angr/utils/ssa/vvar_uses_collector.py,sha256=HewqUQluNE9EsaiLeFo7LaBvws_DDBDYNt9RBExy464,1367
|
|
1402
|
-
angr-9.2.
|
|
1403
|
-
angr-9.2.
|
|
1404
|
-
angr-9.2.
|
|
1405
|
-
angr-9.2.
|
|
1406
|
-
angr-9.2.
|
|
1407
|
-
angr-9.2.
|
|
1402
|
+
angr-9.2.163.dist-info/licenses/LICENSE,sha256=PmWf0IlSz6Jjp9n7nyyBQA79Q5C2ma68LRykY1V3GF0,1456
|
|
1403
|
+
angr-9.2.163.dist-info/METADATA,sha256=xDXVKWKE2XvW4sHA6Wez4Kk_WZUW1AFxgjSog4KWAyE,4343
|
|
1404
|
+
angr-9.2.163.dist-info/WHEEL,sha256=vNQqwq6-Jgs2nVZrTsbPdqYS3DdiDOZyeheR1m43n08,111
|
|
1405
|
+
angr-9.2.163.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1406
|
+
angr-9.2.163.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1407
|
+
angr-9.2.163.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|