CTE v2 (2026) - Le Vault
CTE v2 (2026) - Le Vault
This challenge begins with some OSINT where we need to find a program protected by password. This program is used by Melanie’s friend, Samir Taleb.
NB. These are fake identities used all along “Capture The Evidence” v2.
Then, we’ll need to provide the author’s name of this challenge as flag.
The tags of the challenge suggest there’s a part with OSINT (first part) and a part with Reverse (second part).
OSINT
We know from previous investigations in other challenges that Samir owns the following accounts:
| Plateforme | URL |
|---|---|
| X/Twitter | https://x.com/samirtaleb75 |
| Bluesky | https://bsky.app/profile/samirtaleb75.bsky.social |
| https://www.facebook.com/profile.php?id=61583227872259 |
We’d typically find a program on a GitHub, GitLab, Gist, or Pastebin.
We find a GitHub repo samirtaleb13-ops, but it has a single repository “Rapide” which is HTML/JS code. This does not seem interesting at all and might be a totally different Samir Taleb (not related to CTE).
After a (long) time, we finally spot the GitHub account samir-taleb with a promising repository “The Vault”.

Why did it take us so much time to find
samir-taleb? We usesherlock,maigretbut it seems we only search forsamirtaleb75as he was using this for all his accounts so far…
Decrypting the ZIP
The ZIP is password protected, but from previous analysis of Samir’s BlueSky posts, we have already decrypted one of his favorite passwords:

| |
How did you guess it was a85 decode? To be honest, I did not: my LLM did. The characters are unusual for Base64 alone. Typically, we’d try Base 64, Base 32, Base 85 and Ascii 85.
The password decodes as mélanie4ever, and it decrypts the ZIP.
| |
Pyarmor
The project is protected by Pyarmor 9.2.4 trial:
| |
Pyarmor turns the Python code in binary data. This data is decrypted at runtime by pyarmor_runtime.so.
We use Pyarmor Static Unpack One-Shot Tool to reverse statically the code.
| |
It produces 3 files: vault.py.1shot.seq, vault.py.1shot.das and vault.py.1shot.cdc.py. The last one contains the decompiled Python file. It is not perfect, but quite good:
| |
Reconstructing the Python code
In the code above, we have all the important parts:
- a key
- a salt
- an encrypted banner
- an encrypted password
- a list of plaintext secrets (maybe useful for a future challenge?)
The source code for xor_string() is incomplete.
The source code for decrypt() is incomplete too but from this call return None(None(xor_string, None(xor_string, data, salt), key).decode, 'utf-8'), we clearly understand we have 2 XORs. The first one with the salt, the second one with the key.
Finally, the main() is incomplete too, but it looks like it just reads the password from a user prompt and calls the decrypt function.
Decrypting the password and the banner
It looks like the vault’s password is:
- XOR encrypted password with
S4ltY_V4lu3 - then XOR with
Sup3rS3cr3tK3y
Let’s write a Python program for that (and no, this is not AI-generated, it’s manual + copy/paste from the decompiled output we got):
| |
We run that and get the password 04072004 (this is Melanie’s birthday) and author’s sname, Samir (oh surprise :D).
| |
Conclusion and flag
The flag is TALEB. This is slightly disappointing because we could have guessed that without doing the reverse engineering: it’s on Samir’s repository and clearly implemented by him.
To force the player to do all the job, I would have encrypted the secrets. For example the Swiss Bank account. To make it even harder, I would have selected a longer/not guessable password, because Melanie’s birth date is known and a lucky player can try it as password and get all the information without a single reverse.
That being said, if you chose to do the challenge to learn and not to flag quickly, it was really interesting. I was happy to look into Pyarmor and defeat it.