angr 9.2.177__cp310-abi3-win_amd64.whl → 9.2.178__cp310-abi3-win_amd64.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.

Files changed (30) hide show
  1. angr/__init__.py +1 -1
  2. angr/analyses/cfg/cfg_fast.py +15 -0
  3. angr/analyses/decompiler/ail_simplifier.py +68 -0
  4. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +45 -7
  5. angr/analyses/decompiler/clinic.py +15 -7
  6. angr/analyses/decompiler/dirty_rewriters/__init__.py +7 -0
  7. angr/analyses/decompiler/dirty_rewriters/amd64_dirty.py +69 -0
  8. angr/analyses/decompiler/dirty_rewriters/rewriter_base.py +27 -0
  9. angr/analyses/decompiler/optimization_passes/__init__.py +3 -0
  10. angr/analyses/decompiler/optimization_passes/optimization_pass.py +10 -8
  11. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +44 -6
  12. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier_adv.py +198 -0
  13. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +111 -55
  14. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +72 -1
  15. angr/analyses/decompiler/presets/basic.py +2 -0
  16. angr/analyses/decompiler/presets/fast.py +2 -0
  17. angr/analyses/decompiler/presets/full.py +2 -0
  18. angr/analyses/s_propagator.py +23 -21
  19. angr/analyses/smc.py +2 -3
  20. angr/knowledge_plugins/labels.py +4 -4
  21. angr/rustylib.pyd +0 -0
  22. angr/unicornlib.dll +0 -0
  23. angr/utils/funcid.py +85 -0
  24. angr/utils/ssa/__init__.py +2 -6
  25. {angr-9.2.177.dist-info → angr-9.2.178.dist-info}/METADATA +6 -5
  26. {angr-9.2.177.dist-info → angr-9.2.178.dist-info}/RECORD +30 -26
  27. {angr-9.2.177.dist-info → angr-9.2.178.dist-info}/WHEEL +0 -0
  28. {angr-9.2.177.dist-info → angr-9.2.178.dist-info}/entry_points.txt +0 -0
  29. {angr-9.2.177.dist-info → angr-9.2.178.dist-info}/licenses/LICENSE +0 -0
  30. {angr-9.2.177.dist-info → angr-9.2.178.dist-info}/top_level.txt +0 -0
@@ -15,6 +15,7 @@ from angr.ailment.expression import (
15
15
  Load,
16
16
  Convert,
17
17
  Expression,
18
+ Tmp,
18
19
  )
19
20
  from angr.ailment.statement import Assignment, Store, Return, Jump, ConditionalJump
20
21
 
@@ -164,7 +165,7 @@ class SPropagatorAnalysis(Analysis):
164
165
  assert v is not None
165
166
  const_vvars[vvar_id] = v
166
167
  for vvar_at_use, useloc in vvar_uselocs[vvar_id]:
167
- replacements[useloc][vvar_at_use] = v
168
+ self.replace(replacements, useloc, vvar_at_use, v)
168
169
  continue
169
170
 
170
171
  v = phi_assignment_get_src(stmt)
@@ -185,7 +186,7 @@ class SPropagatorAnalysis(Analysis):
185
186
  const_value = const_vvars[next(iter(all_int_src_varids))]
186
187
  const_vvars[vvar.varid] = const_value
187
188
  for vvar_at_use, useloc in vvar_uselocs[vvar.varid]:
188
- replacements[useloc][vvar_at_use] = const_value
189
+ self.replace(replacements, useloc, vvar_at_use, const_value)
189
190
 
190
191
  # function mode only
191
192
  if self.mode == "function":
@@ -226,7 +227,7 @@ class SPropagatorAnalysis(Analysis):
226
227
  if can_replace:
227
228
  # we can propagate this load because there is no store between its def and use
228
229
  for vvar_used, vvar_useloc in vvar_uselocs_set:
229
- replacements[vvar_useloc][vvar_used] = stmt.src
230
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
230
231
  continue
231
232
 
232
233
  if (
@@ -241,7 +242,7 @@ class SPropagatorAnalysis(Analysis):
241
242
  uselocs = {loc for _, loc in vvar_uselocs_set}
242
243
  if self.is_vvar_used_for_addr_loading_switch_case(uselocs, blocks) and not has_tmp_expr(stmt.src):
243
244
  for vvar_used, vvar_useloc in vvar_uselocs_set:
244
- replacements[vvar_useloc][vvar_used] = stmt.src
245
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
245
246
  # mark the vvar as dead and should be removed
246
247
  self.model.dead_vvar_ids.add(vvar.varid)
247
248
  continue
@@ -255,7 +256,7 @@ class SPropagatorAnalysis(Analysis):
255
256
  and not has_tmp_expr(stmt.src)
256
257
  ):
257
258
  # we can propagate this load because there is no store between its def and use
258
- replacements[vvar_useloc][vvar_used] = stmt.src
259
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
259
260
  continue
260
261
 
261
262
  if is_const_and_vvar_assignment(stmt) and not has_tmp_expr(stmt.src):
@@ -272,9 +273,9 @@ class SPropagatorAnalysis(Analysis):
272
273
  and stmt.src.oident == useloc_stmt.dst.oident
273
274
  and stmt.src.category == useloc_stmt.dst.category
274
275
  ):
275
- replacements[vvar_useloc][vvar_used] = stmt.src
276
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
276
277
  else:
277
- replacements[vvar_useloc][vvar_used] = stmt.src
278
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
278
279
  continue
279
280
 
280
281
  else:
@@ -288,7 +289,7 @@ class SPropagatorAnalysis(Analysis):
288
289
  # this vvar is used once if we exclude its uses at ret sites or jump sites. we can
289
290
  # propagate it
290
291
  for vvar_used, vvar_useloc in vvar_uselocs_set:
291
- replacements[vvar_useloc][vvar_used] = stmt.src
292
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
292
293
  continue
293
294
 
294
295
  if (
@@ -304,7 +305,7 @@ class SPropagatorAnalysis(Analysis):
304
305
  # remove duplicate use locs (e.g., if the variable is used multiple times by the
305
306
  # same statement) - but ensure stmt is simple enough
306
307
  for vvar_used, vvar_useloc in vvar_uselocs_set:
307
- replacements[vvar_useloc][vvar_used] = stmt.src
308
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
308
309
  continue
309
310
 
310
311
  # special logic for global variables: if it's used once or multiple times, and the variable is never
@@ -332,7 +333,7 @@ class SPropagatorAnalysis(Analysis):
332
333
  )
333
334
  if not gv_updated:
334
335
  for vvar_used, vvar_useloc in vvar_uselocs_set:
335
- replacements[vvar_useloc][vvar_used] = stmt.src
336
+ self.replace(replacements, vvar_useloc, vvar_used, stmt.src)
336
337
  continue
337
338
 
338
339
  for vvar_id, uselocs in vvar_uselocs.items():
@@ -353,7 +354,7 @@ class SPropagatorAnalysis(Analysis):
353
354
  if sp_bits is not None and vvar.bits < sp_bits:
354
355
  # truncation needed
355
356
  v = Convert(None, sp_bits, vvar.bits, False, v)
356
- replacements[useloc][vvar_at_use] = v
357
+ self.replace(replacements, useloc, vvar_at_use, v)
357
358
  continue
358
359
  if not self._bp_as_gpr and vvar.oident == self.project.arch.bp_offset:
359
360
  bp_bits = (
@@ -368,7 +369,7 @@ class SPropagatorAnalysis(Analysis):
368
369
  if bp_bits is not None and vvar.bits < bp_bits:
369
370
  # truncation needed
370
371
  v = Convert(None, bp_bits, vvar.bits, False, v)
371
- replacements[useloc][vvar_at_use] = v
372
+ self.replace(replacements, useloc, vvar_at_use, v)
372
373
  continue
373
374
 
374
375
  # find all tmp definitions
@@ -390,9 +391,8 @@ class SPropagatorAnalysis(Analysis):
390
391
  if r:
391
392
  # we can propagate it!
392
393
  for tmp_used, tmp_use_stmtidx in tmp_uses:
393
- replacements[
394
- CodeLocation(block_loc.block_addr, tmp_use_stmtidx, block_idx=block_loc.block_idx)
395
- ][tmp_used] = stmt.src
394
+ loc = CodeLocation(block_loc.block_addr, tmp_use_stmtidx, block_idx=block_loc.block_idx)
395
+ self.replace(replacements, loc, tmp_used, stmt.src)
396
396
  continue
397
397
 
398
398
  r = is_const_vvar_tmp_assignment(stmt)
@@ -404,9 +404,8 @@ class SPropagatorAnalysis(Analysis):
404
404
  v = stmt.src
405
405
 
406
406
  for tmp_used, tmp_use_stmtidx in tmp_uses:
407
- replacements[
408
- CodeLocation(block_loc.block_addr, tmp_use_stmtidx, block_idx=block_loc.block_idx)
409
- ][tmp_used] = v
407
+ loc = CodeLocation(block_loc.block_addr, tmp_use_stmtidx, block_idx=block_loc.block_idx)
408
+ self.replace(replacements, loc, tmp_used, v)
410
409
  continue
411
410
 
412
411
  if len(tmp_uses) <= 2 and is_const_vvar_load_dirty_assignment(stmt):
@@ -422,9 +421,8 @@ class SPropagatorAnalysis(Analysis):
422
421
  # we can propagate this load because either we do not consider memory aliasing problem
423
422
  # within the same instruction (blocks must be originally lifted with
424
423
  # CROSS_INSN_OPT=False), or there is no store between its def and use.
425
- replacements[
426
- CodeLocation(block_loc.block_addr, tmp_use_stmtidx, block_idx=block_loc.block_idx)
427
- ][tmp_used] = stmt.src
424
+ loc = CodeLocation(block_loc.block_addr, tmp_use_stmtidx, block_idx=block_loc.block_idx)
425
+ self.replace(replacements, loc, tmp_used, stmt.src)
428
426
 
429
427
  self.model.replacements = replacements
430
428
 
@@ -538,5 +536,9 @@ class SPropagatorAnalysis(Analysis):
538
536
 
539
537
  return g
540
538
 
539
+ @staticmethod
540
+ def replace(replacements: dict, loc, expr: VirtualVariable | Tmp, value: Expression) -> None:
541
+ replacements[loc][expr] = value
542
+
541
543
 
542
544
  register_analysis(SPropagatorAnalysis, "SPropagator")
angr/analyses/smc.py CHANGED
@@ -112,9 +112,8 @@ class SelfModifyingCodeAnalysis(Analysis):
112
112
  if subject is None:
113
113
  subject = self.project.entry
114
114
  if isinstance(subject, str):
115
- try:
116
- addr = self.project.kb.labels.lookup(subject)
117
- except KeyError:
115
+ addr = self.project.kb.labels.lookup(subject)
116
+ if addr is None:
118
117
  addr = self.project.kb.functions[subject].addr
119
118
  elif isinstance(subject, Function):
120
119
  addr = subject.addr
@@ -68,19 +68,19 @@ class Labels(KnowledgeBasePlugin):
68
68
  def items(self):
69
69
  return self._labels.items()
70
70
 
71
- def get(self, addr):
71
+ def get(self, addr, default=None):
72
72
  """
73
73
  Get a label as string for a given address
74
74
  Same as .labels[x]
75
75
  """
76
- return self[addr]
76
+ return self._labels.get(addr, default)
77
77
 
78
- def lookup(self, name):
78
+ def lookup(self, name, default=None):
79
79
  """
80
80
  Returns an address to a given label
81
81
  To show all available labels, iterate over .labels or list(b.kb.labels)
82
82
  """
83
- return self._reverse_labels[name]
83
+ return self._reverse_labels.get(name, default)
84
84
 
85
85
  def copy(self):
86
86
  o = Labels(self._kb)
angr/rustylib.pyd CHANGED
Binary file
angr/unicornlib.dll CHANGED
Binary file
angr/utils/funcid.py CHANGED
@@ -1,5 +1,6 @@
1
1
  # pylint:disable=too-many-boolean-expressions
2
2
  from __future__ import annotations
3
+ from typing import Any
3
4
 
4
5
  import capstone
5
6
 
@@ -47,6 +48,90 @@ def is_function_security_check_cookie(func, project, security_cookie_addr: int)
47
48
  return False
48
49
 
49
50
 
51
+ def is_function_security_check_cookie_strict(func: Function, project) -> tuple[bool, int | None]:
52
+ # security_cookie_addr is unavailable; we examine all bytes in this function
53
+ if func.is_plt or func.is_syscall or func.is_simprocedure:
54
+ return False, None
55
+ if len(func.block_addrs_set) not in {5, 6}:
56
+ return False, None
57
+ block_bytes: list[tuple[int, Any, bytes]] = [
58
+ (b.addr, b, b.bytes)
59
+ for b in sorted(func.blocks, key=lambda b: b.addr)
60
+ if isinstance(b.addr, int) and b.bytes is not None
61
+ ]
62
+ if block_bytes[0][0] != func.addr:
63
+ # the first block is probably the BugCheck function - skip it
64
+ block_bytes = block_bytes[1:]
65
+ elif len(block_bytes) == 6:
66
+ # skip the last block, which is probably the BugCheck function
67
+ block_bytes = block_bytes[:-1]
68
+ if len(block_bytes) != 5:
69
+ return False, None
70
+
71
+ # check the first block
72
+ # cmp rcx, [xxx]
73
+ # jnz xxx
74
+ first_block = block_bytes[0][1]
75
+ if len(first_block.capstone.insns) != 2:
76
+ return False, None
77
+ ins0 = first_block.capstone.insns[0]
78
+ security_cookie_addr = None
79
+ if (
80
+ project.arch.name == "AMD64"
81
+ and ins0.mnemonic == "cmp"
82
+ and len(ins0.operands) == 2
83
+ and ins0.operands[0].type == capstone.x86.X86_OP_REG
84
+ and ins0.operands[0].reg == capstone.x86.X86_REG_RCX
85
+ and ins0.operands[1].type == capstone.x86.X86_OP_MEM
86
+ and ins0.operands[1].mem.base == capstone.x86.X86_REG_RIP
87
+ and ins0.operands[1].mem.index == 0
88
+ ):
89
+ ins1 = first_block.capstone.insns[1]
90
+ if ins1.mnemonic == "jne":
91
+ security_cookie_addr = ins0.operands[1].mem.disp + ins0.address + ins0.size
92
+ if (
93
+ project.arch.name == "X86"
94
+ and ins0.mnemonic == "cmp"
95
+ and len(ins0.operands) == 2
96
+ and ins0.operands[0].type == capstone.x86.X86_OP_REG
97
+ and ins0.operands[0].reg == capstone.x86.X86_REG_ECX
98
+ and ins0.operands[1].type == capstone.x86.X86_OP_MEM
99
+ and ins0.operands[1].mem.base == 0
100
+ and ins0.operands[1].mem.index == 0
101
+ ):
102
+ ins1 = first_block.capstone.insns[1]
103
+ if ins1.mnemonic == "jne":
104
+ security_cookie_addr = ins0.operands[1].mem.disp
105
+
106
+ if security_cookie_addr is None:
107
+ return False, None
108
+
109
+ # the last block should be a jump
110
+ last_block = block_bytes[-1][1]
111
+ if len(last_block.capstone.insns) != 1:
112
+ return False, None
113
+ last_insn = last_block.capstone.insns[-1]
114
+ if last_insn.mnemonic != "jmp":
115
+ return False, None
116
+
117
+ # check the bytes of the remaining three blocks
118
+ if project.arch.name == "AMD64":
119
+ expected_bytes = [b"\x48\xc1\xc1\x10\x66\xf7\xc1\xff\xff\x75\x01", b"\xc3", b"\x48\xc1\xc9\x10"]
120
+ else:
121
+ # TODO: x86 bytes
122
+ expected_bytes = []
123
+
124
+ existing_bytes = []
125
+ for i, b in enumerate(block_bytes[1:-1]):
126
+ block = b[2]
127
+ max_block_size = block_bytes[1 + i + 1][0] - b[0]
128
+ existing_bytes.append(block[:max_block_size])
129
+ # normalize the block bytes if needed
130
+ if existing_bytes == expected_bytes:
131
+ return True, security_cookie_addr
132
+ return False, None
133
+
134
+
50
135
  def is_function_security_init_cookie(func: Function, project, security_cookie_addr: int | None) -> bool:
51
136
  if func.is_plt or func.is_syscall or func.is_simprocedure:
52
137
  return False
@@ -288,9 +288,7 @@ class AILReferenceFinder(AILBlockWalkerBase):
288
288
  self.vvar_id = vvar_id
289
289
  self.has_references_to_vvar = False
290
290
 
291
- def _handle_UnaryOp(
292
- self, expr_idx: int, expr: UnaryOp, stmt_idx: int, stmt: Statement | None, block: Block | None
293
- ) -> Any:
291
+ def _handle_UnaryOp(self, expr_idx: int, expr: UnaryOp, stmt_idx: int, stmt: Statement, block: Block | None) -> Any:
294
292
  if expr.op == "Reference" and isinstance(expr.operand, VirtualVariable) and expr.operand.varid == self.vvar_id:
295
293
  self.has_references_to_vvar = True
296
294
  return None
@@ -386,9 +384,7 @@ def has_load_expr_in_between_stmts(
386
384
  def is_vvar_propagatable(vvar: VirtualVariable, def_stmt: Statement | None) -> bool:
387
385
  if vvar.was_tmp or vvar.was_reg or vvar.was_parameter:
388
386
  return True
389
- if vvar.was_stack and isinstance(def_stmt, Assignment):
390
- if isinstance(def_stmt.src, Const):
391
- return True
387
+ if vvar.was_stack and isinstance(def_stmt, Assignment): # noqa:SIM102
392
388
  if (
393
389
  isinstance(def_stmt.src, VirtualVariable)
394
390
  and def_stmt.src.was_stack
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: angr
3
- Version: 9.2.177
3
+ Version: 9.2.178
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.177
19
+ Requires-Dist: archinfo==9.2.178
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.177
24
- Requires-Dist: cle==9.2.177
23
+ Requires-Dist: claripy==9.2.178
24
+ Requires-Dist: cle==9.2.178
25
25
  Requires-Dist: msgspec
26
26
  Requires-Dist: mulpyplexer
27
27
  Requires-Dist: networkx!=2.8.1,>=2.0
@@ -31,7 +31,7 @@ Requires-Dist: pycparser>=2.18
31
31
  Requires-Dist: pydemumble
32
32
  Requires-Dist: pyformlang
33
33
  Requires-Dist: pypcode<4.0,>=3.2.1
34
- Requires-Dist: pyvex==9.2.177
34
+ Requires-Dist: pyvex==9.2.178
35
35
  Requires-Dist: rich>=13.1.0
36
36
  Requires-Dist: sortedcontainers
37
37
  Requires-Dist: sympy
@@ -46,6 +46,7 @@ Provides-Extra: telemetry
46
46
  Requires-Dist: opentelemetry-api; extra == "telemetry"
47
47
  Provides-Extra: unicorn
48
48
  Requires-Dist: unicorn==2.0.1.post1; extra == "unicorn"
49
+ Requires-Dist: setuptools; extra == "unicorn"
49
50
  Dynamic: license-file
50
51
 
51
52
  # angr
@@ -1,4 +1,4 @@
1
- angr/__init__.py,sha256=aC71aVWcBP7xns-lX1-sgjw1ZhoYMyYpT71RqZaJHsc,9246
1
+ angr/__init__.py,sha256=vN_wwQPUaez8llCxHPyGbA0xDZPdNi9jbjCSU0hqngI,9246
2
2
  angr/__main__.py,sha256=N6uAG4GA5S02pSDUKcWFmTuWiT-qiO7OP7kSfXsF4nQ,6142
3
3
  angr/annocfg.py,sha256=0NIvcuCskwz45hbBzigUTAuCrYutjDMwEXtMJf0y0S0,10742
4
4
  angr/blade.py,sha256=OGGW-oggqI9_LvgZhiQuh9Ktkvf3vhRBmH0XviNyZ6o,15801
@@ -15,7 +15,7 @@ angr/keyed_region.py,sha256=Cx6dadqFgEvRmEHTbCJpg9mXkBtKGc_BKckHc6bk1IU,17992
15
15
  angr/knowledge_base.py,sha256=hRoSLuLaOXmddTSF9FN5TVs7liftpBGq_IICz5AaYBk,4533
16
16
  angr/project.py,sha256=sXHWI8EVNK8Ax6--yNOMhyt77Mcxg6shzD1NbMf0GT0,38267
17
17
  angr/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
18
- angr/rustylib.pyd,sha256=zEBVSGS8OPU-JZgaXyTxH6U9sZEeDhn70WFiKh4BOVE,4460032
18
+ angr/rustylib.pyd,sha256=6l2QyD79YlwqkUBigSAzWJHi0AhZMfeFW9TBh7L9ph0,4460032
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=WNLSnmn7gqKBYgQs3Me2H3zKusgt0WVqFzsBuzEZpoU,17436
@@ -27,7 +27,7 @@ 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
29
29
  angr/tablespecs.py,sha256=Kx1e87FxTx3_ZN7cAHWZSRpdInT4Vfj5gExAWtLkLTw,3259
30
- angr/unicornlib.dll,sha256=_OGN5C6iiSR4vPhqaFFzw4dqI8bpyo-nuA20weW4354,813568
30
+ angr/unicornlib.dll,sha256=Jvlbjqib-vjFw4Ohe5_aR3Bv7CB_p_DGMOyFIyovb14,813568
31
31
  angr/vaults.py,sha256=D_gkDegCyPlZMKGC5E8zINYAaZfSXNWbmhX0rXCYpvM,9718
32
32
  angr/ailment/__init__.py,sha256=X1LTS6MuTovGtbXBjZendUVOzRk-ib-bP0imuqJDOYI,2039
33
33
  angr/ailment/block.py,sha256=rkmimsNPhrUabVVbRd2IgCaW0hA2_isvAsKlYtHZhgY,2428
@@ -68,8 +68,8 @@ angr/analyses/pathfinder.py,sha256=_prNqmRUSuSt2ZCP8qbvNN7pw7mtM8pWr9IL0AO6XL8,1
68
68
  angr/analyses/proximity_graph.py,sha256=KoRvdQswRrDygotrY_6hPnrzUf1U5c5mht-b7lowyFM,16087
69
69
  angr/analyses/reassembler.py,sha256=UXrDQNJtn4RUurpbIyMVpQ3AZ0VGVQZatoGHziEHvU0,98357
70
70
  angr/analyses/s_liveness.py,sha256=mSWwwAPpXl-dIZNx5pAHA5vWXqCO_OivOXWoiaI7tss,7984
71
- angr/analyses/s_propagator.py,sha256=pEq11sNPZoR0PrWLdIIjE0s5IEmOpCpNxYYnf2qMURY,24872
72
- angr/analyses/smc.py,sha256=DC4l7fTmoOybD_lSQaLjcUdeLUifQhhsSu1nx8Ax6pM,5176
71
+ angr/analyses/s_propagator.py,sha256=-pqaSlP6TmonDylPbQeHz1DirlpDBq0cMn29LuEzsU8,25157
72
+ angr/analyses/smc.py,sha256=0jU8fJL3i96ouFcwwOb2DR0l2Xxy1eWiY6ThWyUiRdM,5155
73
73
  angr/analyses/soot_class_hierarchy.py,sha256=R4xeacn-a_Q7PxSyj_stu5mnglZkPB5US5srKChX3mk,8740
74
74
  angr/analyses/stack_pointer_tracker.py,sha256=tsiA8VHyrUsR9sCFh6CL0BS1Ubunv2pat6D3DLanDgI,38151
75
75
  angr/analyses/static_hooker.py,sha256=AYJXoHtdq2m-MgpJbx4eur7wy7llrKXvsVM5NdPcKHU,1852
@@ -88,7 +88,7 @@ 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
89
  angr/analyses/cfg/cfg_base.py,sha256=AdFw6ujMKc0nqLGymiYACOUSNYXTf-5cOjnPeGTaF0U,125012
90
90
  angr/analyses/cfg/cfg_emulated.py,sha256=4lKrmGVfCGt8l3Nz9zH6EcUcAVLwyOM7p81DlxUVNGA,148351
91
- angr/analyses/cfg/cfg_fast.py,sha256=sW6mvJr6dXp2mWte1otf2QZLuXmKV7vYRq95bLRi6L4,235307
91
+ angr/analyses/cfg/cfg_fast.py,sha256=uTW7bOn8WR9aP0RZiZQFgEuHunrrHp4FhgU8wX_cpwo,236180
92
92
  angr/analyses/cfg/cfg_fast_soot.py,sha256=8YgMtY_8w4nAMcHR6n-q_eFvKwsvNz0anUH7EzIL1B4,25924
93
93
  angr/analyses/cfg/cfg_job_base.py,sha256=Zshze972MakTsd-licQz77lac17igQaaTsAteHeHhYQ,5974
94
94
  angr/analyses/cfg/indirect_jump_resolvers/__init__.py,sha256=qWiTSIAQgXWmaYa9YYaiKsSTwUVClymaXv9sCX-bY-k,835
@@ -116,13 +116,13 @@ angr/analyses/data_dep/data_dependency_analysis.py,sha256=_vQPkw1NMrzD7kAFeotOaa
116
116
  angr/analyses/data_dep/dep_nodes.py,sha256=LcNcxeuKXMMc0GkmvKqqFwNlAk3GhzBR8ixM4CD305k,4640
117
117
  angr/analyses/data_dep/sim_act_location.py,sha256=EXmfFF3lV9XogcB2gFRMUoJCbjpDYiSKNyfafkBfiY8,1564
118
118
  angr/analyses/decompiler/__init__.py,sha256=eyxt2UKvPkbuS_l_1GPb0CJ6hrj2wTavh-mVf23wwiQ,1162
119
- angr/analyses/decompiler/ail_simplifier.py,sha256=NdPdj7IpmltxdPuhxdwHnd6qG2xHrA5ZPlDLvDyaH8U,93303
119
+ angr/analyses/decompiler/ail_simplifier.py,sha256=1qzHYpc5zS9Ei0wstbNUgbV7wkb0z0-6dPJEvK_Vh1g,95948
120
120
  angr/analyses/decompiler/ailgraph_walker.py,sha256=m71HCthOr9J8PZoMxJzCPskay8yfCZ2j8esWT4Ka3KI,1630
121
121
  angr/analyses/decompiler/block_io_finder.py,sha256=9J56W0_SQPczZ2-VoxqSv61T57foHmzy7wPtUtQKffU,10943
122
122
  angr/analyses/decompiler/block_similarity.py,sha256=S1lTlXFyOmJlQa7I3y7xgLsENLS4XGET7tdD55k_6Vg,6859
123
123
  angr/analyses/decompiler/block_simplifier.py,sha256=vjlugXCB3xFYBDBn3LPxOtU1dDc76PpYtVEoju3i9-4,15513
124
124
  angr/analyses/decompiler/callsite_maker.py,sha256=O7vjwNTmCLijzjKgSCaoX3IX4_sC-u-OqoKhE7lahlc,23427
125
- angr/analyses/decompiler/clinic.py,sha256=LIsOw2U3P72AQ0GMK5DSn8JyQ7uY-cLcJPNpTcCERNo,151635
125
+ angr/analyses/decompiler/clinic.py,sha256=src88SCieo4EXC-n9_vRPzMFsKMnBvxN4y--AXl4v7U,151838
126
126
  angr/analyses/decompiler/condition_processor.py,sha256=ALx1EO82EWOfj1mjWhS_8GNMLdEO98jqnIqB-CtfELg,56692
127
127
  angr/analyses/decompiler/decompilation_cache.py,sha256=06oiG299mVpGOTL54Xy1CUxz5s8QLgYJn5XIvKFLYkU,1566
128
128
  angr/analyses/decompiler/decompilation_options.py,sha256=bs6CNpU3UxepgBB_9eUH4jriNpGoryyPP0sR1hDWpTk,8477
@@ -144,7 +144,7 @@ angr/analyses/decompiler/sequence_walker.py,sha256=_-kUn01iU7iGdrzOPpwzquwk9CVDU
144
144
  angr/analyses/decompiler/stack_item.py,sha256=4HpYE54sOnODzMLrNX1m-Mb9RlQYjojJqNKjjDz9jxU,814
145
145
  angr/analyses/decompiler/utils.py,sha256=B7YwnEBF6AZ5DG3E7zHK0TF7zOLeiMWEcc18YL_eUyA,43074
146
146
  angr/analyses/decompiler/ccall_rewriters/__init__.py,sha256=TrnykR5cGCXy85f8OApJBjWSQ8WQSzjrnpND2fODWG8,207
147
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=8LA05CKwFzoNAloOJ3KF4AkFM3bDTQdstr1_46WauxM,24958
147
+ angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=pANATa8vdZ9zeVau_VHatCY3ZeSmMszjDpfNI0r3C-4,26634
148
148
  angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=c7-GxWZbFfJvmg4DPdjYgLXyiasmfgmiQ6IY4fjOVWs,727
149
149
  angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py,sha256=dvdiAXWGte_4xcDZnP7h980DVZqpxMgQt-fTC1nxChQ,13437
150
150
  angr/analyses/decompiler/counters/__init__.py,sha256=UT5K0cWgkVTAXZxy1qBBzrQip3YR2BOBVpxlAuNlt5o,480
@@ -159,10 +159,13 @@ angr/analyses/decompiler/dephication/graph_rewriting.py,sha256=cRMrYJgGV57H5TzWY
159
159
  angr/analyses/decompiler/dephication/graph_vvar_mapping.py,sha256=wvGWiSOa-2PnHpsLn3UkYwOYnFGJtFj0SpCn0bWl6k8,16224
160
160
  angr/analyses/decompiler/dephication/rewriting_engine.py,sha256=qBX6yrtJQhjiSRBz0mBjafF1lTrl22oToOErxIFSr4w,18623
161
161
  angr/analyses/decompiler/dephication/seqnode_dephication.py,sha256=kigkzU78eNe-zD16hUI2YMNt_jHvixpohHpnLhAHMlw,5437
162
+ angr/analyses/decompiler/dirty_rewriters/__init__.py,sha256=Go9Znxszue8UZD8w7nHJXcU885ZvZ8fa6BAuOa3Qpms,136
163
+ angr/analyses/decompiler/dirty_rewriters/amd64_dirty.py,sha256=QM0mUMKm5eyTybGL7yaXgGDuewHfmuctpZ4faxXczsg,2409
164
+ angr/analyses/decompiler/dirty_rewriters/rewriter_base.py,sha256=ghiYgB5O78ozGaCti7SqR_YlXQJrHtMEHnxQKe3Rw2I,817
162
165
  angr/analyses/decompiler/notes/__init__.py,sha256=4e5yTEQr5tnTQt8BfsMXqRUUpWPaQIFLzsgNVx55VJw,181
163
166
  angr/analyses/decompiler/notes/decompilation_note.py,sha256=MTFHVMlfmJGrKGuvlHppcIEFR1FWF9xW8_0U0xoFOUo,1352
164
167
  angr/analyses/decompiler/notes/deobfuscated_strings.py,sha256=f9AtSSVIB7kAlPUlkLxqNodco4KWbYivPV3Yh8KjVTo,1877
165
- angr/analyses/decompiler/optimization_passes/__init__.py,sha256=v6LlcY49Z816sgba6FORCZUQ0XHtw58AztlZ9hsTtms,5354
168
+ angr/analyses/decompiler/optimization_passes/__init__.py,sha256=np49PaxIYrNgFBSrQR3TJ_lOI2_EXsFPYEBX5GTVohQ,5518
166
169
  angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py,sha256=-kuCQk0ALYM1rmr6VaijrZYgHseeXqlWECaekKfI6hE,6120
167
170
  angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py,sha256=INLmzfGDMsVzyQF2S6uwiQSoNcxM7DUBJrdWlL2gqlY,1325
168
171
  angr/analyses/decompiler/optimization_passes/code_motion.py,sha256=fdUvRseuFiH6ehpk9uWWMityDuBs_kqmIjYMi92dDkw,15353
@@ -182,9 +185,10 @@ angr/analyses/decompiler/optimization_passes/ite_expr_converter.py,sha256=DA2H1U
182
185
  angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=O7b5hVV8UV7Q5nzEPovQZB4z8UsyYKvPkOTp2pljXiY,13774
183
186
  angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py,sha256=RkZdMPJ_JKDkywVYp0MrCf6PK95GWT7Q0K7jsCVk_cE,42132
184
187
  angr/analyses/decompiler/optimization_passes/mod_simplifier.py,sha256=9ekxyvxF8g3tN5oanUg96HaYiyYVbj5Nf-vSeeq86kI,3384
185
- angr/analyses/decompiler/optimization_passes/optimization_pass.py,sha256=VGpCQmx8H2w3HoVFGdqwYYZ0z_IdHrFjOhz37yvxxTQ,28169
188
+ angr/analyses/decompiler/optimization_passes/optimization_pass.py,sha256=cr_9dkuQdvlhErrf221V2ugpNDj0ReAwO6FD3ksf9f8,28307
186
189
  angr/analyses/decompiler/optimization_passes/peephole_simplifier.py,sha256=4PeOX1al4raJ7QCVLyNcffF_Q5XnPS1vDwz4riNUeHQ,2672
187
- angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py,sha256=-MoVamrPN9fMakQMZPwRYQ5rbeuQURXvyELuUhPVXKI,9088
190
+ angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py,sha256=hKT0lUyKGPVLYuOG89nrvAW9KlYrBUh6v787V6wlFm0,11126
191
+ angr/analyses/decompiler/optimization_passes/register_save_area_simplifier_adv.py,sha256=sYucCf43c7LYH8kfXylS2wa5GYWRK77MZVad_75m5XU,8670
188
192
  angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py,sha256=A7azHMeTQDXPFj44lI-mK7wnbJZ6cdSL-lwwqxiBTk0,6420
189
193
  angr/analyses/decompiler/optimization_passes/ret_deduplicator.py,sha256=hqOBkbiyQwGDoPdkMLwJjJOI_90QQ2R6ESs2HQ4z0iw,8005
190
194
  angr/analyses/decompiler/optimization_passes/return_duplicator_base.py,sha256=cU4p-QGklqgillWLdD-o1nBPAsrfZS66GfAhuhHSz1I,27395
@@ -194,7 +198,7 @@ angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py,sha256=z
194
198
  angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py,sha256=154pzAHjRaDJA1bc69Z49qDBouToemUL0BoT2ybmjw8,6476
195
199
  angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py,sha256=6-b3u4zCwSQkMaYXDP4aTjTZdFTlIWlYfd8zC1vNuRM,4035
196
200
  angr/analyses/decompiler/optimization_passes/tag_slicer.py,sha256=VSlwk9ZdnFZnAAxL0gUAgqAtP6HEk4fqcYGWlD3ylGg,1181
197
- angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py,sha256=FBz1UGl5rj13GYSF2tYWaQR135q4VQUxCBPW6SgdQ2w,19485
201
+ angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py,sha256=M9ywJ3WuQBurI5hZw9WqcwLCppW9iHGvK9HkqSXUIbY,22115
198
202
  angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py,sha256=aTQV3_yQaAKhQ24V66alxErjg7jv6gellWCqsT9G-lE,3104
199
203
  angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py,sha256=hTeOdooVDZnBnjiAguD7_BS9YJru8rOiSHN3H0sdzcA,126
200
204
  angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py,sha256=vTXXuELU2hMG8FfN8ESiHZzkeJFcr19byUyjo6wDZi0,21668
@@ -246,7 +250,7 @@ angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons
246
250
  angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py,sha256=V5Vm1zUGjsauyOYXbUgDfZEgmChLbY8wnvmcRbfdMk0,1278
247
251
  angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py,sha256=NpjPio84lBFY76hPyvOWChRo1jgFEj9XKmSh_A3A-bg,1430
248
252
  angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py,sha256=0R_ja5u2fO_BMSpfSk68sDMfhwpvBpyCBKahQh-SB4w,3997
249
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py,sha256=pMdKsNJtAIPqyWsR8cUEyujdF7e7kbqqvVgelVmKtqY,1610
253
+ angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py,sha256=N0TGL6V9AzhXGbt1SS6UCW3Ney_SgOf_YgV2UTLvLvs,4512
250
254
  angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py,sha256=tezg1gsxxH-iMmo_346NYO0YHwJz_Gpb8Ztm526o0G4,3300
251
255
  angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py,sha256=nhV4URuLjH_G-te15cJJ3O2-9VJvpOnkRJjdHSBRoko,1481
252
256
  angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py,sha256=UGOXLJuW2nDGILv4x5RqoowZxJ3dNq1pdCp6DnnRaUk,4137
@@ -260,9 +264,9 @@ angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py,sha256=lxDgPnn
260
264
  angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py,sha256=8gPWhFTcezgO7pZ_v0pxR7pweds4_GrrY82ur6Nrlf8,4796
261
265
  angr/analyses/decompiler/peephole_optimizations/utils.py,sha256=KYDiAt0PUA4PcOlBK-OS0aBr16_ZSETMISPAnaUJiLM,724
262
266
  angr/analyses/decompiler/presets/__init__.py,sha256=NWARH5yOyBz4-5qKhzH56PNfPNRViNKMDeESlpplFxo,375
263
- angr/analyses/decompiler/presets/basic.py,sha256=sHT2oalBmINVSZfpEbx4LmK0G1zqbZmLaVCAH-r-VDI,897
264
- angr/analyses/decompiler/presets/fast.py,sha256=0q9DEyWZOzt6MMJe2bb9LjlGrgv5NxgEjAb6Z1fah24,1636
265
- angr/analyses/decompiler/presets/full.py,sha256=j6ccrb3I8RFnxAZXbkdnMwCmG6AwIddP0qGD-7LzXz8,1880
267
+ angr/analyses/decompiler/presets/basic.py,sha256=lb4TyVOHL-NqHsGPDOvw5XeGOfuKyzlQAY8fUMrwMI4,981
268
+ angr/analyses/decompiler/presets/fast.py,sha256=pR1EDVih9we_Gwepoqi2DfPitC_9YCvnDVpXVlkivcU,1720
269
+ angr/analyses/decompiler/presets/full.py,sha256=a2oBOQicpKfwLWLsYLdBfK5YGq1BFJyheHXkbADU0qk,1964
266
270
  angr/analyses/decompiler/presets/preset.py,sha256=LvX7ydyO0ZzQsC0M2fy1wXA_0ygSqeP9P52VJAK0Eeo,1264
267
271
  angr/analyses/decompiler/region_simplifiers/__init__.py,sha256=BSD9osrReTEdapOMmyI1kFiN7AmE1EeJGLBV7i0u-Uc,117
268
272
  angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py,sha256=xVY1NUqFudjdcFFO5RAfbdIlHyCRPLYDVPM8Z4J6uic,3832
@@ -553,7 +557,7 @@ angr/knowledge_plugins/custom_strings.py,sha256=5qYAvmcm9BkTA247hZngDaHHrO9iIipY
553
557
  angr/knowledge_plugins/data.py,sha256=u2Is51L6Opp4eeWkpO_ss8WfXgceK5AUa_BlnPcZXmk,874
554
558
  angr/knowledge_plugins/debug_variables.py,sha256=pxiY6l0OPX3y2ZEcCGu-vJCGfw60tiPvkjdDFE9Z4uM,8075
555
559
  angr/knowledge_plugins/indirect_jumps.py,sha256=VlIDWeU3xZyTAp1qSYyZxtusz2idxa1vrlLQmGWlkHA,1034
556
- angr/knowledge_plugins/labels.py,sha256=Q7BTpBWRfJl3vxtd0vci91EA3KXiIwLNPyO5UQh6QEA,3156
560
+ angr/knowledge_plugins/labels.py,sha256=HvDQjL3jayVmKNdOHTteNSIgd4aOrAp1qGaBIDqzdPQ,3218
557
561
  angr/knowledge_plugins/obfuscations.py,sha256=n7qPreGLXJf2pADtbonv8JToKL_9IQCYfqGmSyV_3Y4,1465
558
562
  angr/knowledge_plugins/patches.py,sha256=tPjKI2GloTaWcA96u0yp75956HUkqOfsvusitEeWmGE,4335
559
563
  angr/knowledge_plugins/plugin.py,sha256=8tPrsgo1hsZG3ifXs4mWsKkeyB03ubfZdY5YArWw9-Q,766
@@ -1379,7 +1383,7 @@ angr/utils/endness.py,sha256=PDpDNbiIbaSx1DGH1z16nU2B5GMrTqONGivGeVNiGyU,506
1379
1383
  angr/utils/enums_conv.py,sha256=fA6qeoRZ6Cj6gCIS_PZbP4PX7E8IybnYQ90OZGnBVrc,2746
1380
1384
  angr/utils/env.py,sha256=aO4N2h7DUsUQtTgnC5J_oPHvMxJRur20m5UFSkmy4XU,398
1381
1385
  angr/utils/formatting.py,sha256=OWzSfAlKcL09cEtcqxszYWHsRO9tih7hvXD2K9kUZc8,4343
1382
- angr/utils/funcid.py,sha256=Rd4r8juv2IpeMtCpPp4wxJoEZTnZZ1NsxdT42tvrKVA,6353
1386
+ angr/utils/funcid.py,sha256=PA115tjmdUpfrGQvva4Ad3Q5SoToRiGjJzNRhX2Ca6Y,9567
1383
1387
  angr/utils/graph.py,sha256=-8cipOvaBeD4owh2cksAwBgcIx2jOeKZa-zcFk73WeM,34787
1384
1388
  angr/utils/lazy_import.py,sha256=7Mx-y-aZFsXX9jNxvEcXT-rO8tL8rknb6D6RbSFOI1M,343
1385
1389
  angr/utils/library.py,sha256=N8-7DTJhbBFe9f-Yvx0--dHs43nAEDcTXhqm4aUBOj0,7386
@@ -1391,12 +1395,12 @@ angr/utils/tagged_interval_map.py,sha256=rXKBuT14N23AAntpOKhZhmA-qqymnsvjpheFXoT
1391
1395
  angr/utils/timing.py,sha256=n-YZ86g0ZWmLhsoNvcimRpKzewR5hmquLZe6fagxlBw,2224
1392
1396
  angr/utils/types.py,sha256=688trvR0_j93sfeRgFT1npcmjNGSx99m_IPe9Xyy9WY,4967
1393
1397
  angr/utils/vex.py,sha256=epcrCexi_NjKnPGM2gfpiRsUea_Scd-71UMuF32ZAQo,306
1394
- angr/utils/ssa/__init__.py,sha256=xbuVllFoPane9lHACdRQP5OO99Mca-4sqpFrtoAvnxo,17464
1398
+ angr/utils/ssa/__init__.py,sha256=rKlgdaTSouwofsLNMa8MKfWb_tqntfp_B5nm-FOeh2Y,17390
1395
1399
  angr/utils/ssa/tmp_uses_collector.py,sha256=digAUQpYoFR1VYfwoXlF3T1pYdDi6Pdq_ck54SjMabQ,813
1396
1400
  angr/utils/ssa/vvar_uses_collector.py,sha256=HewqUQluNE9EsaiLeFo7LaBvws_DDBDYNt9RBExy464,1367
1397
- angr-9.2.177.dist-info/licenses/LICENSE,sha256=PmWf0IlSz6Jjp9n7nyyBQA79Q5C2ma68LRykY1V3GF0,1456
1398
- angr-9.2.177.dist-info/METADATA,sha256=wZTpq8KtyIIKg1XKXiVQ7U6xX_zcE9k-r_-n_1k_tzM,4477
1399
- angr-9.2.177.dist-info/WHEEL,sha256=OJ2zpOfp3Fst0GC5jHtFuY8tAf46LLgZ9O920dE4b3c,100
1400
- angr-9.2.177.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1401
- angr-9.2.177.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1402
- angr-9.2.177.dist-info/RECORD,,
1401
+ angr-9.2.178.dist-info/licenses/LICENSE,sha256=PmWf0IlSz6Jjp9n7nyyBQA79Q5C2ma68LRykY1V3GF0,1456
1402
+ angr-9.2.178.dist-info/METADATA,sha256=5S5i0ouGRfaEj1PUUCnHHUGpkh7-JaTm28FhF1h_5NY,4524
1403
+ angr-9.2.178.dist-info/WHEEL,sha256=OJ2zpOfp3Fst0GC5jHtFuY8tAf46LLgZ9O920dE4b3c,100
1404
+ angr-9.2.178.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1405
+ angr-9.2.178.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1406
+ angr-9.2.178.dist-info/RECORD,,
File without changes