Impossible differential attack is one of the most powerful cryptanalysis methods against block ciphers. Like other block cipher attacks, impossible differential attack is composed of two main phases: first a distinguisher, which here is a differential of zero probability, is specified, then in the attack procedure several rounds are added to this distinguisher, a required number of plaintexts and/or ciphertexts are collected, and finally the key recovery step is executed. In this thesis, this attack is improved in two directions. First, a comprehensive framework for the attack procedure is introduced. The goal of this framework is to exploit a variety of techniques to reduce the attack complexity as much as possible. Although we cannot claim this framework results in the optimum attack, by applying this framework we update the best attacks on Crypton, Camellia-128, Camellia-256, Clefia-128, mCrypton-96, mCrypton-128 and the best attack in the single key model on AES-128. In the second part, we extend the idea of impossible differential to almost-impossible differential. This idea is exemplified and analyzed by an attack on 6-round Crypton. Key Words Block cipher, Cryptanalysis, Impossible differential, Data complexity, Time complexity.