| RZ_RUN(1) | General Commands Manual | RZ_RUN(1) |
نام (NAME)
rz-run —
ابزار rizin
برای اجرای
برنامهها
در
محیطهای
سفارشی
خلاصه دستور (SYNOPSIS)
rz-run [[directives]] [[script.rz]] [[--]
[program] [args]]
توضیحات (DESCRIPTION)
این دستور بخشی از پروژه Rizin است.
این برنامه به عنوان یک اجراکننده (launcher) برای اجرای برنامهها با متغیرهای محیطی، آرگومانها، دسترسیها، دایرکتوریها و توصیفکنندههای فایل (file descriptors) پیشفرض بازنویسیشدهٔ گوناگون به کار میرود.
-l- فهرست کردن تمام گزینههای نمایه (profile) پشتیبانیشده.
-t- تولید یک نمایه الگوی پایه. دستور rz-run -d > profile.rz را امتحان کنید
-w- نمایش نام ترمینال و انتظار برای اتصال از فرآیندی دیگر. دستور rz-run stdio=<ttypath> program=/bin/sh را امتحان کنید
این برنامه تنها یک آرگومان میپذیرد که همان نام فایل پیکربندی برای اجرای برنامه است.
این ابزار زمانی سودمند است که بخواهید برنامهای را با آرگومانهای طولانی اجرا کنید یا دادههای حجیمی را به stdin بفرستید، یا کارهای مشابهی که معمولاً برای اکسپلویت کردن کرکمیها (crackmes) نیاز است :)
دستورالعملها (DIRECTIVES)
فایل پیکربندی 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
- حذف یک متغیر محیطی
پیشوندهای مقدار (VALUE PREFIXES)
هر مقدار در این فایل پیکربندی میتواند دارای یک پیشوند خاص باشد:
- @filename
- خواندن کل محتوای فایل و قرار دادن آن درون مقدار کلید
- text
- کاراکترهای گریز (escape)، مناسب برای کاراکترهای هگزادسیمال
- 'string'
- کاراکترهای گریز (escape)، مناسب برای کاراکترهای هگزادسیمال
- !cmd
- اجرای دستور برای ذخیره کردن خروجی آن در متغیر
- :102030
- تجزیه رشته جفتهای هگز (hexpair) و ذخیره آن در متغیر
- :!cmd
- تجزیه رشته جفتهای هگز از خروجی دستور و ذخیره آن در متغیر
- %1234
- رشته ورودی را تجزیه کرده و آن را به عنوان یک عدد صحیح برمیگرداند
مثالها (EXAMPLES)
نمونه اسکریپت 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
/"
همچنین ببینید (SEE ALSO)
rizin(1), rz-hash(1), rz-find(1), rz-bin(1), rz-diff(1), rz-gg(1), rz-asm(1),
نویسندگان (AUTHORS)
pancake <pancake@nopcode.org>
byteninjaa0
| January 24, 2024 |