دسترسی نامحدود
برای کاربرانی که ثبت نام کرده اند
برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید
در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید
برای کاربرانی که ثبت نام کرده اند
درصورت عدم همخوانی توضیحات با کتاب
از ساعت 7 صبح تا 10 شب
دسته بندی: امنیت ویرایش: نویسندگان: Dennis Andriesse سری: ISBN (شابک) : 9781593279127 ناشر: No Starch Press سال نشر: 2018 تعداد صفحات: 460 زبان: English فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) حجم فایل: 33 مگابایت
کلمات کلیدی مربوط به کتاب تحلیل باینری عملی ابزارهای لینوکس خود را برای ابزار دقیق، تجزیه و تحلیل و جداسازی باینری بسازید: لینوکس، یونیکس، برنامه نویسی، مونتاژ: جداسازی قطعات
در صورت تبدیل فایل کتاب Practical Binary Analysis. Build Your Own Linux Tools for Binary Instrumentation, Analysis, and Disassembly به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.
توجه داشته باشید کتاب تحلیل باینری عملی ابزارهای لینوکس خود را برای ابزار دقیق، تجزیه و تحلیل و جداسازی باینری بسازید نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.
از آنجایی که بدافزار به طور فزایندهای خود را مبهم میکند و از تکنیکهای ضد تجزیه و تحلیل برای خنثی کردن تحلیل ما استفاده میکند، ما به روشهای پیچیدهتری نیاز داریم که به ما امکان میدهد آن پرده تیره را که برای دور نگه داشتن ما طراحی شده است بالا ببریم - تجزیه و تحلیل باینری میتواند کمک کند. هدف تمام تحلیلهای باینری تعیین (و احتمالاً اصلاح) ویژگیهای واقعی برنامههای باینری برای درک آنچه که واقعاً انجام میدهند، به جای آنچه ما فکر میکنیم باید انجام دهند، است. در حالی که مهندسی معکوس و جداسازی قطعات اولین گامهای حیاتی در بسیاری از اشکال تجزیه و تحلیل باینری هستند، چیزهای بیشتری برای آموختن وجود دارد. این راهنمای عملی به شما می آموزد که چگونه با موضوعات جذاب اما چالش برانگیز تجزیه و تحلیل و ابزار دقیق باینری مقابله کنید و به شما کمک می کند در زمینه ای که معمولاً فقط توسط گروه کوچکی از هکرهای متخصص تسلط می شود مهارت داشته باشید. در حین بررسی موضوعاتی مانند تزریق کد، جداسازی قطعات، تجزیه و تحلیل رنگ پویا و ابزار دقیق باینری، شما را از مفاهیم اولیه به روشهای پیشرفته میبرد. تحلیل باینری عملی که برای مهندسین امنیت، هکرها و کسانی که دانش اولیه C/C++ و x86-64 دارند نوشته شده است، به شما نحوه عملکرد برنامههای باینری را عمیقاً آموزش میدهد و به شما کمک میکند ابزارها و تکنیکهای مورد نیاز برای به دست آوردن کنترل و کنترل بیشتر را به دست آورید. بینش برنامه های باینری پس از تکمیل مقدمه ای بر فرمت های باینری پایه، نحوه تجزیه و تحلیل باینری ها را با استفاده از تکنیک هایی مانند زنجیره ابزار تجزیه و تحلیل باینری گنو/لینوکس، جداسازی قطعات، و تزریق کد یاد خواهید گرفت. سپس به پیاده سازی ابزارهای نمایه سازی با پین می روید و یاد می گیرید که چگونه ابزارهای تجزیه و تحلیل رنگ پویا خود را با libdft و ابزارهای اجرای نمادین با استفاده از Triton بسازید. شما یاد خواهید گرفت که چگونه: باینری های ELF و PE را تجزیه کنید و با libbfd یک لودر باینری بسازید از تکنیک های تجزیه و تحلیل جریان داده مانند ردیابی برنامه، برش و تجزیه و تحلیل رسیدن به تعاریف برای استدلال در مورد جریان زمان اجرا برنامه های خود استفاده کنید. باینری های ELF را با تکنیک هایی مانند تزریق کد انگلی و ویرایش هگز تغییر دهید با Capstone ابزار جداسازی سفارشی بسازید از ابزار دقیق باینری برای دور زدن ترفندهای ضد تحلیلی که معمولاً توسط بدافزارها استفاده می شود استفاده کنید برای شناسایی حملات ربایی کنترل و نشت داده ها از تجزیه و تحلیل لکه استفاده کنید از اجرای نمادین برای ساخت ابزارهای بهره برداری خودکار استفاده کنید با تمرینهایی در پایان هر فصل که به تقویت مهارتهای شما کمک میکند، از درک مونتاژ اولیه به انجام برخی از پیچیدهترین تحلیلها و ابزار دقیق باینری خواهید رفت. تجزیه و تحلیل باینری عملی آنچه را که برای کار موثر با برنامه های باینری و تبدیل دانش خود از درک اولیه به مهارت در سطح متخصص نیاز دارید به شما می دهد.
As malware increasingly obfuscates itself and applies anti-analysis techniques to thwart our analysis, we need more sophisticated methods that allow us to raise that dark curtain designed to keep us out—binary analysis can help. The goal of all binary analysis is to determine (and possibly modify) the true properties of binary programs to understand what they really do, rather than what we think they should do. While reverse engineering and disassembly are critical first steps in many forms of binary analysis, there is much more to be learned. This hands-on guide teaches you how to tackle the fascinating but challenging topics of binary analysis and instrumentation and helps you become proficient in an area typically only mastered by a small group of expert hackers. It will take you from basic concepts to state-of-the-art methods as you dig into topics like code injection, disassembly, dynamic taint analysis, and binary instrumentation. Written for security engineers, hackers, and those with a basic working knowledge of C/C++ and x86-64, Practical Binary Analysis will teach you in-depth how binary programs work and help you acquire the tools and techniques needed to gain more control and insight into binary programs. Once you’ve completed an introduction to basic binary formats, you’ll learn how to analyze binaries using techniques like the GNU/Linux binary analysis toolchain, disassembly, and code injection. You’ll then go on to implement profiling tools with Pin and learn how to build your own dynamic taint analysis tools with libdft and symbolic execution tools using Triton. You’ll learn how to: Parse ELF and PE binaries and build a binary loader with libbfd Use data-flow analysis techniques like program tracing, slicing, and reaching definitions analysis to reason about runtime flow of your programs Modify ELF binaries with techniques like parasitic code injection and hex editing Build custom disassembly tools with Capstone Use binary instrumentation to circumvent anti-analysis tricks commonly used by malware Apply taint analysis to detect control hijacking and data leak attacks Use symbolic execution to build automatic exploitation tools With exercises at the end of each chapter to help solidify your skills, you’ll go from understanding basic assembly to performing some of the most sophisticated binary analysis and instrumentation. Practical Binary Analysis gives you what you need to work effectively with binary programs and transform your knowledge from basic understanding to expert-level proficiency.
Brief Contents......Page 9
Contents in Detail......Page 11
Foreword......Page 19
Preface......Page 23
Acknowledgments......Page 25
Introduction......Page 27
What Is Binary Analysis, and Why Do You Need It?......Page 28
What Makes Binary Analysis Challenging?......Page 29
What's in This Book?......Page 30
Binary Format and Development Platform......Page 32
Code Sample and Virtual Machine......Page 33
Exercises......Page 34
Part I: Binary Formats......Page 35
Chapter 1: Anatomy of a Binary......Page 37
The Preprocessing Phase......Page 38
The Compilation Phase......Page 40
The Assembly Phase......Page 42
The Linking Phase......Page 43
Viewing Symbolic Information......Page 44
Another Binary Turns to the Dark Side: Stripping a Binary......Page 46
Looking Inside an Object File......Page 47
Examining a Complete Binary Executable......Page 49
Loading and Executing a Binary......Page 53
Summary......Page 55
Chapter 2: The ELF Format......Page 57
The Executable Header......Page 59
The e_ident Array......Page 60
The e_type, e_machine, and e_version Fields......Page 61
The e_flags Field......Page 62
The e_shstrndx Field......Page 63
Section Headers......Page 64
The sh_type Field......Page 65
The sh_link Field......Page 66
Sections......Page 67
The .text Section......Page 69
The .bss, .data, and .rodata Sections......Page 70
Lazy Binding and the .plt, .got, and .got.plt Sections......Page 71
The .rel.* and .rela.* Sections......Page 74
The .dynamic Section......Page 76
The .init_array and .fini_array Sections......Page 77
Program Headers......Page 78
The p_offset, p_vaddr, p_paddr, p_filesz, and p_memsz Fields......Page 80
Summary......Page 81
Chapter 3: The PE Format: A Brief Introduction......Page 83
The PE Signature, File Header, and Optional Header......Page 84
The PE File Header......Page 87
The Section Header Table......Page 88
Sections......Page 89
Padding in PE Code Sections......Page 90
Summary......Page 91
Chapter 4: Building a Binary Loader Using libbfd......Page 93
A Simple Binary-Loading Interface......Page 94
The Symbol Class......Page 97
Implementing the Binary Loader......Page 98
Initializing libbfd and Opening a Binary......Page 99
Parsing Basic Binary Properties......Page 101
Loading Symbols......Page 104
Loading Sections......Page 107
Testing the Binary Loader......Page 109
Summary......Page 111
Part II: Binary Analysis Fundamentals......Page 113
Chapter 5: Basic Binary Analysis in Linux......Page 115
Resolving Identity Crises Using file......Page 116
Using ldd to Explore Dependencies......Page 119
Viewing File Contents with xxd......Page 120
Parsing the Extracted ELF with readelf......Page 122
Parsing Symbols with nm......Page 125
Looking for Hints with strings......Page 128
Tracing System Calls and Library Calls with strace and ltrace......Page 130
Examining Instruction-Level Behavior Using objdump......Page 135
Dumping a Dynamic String Buffer Using gdb......Page 137
Summary......Page 139
Chapter 6: Disassembly and Binary Analysis Fundamentals......Page 141
Static Disassembly......Page 142
Linear Disassembly......Page 143
Recursive Disassembly......Page 144
Example: Tracing a Binary Execution with gdb......Page 148
Code Coverage Strategies......Page 151
Structuring Code......Page 155
Structuring Data......Page 162
Decompilation......Page 164
Intermediate Representations......Page 165
Fundamental Analysis Methods......Page 167
Binary Analysis Properties......Page 168
Control-Flow Analysis......Page 172
Data-Flow Analysis......Page 174
Effects of Compiler Settings on Disassembly......Page 178
Summary......Page 179
Bare-Metal Binary Modification Using Hex Editing......Page 181
Observing an Off-by-One Bug in Action......Page 182
Fixing the Off-by-One Bug......Page 185
A Heap Overflow Vulnerability......Page 189
Detecting the Heap Overflow......Page 191
Injecting an ELF Section: A High-Level Overview......Page 195
Using elfinject to Inject an ELF Section......Page 197
Calling Injected Code......Page 201
Entry Point Modification......Page 202
Hijacking Constructors and Destructors......Page 205
Hijacking GOT Entries......Page 208
Hijacking PLT Entries......Page 211
Redirecting Direct and Indirect Calls......Page 212
Summary......Page 213
Part III: Advanced Binary Analysis......Page 215
Chapter 8: Customizing Disassembly......Page 217
A Case for Custom Disassembly: Obfuscated Code......Page 218
Other Reasons to Write a Custom Disassembler......Page 221
Installing Capstone......Page 222
Linear Disassembly with Capstone......Page 224
Exploring the Capstone C API......Page 229
Recursive Disassembly with Capstone......Page 230
Introduction to Return-Oriented Programming......Page 239
Finding ROP Gadgets......Page 241
Summary......Page 247
Chapter 9: Binary Instruction......Page 249
Binary Instrumentation APIs......Page 250
Static vs. Dynamic Binary Instrumentation......Page 251
Static Binary Instrumentation......Page 252
The int 3 Approach......Page 253
The Trampoline Approach......Page 254
Architecture of a DBI System......Page 259
Introduction to Pin......Page 261
The Profiler's Data Structures and Setup Code......Page 263
Parsing Function Symbols......Page 266
Instrumenting Basic Blocks......Page 267
Instrumenting Control Flow Instructions......Page 269
Counting Instructions, Control Transfers, and Syscalls......Page 272
Testing the Profiler......Page 273
Introduction to Executable Packers......Page 277
The Unpacker's Data Structures and Setup Code......Page 279
Instrumenting Memory Writes......Page 281
Tracking Memory Writes......Page 282
Detecting the Original Entry Point and Dumping the Unpacked Binary......Page 284
Testing the Unpacker......Page 285
Summary......Page 289
Chapter 10: Principles of Dynamic Taint Analysis......Page 291
Defining Taint Sources......Page 292
Tracking Taint Propagation......Page 293
A Brief Overview of the Heartbleed Vulnerability......Page 294
Detecting Heartbleed Through Tainting......Page 295
Taint Granularity......Page 297
Taint Colors......Page 298
Taint Propagation Policies......Page 299
Overtainting and Undertainting......Page 300
Control Dependencies......Page 301
Shadow Memory......Page 302
Summary......Page 304
Introducing libdft......Page 305
Internals of libdft......Page 306
Taint Policy......Page 308
Using DTA to Detect Remote Control-Hijacking......Page 309
Checking Taint Information......Page 312
Taint Sources: Tainting Recieved Bytes......Page 314
Taint Sinks: Checking execve Arguments......Page 316
Detecting a Control-Flow Hijacking Attempt......Page 317
Circumventing DTA with Implicit Flows......Page 322
A DTA-Based Data Exfiltration Detector......Page 323
Taint Sources: Tracking Taint for Open Files......Page 325
Taint Sinks: Monitoring Network Sends for Data Exfiltration......Page 329
Detecting a Data Exfiltration Attempt......Page 330
Summary......Page 333
An Overview of Symbolic Execution......Page 335
Symbolic vs. Concrete Execution......Page 336
Variants and Limitations of Symbolic Execution......Page 339
Increasing the Scalability of Symbolic Execution......Page 345
Constraint Solving with Z3......Page 347
Proving Reachability of an Instruction......Page 348
Proving Validity of a Formula......Page 351
Modeling Constraints for Machine Code with Bitvectors......Page 353
Solving an Opaque Predicate Over Bitvectors......Page 355
Summary......Page 356
Chapter 13: Practical Symbolic Execution with Triton......Page 359
Introduction to Triton......Page 360
Maintaining Symbolic State with Abstract Syntax Trees......Page 361
Backward Slicing with Triton......Page 363
The Symbolic Configuration File......Page 366
Emulating Instructions......Page 368
Setting Triton's Architecture......Page 369
Computing the Backward Slice......Page 370
Using Triton to Increase Code Coverage......Page 372
Finding a Model for a New Path......Page 374
Testing the Code Coverage Tool......Page 378
Automatically Exploiting a Vulnerability......Page 381
The Vulnerable Program......Page 382
Finding the Address of the Vulnerable Call Site......Page 385
Building the Exploit Generator......Page 387
Getting a Root Shell......Page 393
Summary......Page 396
Part IV: Appendixes......Page 397
Appendix A: A Crash Course on x86 Assembly......Page 399
Assembly Instructions, Directives, Labels, and Comments......Page 400
Separation Between Code and Data......Page 401
Machine-Level Structure of x86 Instructions......Page 402
Register Operands......Page 403
Memory Operands......Page 405
Common x86 Instructions......Page 406
Implementing Conditional Jumps......Page 408
The Stack......Page 409
Function Calls and Function Frames......Page 410
Conditional Branches......Page 414
Loops......Page 415
Appendix B: Implementing PT_NOTE Overwriting Using libelf......Page 417
Data Structures Used in elfinject......Page 418
Initializing libelf......Page 419
Getting the Executable Header......Page 423
Finding the PT_NOTE Segment......Page 424
Injecting the Code Bytes......Page 425
Aligning the Load Addess for the Injected Section......Page 426
Overwriting the .note.ABI-tag Section Header......Page 427
Setting the Name of the Injected Section......Page 432
Overwriting the PT_NOTE Program Header......Page 434
Modifying the Entry Point......Page 436
Appendix D: Further Reading......Page 439
Disassembly Frameworks......Page 441
Binary Analysis Frameworks......Page 442
Standards and References......Page 443
Papers and Articles......Page 444
Books......Page 446
Index......Page 447