Information Flow Control library for binaries using angr
Project description
Binary Information Flow Analysis tool using Angr
Install using pip install information-flow-analysis
.
Output relevant graphs
Output CFGS
Use out.cfgs()
in order to print all relevant control flow graphs in an seperate /out
folder.
An example of this is could be:
import angr
import claripy
from information_flow_analysis import out
def main():
proj = angr.Project('implicit3.out', load_options={'auto_load_libs':False})
sym_arg_size = 15
arg0 = claripy.BVS('arg0', 8*sym_arg_size)
state = proj.factory.entry_state(args=['./implicit3.out', arg0])
out.cfgs()
return 0
if __name__ == "__main__":
main()
Generally you want to look at the cfg_fast.pdf
as it contains relevant information about instructions. This CFG is also very relevant in order to locate which high_addrs
you will make confidential.
Output all relevant graphs within the InformationFlowAnalysis
object
Use IFA.draw_everything()
in order to print all relevant graphs contained in the IFA
-object in an seperate /out
folder.
An example of this is could be:
import angr
import claripy
from information_flow_analysis import analysis
def main():
proj = angr.Project('implicit3.out', load_options={'auto_load_libs':False})
sym_arg_size = 15
arg0 = claripy.BVS('arg0', 8*sym_arg_size)
state = proj.factory.entry_state(args=['./implicit3.out', arg0])
high_addrs = [0x4011a6, 0x4011a9]
ifa = analysis.InformationFlowAnalysis(proj=proj,state=state,start="main",high_addrs=high_addrs)
ifa.draw_everything()
return 0
if __name__ == "__main__":
main()
This is primarily used to debugging purposes or if you manually want to check for leaks. (NOTE: That you need to supply high_addrs
in order to do this)
Usage of analyze
Information Flow Analysis object
import angr
import claripy
from information_flow_analysis import analysis
def main():
proj = angr.Project('implicit3.out', load_options={'auto_load_libs':False})
sym_arg_size = 15
arg0 = claripy.BVS('arg0', 8*sym_arg_size)
state = proj.factory.entry_state(args=['./implicit3.out', arg0])
high_addrs = [0x4011a6, 0x4011a9]
ifa = analysis.InformationFlowAnalysis(proj=proj,state=state,start="main",high_addrs=high_addrs)
ifa.analyze()
return 0
if __name__ == "__main__":
main()
Usage of find_explicit_leaks
Information Flow Analysis object
import angr
import claripy
from information_flow_analysis import analysis
def main():
proj = angr.Project('implicit3.out', load_options={'auto_load_libs':False})
sym_arg_size = 15
arg0 = claripy.BVS('arg0', 8*sym_arg_size)
state = proj.factory.entry_state(args=['./implicit3.out', arg0])
high_addrs = [0x4011a6, 0x4011a9]
ifa = analysis.InformationFlowAnalysis(proj=proj,state=state,start="main",high_addrs=high_addrs)
ifa.find_explicit_leaks()
return 0
if __name__ == "__main__":
main()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for information_flow_analysis-0.1.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d3ad6151fb36459cd42a3873ae853708b160810fe276f6f36c3781e11165c000 |
|
MD5 | 0af88e3be1d8fb568b75d588cb28fba8 |
|
BLAKE2b-256 | 29aac4833a806548f8d3368c5fc199d0aa3d7c043e5c1421fec021b23a1c9680 |