فرآیند سوء استفاده از رخنه‌های موجود در یک نرم‌افزار است تا بتوان برنامه را وادار به انجام عملکردهایی کرد که برای آن طراحی نشده است. برای بهره‌برداری از این رخنه‌ها معمولاً ابتدا به مهندسی معکوس برنامه نیاز داریم. معمولاً فرآیند حل تمام چالش‌های pwn با مهندسی معکوس برنامه آغاز می‌شود تا بتوان نقص‌های موجود در برنامه را کشف کرد. به عنوان مثال، اگر memory corruption را در نظر بگیریم، با سوءاستفاده از آسیب‌پذیری‌هایی که موجب خرابی حافظه در نرم‌افزار می‌شوند، می‌توانیم اطلاعات مهم وضعیت (state) برنامه را به گونه‌ای بازنویسی کنیم که امتیاز دسترسی ما در بستر برنامه افزایش یابد (مانند دسترسی از راه دور در سرور) و یا با ربودن جریان کنترل (control flow) و اجرای کد دلخواه، محاسبات مد نظر خود را انجام دهیم. به محض اینکه یک آسیب‌پذیری شناسایی شد، باید از آن برای تسخیر برنامه استفاده شود. راه‌های مختلفی برای دستیابی به این هدف وجود دارد. برای برنامه‌هایی مانند web server، دستیابی به اطلاعات از طریق کاربر دیگر می‌تواند هدف نهایی باشد. در موارد دیگر، تغییر مجوزهای دسترسی می‌تواند کمک‌کننده باشد، به عنوان مثال، تغییر مجوزهای دسترسی یک کاربر معمولیِ لوکال به کاربر administrator.