混混陶成邦与警官吕明哲曾是中学同班同学,也是柔道好手。陶成邦因打劫而坐牢最近刚出狱,与相恋多年的女友燕冰重逢。一次警方获取线索,得知一伙匪徒将劫持运钞车,于是高级督察吕明哲率领手下人马负责四辆运钞车的安保并对付罪犯,戴着面具的曹楠出手与警对抗还枪杀了一名位于现场的女私家车主,而吕明哲则因被陶成邦开车撞击而受伤并让匪徒逃脱。
由于吕与曹楠多次交手对其比较熟悉,所以他认定戴面具的大佬是曹楠,警方透过路口的監視攝影调查劫匪的行踪,吕让手下搜集有关可指证曹楠的監視器影片却无收获。事后陶被当作罪犯同伙带至警局接受调查,面对吕的质问,陶否认自己是劫匪成员并辩称撞车是一次意外事件。女友燕冰还带了一名律师去保释陶,无奈之下吕只得将陶释放,并派人秘密跟踪陶。陶出来后燕冰要他到一家酒楼做厨师工作。
后来警方接到报警电话发现劫匪一成员大飞因在抢劫现场露脸而被杀灭口,劫匪逃跑时乘坐的车也被烧毁。警方后来根据監視器影片依据纹身发现一团伙成员周龙的行踪,吕于是带人马到周龙所藏之处,而此时曹楠与陶成邦等劫匪成员正在此屋策划着另一宗打劫珠宝的计划。警觉的曹首先对外面展开火力攻击,双方人马于是在楼道内进行火拼。曹与另外几人成功逃脱,而周龙则被吕逮捕,吕也碰到了戴着面巾的陶并与之展开搏斗,双方多次较量不分胜负陶最终再次逃脱。周龙被带至警局后,吕打算以之作为污点证人来控告曹楠,遂带人去曹楠住处,此时曹告诫吕要“奉公守法”,即没有证据不能随便抓人。而就在曹楠打了一个电话后吕得知消息后就带手下离开了,原来周龙在警局接了一个电话后就吞掉物证并跳楼自杀。
唐强是吕明哲的一名线人,他有一个10岁患自闭症的女儿婉嬈,吕明哲还是娆娆的干爹。由于唐强认识曹楠的同伙阿豹,吕为了追捕曹楠准备从阿豹身上入手。不久阿豹找唐强帮忙干一次抢劫运钞车的行动,吕认为曹楠还是此次事件的大佬。吕将一个能定位的手机交给唐,准备在劫匪采取行动后实施抓捕。在抢劫现场燕冰发现了陶并欲阻止其犯罪,而行动中一直隐蔽着的劫匪老大发现了警察,突然宣布行动中止。唐强的手机被匪徒测出信号因此被认定为内鬼,唐逃脱虎口后马上赶回家,并透过路上的監視攝影让警察赶至其家,唐回家后把女儿藏了起来,不久后一众劫匪就来到他家采取了报复行动。吕等赶到后发现先期赶来的两名警察已死亡,唐不仅头部中枪遇害,女儿也被扔下楼造成重伤,在驶往医院的路上婉嬈不幸离世。面对线人父女之死,吕与警长非常悲痛和气愤,吕也认定曹楠是杀害两人的凶手。这时吕得到情报获知曹楠正独自驾车赴机场,于是他与警长两人先后开车去追击曹楠。面对吕的质问,曹否认女孩之死与自己有关。为了救吕,稍后赶到的警长开车将曹楠撞伤,受伤的曹后来被送到医院接受重症治疗,而警方此时掌握了曹楠是杀害线人父女的证据(血液和衣物纤维)并计划起诉之。此时一场强台风即将登陆香港。
燕冰之弟弟(古惑仔羅志傑)向吕寄送了一个里面装有吕嫁祸曹楠罪证的影片的信件,并向其勒索50万元。原来吕将婉娆的血抹到了曹楠身上,并将曹楠衣服上的纤维弄到了婉娆的指甲裏,吕为了抓捕曹楠而制造伪证的过程被安装在车门上的监控拍了下来。这个要挟让吕不知所措,然而就在此时对方因吸毒导致哮喘病发作并身亡,吕于是将相关证据全部带走。
在一个下雨的晚上,燕冰告之陶她已怀孕两个月而孩子是别人的。她表示要与死不悔改的陶彻底分手,因为她不能容忍对方一直在犯罪的道路上走下去。陶一方面对她怀上别人的孩子感到愤怒,一方面又不能接受分手的要求,并谎称自己之前一直在当警方的卧底。之后陶主动找吕,告之上次行动和唐强父女的死与曹楠无关,是刚出狱的啪哥带人干的;还提出他愿意帮吕抓捕啪哥等人,条件是让吕告诉燕冰自己一直是警方的卧底。吕同意了他的条件,不过却已下定决心要不留活口一举歼灭啪哥等人。
啪哥、陶成邦、阿豹、高飞等共七人携带重型武器打劫运钞车,而此次行动实质是警察设下的圈套,吕与警长决心消灭包括陶成邦在内的所有匪徒。警方安排大量警察和冲锋队成员包围匪徒,双方因此在中环展开激烈火拼,造成不少无辜民众和警员的死伤。而陶此时预感到吕等一眾警察將會大开杀戒,自己性命將难以保全,他躲进一个车里用手机与吕联系,要其为之安排一辆可逃走的车,吕告之不要在现场投降。经过一段激烈火拼后有四名匪徒被打死,只剩下啪哥、陶和一名不愿被击毙的年轻劫匪共三人躲在一辆巴士裏,面对警方的包围,啪哥欲与警方同归于尽,并将炸药包扔在了附近的煤气管道上,拒绝投降的啪哥最后被那名年轻劫匪射杀,吕也枪杀了投降的年轻劫匪。最终煤气管道被炸造成现场大规模爆炸和大规模地陷。尽管吕没有射杀逃亡中的陶,但陶却被一辆货车意外撞死,该过程透过电视现场直播被燕冰所亲眼目睹。
事后,燕冰收到了吕明哲送来的传真,告之陶是一名为警察做事的卧底。而吕由于在此次行动中涉嫌犯错也接受羈押和警方内部调查。吕在接受调查时问台风是否已经过去,在得到肯定的答复后,其脸上露出了一丝微笑。