Faits: A. Le 2 mars 2012, A._ a été interpellé à la suite d'une dénonciation laissant entendre qu'il fomentait le projet de faire tuer le gendarme B._. Il lui est reproché d'avoir promis de l'argent dans ce but au mineur C._, qui a confirmé que l'intéressé lui avait demandé de tuer le gendarme en question. A._ a été prévenu de tentative d'assassinat, subsidiairement de tentative d'instigation à assassinat. Le dénommé D._ a également déclaré que A._ lui avait proposé de l'argent pour frapper un policier, de sorte que la prévention a été étendue à l'instigation à lésions corporelles graves. La police ayant découvert quelque 20'000 fr. dissimulés en divers endroits d'un commerce de A._, celui-ci a également été prévenu de blanchiment d'argent. Il est enfin prévenu d'infraction à la loi fédérale sur les étrangers (LEtr; RS 142.20) pour avoir employé sept personnes illégalement entre 2009 et 2012. B. Le Tribunal des mesures de contrainte du canton de Genève (ci-après: le Tmc) a ordonné la détention provisoire de A._. Cette détention a été prolongée à plusieurs reprises et le Tmc a rejeté des requêtes de mise en liberté provisoire. La Cour de céans a confirmé une décision de prolongation de la détention, en constatant l'existence de charges suffisantes et celle d'un risque de collusion (arrêt 1B_393/2012 du 24 juillet 2012). Par ordonnance du 12 septembre 2012, le Tmc a ordonné une nouvelle prolongation de la détention jusqu'au 12 novembre 2012, en retenant l'existence de risques de fuite, de collusion et de réitération. Statuant sur recours de l'intéressé, la Chambre pénale de recours de la Cour de justice du canton de Genève (ci-après: la Cour de justice) a confirmé cette décision par arrêt du 10 octobre 2012. Elle a retenu en substance que les charges étaient suffisantes, que le risque de récidive était bien réalisé et que le principe de la proportionnalité était respecté. Elle a en revanche estimé que le risque de collusion ne pouvait plus être retenu. Par ordonnance du 14 novembre 2012, le Tmc a ordonné une nouvelle prolongation de la détention jusqu'au 21 décembre 2012, en retenant les risques de fuite et de réitération et en relevant que cette prolongation devrait suffire pour clore l'instruction et renvoyer le prévenu en jugement. C. Agissant par la voie du recours en matière pénale, A._ demande au Tribunal fédéral d'annuler l'arrêt de la Cour de justice et d'ordonner sa mise en liberté immédiate, subsidiairement de prononcer des mesures de substitution, en particulier le paiement d'une caution de 25'000 francs. Il requiert en outre l'octroi de l'assistance judiciaire. La Cour de justice a renoncé à se déterminer. Le Ministère public a présenté des observations, concluant au rejet du recours. Le recourant a formulé des observations complémentaires.