의열단의 단원인 김장옥과 주동성은 군자금 확보를 위장해 부유한 김황섭을 찾아가지만, 이는 함정이었다. 일본군에게 포위된 김장옥은 총격전에서 용감하게 싸우지만, 결국 일본 경찰 소속이 된 옛 친구 이정출과 마주하자 스스로 목숨을 끊는다. 그러나 이정출은 주동성을 조용히 풀어주고, 이로 인해 의열단 단원들 사이에 의심이 피어난다. 조회령이 주동성을 배신자로 비난하면서 내부 불신은 최고조에 달하지만, 김우진이 개입하여 신분이 노출된 주동성을 추방한다.
이 사건 이후 일본 당국은 이정출에게 김우진을 조사하라고 명령한다. 이정출과 김우진은 서로의 진짜 정체를 알아차리지만, 친구인 척 가장한다. 한편 이정출에게는 파트너인 하시모토가 배정되는데, 그의 진짜 임무는 이정출을 감시하는 것이었다. 감시가 강화되자 이정출은 하시모토의 행동을 지연시켜 의열단을 보호하려 하지만, 의열단은 간신히 상하이로 도피한다. 상하이에서 의열단 지도자 정채산과 김우진은 이정출에게 자신들의 대의를 돕도록 설득한다. 이정출은 결국 증가하는 압력 속에서 충성심을 바꿔 폭탄을 한국으로 밀수하는 것을 돕기로 동의한다.
한국으로 돌아온 이정출은 김우진에게 조직 내부에 스파이가 있다고 경고한다. 김우진은 스파이를 밝혀내기 위해 각 단원에게 다른 만남 시간을 알려주는 함정을 고안한다. 정보 유출로 스파이의 정체가 드러나자, 조회령으로 밝혀진다. 열차 안에서 긴장감 넘치는 대치 끝에 김우진은 의열단의 이름으로 그를 처형한다. 의열단이 경성에 도착하자 경찰과의 대치로 혼란이 발생한다. 연계순은 자신을 체포하려던 경찰관들을 살해하고, 총격전이 벌어져 대부분의 저항 단원들이 사망하거나 체포된다. 김우진은 도움을 받아 탈출하고, 폭탄을 밀수하는 데 성공한다.
의심을 받는 이정출은 김우진을 찾으라는 명령을 받고, 자신의 위장을 유지하기 위해 계순을 고문한다. 결국 이정출은 주동성에게 속아 당국을 김우진의 은신처로 이끈다. 김우진은 필사적인 탈출 시도 끝에 붙잡힌다. 고문으로 비밀을 누설하지 않기 위해 김우진은 자신의 혀를 깨문다. 이정출도 체포되지만, 일본에 충성을 가장하여 가벼운 형을 받는다. 재판 중 이정출은 저항 세력과 결코 한편이 아니었다고 눈물로 주장하며, 임무가 계속될 수 있도록 비협력자로 행동해 달라는 김우진의 이전 요청을 따른다.
석방된 후 이정출은 계순의 죽음을 알게 되고, 일본 협력자들이 주최하는 파티 소식을 듣는다. 임무를 완수하기 위해 적어도 한 명은 살아남아야 한다는 김우진의 마지막 소원을 기억하며, 이정출은 행사에 폭탄을 설치한다. 동시에 의열단 요원이 주동성을 암살한다. 폭탄이 터져 히가시를 포함한 고위 관료들이 사망한다. 감옥에 있는 벙어리가 된 김우진은 임무 성공 소식을 듣고 안도의 미소를 짓는다. 그의 희생은 의미를 가지게 된다. 이정출은 나중에 김장옥의 죽음을 초래했던 김황섭을 찾아 그를 살해하여 친구의 복수를 한다.