diff -Nru rainbowcrack-1.2a-src.orig/src/ChainWalkContext.cpp rainbowcrack-1.2a-src.dev/src/ChainWalkContext.cpp --- rainbowcrack-1.2a-src.orig/src/ChainWalkContext.cpp 2003-11-23 00:33:44.000000000 +0100 +++ rainbowcrack-1.2a-src.dev/src/ChainWalkContext.cpp 2008-03-07 16:24:37.000000000 +0100 @@ -450,10 +450,13 @@ for (i = 0; i < m_nPlainLen; i++) { char c = m_Plain[i]; + /* French Accents Patch - Guillaume Lehembre & Nicolas Collignon - Hervé Schauer Consultants - http://www.hsc.fr if (c >= 32 && c <= 126) sRet += c; else sRet += '?'; + */ + sRet += c; } return sRet; diff -Nru rainbowcrack-1.2a-src.orig/src/RainbowCrack.cpp rainbowcrack-1.2a-src.dev/src/RainbowCrack.cpp --- rainbowcrack-1.2a-src.orig/src/RainbowCrack.cpp 2003-11-23 00:32:46.000000000 +0100 +++ rainbowcrack-1.2a-src.dev/src/RainbowCrack.cpp 2008-03-13 16:18:10.000000000 +0100 @@ -137,6 +137,52 @@ bool NTLMPasswordSeek(unsigned char* pLMPassword, int nLMPasswordLen, int nLMPasswordNext, unsigned char* pNTLMHash, string& sNTLMPassword) { + // French Accents Patch - Guillaume Lehembre & Nicolas Collignon - Hervé Schauer Consultants - http://www.hsc.fr + // French Permutation Table + const char *accents_table[] = { + "Aa\xC0\xC2\xE0\xE2", // [A => AÀÂàâ] + "\xB6\xC2\xE2", // [0xB6 => Ââ] + "\xB7\xC0\xE0", // [0xB7 => Àà] + "Bb", // [B => Bb] + "Cc", // [C => Cc] + "\x80\xE7\xC7", // [0x80 => çÇ] + "Dd", // [D => Dd] + "Ee\xC8\xCA\xCB\xE8\xEA\xEB", // [E => EeÈÊËèêë] + "\x90\xE9\xC9", // [0x90 => Éé] + "\xD4\xC8\xE8", // [0xD4 => Èè] + "\xD2\xCA\xEA", // [0xD2 => Êê] + "\xD3\xCB\xEB", // [0xD3 => Ëë] + "Ff", // [F => Ff] + "Gg", // [G => Gg] + "Hh", // [H => Hh] + "Ii\xCE\xCF\xEE\xEF", // [I => IiÎÏîï] + "\xD8\xCF\xEF", // [0xD8 => Ïï] + "\xD7\xCE\xEE", // [0xD7 => Îî] + "Jj", // [J => Jj] + "Kk", // [K => Kk] + "Ll", // [L => Ll] + "Mm", // [M => Mm] + "Nn", // [N => Nn] + "Oo\xD4\xF4", // [O => OoÔô] + "\xE2\xD4\xF4", // [0xE2 => Ôô] + "Pp", // [P => Pp] + "Qq", // [Q => Qq] + "Rr", // [R => Rr] + "Ss", // [S => Ss] + "Tt", // [T => Tt] + "Uu\xD9\xDB\xFB\xF9", // [U => UuÙÛûù] + "\xEB\xD9\xF9", // [0xEB => Ùù] + "\x9A\xDC\xFC", // [0x9A => Üü] + "\xEA\xDB\xFB", // [0xEA => Ûû] + "Vv", // [V => Vv] + "Ww", // [W => Ww] + "Xx", // [X => Xx] + "Yy\xFF", // [Y => Yyÿ] + "Zz", // [Z => Zz] + NULL + }; + int i,j; + if (nLMPasswordNext == nLMPasswordLen) { unsigned char md[16]; @@ -144,7 +190,6 @@ if (memcmp(md, pNTLMHash, 16) == 0) { sNTLMPassword = ""; - int i; for (i = 0; i < nLMPasswordLen; i++) sNTLMPassword += char(pLMPassword[i * 2]); return true; @@ -156,13 +201,18 @@ if (NTLMPasswordSeek(pLMPassword, nLMPasswordLen, nLMPasswordNext + 1, pNTLMHash, sNTLMPassword)) return true; - if ( pLMPassword[nLMPasswordNext * 2] >= 'A' - && pLMPassword[nLMPasswordNext * 2] <= 'Z') - { - pLMPassword[nLMPasswordNext * 2] = pLMPassword[nLMPasswordNext * 2] - 'A' + 'a'; - if (NTLMPasswordSeek(pLMPassword, nLMPasswordLen, nLMPasswordNext + 1, pNTLMHash, sNTLMPassword)) - return true; - pLMPassword[nLMPasswordNext * 2] = pLMPassword[nLMPasswordNext * 2] - 'a' + 'A'; + // French Accents Patch - Guillaume Lehembre & Nicolas Collignon - Hervé Schauer Consultants - http://www.hsc.fr + for (i=0; accents_table[i]; ++i) { + if (pLMPassword[nLMPasswordNext * 2] == (unsigned char) accents_table[i][0]) { + for (j=1; accents_table[i][j]; ++j) { + unsigned char tLMPassword; + tLMPassword = pLMPassword[nLMPasswordNext * 2]; + pLMPassword[nLMPasswordNext * 2] = (unsigned char) accents_table[i][j]; + if (NTLMPasswordSeek(pLMPassword, nLMPasswordLen, nLMPasswordNext + 1, pNTLMHash, sNTLMPassword)) + return true; + pLMPassword[nLMPasswordNext * 2] = tLMPassword; + } + } } return false;