Una banda de ladrones disfrazados como payasos llevan a cabo un violento robo en uno de los bancos de la mafia de Gotham City, pero los asaltantes desconocen que entre ellos se encuentra el Joker (Heath Ledger), quien les había ordenado traicionarse y asesinarse unos a otros, con la finalidad de repartir entre menos el botín. Finalmente el Joker asesina al último de sus cómplices y escapa en un autobús escolar. Más tarde, un grupo de imitadores de Batman intenta interrumpir una reunión de traficantes con el Dr.Jonathan Crane/El Espantapájaros (Scarecrow) (Cillian Murphy), cuando de pronto Batman (Christian Bale) aparece y aprehende a todos los delincuentes junto con los impostores, pero sufre lesiones que le conducen a diseñar un traje nuevo que le permita mayor movilidad y rapidez, aunque le hará más vulnerable a las balas y armas blancas.
Más tarde, Batman y el teniente James Gordon (Gary Oldman) contemplan la posibilidad de incluir al nuevo fiscal de distrito, Harvey Dent (Aaron Eckhart) en su plan para combatir a la mafia, como el héroe público que Batman no puede ser, al tiempo que Bruce descubre que Dent es el nuevo novio de Rachel Dawes (Maggie Gyllenhaal). Mientras, en las Empresas Wayne, Lucius Fox (Morgan Freeman) hace negocios con Lau (Chin Han), un prestigioso empresario chino pero el enorme éxito de su empresa hace sospechar hasta al mismo Bruce quien le pide a Fox cancelar el trato de asociación con él no sin antes revisar los libros de su empresa.
Los jefes de la mafia se reúnen para discutir sobre qué harán con Batman, Gordon y el nuevo fiscal, Dent. En ese momento Lau les informa que la policía pretendía confiscar todo el dinero que guardaban en los bancos de la ciudad, pero que él se había anticipando al plan de Gordon, escondiéndolo. De pronto, la reunión es interrumpida por el Joker quien se ofrece para matar a Batman a cambio de la mitad de su dinero. Los maleantes rechazan la oferta. Lau huye a Hong Kong, y Bruce y Fox viajan hasta ahí. Fox pide aplazar las negociaciones para evitar problemas con la justicia y le da a Bruce un nuevo traje hecho de placas de titanio y kevlar, dándole mayor movilidad aunque con vulnerabilidad a disparos y armas corto punzantes, una nueva capucha que le permite mover la cabeza y un prototipo original de Fox de un sistema de sonar integrado al traje. Lau es secuestrado por Batman y entregado a la policía de Gotham City y mantenido en la Comisaría Central por el temor de lo que pudiera ocurrirle en la prisión. Lau negocia su testimonio en tanto pueda conservar el dinero de la mafia para sí mismo. En este punto y con sus fondos en peligro, la mafia acepta contratar al Joker. Después de tomar los recursos y el apoyo de la mafia, el primer movimiento del Joker es asesinar a un imitador de Batman y comunicar a Gotham que si Batman no se entrega a la policía, irá asesinando gente cada día siendo algunas de las víctimas el comisionado Loeb (Colin McFarlane) y la juez Surrillo (Nydia Rodriguez Terracina) quién anteriormente había condenado varios centenares de mafiosos gracias al testimonio de Lau. El Comisionado y la juez son asesinados por policías al servicio del Joker y Dent, que era otro de los objetivos del Joker, se encontraba en una fiesta ofrecida por Wayne y sale ileso al ser salvado por su anfitrión. Ante la escalada de violencia y el intento de asesinato del Alcalde (Nestor Carbonell) durante el cual el Teniente Gordon es dado por muerto, Bruce Wayne decide entregarse y, como Batman, se lo comunica a Dent, pidiéndole que convoque una rueda de prensa. Wayne acude a la rueda de prensa y ve cómo Dent anuncia que él es en realidad Batman para que el verdadero no caiga preso. Rachel le entrega una carta a Alfred (Michael Caine) pidiéndole que se la entregue a Bruce cuando "sea el momento". Rachel le suplica a Harvey que revele la verdad, pero este se niega; antes de que se lo lleven en un convoy, Harvey le da su moneda de la suerte a Rachel, quien se percata que es una moneda trucada, reforzando así el lema de Harvey de "fabrico mi suerte". El Joker, aparentemente muerde el anzuelo e intenta emboscar el convoy de la policía que transporta a Dent, pero Batman y Gordon intervienen y logran detener al Joker. Gordon es ascendido a Comisionado.
Ya una vez en la estación de policía, Batman interroga al Joker, que revela (no sin antes sacar a Batman de sus casillas) que Dawes y Dent han sido secuestrados y llevados a lugares opuestos de la ciudad y encerrados en almacenes repletos de explosivos. El objetivo del Joker es que Batman no pueda salvar a ambos y tenga que elegir. Batman decide salvar a Dawes, mientras que Gordon, va a rescatar a Dent. Sin embargo, el Joker les ha mentido intercambiando los lugares donde están cautivos de modo que Batman llega donde tiene encerrado a Dent, mientras que Gordon y la policía llegan donde se encuentra Dawes. Mientras tanto, con la ayuda de una bomba que él mismo ha encerrado en el cuerpo de otro preso, el Joker escapa con Lau. En esos momentos Batman llega a donde se encuentra Dent a tiempo para salvarlo, pero Dent, quien tratando de escapar ha quedado empapado de gasolina sufre graves quemaduras en el lado izquierdo de su cara tras la explosión. Por otro lado, Gordon no llega a tiempo para salvar a Dawes, quien muere en la explosión tras haberle dicho a Dent vía telefónica que aceptaba casarse con él. Mientras Batman miraba los restos de donde murió, Alfred lee la carta de Rachel donde dice que se a a casar con Harvey ya que Bruce nunca dejará de ser Batman y tampoco pierda la fe en los demás. En el hospital, Dent es visitado por Gordon y este, presionado por el propio Harvey, le revela que cuando estaba en Asuntos Internos era conocido como Dos Caras.
Mientras tanto un empleado de Empresas Wayne ha descubierto la identidad de Batman y aparece en televisión para revelar el secreto, hecho que es interrumpido por un mensaje del Joker en el que anuncia que si este empleado no es asesinado en menos de 60 minutos él volará alguno de los hospitales de la ciudad, lo que desata el caos. Los atentados sobre este empleado se suceden siendo el mismísimo Bruce Wayne el que acaba salvándole la vida mientras el Joker hace explotar el Hospital General de Gotham no sin antes empujar a Harvey Dent a la locura completa y convenciéndole para que empiece una implacable misión de venganza y "justicia" para castigar a los corruptos policías y mafiosos que los colocaron a Dawes y a él en los almacenes, así como de Batman y Gordon que al contrario que él no han perdido nada.
Harvey, ahora llamado Dos Caras empieza su particular venganza, matando a 5 personas entre ellas un policía corrupto, al jefe de la Mafia Salvatore Maroni (Eric Roberts) (aparentemente) y a su chófer. Eso sí, antes de matarles siempre deja que su moneda de la suerte decida el destino de sus víctimas. Si sale cara les perdona la vida, pero si sale cruz (la cara de la moneda que fue quemada en el incendio) los mata. Bruce crea una nueva máquina gracias a un consejo de Fox y convierte cada teléfono de Gotham en un micrófono para encontrar al Joker, por lo que puede ver toda la ciudad, invadiendo la privacidad, pero Fox lo ve como algo malo. Finalmente Fox decide ayudarlo pero le dice que mientras esa máquina este en Wayne Enterprises, él no. Batman le dice que cuando termine, que teclee su nombre.
Por su parte, el Joker sigue con su agenda e incendia a Lau junto con su mitad del dinero y anuncia al público que cualquier persona que quede en Gotham al anochecer estará sujeta a su ley. Con los puentes y túneles de la ciudad cerrados debido a amenazas de bomba, las autoridades comienzan la evacuación de personas en barco. Sin embargo esto forma parte también del plan maestro del Joker que ha colocado explosivos en dos de los barcos, uno lleno de convictos y otro de civiles, y que pretende que se maten entre ellos en un retorcido experimento social mediante el cual pretende demostrar que todo el mundo puede ser empujado al mal. La amenaza del Joker incluye además del hecho de que los pasajeros de un barco destruyan al otro, o él hará volar los dos a medianoche.
Mientras en ambas embarcaciones se discute sobre si hacer explotar al otro barco o no, Batman localiza al Joker y le impide la destrucción de los barcos después de que éstos decidan no destruirse mutuamente. Después de una breve pelea, el Joker parece manejar a Batman, pero este último arroja a Joker fuera del edificio e inmediatamente lo ata con un cable al mismo. Es entonces cuando el Joker reconoce a Batman como una persona verdaderamente incorruptible, a diferencia de Dent. El equipo SWAT se hace cargo del Joker después de que éste reconozca que nunca matará a Batman porque le parece divertido, y que estarán haciendo «eso» por el resto de sus vidas. También le revela lo que hizo con Dent: «tomé al Caballero Blanco de la Ciudad y lo rebaje a nuestro nivel, no fue difícil, ya que la locura es como la gravedad, solo necesitas un empujón». Batman deja al Joker colgando del cable mientras llegan los policías.
En el clímax final, Batman va en busca de Harvey Dent, quien se encuentra en los restos del edificio donde murió Dawes y donde tiene a la familia de Gordon como rehenes. Este interrumpe la conversación entre Dos Caras y Gordon, y empieza una discusión en la que Dent se lamenta de que sólo él ha perdido todo en la guerra contra el crimen organizado; Batman le dice que ha sido la víctima elegida por el Joker porque de los tres él era el mejor, el «Caballero Blanco» de Gotham que realmente podía ser el héroe que la ciudad necesita. Después de escuchar los argumentos, Dos Caras deja al azar si cada uno tiene que ser o no castigado. El primer lanzamiento decide la suerte de Batman y le dispara en el abdomen, luego se declara a sí mismo inocente y, antes de que pueda determinar el destino del hijo de Gordon, Batman se lanza contra él, cayendo ambos desde el edificio al suelo. Dos Caras muere por la caída, mientras la moneda cae en cruz. Batman habla con Gordon, convenciéndolo de que si se conocen los atroces crímenes de Dent, la ciudad entraría en crisis, al ver cómo su «caballero blanco» había sido corrompido. Así, Batman asume los crímenes de Dos Caras para que el nombre de Dent quede limpio y su legado como héroe y símbolo continúe, y huye de la policía, luego de usar una frase de Dent: "Mueres siendo un héroe o vives lo suficiente para convertirte en un villano".
Gordon da un discurso en el funeral y destruye la bat-señal, iniciando una persecución contra Batman, Alfred quema la carta de Rachel sin habérsela enseñado a Bruce y Lucius teclea su nombre, haciendo que la máquina se destruya y así evita renunciar. Batman huye en el Bat-pod, ante la mirada del hijo de Gordon, quien pregunta por qué van a perseguir a Batman. Gordon responde: "Porque tenemos que perseguirlo. Porque es el héroe que Gotham se merece, pero no el que necesita ahora mismo. Así que lo perseguiremos. Porque él puede resistirlo, porque no es un héroe, es un guardián silencioso, un vigilante protector, un Caballero de la Noche".