Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cns:sidebar [2014/11/02 09:15]
vlad.dumitrescu
cns:sidebar [2017/01/28 16:44] (current)
razvan.deaconescu
Line 1: Line 1:
-{{indexmenu>:​cns:#​1 | nons}}+{{indexmenu>:​cns:#​1|nons ​skipfile+/​cns:​(sidebar|index)/​}} 
 +<​hidden>​ 
 +  * [[:​cns:​index|Index]] 
 +</​hidden>​ 
 + 
 +====== Resources ====== 
 + 
 +{{indexmenu>:​cns:​resources#​1}}
  
 ====== Labs ====== ====== Labs ======
Line 13: Line 20:
 {{indexmenu>:​cns:​assignments#​1}} {{indexmenu>:​cns:​assignments#​1}}
  
-==== 1: GDB ====+====== Extra ======
  
-The purpose of this task is to explore GDB, and automate a debugging session. You are encouraged to use the [[http://​sourceware.org/​gdb/​current/​onlinedocs/​gdb/​|GDB User Manual]], and what you learned during the previous lab sessions. We recommend that you start solving each subtask in a live debugging session, and then assemble the final script that will be submitted to vmchecker.+{{indexmenu>​:cns:​extra#​1}}
  
-The given binary computes the SHA-1 hash of some input, but if you send him a signal at the right time, it will also compute a special hash. Write a GDB script/​commands file that goes through the following steps (you can add more interesting step if you fell like it):  
-  - when data to be hashed is being requested, a ''​read()''​ syscall will be issued, catch it 
-  - break execution right before ''​compute_hash()''​ is called (you should now be in ''​main()'''​s stack frame) 
-  - print the 5 instructions before the current instruction pointer 
-  - you will discover there is a special, or "​reversed hash" mode, break execution on ''​printf''​ calls while in this mode 
-    * print current frame and the EIP register each time this breakpoint triggers 
-  - break on ''​malloc''​ calls 
-    * print the return value after ''​malloc''​ finishes 
-  - break in ''​compute_hash()''​ after ''​malloc''​ call 
-    * print the stack, the registers and the last 3 frames 
-  - move to the previous frame, and print registers 
-  - move back, and print locals and arguments 
-  - remove all breakpoints,​ catchpoints and watchpoints 
-  - __rerun__, but break before the entry point and add the following 
-  - add watchpoints for hash mode changes 
-  - send the required signal 
-  - __rerun__, but this time, trigger the mode change without sending the signal 
-  - break somewhere 
-    * print the memory where the intro message is held in hex 
-  - __rerun__ 
-  - break in ''​main()''​ after ''​compute_hash()''​ 
-    * print the heap section holding the hash in hex 
-  - __rerun__ 
-  - trigger the mode change (with signal or not) 
-  - break just before main has finished 
-  - get the hash from stdout; find it in memory using GDB (you can call, from GDB, a small shell/​Python script to make format conversions) 
- 
-====== Resources ====== 
- 
-{{indexmenu>:​cns:​resources#​1}} 
cns/sidebar.1414912515.txt.gz · Last modified: 2014/11/02 09:15 by vlad.dumitrescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0