Guest User

sha-1 brutforcer

a guest
Dec 20th, 2012
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;######################### Created by Bearchik http://crazyasm.blogspot.com
  2. ;######################### Sha-1Brute.rc
  3. #define IDD_MAIN 101
  4. #define KEYEDIT 102
  5. #define STRINGEDIT 103
  6. #define IDC_STC1 104
  7. #define COUNTEDIT 106
  8. #define IDC_STC3 107
  9. #define DICTEDIT 108
  10. #define IDC_STC4 109
  11. #define String 105
  12.  
  13. IDD_MAIN DIALOGEX 6,6,234,81
  14. CAPTION "SHA-1 BrutForcer"
  15. FONT 8,"Tahoma",0,0,0
  16. STYLE 0x10CF0800
  17. BEGIN
  18.   CONTROL "OK",1,"Button",0x50010000,180,66,48,13
  19.   CONTROL "Cancel",2,"Button",0x50010000,128,66,48,13
  20.   CONTROL "",KEYEDIT,"Edit",0x50010000,33,12,195,12,0x00000200
  21.   CONTROL "",STRINGEDIT,"Edit",0x50010000,33,30,195,12,0x00000200
  22.   CONTROL "SHA-1:",IDC_STC1,"Static",0x50000000,6,15,27,9
  23.   CONTROL "",COUNTEDIT,"Edit",0x58010000,33,66,90,12,0x00000200
  24.   CONTROL "Count:",IDC_STC3,"Static",0x50000000,6,69,21,9
  25.   CONTROL "",DICTEDIT,"Edit",0x50010000,33,48,195,12,0x00000200
  26.   CONTROL "Dict:",IDC_STC4,"Static",0x50000000,6,51,18,9
  27.   CONTROL "String:",String,"Static",0x50000000,6,33,24,9
  28. END
  29.  
  30. ;######################### Sha-1Brute.inc
  31.  
  32. include     windows.inc
  33. include     kernel32.inc
  34. include     user32.inc
  35. include     Comctl32.inc
  36. include     shell32.inc
  37.  
  38. includelib  kernel32.lib
  39. includelib  user32.lib
  40. includelib  Comctl32.lib
  41. includelib  shell32.lib
  42.  
  43. DlgProc         PROTO   :HWND,:UINT,:WPARAM,:LPARAM
  44. Permute         PROTO   :DWORD, :DWORD, :DWORD
  45. f1              PROTO   :DWORD, :DWORD, :DWORD
  46. f2              PROTO   :DWORD, :DWORD, :DWORD
  47. f3              PROTO   :DWORD, :DWORD, :DWORD
  48. compileString   PROTO   :DWORD, :DWORD
  49. topLVL          PROTO   :DWORD, :DWORD
  50. CheckSHA        PROTO   :DWORD, :DWORD
  51. Counter         PROTO   :DWORD, :DWORD
  52. SymbLower       PROTO   :DWORD
  53. PermuteThread   PROTO   :DWORD
  54. CalcKey         PROTO   :DWORD
  55. CreateHEX       PROTO
  56.  
  57.  
  58.  
  59. .const
  60.  
  61. IDD_MAIN        equ 101
  62. KEYEDIT         equ 102
  63. STRINGEDIT      equ 103
  64. COUNTEDIT       equ 106
  65. DICTEDIT        equ 108
  66. WM_FINISH       EQU WM_USER+100h
  67.  
  68. ;#########################################################################
  69. .data
  70. dict            db "abcdefghiklmnopqrstuvwxyzABCDEFGHIKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()-=_+,./?|\[]",0
  71. errTitle        db "ERROR", 0h
  72. errText1        db "SHA key size must be 40 symbols!",0h
  73. errText2        db "Nothing found!",0h
  74. foundTitle      db "String Found!",0h
  75. foundText       db "sdfsdf",0h
  76.  
  77. H0              dd 67452301h
  78. H1              dd 0EFCDAB89h
  79. H2              dd 98BADCFEh
  80. H3              dd 10325476h
  81. H4              dd 0C3D2E1F0h
  82.  
  83. K1              dd 5A827999h
  84. K2              dd 6ED9EBA1h
  85. K3              dd 8F1BBCDCh
  86. K4              dd 0CA62C1D6h
  87.  
  88.  
  89. .data?
  90. hWintmp         dd      ?
  91. fflag           db      ?
  92. shakeystring    db 29h  dup (?)
  93. sha1H0          dd      ?
  94. sha1H1          dd      ?
  95. sha1H2          dd      ?
  96. sha1H3          dd      ?
  97. sha1H4          dd      ?
  98. tmpH0           dd      ?
  99. tmpH1           dd      ?
  100. tmpH2           dd      ?
  101. tmpH3           dd      ?
  102. tmpH4           dd      ?
  103.  
  104. aav             dd      ?
  105. bbv             dd      ?
  106. ccv             dd      ?
  107. ddv             dd      ?
  108. eev             dd      ?
  109. k               dd      ?
  110. temp            dd      ?
  111.  
  112. lengh           db      ?
  113. hInstance       dd      ?
  114. recKey          dd      ?
  115. pThread         dd      ?
  116. mkey            db      320 DUP (?)
  117. string          db 10h  dup (?)
  118. clearstring     db 10h  dup (?)
  119. tempdict        db 53h  dup(?)
  120. pBrut           dd 51h  dup(?)
  121. itercount       db 20h  dup (?)
  122.  
  123.  
  124. ;######################### Sha-1Brute.asm
  125. .486
  126. .model flat, stdcall  ;32 bit memory model
  127. option casemap :none  ;case sensitive
  128.  
  129. include Sha-1Brute.inc
  130.  
  131. .code
  132.  
  133. start:
  134.     invoke  GetModuleHandle,NULL
  135.     mov hInstance,eax
  136.     invoke  InitCommonControls
  137.     invoke  DialogBoxParam,hInstance,IDD_MAIN,NULL,addr DlgProc,NULL
  138.     invoke  ExitProcess,0
  139.  
  140. ;########################################################################
  141.  
  142. DlgProc proc    hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  143.     mov eax, hWin
  144.     mov hWintmp, eax
  145.     mov eax,uMsg
  146.     .if eax==WM_INITDIALOG
  147.         invoke  SetDlgItemText, hWin, DICTEDIT, addr dict
  148.         ;initialization here
  149.     .elseif eax==WM_COMMAND
  150.         mov edx,wParam
  151.         movzx eax,dx
  152.         shr edx,16
  153.        
  154.         .if edx==BN_CLICKED
  155.             .if eax==IDOK
  156.             invoke  GetDlgItemText, hWin, KEYEDIT, addr shakeystring, sizeof shakeystring
  157.             .if eax != 28h
  158.                 invoke  MessageBox, hWin, addr errText1, addr errTitle, MB_ICONERROR
  159.                 jmp     @f
  160.             .endif
  161.             invoke  SymbLower, addr shakeystring
  162.             invoke  CreateHEX
  163.             invoke  GetDlgItemText, hWin, DICTEDIT, addr tempdict, sizeof tempdict
  164.             invoke  CreateThread, NULL, 10240, offset PermuteThread, eax, NULL, pThread
  165.             .if eax == -1
  166.                 invoke  MessageBox, hWin, addr errText2, addr errTitle, MB_ICONERROR
  167.             .endif
  168. @@:
  169.             .elseif eax==IDCANCEL
  170.                 invoke  SendMessage,hWin,WM_CLOSE,NULL,NULL
  171.             .endif
  172.         .endif
  173.    
  174.     .elseif eax==WM_FINISH
  175.         invoke  SetDlgItemText, hWin, STRINGEDIT, addr clearstring
  176.     .elseif eax==WM_CLOSE
  177.         invoke  EndDialog,hWin,0
  178.     .else
  179.         mov eax,FALSE
  180.         ret
  181.     .endif
  182.    
  183.    
  184.     mov eax,TRUE
  185.     ret
  186. DlgProc endp
  187.  
  188. Permute proc uses ebx ecx edx esi edi countSym:DWORD, recur:DWORD, pBrutaddr:DWORD
  189.     lea     esi, tempdict
  190.     mov     edi, pBrutaddr
  191.    
  192.     .if recur == 0
  193.         invoke  topLVL, countSym, pBrutaddr
  194.         mov     eax, recur
  195.         inc     eax
  196.         mov     ebx, pBrutaddr
  197.         add     ebx, 4h
  198.         invoke  Permute, countSym, eax, ebx
  199.         mov     DWORD PTR [edi], esi
  200.         jmp     exitTopLvl
  201.     .endif
  202.    
  203.    
  204.     mov     eax, esi
  205.     add     eax, countSym
  206.    
  207.     .if     DWORD PTR [edi-4h] == eax && DWORD PTR [edi] == 0
  208.         mov     DWORD PTR [edi], esi
  209.     .elseif
  210.         .if DWORD PTR [edi] == eax
  211.             mov     eax, recur
  212.             inc     eax
  213.             mov     ebx, pBrutaddr
  214.             add     ebx, 4h
  215.             invoke  Permute, countSym, eax, ebx
  216.             mov     DWORD PTR [edi], esi
  217.         .elseif
  218.             inc     DWORD PTR [edi]
  219.         .endif
  220.        
  221.     .endif
  222.    
  223. exitTopLvl:
  224.     mov     eax, countSym
  225.     dec     eax
  226.     .if recur > eax
  227.         mov     recKey, -1h
  228.     .endif
  229.    
  230.     ret
  231. Permute endp
  232.  
  233. topLVL  proc uses eax ebx ecx edx esi edi countSym:DWORD, pBrutaddr:DWORD
  234.     lea     esi, tempdict
  235.     mov     edi, pBrutaddr
  236.     xor     ecx, ecx
  237.     mov     DWORD PTR [edi], esi
  238.    
  239. @@:
  240.     invoke  compileString, offset string, offset pBrut
  241.     invoke  CalcKey, offset string
  242.     invoke  CheckSHA, offset sha1H0, offset tmpH0
  243.  
  244.     inc     DWORD PTR [edi]
  245.     inc     ecx
  246.     .if     ecx == countSym
  247.         jmp     @f
  248.     .endif
  249.    
  250.     jmp     @b
  251. @@:
  252.     lea     esi, dict
  253.    
  254.     ret
  255.    
  256. topLVL endp
  257.  
  258. PermuteThread   proc countSym:DWORD
  259. @@:
  260.     invoke  Permute, countSym, 0, offset pBrut
  261.     .if     recKey == -1h
  262.         jmp     nf
  263.     .endif
  264.    
  265.     .if     fflag == 1h
  266.         jmp     @f
  267.     .endif
  268.    
  269.     jmp @b
  270. nf:
  271.     mov     eax, -1h
  272. @@:
  273.     ret
  274. PermuteThread endp
  275.  
  276. compileString proc uses eax ecx esi edi tmpString:DWORD, pBrutaddr:DWORD
  277.     mov     edi, tmpString
  278.     mov     esi, pBrutaddr
  279.  
  280. @@:
  281.     mov     eax, DWORD PTR [esi]
  282.     mov     al, BYTE PTR [eax]
  283.     mov     BYTE PTR [edi], al
  284.     .if DWORD PTR [esi+4h] == 0
  285.         jmp     @f
  286.     .endif
  287.     inc     edi
  288.     add     esi, 4h
  289.     jmp     @b
  290. @@:
  291.    
  292.     ret
  293. compileString endp
  294.  
  295. SymbLower proc uses ecx edi straddr:DWORD
  296.     mov     ecx, 28h
  297.     mov     edi, straddr
  298. @@:
  299.     .if BYTE PTR [edi] < 61h && BYTE PTR [edi] >= 41h
  300.         add BYTE PTR [edi], 20h
  301.     .endif
  302.     inc     edi
  303.     loop    @b
  304.     ret
  305. SymbLower endp
  306.  
  307. CreateHEX proc uses eax ebx ecx edx esi edi
  308.     lea     edi, shakeystring+27h
  309.     lea     esi, sha1H4
  310.     push    esi
  311. nextquad:
  312.     mov     ecx, 8h
  313.     mov     esi, 10h
  314.     xor     eax, eax
  315.     mov     edx, 1h
  316.  
  317. nextsymb:
  318.     xor     ebx, ebx
  319.     mov     bl, BYTE PTR [edi]
  320.     .if ebx > 39h
  321.         sub     bl, 57h
  322.         jmp     @f
  323.     .endif
  324.     sub     bl, 30h
  325. @@:
  326.     imul    ebx, edx
  327.     add     eax, ebx
  328.     imul    edx, esi
  329.    
  330.     dec     edi
  331.     loop    nextsymb
  332.     pop     esi
  333.     mov     DWORD PTR [esi], eax
  334.     sub     esi, 4h
  335.     push    esi
  336.     .if edi != offset shakeystring-1h
  337.         jmp     nextquad
  338.     .endif
  339.     pop     esi
  340.     ret
  341. CreateHEX endp
  342.  
  343.  
  344. CalcKey proc uses ecx edi esi   stroka:DWORD
  345.    
  346.     lea     eax, mkey
  347.     mov     ecx, 320
  348. @@:
  349.     mov     BYTE PTR [eax], 0h
  350.     inc     eax
  351.     loop    @b
  352.    
  353.     mov     eax, stroka
  354.     xor     ecx, ecx
  355.  
  356. @@:
  357.     cmp     BYTE PTR [eax], 0
  358.     jz      @f
  359.     inc     ecx
  360.     inc     eax
  361.     jmp     @b
  362. @@:
  363.     mov     lengh, cl
  364.     lea     edi, mkey
  365.     mov     esi, stroka
  366.     rep     movsb
  367.    
  368.     mov     BYTE PTR [edi], 80h
  369.     lea     eax, mkey
  370.     add     eax, 3Eh
  371.     xor     ebx, ebx
  372.     mov     bl, lengh
  373.     shl     ebx, 3h
  374.     xchg    bl, bh
  375.     mov     WORD PTR [eax], bx
  376.     lea     edi, mkey
  377.     mov     ecx, 10h
  378. @@:
  379.     mov     eax,DWORD PTR [edi]
  380.     bswap   eax
  381.     mov     DWORD PTR [edi], eax
  382.     add     edi, 4h
  383.     loop    @b
  384.    
  385.     lea     eax,  mkey
  386.     mov     ebx, edi
  387.     sub     ebx, eax
  388.     shr     ebx, 2h
  389.     mov     eax, 50h
  390.     sub     eax, ebx
  391.    
  392. @@:
  393.     mov     ebx, DWORD PTR [edi-3*4h]
  394.     xor     ebx, DWORD PTR [edi-8*4h]
  395.     xor     ebx, DWORD PTR [edi-0Eh*4h]
  396.     xor     ebx, DWORD PTR [edi-10h*4h]
  397.     rol     ebx, 1
  398.     mov     DWORD PTR [edi], ebx
  399.     add     edi, 4
  400.     inc     ecx
  401.     .if ecx < eax
  402.         jmp     @b
  403.     .endif
  404.    
  405.     xor     ecx, ecx
  406.     mov     ebx, H0
  407.     mov     aav, ebx
  408.     mov     ebx, H1
  409.     mov     bbv, ebx
  410.     mov     ebx, H2
  411.     mov     ccv, ebx
  412.     mov     ebx, H3
  413.     mov     ddv, ebx
  414.     mov     ebx, H4
  415.     mov     eev, ebx
  416.    
  417.     mainloop:
  418.     cmp        ecx, 14h
  419.     jge        nf2
  420.  
  421.     invoke    f1, bbv, ccv, ddv
  422.     mov        eax, K1
  423.     mov        k, eax
  424.     jmp        ef
  425. nf2:
  426.     cmp        ecx, 28h
  427.     jge        nf3
  428.     invoke    f2, bbv, ccv, ddv
  429.     mov        eax, K2
  430.     mov        k, eax
  431.     jmp        ef
  432. nf3:
  433.     cmp        ecx, 3Ch
  434.     jge        nf4
  435.     invoke    f3, bbv, ccv, ddv
  436.     mov        eax, K3
  437.     mov        k, eax
  438.     jmp        ef
  439. nf4:
  440.     invoke    f2, bbv, ccv, ddv
  441.     mov        eax, K4
  442.     mov        k, eax
  443. ef:
  444.     lea        edi, mkey
  445.     xor        eax, eax
  446.     mov        eax, aav
  447.     rol        eax, 5
  448.     add        eax, ebx
  449.     add        eax, eev
  450.     add        eax, k
  451.     add        eax, DWORD PTR [edi+ecx*4]
  452.     mov        temp, eax
  453.    
  454.     mov        eax, ddv
  455.     mov        eev, eax
  456.    
  457.     mov        eax, ccv
  458.     mov        ddv, eax
  459.    
  460.     mov        eax, bbv
  461.     ror        eax, 2  
  462.     mov        ccv, eax
  463.    
  464.     mov        eax, aav
  465.     mov        bbv, eax
  466.    
  467.     mov        eax, temp
  468.     mov        aav, eax
  469.  
  470.     inc        ecx
  471.     .if        ecx == 80
  472.         jmp        exitmainloop
  473.     .endif
  474.     jmp        mainloop
  475. exitmainloop:
  476.  
  477.     mov        eax, H0
  478.     add        eax, aav
  479.     mov        tmpH0, eax
  480.    
  481.     mov        eax, H1
  482.     add        eax, bbv
  483.     mov        tmpH1, eax
  484.    
  485.     mov        eax, H2
  486.     add        eax, ccv
  487.     mov        tmpH2, eax
  488.    
  489.     mov        eax, H3
  490.     add        eax, ddv
  491.     mov        tmpH3, eax
  492.    
  493.     mov        eax, H4
  494.     add        eax, eev
  495.     mov        tmpH4, eax
  496.    
  497.     ret
  498. CalcKey endp
  499.  
  500. f1 proc bv:DWORD, cv:DWORD, dv:DWORD
  501.     mov     ebx, bv
  502.     and     ebx, cv
  503.     mov     edx, bv
  504.     not     edx
  505.     and     edx, dv
  506.     or      ebx, edx
  507.     ret
  508. f1 endp
  509.  
  510. f2 proc bv:DWORD, cv:DWORD, dv:DWORD
  511.     mov     ebx, bv
  512.     xor     ebx, cv
  513.     xor     ebx, dv
  514.     ret
  515. f2 endp
  516.  
  517. f3 proc bv:DWORD, cv:DWORD, dv:DWORD
  518.     mov     ebx, bv
  519.     and     ebx, cv
  520.     mov     edx, bv
  521.     and     edx, dv
  522.    
  523.     or      ebx, edx
  524.    
  525.     mov     edx, cv
  526.     and     edx, dv
  527.    
  528.     or      ebx, edx
  529.    
  530.     ret
  531. f3 endp
  532.  
  533. CheckSHA proc uses ecx edi esi origsha:DWORD, gensha:DWORD
  534.     mov     esi, origsha
  535.     mov     edi, gensha
  536.     mov     ecx, 5h
  537. @@:
  538.     mov     eax, DWORD PTR[esi]
  539.     .if eax != DWORD PTR[edi]
  540.         jmp     @f
  541.     .endif
  542.     add     esi, 4h
  543.     add     edi, 4h
  544.     loop    @b
  545.     mov     fflag, 1
  546.    
  547.     invoke lstrcpy, offset clearstring, offset string
  548.     invoke    PostMessage, hWintmp, WM_FINISH,NULL, NULL
  549. @@:
  550.     invoke  Counter, 0, offset itercount
  551.    
  552.     push    ebx
  553.     lea     ebx, itercount
  554.     add     ebx, 20h
  555. @@:
  556.     .if     BYTE PTR [ebx-1h] == 0
  557.         jmp     @f
  558.     .endif
  559.     dec     ebx
  560.     jmp     @b
  561. @@:
  562.     invoke  SetDlgItemText, hWintmp, COUNTEDIT, ebx
  563.     pop ebx
  564.    
  565.     ret
  566. CheckSHA endp
  567.  
  568. Counter proc uses edi eax ebx recur:DWORD, countaddr:DWORD
  569.     mov edi, countaddr
  570.     add edi, 20h
  571.    
  572.     .if BYTE PTR [edi] == 0
  573.         .if     recur == 0
  574.             mov     BYTE PTR [edi], 30h
  575.         .elseif
  576.             mov     BYTE PTR [edi], 31h
  577.         .endif
  578.     .elseif BYTE PTR [edi] == 39h
  579.         mov     eax, recur
  580.         inc     eax
  581.         mov     ebx, countaddr
  582.         dec     ebx
  583.         invoke  Counter, eax, ebx
  584.         mov     BYTE PTR [edi], 30h
  585.     .elseif
  586.         inc     BYTE PTR [edi]
  587.     .endif
  588.     ret
  589. Counter endp
  590.    
  591. end start
Add Comment
Please, Sign In to add comment