.Dd Jan 24, 2024 .Dt RZ_GG 1 .Sh "نام (NAME)" .Nm rz-gg .Nd رابط rizin برای RzEgg، کامپایل برنامه‌ها به باینری‌های بسیار کوچک برای معماری‌های مختلف. .Sh "خلاصه دستور (SYNOPSIS)" .Nm rz-gg .Op Fl FOLsrxvhz .Op Fl a Ar arch .Op Fl b Ar bits .Op Fl k Ar os .Op Fl f Ar format .Op Fl o Ar file .Op Fl i Ar shellcode .Op Fl I Ar path .Op Fl e Ar encoder .Op Fl B Ar hexpairs .Op Fl c Ar k=v .Op Fl C Ar file .Op Fl n Ar dword .Op Fl N Ar dword .Op Fl d Ar off:dword .Op Fl D Ar off:qword .Op Fl w Ar off:hexpairs .Op Fl p Ar padding .Op Fl P Ar size .Op Fl q Ar fragment .Ar file|f.asm|- .Sh "توضیحات (DESCRIPTION)" این دستور بخشی از پروژه Rizin است. .Pp برنامه‌های تولیدشده توسط RzEgg جابه‌جایی‌پذیر (relocatable) هستند و می‌توانند به یک فرایند در حال اجرا یا یک فایل باینری روی دیسک تزریق شوند. .Pp از زمان ادغام rz-gg-cc، اکنون rz-gg می‌تواند از کد C شل‌کد (shellcode) تولید کند. کد نهایی می‌تواند با rz-bin پیوند زده شود و جابه‌جایی‌پذیر است، که اجازه تزریق به هر فرایند راه دور را می‌دهد. این قابلیت از نظر مفهومی بر پایه shellforge4 است، اما فقط از بسترهای Linux/OSX x86-32/64 پشتیبانی می‌کند. .Sh "دستورالعمل‌ها (DIRECTIVES)" .Pp فایل پیکربندی rrz (rz-gg) دستورالعمل‌های زیر را می‌پذیرد که به‌صورت مدخل‌های key=value شرح داده شده‌اند و کامنت‌ها خطوطی هستند که با '#' آغاز می‌شوند. .Bl -tag -width Fl .It Fl a Ar arch انتخاب معماری (x86, mips, arm) .It Fl b Ar bits تنظیم اندازه ثبات (32, 64, ..) .It Fl B Ar hexpairs الحاق بایت‌های جفت‌هگز (hexpair) .It Fl c Ar k=v تنظیم گزینه پیکربندی برای رمزگذار shellcode. آرگومان باید به‌صورت key=value باشد .It Fl C Ar file الحاق محتویات فایل .It Fl d Ar off:dword وصله‌کردن dword (۴ بایت) در افست مشخص‌شده .It Fl D Ar off:qword وصله‌کردن qword (۸ بایت) در افست مشخص‌شده .It Fl e Ar encoder استفاده از رمزگذار مشخص. به -L مراجعه کنید .It Fl f Ar format قالب خروجی (raw, c, pe, elf, mach0, python, javascript) .It Fl F خروجی با قالب بومی سیستم (osx=mach0, linux=elf, ..) .It Fl h نمایش پیام راهنمای استفاده .It Fl i Ar shellcode شامل‌کردن افزونه shellcode، استفاده از گزینه‌ها. به -L مراجعه کنید .It Fl I Ar path افزودن مسیر include .It Fl k Ar kernel کرنل سیستم‌عامل (linux, bsd, osx, w32) .It Fl L فهرست کردن تمام افزونه‌ها (shellcodeها و encoderها) .It Fl n Ar num32 الحاق عدد ۳۲ بیتی (۴ بایت) .It Fl N Ar num64 الحاق عدد ۶۴ بیتی (۸ بایت) .It Fl o Ar file فایل خروجی برای نوشتن نتیجه کامپایل .It Fl O استفاده از فایل خروجی پیش‌فرض (نام فایل بدون پسوند یا a.out) .It Fl p Ar padding افزودن فاصله‌گذاری پس از کامپایل (padding=n10s32) ntas : آغاز با دنباله nop، trap، 'a' NTAS : همانند بالا، اما در انتها .It Fl P Ar size افزودن دنباله دبروین (debruijn) با طول مشخص به ابتدا .It Fl q Ar fragment افست الگوی دبروین (debruijn) .It Fl r نمایش بایت‌های خام به‌جای جفت‌های هگز .It Fl s نمایش کد اسمبلی .It Fl S Ar string الحاق یک رشته .It Fl v نمایش اطلاعات نسخه .It Fl w Ar off:hex وصله‌کردن جفت‌های هگز در افست مشخص‌شده .It Fl x اجرا .It Fl X Ar hexpairs اجرای زنجیره ROP، با استفاده از پشته ارائه‌شده .It Fl z خروجی با ساختار نحوی رشته در C .El .Sh "مثال‌ها (EXAMPLES)" .Pp $ cat hi.r /* hello world in RzEgg */ write@syscall(4); //x64 write@syscall(1); exit@syscall(1); //x64 exit@syscall(60); .Pp main@global(128) { .var0 = "hi!\\n"; write(1,.var0, 4); exit(0); } $ rz-gg \-O \-F hi.r $ ./hi hi! .Pp # همراه با فایل C: $ cat hi.c main() { write(1, "Hello\\n", 6); exit(0); } $ rz-gg -O -F hi.c .Pp $ ./hi Hello .Pp # پیوند داده شده در یک باینری بسیار کوچک. این ۱۶۵ بایت است $ wc \-c < hi 165 .Pp # شل‌کد کامپایل‌شده حاوی بایت‌های صفر است $ rz-gg hi.c | tail -1 eb0748656c6c6f0a00bf01000000488d35edffffffba06000000b8010 000000f0531ffb83c0000000f0531c0c3 .Pp # برای دور زدن، از یک رمزگذار xor با کلید ۶۴ استفاده کنید $ rz-gg \-e xor \-c key=64 \-B $(rz-gg hi.c | tail -1) 6a2d596a405be8ffffffffc15e4883c60d301e48ffc6e2f9ab4708252 c2c2f4a40ff4140404008cd75adbfbfbffa46404040f8414040404f45 71bff87c4040404f45718083 .Sh "همچنین ببینید (SEE ALSO)" .Pp .Xr rizin(1) , .Xr rz-hash(1) , .Xr rz-find(1) , .Xr rz-bin(1) , .Xr rz-find(1) , .Xr rz-diff(1) , .Xr rz-asm(1) , .Sh "نویسندگان (AUTHORS)" .Pp pancake .Pp byteninjaa0