/unravel

Deanonymize anonymous Users on Piazza Q&A.

Primary LanguagePythonMIT LicenseMIT

Unravel

Deanonymize anonymous posters on Piazza Q&A.




How does it work?

Unravel uses Piazza's API to deduce anonymous posters on Piazza classes. Keeping track of the class statistics, one can deduce the identity by just comparing two class statistics records taken before and after an anonymous post.

Unravel diffs two user statistics data of a given class. Each user in the first statistics gets compared with itself on the second statistics. If a difference is found, Unravel proceeds to diffing posts data of the class to find what was updated by the user.

It then prints out to stdout the change in posts data combined with the user info whose statistics were changed.

{'name': 'User 1', 'email': 'eralp@example.com'} {'cid': 24, 'content': '<p>Create a follow up.</p>', 'diff_type': 'followup', 'time': '2019-08-11T16:06:50Z'}

Fields in the result

  • cid: the CID of the modified post.
  • Content: Text change made by the anonymous user.
  • time: Change time.
  • diff_type: Categorizes the change made by the anonymous user. Can be one of the following:
'post_add' # New post added.
's_answer' # Student answer added.
's_answer_update' # Student answer updated.
'followup' # Created new follow up discussion entry.
'feedback' # Created new reply to a follow up discussion.

Usage

python unravel.py -u piazza_username -p piazza_password -c piazza_class_id
  • For command-line argument descriptions: python unravel.py -h
Piazza Post Deanonymzer.

optional arguments:
  -h, --help   show this help message and exit

Piazza Authentication:
  -u email     Piazza account email
  -p password  Piazza account password
  -c class_id  Class id from piazza.com/class/{class_id}

This is a work in progress, definitely buggy, proof of concept application. Any feedback is appreciated!