**Question 1: Finding Strings in `assignment1.exe`** - *Press `ALT + R` to get the search for referenced strings window*![[Pasted image 20240119172649.png]] **Question 2: Setting a Breakpoint** - *Setting the breakpoint* ![[Pasted image 20240119174417.png]] - *Entering my name* ![[Pasted image 20240119174049.png]] **Question 3: Reaching the Function Call** - *The entire function call* ![[Pasted image 20240120143415.png]] - *The Prolog* ![[Pasted image 20240120143506.png]] - *The Epilog* ![[Pasted image 20240120143439.png]] **Question 4: Modifying The Condition** - *The Jump To Modify* ![[Pasted image 20240120144410.png]] - *Current Behaviour* - The program checks if the user's input contains the word "password" using the `str` function - If "password" is **not** found, it jumps to a specific point (assignme.0040154A), which skips a function execution - *Conditional Jump with Modification* ![[Pasted image 20240120144749.png]] - *Modification* - To ensure the function always executes, regardless of the presence of "password": - Change the conditional jump instruction from `jnz` (jump if not zero) to `je` (jump if equal) - This creates an unconditional jump, always executing the function **Question 6: Snapshot of the Stack** - *Stack During Execution* ![[Pasted image 20240120151358.png]] - The stack shows many procedures being called by system and a few by user. Below is another example of the stack ![[Pasted image 20240120153449.png]] **Question 7: Showing the secret** - *With my name* - ![[Secret Name.png]] - *With `password`* - ![[Secret Password.png]] **Question 8: Finding Syscalls** - *stdcall* - ![[Pasted image 20240120152334.png]] - *fastcall* - ![[fastcall.png]] **Question 9: Analysis Bonus** - *Basic Operations of the Program* - The program first prompts the user to enter their name and stores it in a buffer. After that, it then greets the user and checks if the entered name contains the string "password". If the name includes "password", the program proceeds to reveal the secret. - *To Reveal the Secret* - To start, it prints the string "Your secret is ". Following that, it takes two arguments: One likely pointing to a string containing the secret (which I could not find) or data used to generate it (most likely this), and the other being a numerical value that modifies the secret characters. I think the value could be 8, or 12 (C in hex). After all of that, it iterates through each character of the secret string. *For each character, it adds a value based on the character's position and the numerical argument, and then prints the modified character*.