Werewolves of Miller’s Hollow Roles

Werewolves

Each night, the werewolves pick 1 (this can change with the Personnages expansion pack) player to kill. The victim can be anyone except the Moderator, including other werewolves. The next day, they pretend to be a villager and try to seem unsuspicious. The number of werewolves in a game varies depending on the number of players.

Villagers

They don’t have any special power except thinking and the right to vote.

Seer/ Fortune Teller/ Oracle

Each night, they can discover the real identity of a player. They must help the other villagers but discreetly to not be found by werewolves.

Hunter

If they are killed by werewolves or eliminated by vote, they must immediately kill another player of their choice.

Cupido

The first night, Cupid chooses 2 players and make them fall in love, then becomes a villager. If one dies, the other dies too. A lover can’t vote against the other lover. If the lovers are a villager and a werewolf, their objective changes; they must eliminate all the players except them.

Witch

She has two potions:

  • one to save the werewolves’s victim
  • one to eliminate a player

She can only use each potion once during the game. She can use both potions during the same night. She can save herself if she has been attacked by the werewolves on the first night.

Little Girl

The little girl can secretly look at the werewolves during their turn. If she is caught in the act, she dies instead of the victim. Because she will be scared to death, or depending on how you play the werewolves will kill her later on in the game. It is also possible for her to die immediately along with the victim and can not be saved.

Sheriff/Captain

This card is given to a player besides their card. They are elected by a vote. This player’s vote counts for two instead of one. If they die, they will decide who will be the next Sheriff/Chief. The Sheriff/Chief can be of any role, including a werewolf.

Thief

If the thief is played, two cards more than the number of players need to be played. After each player receives a card, the two cards are put in the center of the table. The thief can,they want to, during the first night, exchange their cards with one of those cards that they will play until the end of the game. If the two cards are werewolf, the thief has to take one of the two werewolf cards, until the end of the game.

Game’s turns

1st Night Only

  • Thief
  • Cupid
  • Lovers

Every night

  • Werewolves
  • Little Girl
  • Seer
  • Witch

Hex/Binary/Base64

Base64 table[edit]

The Base64 index table:

IndexBinaryCharIndexBinaryCharIndexBinaryCharIndexBinaryChar
0000000A16010000Q32100000g48110000w
1000001B17010001R33100001h49110001x
2000010C18010010S34100010i50110010y
3000011D19010011T35100011j51110011z
4000100E20010100U36100100k521101000
5000101F21010101V37100101l531101011
6000110G22010110W38100110m541101102
7000111H23010111X39100111n551101113
8001000I24011000Y40101000o561110004
9001001J25011001Z41101001p571110015
10001010K26011010a42101010q581110106
11001011L27011011b43101011r591110117
12001100M28011100c44101100s601111008
13001101N29011101d45101101t611111019
14001110O30011110e46101110u62111110+
15001111P31011111f47101111v63111111/
Padding=

https://en.wikipedia.org/wiki/Base64

UTF8 – Hex

U+0021!21EXCLAMATION MARK
U+002222QUOTATION MARK
U+0023#23NUMBER SIGN
U+0024$24DOLLAR SIGN
U+0025%25PERCENT SIGN
U+0026&26AMPERSAND
U+002727APOSTROPHE
U+0028(28LEFT PARENTHESIS
U+0029)29RIGHT PARENTHESIS
U+002A*2aASTERISK
U+002B+2bPLUS SIGN
U+002C,2cCOMMA
U+002D2dHYPHEN-MINUS
U+002E.2eFULL STOP
U+002F/2fSOLIDUS
U+0030030DIGIT ZERO
U+0031131DIGIT ONE
U+0032232DIGIT TWO
U+0033333DIGIT THREE
U+0034434DIGIT FOUR
U+0035535DIGIT FIVE
U+0036636DIGIT SIX
U+0037737DIGIT SEVEN
U+0038838DIGIT EIGHT
U+0039939DIGIT NINE
U+003A:3aCOLON
U+003B;3bSEMICOLON
U+003C<3cLESS-THAN SIGN
U+003D=3dEQUALS SIGN
U+003E>3eGREATER-THAN SIGN
U+003F?3fQUESTION MARK
U+0040@40COMMERCIAL AT
U+0041A41LATIN CAPITAL LETTER A
U+0042B42LATIN CAPITAL LETTER B
U+0043C43LATIN CAPITAL LETTER C
U+0044D44LATIN CAPITAL LETTER D
U+0045E45LATIN CAPITAL LETTER E
U+0046F46LATIN CAPITAL LETTER F
U+0047G47LATIN CAPITAL LETTER G
U+0048H48LATIN CAPITAL LETTER H
U+0049I49LATIN CAPITAL LETTER I
U+004AJ4aLATIN CAPITAL LETTER J
U+004BK4bLATIN CAPITAL LETTER K
U+004CL4cLATIN CAPITAL LETTER L
U+004DM4dLATIN CAPITAL LETTER M
U+004EN4eLATIN CAPITAL LETTER N
U+004FO4fLATIN CAPITAL LETTER O
U+0050P50LATIN CAPITAL LETTER P
U+0051Q51LATIN CAPITAL LETTER Q
U+0052R52LATIN CAPITAL LETTER R
U+0053S53LATIN CAPITAL LETTER S
U+0054T54LATIN CAPITAL LETTER T
U+0055U55LATIN CAPITAL LETTER U
U+0056V56LATIN CAPITAL LETTER V
U+0057W57LATIN CAPITAL LETTER W
U+0058X58LATIN CAPITAL LETTER X
U+0059Y59LATIN CAPITAL LETTER Y
U+005AZ5aLATIN CAPITAL LETTER Z
U+005B[5bLEFT SQUARE BRACKET
U+005C\5cREVERSE SOLIDUS
U+005D]5dRIGHT SQUARE BRACKET
U+005E^5eCIRCUMFLEX ACCENT
U+005F_5fLOW LINE
U+0060`60GRAVE ACCENT
U+0061a61LATIN SMALL LETTER A
U+0062b62LATIN SMALL LETTER B
U+0063c63LATIN SMALL LETTER C
U+0064d64LATIN SMALL LETTER D
U+0065e65LATIN SMALL LETTER E
U+0066f66LATIN SMALL LETTER F
U+0067g67LATIN SMALL LETTER G
U+0068h68LATIN SMALL LETTER H
U+0069i69LATIN SMALL LETTER I
U+006Aj6aLATIN SMALL LETTER J
U+006Bk6bLATIN SMALL LETTER K
U+006Cl6cLATIN SMALL LETTER L
U+006Dm6dLATIN SMALL LETTER M
U+006En6eLATIN SMALL LETTER N
U+006Fo6fLATIN SMALL LETTER O
U+0070p70LATIN SMALL LETTER P
U+0071q71LATIN SMALL LETTER Q
U+0072r72LATIN SMALL LETTER R
U+0073s73LATIN SMALL LETTER S
U+0074t74LATIN SMALL LETTER T
U+0075u75LATIN SMALL LETTER U
U+0076v76LATIN SMALL LETTER V
U+0077w77LATIN SMALL LETTER W
U+0078x78LATIN SMALL LETTER X
U+0079y79LATIN SMALL LETTER Y
U+007Az7aLATIN SMALL LETTER Z

https://www.utf8-chartable.de/

Hacking 3/12

PART 1
uname = “Mufasa”
password = “Circle Of Life”
realm = “testrealm@host.com
nonce=”dcd98b7102dd2f0e8b11d0f600bfb0c093″
uri=”/dir/index.html”
nc=”00000001″ # note this is a string
cnonce=”0a4f113b”
 
ha1 = hashlib.md5((uname+’:’+realm+’:’+password).encode(‘utf-8’)).hexdigest()
ha2 = hashlib.md5((‘GET:’+uri).encode(‘utf-8’)).hexdigest()
response = hashlib.md5((ha1+’:’+nonce+’:’+nc+’:’+cnonce+’:auth:’+ha2).encode(‘utf8’)).hexdigest()
print(response)
PART 2
from string import ascii_letters, digits
import itertools
import sys
 
for len in range(1,8):
    for letters in itertools.product(ascii_letters+digits, repeat=len):
        guess=”.join(letters)
        if happy_result(guess):
            print(‘Password found:’, guess)
            sys.exit()
print(‘Epic fail! Try harder next time.’)

How Big is Infinity Video

MD5 Collision Example

d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70

and

d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f89 55ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5b d8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0 e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70
produce an MD5 collision.

Each of these blocks has MD5 hash 79054025255fb1a26e4bc422aef54eb4.

RSA Encryption

woE7ewVfwoAzbwXCgC5iMyRvBTvCgGBiOy4=
public key: e=5, n=133
import random
import base64

'''
Euclid's algorithm to determine the greatest common divisor
'''
def gcd(a,b):
    while b != 0:
        c = a % b
        a = b
        b = c
    return a

def egcd(a, b):
    if a == 0:
        return (b, 0, 1)
    g, y, x = egcd(b%a,a)
    return (g, x - (b//a) * y, y)

def modinv(a, m):
    g, x, y = egcd(a, m)
    if g != 1:
        raise Exception('No modular inverse')
    return x%m

def encrypt(plaintext,keypair):
    e,n = keypair

    # Encrypt the plaintext
    cipher = ''.join([chr(pow(ord(char),e,n)) for char in plaintext])
    # Encode the ciphertext so it's more readable/sharable
    encoded = base64.b64encode(cipher.encode('utf-8'))
    return str(encoded,'utf-8')

def decrypt(ciphertext,keypair):
    d,n = keypair

    # Decode the text to the original format
    decoded = base64.b64decode(ciphertext).decode('utf-8')
    # Decrypt it
    plain = (str(chr(pow(ord(char),d,n))) for char in decoded)
    return ''.join(plain)

def generate_keypair(p,q,e=None):
    n = p * q

    #Phi is the totient of n
    phi = (p-1)*(q-1)

    #Choose an integer e such that e and phi(n) are coprime
    if e is None:
        e = random.randrange(1, phi)

    #Use Euclid's Algorithm to verify that e and phi(n) are comprime
    g = gcd(e, phi)
    while g != 1:
        e = random.randrange(1, phi)
        g = gcd(e, phi)

    #Now find the multiplicative inverse of e and phi to generate the private key
    d = modinv(e, phi)

    return ((e,n),(d,n))

#Only run this part if we're not running as an imported module
if __name__ == '__main__':
    p = int(input("Enter prime number p: "))
    q = int(input("Enter prime number q: "))

    public, private = generate_keypair(p,q)

    print("Your public key is the number pair of (e=" +  str(public[0]) + ", n=" + str(public[1]) +").\n")
    print("Your private key is the number pair of (d=" +  str(private[0]) + ", n=" + str(private[1]) +").\n")

    s = input("Enter your message: ")
    encrypted = encrypt(s,public)

    print("Encrypted message: " + encrypted)
    decrypted = decrypt(encrypted,private)
    print("Decrypt: " + decrypted)