À Los Angeles, une équipe de braqueurs chevronnés prépare l'attaque d'un fourgon blindé. Leur chef, Neil McCauley, peaufine les derniers détails avec ses complices Chris Shiherlis, Michael Cheritto et Trejo. Ayant besoin d'un homme supplémentaire, l'équipe engage un nouvel associé, Waingro (que Cheritto surnomme "le mariole"), un individu qui s'avère être doté d'un tempérament de "chien fou".
Lors du braquage du fourgon, pourtant planifié dans les moindres détails par McCauley et ses hommes, Waingro panique et tue l'un des gardes. Le braquage se termine alors en bain de sang, les autres gardes devant être tués afin de ne pas révéler ce qu'ils ont vu. Les voleurs (qui n'ont pas touché à l'argent contenu dans le fourgon) ont dérobé une enveloppe contenant des bons au porteur d'une valeur de 1,6 million de dollars appartenant à un financier véreux, Roger Van Zant. Peu de temps après, la police arrive sur les lieux. L'enquête est confiée à Vincent Hanna, un lieutenant aguerri de la police criminelle de Los Angeles. Ce dernier se lance sur la piste du "mariole", un témoin oculaire ayant entendu un des braqueurs appeler son collègue ainsi.
À la suite de ce braquage qui s'est mal terminé, Neil McCauley et son équipe décident d'éliminer Waingro, en raison de sa responsabilité dans le carnage ainsi que pour son manque flagrant de fiabilité. Alors qu'ils se préparent à l'abattre dans un parking, le passage d'une voiture de police permet à Waingro de s'échapper. Quand Chris Shiherlis revient chez lui, il se dispute avec sa femme Charlene qui lui reproche son manque de maturité et son côté flambeur ; elle veut le quitter. Énervé, Chris quitte la maison et part dormir chez Neil McCauley, expliquant à son chef (quand celui-ci revient chez lui le lendemain) les déboires de son couple.
Passant à la suite, Neil McCauley commence à planifier le braquage d'une banque de Los Angeles, prévoyant de faire ce hold-up après avoir réalisé le cambriolage d'un entrepôt contenant des métaux précieux. Durant la période où il prépare le casse de l'entrepôt, McCauley fait la rencontre d'Eady, une jeune femme employée d'une librairie. Une idylle commence entre eux.
Peu après, Neil McCauley — sur les conseils de son receleur Nate — entre en contact avec Roger Van Zant afin de lui revendre ses propres bons au porteur qui, étant assurés, lui vaudront tout de même un bénéfice s'il les rachète. Van Zant accepte la transaction et indique à McCauley un lieu de rendez-vous pour le lendemain. Pendant qu'il règle cette affaire au téléphone à partir d'une cabine téléphonique publique, Neil est en train d'observer Charlene, l'épouse de Chris, dans les bras de son amant Alan Marciano (un représentant de commerce de Las Vegas), les deux se trouvant dans un motel en ville. Après avoir attendu le départ de l'amant, Neil McCauley s’introduit dans la chambre où Charlene se trouve et sermonne la jeune femme, lui ordonnant de laisser une dernière chance à Chris avant de le quitter. Dans le cas où leur couple se terminerait finalement, McCauley s’engage à la financer pour refaire sa vie, à elle et son jeune fils ; Charlene accepte.
Le jour du rendez-vous avec Van Zant, alors que ce dernier n'envoie en guise d'argent qu'une équipe de tueurs chargée d'éliminer McCauley, Neil, sur ses gardes, vient au rendez-vous protégé par ses hommes ; l'opération de Van Zant échoue. McCauley recontacte ensuite Van Zant par téléphone, lui déclarant qu'il est un homme mort.
En parallèle, une lutte à distance s'engage entre McCauley et Vincent Hanna. Le policier, remontant la piste du braquage du fourgon, discute avec l'un de ses indicateurs, Albert Torena, qui lui présente son frère Richard. Ce dernier révèle à Hanna que son ancien compagnon de cellule, Michael Cheritto, appelait tout le monde "Le mariole". Avec cette information, Hanna parvient à retrouver la trace du gang de McCauley et apprend que celui-ci a prévu de cambrioler un entrepôt de métaux précieux. Le policier met alors en place une surveillance constante de l'équipe de McCauley. Dans le même temps, la vie sentimentale du policier commence à battre de l'aile, Vincent Hanna délaissant de plus en plus son épouse Justine au profit de son travail, bien qu'il tente de s'occuper de son mieux de sa belle-fille, Lauren Gustafson, délaissée par son père biologique.
Durant cette période, l'équipe de Hanna enquête sur le meurtre d'une prostituée, la dernière victime en date d'un tueur en série — qui s'avère être Waingro —, ce qui met le policier sur la trace de celui-ci. De son côté, Van Zant, effrayé par les menaces de mort de McCauley, se voit conseiller les services de Waingro pour assurer sa protection, ce dernier y voyant aussi une occasion de se venger de McCauley.
Le soir suivant, les policiers organisent une souricière autour de l'entrepôt de matières précieuses. Hanna s'y rend avec son second Drucker, les inspecteurs Sammy Casals, Mike Bosko et Danny Schwartz, le tout accompagnés de policiers du SWAT. Observant le dépôt à distance cachés dans un camion, les policiers essayent d'intercepter les voleurs en flagrant délit. Alors qu'ils sont en train de surveiller McCauley, posté en dehors de l’entrepôt pour guetter les alentours, pendant que son complice Chris perce les coffres (après que Cheritto a neutralisé l’alarme de l’entrepôt), un des membres de l'équipe d'assaut de la police fait accidentellement du bruit avec son arme dans le camion. Alerté, McCauley préfère alors annuler l'opération et partir avec Chris et Cheritto sans rien emporter. Hanna les laisse partir, n'ayant pas d'éléments suffisants pour les incriminer.
Bien que McCauley se sache désormais repéré par la police, il décide tout de même de mettre au point un dernier casse avant de partir à la retraite, celui de la banque de Los Angeles, pour un butin estimé à 12 millions de dollars selon son informateur Kelso, qui a tous les détails. Après avoir donné le choix à ses complices au sujet de ce dernier casse, les hommes de McCauley décident de suivre leur chef. Pendant ce temps, Vincent Hanna se rend à Las Vegas pour obliger l'amant de Charlene, Alan Murciano, à coopérer avec la police pour faire tomber Chris. Plus tard, le gang de McCauley se rend sur la zone portuaire de Los Angeles pour étudier les lieux (probablement pour le prochain braquage) avant de repartir. L'équipe de Hanna, qui surveillait les braqueurs de loin, essaie de comprendre leur prochain objectif. Mais, quand il arrive sur les lieux avec son équipe, Vincent Hanna comprend subitement que McCauley s'est servi de cette mise en scène pour « piéger » Hanna et ses hommes, les prenant en photo de loin afin de mieux connaître ses adversaires.
Au gré d'une filature organisée par Hanna, le policier parvient à rencontrer McCauley ; l’arrêtant sur l’autoroute, il l'invite à aller discuter dans un bar. Durant la rencontre, les deux hommes aboutissent au constat qu'aucun d'entre eux ne renoncera à mener sa vie comme il l'entend, malgré les conséquences sur leurs vies privées respectives : Vincent Hanna délaissant son mariage avec son épouse Justine au profit de ses enquêtes de police, tandis que Neil McCauley (qui est engagé dans sa relation avec Eady) affirme à Hanna que, quoi qu'il arrive, il ne retournera pas en prison, qu'il ne « replongera pas », étant prêt à tout plaquer dans les trente secondes (même son amie) s'il est obligé de s'enfuir. Les deux conviennent aussi qu'ils n’hésiteront pas à abatture l'autre s'ils doivent le faire, bien que ceci ne leur plaise pas.
Par la suite, les braqueurs réussissent à semer la surveillance de la police et préparent le braquage de la banque. Mais, le jour du braquage, Trejo manque à l'appel ; échouant à échapper à la surveillance de la police, il se voit contraint de se mettre en retrait pour attirer les policiers et les détourner du braquage. McCauley le remplace au pied levé par un ancien complice — Breedan, en liberté conditionnelle — qu'il rencontre par hasard dans le restaurant où celui-ci travaille. Quand McCauley lui propose à brûle-pourpoint de participer au braquage, Breedan accepte sans hésiter, ne supportant plus ses conditions de travail et notamment la malveillance de son employeur, malgré la promesse qu'il avait faite à sa fiancée Lillian de s’accrocher et de rester dans le droit chemin.
Le braquage de la banque débute mais, au cours de celui-ci, un appel téléphonique informe les policiers de son déroulement ; Hanna et ses hommes accourent sur les lieux. Procédant au bouclage du quartier dans une zone de forte population en plein centre-ville, les policiers se rapprochent discrètement de la banque. Ils interviennent alors que les braqueurs en sortent tout juste, venant à peine de terminer leur braquage. Une fusillade éclate en pleine rue, à l'arme de guerre. Les braqueurs prennent la fuite en voiture, mais se retrouvent bloqués par un barrage de la police : alors que McCauley, Chris et Cherrito répliquent sur les policiers avec leurs armes, Breedant est tué au volant de la voiture. Au cours de la fusillade, plusieurs membres des forces de l'ordre sont blessés ou tués, dont les inspecteurs Bosko et Schwartz. Chris reçoit aussi une grave blessure à l'épaule, mais parvient à s'enfuir avec l'aide de McCauley, les deux étant poursuivis par Hanna qui échoue cependant à les arrêter. Mais Hanna réussit à tuer Cherrito, alors que celui-ci tentait de s'enfuir dans une autre direction avec une fillette dans les bras comme otage.
Tandis qu'il prépare sa fuite à l'étranger et qu'il fait discrètement soigner Chris par un médecin, McCauley se rend chez Trejo, persuadé que c'est lui qui les a donnés à la police ; mais il le découvre chez lui mourant, gravement blessé à la tête. Trejo a tout juste la force de lui dire qu'il a été torturé par Waingro (qui a tué sa femme) et que celui-ci a prévenu la police ; il demande ensuite à son chef de l'achever, ce que McCauley fait, d'une balle dans la tête. Neil se rend ensuite chez Roger Van Zant pour l'éliminer.
Pendant ce temps, Charlene découvre que son amant Alan collabore avec la police et se retrouve contrainte d'accepter de leur livrer Chris, sous peine de perdre la garde de son enfant. De son côté, Vincent Hanna rend visite à la personne qui a prévenu la police du braquage, Hugh Benny ; il découvre que celui-ci est de mèche avec Waingro qui, travaillant pour Van Zant, a trahi l'équipe de McCauley. Après la mort de Van Zant, Vincent Hanna comprend que Waingro est le prochain sur la liste de McCauley, et fait fuiter des indices sur Waingro partout dans la ville afin d'attirer McCauley dans un piège.
En fin de nuit, McCauley rejoint Eady chez elle. Mais celle-ci, horrifiée par la découverte du braquage de la banque aux informations, tente de s'enfuir. Neil arrive cependant à la la convaincre de rester avec lui, la jeune femme acceptant finalement de le suivre à l'autre bout du monde. Pendant ce temps, Chris, ayant quelque peu récupéré de sa blessure, se rend à l'appartement où se trouve Charlene (celui où son amant l'a amenée après que la jeune femme a quitté le domicile conjugal) pour la récupérer. Mais, au moment où il arrive sur les lieux, Charlene, sur le balcon donnant sur la rue, lui fait discrètement un signe de la main afin qu'il s'enfuie, la maison et le quartier étant cernés par la police. Malgré son désespoir, Chris obtempère et poursuit son chemin, la police le laissant repartir après avoir contrôlé ses faux papiers.
Les heures passent. McCauley ne donne plus signe de lui. Vincent Hanna devient persuadé que le braqueur est déjà loin, parti à l’étranger. Ayant quitté Justine après que celle-ci l'a trompé avec un amant d'un soir, Ralph (pour rendre Hanna jaloux), le policier s'est installé à l'hôtel. Quand il retourne à sa chambre, il y découvre le corps de sa belle-fille Lauren dans la baignoire, les veines des bras et des jambes tranchées après une tentative de suicide. L’emmenant à l’hôpital, il y retrouve Justine, auprès de qui il reste pendant que les médecins s'occupent de sa fille. Lauren est finalement tirée d'affaire.
Alors qu'il roule sur le chemin du départ avec Eady, bien décidé à refaire sa vie avec la jeune femme, Neil McCauley apprend par un appel de Nate l'adresse de l'hôtel, près de l'aéroport, dans lequel se cache Waingro. Changeant brusquement de direction, McCauley fait demi-tour pour s'y rendre. Arrivé à l’hôtel, il s'introduit clandestinement dans l'établissement et, déclenchant l'alerte incendie du bâtiment, profite de la panique pour arriver jusqu’à la chambre de Waingro. Bien que la chambre soit surveillée par des hommes de l'équipe de Vincent Hanna, McCauley réussit à tuer Waingro en profitant de la panique alentour. Pendant ce temps, Vincent Hanna, en pleine discussion avec Justine à l’hôpital, admet qu'il ne peut changer "Je suis ce que je poursuis". Après avoir obtenu l'accord de Justine, reconnaissante et touchée que sa fille ait chosit son compagnon comme dernier refuge, il la laisse là et repart à la poursuite de McCauley.
Après avoir tué Waingro, McCauley quitte l’hôtel, la panique environnante lui permettant de s'esquiver discrètement. Rejoignant Eady en bas de l’hôtel, il s'apprête à remonter en voiture avec elle. C'est alors qu'il repère Hanna au loin, voyant le policier arriver à pied dans sa direction, à demi caché par la foule qui évacue l’hôtel ; sans hésiter, McCauley abandonne une Eady stupéfaite dans la voiture, puis s'enfuit dans le sens inverse.
Après une longue course-poursuite entre les deux hommes sur les pistes de l'aéroport de Los Angeles, Hanna parvient à retrouver McCauley et, à l'issue d'un jeu du chat et de la souris, l’abat d’un tir de pistolet. Avant de mourir, le braqueur déclare au policier : "Je t'avais dit que je ne replongerais pas". Vincent Hanna saisit alors la main que lui tend McCauley, à l'instant où le criminel va rendre son dernier soupir, tandis que les pistes de l'aéroport sont violemment éclairées pour l'atterrissage des avions.