RZ_RUN(1) General Commands Manual RZ_RUN(1)

rz-run — ابزار rizin برای اجرای برنامه‌ها در محیط‌های سفارشی

rz-run [[directives]] [[script.rz]] [[--] [program] [args]]

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

این برنامه به عنوان یک اجراکننده (launcher) برای اجرای برنامه‌ها با متغیرهای محیطی، آرگومان‌ها، دسترسی‌ها، دایرکتوری‌ها و توصیف‌کننده‌های فایل (file descriptors) پیش‌فرض بازنویسی‌شدهٔ گوناگون به کار می‌رود.

فهرست کردن تمام گزینه‌های نمایه (profile) پشتیبانی‌شده.
تولید یک نمایه الگوی پایه. دستور rz-run -d > profile.rz را امتحان کنید
نمایش نام ترمینال و انتظار برای اتصال از فرآیندی دیگر. دستور rz-run stdio=<ttypath> program=/bin/sh را امتحان کنید

این برنامه تنها یک آرگومان می‌پذیرد که همان نام فایل پیکربندی برای اجرای برنامه است.

این ابزار زمانی سودمند است که بخواهید برنامه‌ای را با آرگومان‌های طولانی اجرا کنید یا داده‌های حجیمی را به stdin بفرستید، یا کارهای مشابهی که معمولاً برای اکسپلویت کردن کرک‌می‌ها (crackmes) نیاز است :)

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

arg[0-511]
تنظیم مقدار برای آرگومان N ارسالی به برنامه
aslr
فعال یا غیرفعال کردن ASLR
bits
تنظیم ۳۲ یا ۶۴ بیتی (در صورت پشتیبانی معماری)
chdir
تغییر دایرکتوری پیش از اجرای برنامه
chroot
اجرای برنامه در chroot؛ نیازمند برخی آماده‌سازی‌های قبلی است
core
نامحدود کردن اندازه فایل core
connect
اتصال stdin/stdout/stderr به یک سوکت
pty
استفاده از یک pty برای اتصال روی سوکت (به همراه connect/listen)
envfile
تعیین یک فایل حاوی خطوطی مانند `var=value` برای استفاده به عنوان متغیرهای محیطی
fork
به همراه گزینه listen استفاده می‌شود و اجازه می‌دهد برای هر اتصال یک فرآیند جداگانه ایجاد شود. هنگام اشکال‌زدایی (debugging) نادیده گرفته می‌شود.
input
تنظیم رشته‌ای که باید از طریق stdin به برنامه ارسال شود
libpath
بازنویسی مسیری که بارگذار پویا (dynamic loader) در آن به دنبال کتابخانه‌های اشتراکی می‌گردد
listen
پیوند دادن stdin/stdout/stderr به یک سوکت شنودکننده (listening socket)
maxstack
تنظیم حداکثر اندازه برای پشته (stack)
maxproc
تنظیم حداکثر تعداد فرآیندها
maxfd
تنظیم حداکثر تعداد توصیف‌کننده‌های فایل (file descriptors)
nice
تنظیم سطح niceness (اولویت پردازش) فرآیند
preload
پیش‌بارگذاری یک کتابخانه (در Windows پشتیبانی نمی‌شود، فقط در linux، osx و bsd)
daemon
به طور پیش‌فرض روی false تنظیم شده است، در غیر این صورت برنامه در پس‌زمینه و جدا از ترمینال اجرا خواهد شد.
program
مسیر برنامه‌ای که باید اجرا شود
pid
تنظیم روی true برای چاپ PID فرآیند در stderr
pidfile
چاپ PID فرآیند در فایل مشخص‌شده
runlib
مسیر کتابخانه‌ای که باید اجرا شود
runlib.fcn
نام تابعی که باید از کتابخانه runlib فراخوانی شود
rzpreload
پیش‌بارگذاری با librz؛ ارسال سیگنال kill -USR1 برای دریافت شل rizin یا -USRZ برای ایجاد یک وب‌سرور درون یک ریسه (thread)
setenv
تنظیم مقدار برای متغیر محیطی داده‌شده
setegid
تنظیم شناسه گروه فرآیند مؤثر (effective group ID)
seteuid
تنظیم شناسه کاربر فرآیند مؤثر (effective user ID)
setgid
تنظیم شناسه گروه فرآیند (group ID)
setuid
تنظیم شناسه کاربر فرآیند (user ID)
sleep
خوابیدن (توقف موقت) به تعداد ثانیه‌های مشخص‌شده
stdio=value
تنظیم جریان‌های ورودی/خروجی (stdin، stdout، stderr) روی یک مقدار
stdio=!cmd
هدایت ورودی/خروجی به فرآیند ایجادشده توسط دستور مشخص‌شده
stdin
تنظیم جریان‌های stdin، stdout و stderr روی مقدار مشخص‌شده
stdout
انتخاب فایل برای جایگزینی توصیف‌کننده فایل stdout
stderr
انتخاب فایل برای جایگزینی توصیف‌کننده فایل stderr
system
اجرای دستور داده‌شده
timeout
تنظیم زمان انقضا (timeout)
timeoutsig
سیگنالی که هنگام پایان مهلت زمانی (timeout) برای خاتمه دادن به فرآیند فرزند استفاده می‌شود
unsetenv
حذف یک متغیر محیطی

هر مقدار در این فایل پیکربندی می‌تواند دارای یک پیشوند خاص باشد:

@filename
خواندن کل محتوای فایل و قرار دادن آن درون مقدار کلید
text
کاراکترهای گریز (escape)، مناسب برای کاراکترهای هگزادسیمال
'string'
کاراکترهای گریز (escape)، مناسب برای کاراکترهای هگزادسیمال
!cmd
اجرای دستور برای ذخیره کردن خروجی آن در متغیر
:102030
تجزیه رشته جفت‌های هگز (hexpair) و ذخیره آن در متغیر
:!cmd
تجزیه رشته جفت‌های هگز از خروجی دستور و ذخیره آن در متغیر
%1234
رشته ورودی را تجزیه کرده و آن را به عنوان یک عدد صحیح برمی‌گرداند

نمونه اسکریپت rz-run


$ cat foo.rrz
#!/usr/bin/rz-run
program=./pp400
arg0=10
stdin=foo.txt
chdir=/tmp
clearenv=true
setenv=EGG=eggsy
setenv=NOFUN=nogames
unsetenv=NOFUN
# EGG will be the only env variable
#chroot=.
./foo.rrz

اتصال یک برنامه به یک سوکت

nc -l 9999

rz-run program=/bin/ls connect=localhost:9999

اشکال‌زدایی یک برنامه با هدایت ورودی/خروجی به ترمینالی دیگر


## open a new terminal and type 'tty' to get
$ tty ; clear ; sleep 999999
/dev/ttyS010
## in another terminal run rizin
$ rizin -r foo.rrz -d ls
$ cat foo.rrz
#!/usr/bin/rz-run
stdio=/dev/ttys010
## Or you can use -R to set a key=value
rizin -R stdio=/dev/ttys010 -d ls

همچنین می‌توانید از پرچم -- برای مشخص کردن برنامه و آرگومان‌ها به روشی طبیعی‌تر استفاده کنید:

rz-run timeout=2 -- sleep 4

اجرای یک تابع از کتابخانه

rz-run runlib=/lib/libc-2.25.so runlib.fcn=system arg1="ls /"

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

pancake <pancake@nopcode.org>

byteninjaa0

January 24, 2024