Exploit Development and Malware Analysis - Sam Bowne, Elizabeth Biddlecome, Kaitlyn Handelman, & Irvin Lemus - DCTLV2026
Name of Training: Exploit Development and Malware Analysis
Trainer(s): Sam Bowne, Elizabeth Biddlecome, Kaitlyn Handelman & Irvin Lemus
Dates: August 10-11, 2026
Time: 8:00 am to 5:00 pm
Venue: Las Vegas Convention Center
Cost: $3,000 (USD)
Short Summary:
Learn how to gain control of systems by injecting raw binary exploit code into vulnerable processes, on Linux and Windows systems. Learn Windows internals and how malware operates, in both EXE and DOT NET formats. This is a highly-hands-on workshop with brief demonstrations and explanations, and many projects and challenges for participants to perform.
Course Description:
Exploit Development: Learn how to take control of Windows and Linux servers running vulnerable software, in a hands-on CTF-style workshop. We begin with easy command injections and SQL injections, and proceed through binary exploits incuding buffer overflows on the stack and the heap, format string vulnerabilities, and race conditions. We will exploit 32-bit and 64-bit Intel systems, and also ARM-based systems.
Malware Analysis: Explore the structure of Windows executable files and the operating system itself, to better understand programs, services, malware, and defenses. Projects include: cheating at games, building malicious DLL libraries, stealing passwords from the API, building a keylogger, and debugging a driver. Tools used include FLARE-VM, pestudio, API Monitor, Visual Studio, OllyDbg, IDA Pro, Ghidra, and WinDbg.
Course Outline:
The workshop is structured as a series of challenges, with a live CTF-style scoreboard. We will demonstrate and explain each challenge, and then help particpants through them. Each challenge has an easy portion with complete instructions, so beginners can succeed, and harder tasks to challenge advanced participants.
All materials, including the running CTF scoreboard, are in the public domain and will remain available after the workshop for the participants to use.
Day 1: Exploit Development:
I: Why are exploits possible?
- The fundamental problem
- Data and code use the same bytes
- Code is processed by distinct modules
- A module passes data on to another module, losing context
- Developers make inaccurate assumptions about data structure
- Attackers send input which is accepted as data, but misunderstood by later modules and executed as code
- Command Injection
- User input used to construct a command line
- Router network test pages
- Injecting bash commands with a semicolon
- Injecting CMD commands on a vulnerable Windows web server form
- ImageMagick exploitation with injected commands in a crafted malicious image
- User input used to construct a command line
- SQL Injection
- User input included in a SQL command
- PHP operating correctly sends the command to a SQL server
- The SQL server operates correctly and executes the command
- Crafted code steals data
- Uploading a PHP shell to gain unlimited remote code execution
- User input included in a SQL command
- How programs use memory
- Memory segments: text, stack, and heap
- Registers
- Writing simple assembly code and stepping through it
- Memory segments: text, stack, and heap
- Compiling C code on Linux
- Using gcc to compile programs
- Using objdump and gdb to examine the compiled code
- Recognizing C constructs in assembly: loops, branches, library calls, and function calls
- Data storage: stack, heap, .data section, strings, and null terminators
- Stack frames, function prologue and epilogue
- Using gcc to compile programs
- Stack overflows on Linux
- Buffer overflow to change EIP and redirect execution within a program
- Using a debugger and breakpoints to understand the overflow
- Injecting shellcode
- Turning off stack protections
- Using a NOP sled
- Creating shellcode with msfvenom
- Types of shellcode: bind shell, reverse shell, metasploit
- The complete process of exploit development:
- Fuzzing to find a crash
- Analyzing the crash in a debugger to find the root cause
- Sending a nonrepeating pattern of characters to target the EIP
- Testing all bytes to identify bad characters
- Generating an encoded payload without bad characters
- Sending a complete exploit against a target in a debugger
- Adjusting the exploit to work outside the debugger
- Buffer overflow to change EIP and redirect execution within a program
- Heap overflows on Linux
- Heap usage and structure: linked lists
- malloc() and free()
- Heap overflow overwriting forward and reverse pointers
- free() crashes on an invalid write operation
- Attacker gains control of a single write operation
- Gaining code execution from a write: targeting the Procedure
- Targeting the Program Linkage Table (PLT)
- Heap usage and structure: linked lists
- Format string vulnerabilities
- Reading from the stack: information disclosure
- Writing with %n to cause denial of service
- Writing to the PLT to gain code execution
- Reading from the stack: information disclosure
- Hacking Windows EXEs with Immunity
- Running PuTTY in a debugger
- Finding stored strings
- Modifying code
- Saving changes
- Adding a new segment with LordPE
- Adding Trojan code
- Running PuTTY in a debugger
- Stack overflows on Windows
- Complete exploit development process for "vulnerable server"
- Understanding Windows defenses
- Compiling simple test cases with Visual C++ Build Tools
- Viewing security cookie implementation in IDA Pro
- Controlling Address Space Layout Randomization (ASLR)
- Using Immunity to exploit a buffer overflow without ASLR
- Viewing ASLR weaknesses: limited entropy and non-randomized segments
- Compiling simple test cases with Visual C++ Build Tools
- Overcoming Windows defenses
- Return-Oriented Programming (ROP) and why it works: the .text section does not randomize
- Using trampoline code to find the stack, defeating ASLR
- Constructing ROP chains with Mona to make Windows API calls
- Defeating Data Execution Prevention (DEP) with ROP chains
- Finding unprotected modules with Mona
- Using a heap spray to defeat ASLR
- Return-Oriented Programming (ROP) and why it works: the .text section does not randomize
- Exploiting the Structured Exception Handler (SEH) on Windows
- How Windows processes exceptions
- Finding an overflow that corrupts the SEH
- Using a stack pivot to find injected code
- Making a complete exploit with shellcode
- Overcoming SEHOP protection
- How Windows processes exceptions
- Exploiting 64-Bit Intel Systems
- 64-bit addressing: the swindle of 48 bits
- 64-bit registers
- Writing 64-bit assembly code
- Exploiting a buffer overflow on a 64-bit system
- 64-bit addressing: the swindle of 48 bits
- Exploiting ARM32 and ARM64 Systems
- ARM assembly code
- The different role of registers
- Using QEMU Raspberry Pi emulators
- Debugging on ARM
- Exploiting a stack overflow on ARM
- ARM assembly code
- Exploiting DOT NET software
- Writing DOT NET applications in Visual Studio
- Understanding the DOT NET runtime and Intermediate Language
- Reversing DOT NET with Reflector
- Reversing DOT NET games
- Writing DOT NET applications in Visual Studio
- Comparing Rust to C++
- Buffer overflows are eliminated
- Memory leaks are prevented
- Directory traversal and command injection are still possible
- Buffer overflows are eliminated
Day 2: Malware Analysis
- Basic static analysis of malware
- Using VirusTotal for an overview of its function
- Using PEview to see the structure of a PE file
- Identifying the development language with PEiD
- Identifying packers
- Extracting strings with BinText
- Identifying library usage with Dependency Walker
- Using VirusTotal for an overview of its function
- Packed code
- Using UPX to unpack a packed executable
- Building a custom version of UPX
- Manual unpacking with OllyDbg and pestudio
- Using UPX to unpack a packed executable
- Disassembly
- Using assembly language in the Jasmin emulator
- Disassembling with IDA Pro
- Recognizing C constructs in assembly code
- Disassembling and decompiling code with Ghidra
- Using assembly language in the Jasmin emulator
- Windows libraries
- Examining the Import Address Table (IAT)
- Repairing and rebuilding the IAT
- DLL hijacking with companion trojans
- Building a keylogger with Visual Studio
- Building a DLL proxy
- Stealing passwords with API Monitor
- Examining the Import Address Table (IAT)
- Debugging in user-land
- Modifying a windows EXE with OllyDbg
- Hacking minesweeper
- Source-level debugging
- Modifying a windows EXE with OllyDbg
- Debugging the kernel
- Examining Kernel structures with a single computer
- Kernel debugging with breakpoints and two machines
- Debugging a device driver
- Examining Kernel structures with a single computer
- Bootkits
- Bootkit analysis with Bochs
- Understanding the MBR and a malicious MBR
- Bootkit analysis with Bochs
- The .NET Framework
- Common Language Runtime
- Building .NET Apps in Visual Studio
- Reversing .NET apps with .NET Reflector and other tools
- Common Language Runtime
- Assembly language coding
- Basic coding
- Printing and simple debugging
- Using ASCII
- Debugging with gdb
- Using files
- Encryption with the Caesar cipher
- XOR encoding
- Basic coding
Difficulty Level:
Intermediate - The student has education and some experience in the field and familiarity with the topic being presented. The student has foundational knowledge that the course will leverage to provide practical skills on the topic.
Suggested Prerequisites:
Previous experience with C and assembly language is helpful but not required.
What Students Should Bring:
A laptop computer capable of running VMware virtual machines, with at lease 40 GB of available storage. A second monitor is helpful but not necessary.
What the Trainer Will Provide:
All course materials are freely available online and will remain so after the workshop ends.
Trainer(s) Bio:
Sam Bowne has been teaching computer networking and security classes at City College San Francisco since 2000. He has given talks and hands-on trainings at DEF CON, DEF CON China, Black Hat USA, HOPE, BSidesSF, BSidesLV, RSA, and many other conferences and colleges. He founded Infosec Decoded, Inc., and does corporate training and consulting for several Fortune 100 companies, on topics including Incident Response and Secure Coding.
Elizabeth Biddlecome is a consultant and instructor, delivering technical training and mentorship to students and professionals. She leverages her enthusiasm for architecture, security, and code to design and implement comprehensive information security solutions for business needs. Elizabeth enjoys wielding everything from soldering irons to cripting languages in cybersecurity competitions, hackathons,and CTFs.
Kaitlyn Handelman is an offensive security engineer at Amazon. Her focus is cybersecurity in space. In addition to traditional penetration testing, Kaitlyn works on physical devices and RF signals. In her free time, she enjoys ham radio, astronomy, and her cat, Astrocat.
Irvin Lemus, CISSP is the Director of Education and Training for Latin America at By Light IT Professional Services. Irvin has been in the field since 2006, involved with cybersecurity competitions since 2015 as a trainer, coach, and mentor. He has been teaching at community colleges since 2014. He describes himself as, "A professional troublemaker who loves hacking all the things."
Proficiency Exam Option:
This course has the option for a proficiency certificate add-on.
Students who earn 500 points on the CTF scoreboard will be eligible to receive a Certificate of Proficiency, demonstrating a deep understanding of memory usage, Windows internals, and raw binary code.
Please reach out to training@defcon.org for any questions related to the proficiency exam and certificate option.
Registration Terms and Conditions:
Trainings are refundable before July 11, 2026, minus a non-refundable processing fee of $250.
Between July 11, 2026 and August 5, 2026 partial refunds will be granted, equal to 50% of the course fee minus a processing fee of $250.
All trainings are non-refundable after August 5, 2026.
Training tickets may be transferred to another student. Please email us at training@defcon.org for specifics.
If a training does not reach the minimum registration requirement, it may be cancelled. In the event the training you choose is cancelled, you will be provided the option of receiving a full refund or transferring to another training (subject to availability).
Failure to attend the training without prior written notification will be considered a no-show. No refund will be given.
DEF CON Training may share student contact information, including names and emails, with the course instructor(s) to facilitate sharing of pre-work and course instructions. Instructors are required to safeguard this information and provide appropriate protection so that it is kept private. Instructors may not use student information outside the delivery of this course without the permission of the student.
By purchasing this ticket you agree to abide by the DEF CON Training Code of Conduct and the registration terms and conditions listed above.
Several breaks will be included throughout the day. Please note that food is not included.
All courses come with a certificate of completion, contingent upon attendance at all course sessions. Some courses offer an option to upgrade to a certificate of proficiency, which requires an additional purchase and sufficient performance on an end-of-course evaluation.