1. A method for statically analyzing a software application performed by at least one processor comprising the steps of: statically generating an abstract interpretation of said software application which approximates runtime states of said software application, wherein said abstract interpretation preserves said software application's information flow properties; verifying a correctness of safety states of the abstract interpretation; identifying vulnerabilities in said software application; and securing said vulnerabilities in said software application, wherein said step of verifying the correctness of safety states further comprises the step of: using bounded model checking to verify said correctness of said safety states, and further wherein said step of using bounded model checking to verify said correctness of said safety states further comprises the steps of: generating an assertion based on said abstract interpretation; testing said assertion to identify counterexamples; and negating counterexamples until said assertion becomes unsatisfiable.