RZ_GG(1) General Commands Manual RZ_GG(1)

rz-gg — رابط rizin برای RzEgg، کامپایل برنامه‌ها به باینری‌های بسیار کوچک برای معماری‌های مختلف.

rz-gg [-FOLsrxvhz] [-a arch] [-b bits] [-k os] [-f format] [-o file] [-i shellcode] [-I path] [-e encoder] [-B hexpairs] [-c k=v] [-C file] [-n dword] [-N dword] [-d off:dword] [-D off:qword] [-w off:hexpairs] [-p padding] [-P size] [-q fragment] file|f.asm|-

این دستور بخشی از پروژه Rizin است.

برنامه‌های تولیدشده توسط RzEgg جابه‌جایی‌پذیر (relocatable) هستند و می‌توانند به یک فرایند در حال اجرا یا یک فایل باینری روی دیسک تزریق شوند.

از زمان ادغام rz-gg-cc، اکنون rz-gg می‌تواند از کد C شل‌کد (shellcode) تولید کند. کد نهایی می‌تواند با rz-bin پیوند زده شود و جابه‌جایی‌پذیر است، که اجازه تزریق به هر فرایند راه دور را می‌دهد. این قابلیت از نظر مفهومی بر پایه shellforge4 است، اما فقط از بسترهای Linux/OSX x86-32/64 پشتیبانی می‌کند.

فایل پیکربندی rrz (rz-gg) دستورالعمل‌های زیر را می‌پذیرد که به‌صورت مدخل‌های key=value شرح داده شده‌اند و کامنت‌ها خطوطی هستند که با '#' آغاز می‌شوند.

arch
انتخاب معماری (x86, mips, arm)
bits
تنظیم اندازه ثبات (32, 64, ..)
hexpairs
الحاق بایت‌های جفت‌هگز (hexpair)
k=v
تنظیم گزینه پیکربندی برای رمزگذار shellcode. آرگومان باید به‌صورت key=value باشد
file
الحاق محتویات فایل
off:dword
وصله‌کردن dword (۴ بایت) در افست مشخص‌شده
off:qword
وصله‌کردن qword (۸ بایت) در افست مشخص‌شده
encoder
استفاده از رمزگذار مشخص. به -L مراجعه کنید
format
قالب خروجی (raw, c, pe, elf, mach0, python, javascript)
خروجی با قالب بومی سیستم (osx=mach0, linux=elf, ..)
نمایش پیام راهنمای استفاده
shellcode
شامل‌کردن افزونه shellcode، استفاده از گزینه‌ها. به -L مراجعه کنید
path
افزودن مسیر include
kernel
کرنل سیستم‌عامل (linux, bsd, osx, w32)
فهرست کردن تمام افزونه‌ها (shellcodeها و encoderها)
num32
الحاق عدد ۳۲ بیتی (۴ بایت)
num64
الحاق عدد ۶۴ بیتی (۸ بایت)
file
فایل خروجی برای نوشتن نتیجه کامپایل
استفاده از فایل خروجی پیش‌فرض (نام فایل بدون پسوند یا a.out)
padding
افزودن فاصله‌گذاری پس از کامپایل (padding=n10s32)
ntas : آغاز با دنباله nop، trap، 'a'
NTAS : همانند بالا، اما در انتها
size
افزودن دنباله دبروین (debruijn) با طول مشخص به ابتدا
fragment
افست الگوی دبروین (debruijn)
نمایش بایت‌های خام به‌جای جفت‌های هگز
نمایش کد اسمبلی
string
الحاق یک رشته
نمایش اطلاعات نسخه
off:hex
وصله‌کردن جفت‌های هگز در افست مشخص‌شده
اجرا
hexpairs
اجرای زنجیره ROP، با استفاده از پشته ارائه‌شده
خروجی با ساختار نحوی رشته در C


$ cat hi.r
/* hello world in RzEgg */
write@syscall(4); //x64 write@syscall(1);
exit@syscall(1); //x64 exit@syscall(60);


main@global(128) {
.var0 = "hi!\n";
write(1,.var0, 4);
exit(0);
}
$ rz-gg -O -F hi.r
$ ./hi
hi!


# همراه با فایل C:
$ cat hi.c
main() {
write(1, "Hello\n", 6);
exit(0);
}
$ rz-gg -O -F hi.c


$ ./hi
Hello


# پیوند داده شده در یک باینری بسیار کوچک. این ۱۶۵ بایت است
$ wc -c < hi
165


# شل‌کد کامپایل‌شده حاوی بایت‌های صفر است
$ rz-gg hi.c | tail -1
eb0748656c6c6f0a00bf01000000488d35edffffffba06000000b8010
000000f0531ffb83c0000000f0531c0c3


# برای دور زدن، از یک رمزگذار xor با کلید ۶۴ استفاده کنید
$ rz-gg -e xor -c key=64 -B $(rz-gg hi.c | tail -1)
6a2d596a405be8ffffffffc15e4883c60d301e48ffc6e2f9ab4708252
c2c2f4a40ff4140404008cd75adbfbfbffa46404040f8414040404f45
71bff87c4040404f45718083

rizin(1), rz-hash(1), rz-find(1), rz-bin(1), rz-find(1), rz-diff(1), rz-asm(1),

pancake <pancake@nopcode.org>

byteninjaa0

January 24, 2024