Сборный / Говнокод #28852 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
format pe console
include 'win32a.inc'
         sub esp,256
         mov edi,esp
         xor ebx,ebx
     cinvoke puts,.title
.nxt:cinvoke gets,edi
     cinvoke strlen,eax
        test eax,eax
          jz .ext
         mov ecx,eax
         mov eax,edi
        call hash
        test ebx,ebx
          jz .add
         mov ecx,ebx
         mov edi,esp
       repne scasd
         jnz .add
     cinvoke puts,.yes
     cinvoke sleep,1000
         jmp .nxt
.add:   push eax
         inc ebx
         mov ecx,eax
         mov eax,edi
        call get_hex
         mov eax,edi
     cinvoke puts,edi
         jmp .nxt
.ext:cinvoke exit,0
.title db 'get hash of string',0
.yes db '!!!hash found!!!',0
hash:   push ebx esi
         mov esi,eax
         mov eax,ecx
         xor edx,edx
         mov ecx,4
         div ecx
         mov ecx,eax
         xor eax,eax
         mov ebx,$03020100
.start: test ecx,ecx
          jz .finish
         add eax,[esi]
         add esi,4
         xor eax,ebx
         add ebx,$04040404
        loop .start
.finish:test edx,edx
          jz .exit
         cmp edx,1
          je .exit1
         add ax,[esi]
         xor ax,bx
         cmp edx,2
          je .exit
         add esi,2
         shr ebx,16
       bswap eax
         add ah,[esi]
         xor ah,bl
       bswap eax
         jmp .exit
.exit1:  add al,[esi]
         xor al,bl
.exit:   pop esi ebx
         ret
get_hex:push ebx edi
         mov edi,eax
         mov ebx,.hex
         mov edx,ecx
         mov ecx,4
       bswap edx
         cld
.next:   mov al,dl
         shr al,4
       xlatb
       stosb
         mov al,dl
         and al,$0F
       xlatb
       stosb
         shr edx,8
        loop .next
         xor al,al
       stosb
         mov eax,8
         pop edi ebx
         ret
.hex db '0123456789ABCDEF'
data import
  library msvcrt,'msvcrt.dll'
  import msvcrt,exit,'exit',puts,'puts',sleep,'_sleep',gets,'gets',strlen,'strlen'
end data

Приветствуем любителей накласть.
Понадобился алгоритм для нахождения хэша строки, наклали.
Пихает хэши в стэк и проверяет новые на совпадение со старыми.
У кого есть предложения по его улучшению милости просим!

Запостил: chiacorp chiacorp, (Updated )

Комментарии (12) RSS

  • > format pe console
    Это в пиздец.inc
    Ответить
    • fasm/nasm/yasm могут сразу генерировать экзешник без линкера, т. е. минуя объектный файл.
      Ответить
      • Этож не "без линкера", а "интегрированный линкер", cl или ml по-майковски.
        И выглядит как говно, директива даже не прагма.
        Что дальше? Иконки описывать?
        Ответить
        • Не совсем. cl и ml — это клей для вызова компилятора, а за ним линкера. Тут же линкер по-настоящему интегрированный, а не как у майков.

          Посмотри на 92-ю строчку. Тут даже импорт описывается.
          Ответить
          • > Тут даже импорт описывается
            Так это же просто мокросы. Выглядят вот так (INCLUDE/MACRO/IMPORT64.INC):
            ; Macroinstructions for making import section (64-bit)
            
            macro library [name,string]
             { common
                import.data:
               forward
                local _label
                if defined name#.redundant
                 if ~ name#.redundant
                  dd RVA name#.lookup,0,0,RVA _label,RVA name#.address
                 end if
                end if
                name#.referred = 1
               common
                dd 0,0,0,0,0
               forward
                if defined name#.redundant
                 if ~ name#.redundant
                  _label db string,0
            	     rb RVA $ and 1
                 end if
                end if }
            
            macro import name,[label,string]
             { common
                rb (- rva $) and 7
                if defined name#.referred
                 name#.lookup:
               forward
                 if used label
                  if string eqtype ''
                   local _label
                   dq RVA _label
                  else
                   dq 8000000000000000h + string
                  end if
                 end if
               common
                 if $ > name#.lookup
                  name#.redundant = 0
                  dq 0
                 else
                  name#.redundant = 1
                 end if
                 name#.address:
               forward
                 if used label
                  if string eqtype ''
                   label dq RVA _label
                  else
                   label dq 8000000000000000h + string
                  end if
                 end if
               common
                 if ~ name#.redundant
                  dq 0
                 end if
               forward
                 if used label & string eqtype ''
                 _label dw 0
            	    db string,0
            	    rb RVA $ and 1
                 end if
               common
                end if }
            
            macro api [name] {}
            Ответить
            • Импорт возможно полностью ручками описать, но в ограничение кода 100 строк не влезаем.
              Изначально использовался чистый WinApi не влезли, пришлось юзать сишную либу.
              Ответить
    • Завязались из-за ограничения по количеству строк, изначально на WinApi!
      Ответить
  • Когда я писал, что асмопроги юзают msvcrt.dll, на меня вылили содержимое ведёрной параши. Надеюсь, прочитав этот пост, заблудшие покинут свой плен.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8