1991年,18岁的三合会会员刘建明(刘德华饰)听从大哥韩琛(曾志伟饰)的指示进入警校学习,成为警方卧底。而同时警校中的另一名学生陈永仁(梁朝伟饰),受警方安排表面上将其强迫退学,实际上则是让他进入三合会当卧底。刘建明从警校毕业后顺利的进入警局,并且职位步步高升,已成为刑事情报科A队的一员,在此期间他利用各种机会为韩琛提供了大量的情报。而陈永仁在这些年以来已经得到了韩琛的初步信任,但由于韩琛的案件始终没有破,他永远只能呆在黑帮,只有黄警督(黄秋生饰)与他单线联系。2002年的一个晚上,根据陈永仁卧底情报,获知一批毒品即将交易,而交易的一方为韩琛,但由于当时刘建明及时将消息传给了韩琛使其成功逃脱,不过因此双方发现各自的内部俱有“内鬼”,于是一场激烈的角斗由此展开。在最后的结局中,双方“内鬼”都认出了自己的身份,不过刘建明抢先一步,已经将陈永仁在警察局的档案删除,但在删除之前,保留了一个备份,密码是女朋友Mary的生日。经过深思,刘建明决定做一个好人,请求陈永仁给他一次机会,陈永仁没有信,拷上了刘建明。最后陈永仁死在了韩琛的另一个警方卧底枪下,刘建明也杀死了那个开枪的卧底。