ايران ويج

نسخه‌ی کامل: Kill Bill Crackme (linux)
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام،
یه کرکمی نوشتم که به نظرم خودم غیر قابل کرک شدن هست البته با توجه به قوانین کرکمی

قضیه از این قراره که زمانی که فایل بسته میشه، پسورد نمایش داده میشه. (atexit)

قانون:
برای بستن پروسس والد نباید از کرنل مد استفاده بشه مثلا سیگنال SIGKILL و ... اما برای از بین بردن پروسس فرزند قانونی وجود نداره

من این برنامه داخل اوبنوتو 16 64 بیت بیلد کردم..
سلام

این بنده خدا که خودش بعد از ۲ ثانیه زامبی میشه!

معذرت میخواما ولی مطمنی برنامه درست کار میکنه؟!؟! خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
کد php:
Hello Dear
The password is displayed every time I 
die
and 
my process id is 2675 try to kill me
Attention 
---> You are allowed to kill me only through a user-mode (no SIGKILL and other kernel-mode SC)
Press any key to continue . . . 

Password is -2147483648 

بدون کشتن پدر یا مادر این بنده خدا؛ من این خروجی رو گرفتم!!


این خروجی فکر میکنم درست باشه چون جاهای دیگه هم به همین رسیدم:
کد php:
printf("Password is %d", -2147483648


ولی در حالت کلی من هیچ کار خاصی نکردم! که اون خروجی رو داد بهم؛؛


خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
آره خودم زامبی میکنمش.
سیستم عاملت چیه ؟
چرا اینطوری شد ؟

سورسش اینطوریه:


کد:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>

#define M_PI 3.14159

void bye(){
    int TT = (int)time(NULL);
    int r = rand() % 20;
    int result = M_PI * TT * r;
    printf("Password is %d", result);
}

int main()
{
    pid_t res_child_pid, parent_pid, child_pid;
    parent_pid = getpid();
    child_pid = fork();
    if (child_pid > 0)
    {
        sleep(2);
        atexit(bye);
    } else
    {
        res_child_pid = getpid();
        kill(parent_pid, SIGSTOP);
        printf("\e[1;1H\e[2J");
        printf("Hello Dear\nThe password is displayed every time I die\nand my process id is %d try to kill me\n", res_child_pid);
        printf("Attention ---> You are allowed to kill me only through a user-mode (no SIGKILL and other kernel-mode SC)\n");
        printf("Press any key to continue . . . \n\n");
        exit(0);
    }
    return 0;
}
دبیان 9.3
---
من برنامه رو اجرا کردم؛ این پیام رو داد:
کد:
Hello Dear
The password is displayed every time I die
and my process id is 3242 try to kill me
Attention ---> You are allowed to kill me only through a user-mode (no SIGKILL and other kernel-mode SC)
Press any key to continue . . .

وبعدش رفت توی حالت stop ؛  یعنی همونجایی که خودت سیگنال رو فرستادی بهش گفتی stop بشه

کد php:
[1]+  Stopped                 ./KillBil 

این درواقع همون ctrl +z هست که برنامه ها رو میفرسته به بگ گراند!

من هم اول این قضیه رو چک کردم؛ یعنی jobs رو اجرا کردم توی همون شل؛

کد php:
ali@d:~/Desktopjobs -l
[1]+  3241 Stopped (signal)        ./KillBill 

و بعدش با دستور fg اونو اوردم در فورگراند!

بعد از اینکار انگار سیستم فهمید پروسه زامبی تولید شده؛ اون بع فرزندخوندگی init1 در اورد و اونم زدش پوکوندش خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
 برنامه به روال اجرای خودش برگشت؛ (ویرایش شد .. لینک )
و. تابع atexit اجر شد
کد php:
Password is -2147483648 

----

دلیل اون عدد منفی ثابت هم اینه که تابع bye بد نوشته شده:

کد php:
ali@d:/tmp$ ./1
TT 1526731502
r 3
Password is 
-2147483648
ali
@d:/tmp$ ./1
TT 1526731504
r 3
Password is 
-2147483648
ali
@d:/tmp$ ./1
TT 1526731543
r 3
Password is 
-2147483648
ali
@d:/tmp$ ./1
TT 1526731544
r 3
Password is 
-2147483648 

عددی که واسه reault بدست میاد خیلی بزرگتر مقداری هست که توی int  میتونه جا بگیره ؛ باید مثل شکل زیر بشه تا نتیجه دلخواه بدست بیاد
کد php:
long result M_PI TT r

و دلیل اینکه اون rand هم هی همون عدد رو برمیگردونه اینه که مقدار اولیه اش رو تعیین نمیکنی یعنی srand
https://www.geeksforgeeks.org/rand-and-srand-in-ccpp/



خنده بلد − بهینه شده برای ورژن جدید  خنده بلد − بهینه شده برای ورژن جدید  من جو گرفتن احساس دانایی کردم؛‌ هرجا سوتی دادم که قعطعا دادم بفرمایید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
تو پست اولت نقل و قول کردی که پسورد بلافاصه نمایش داده میشه (ترسیدم) بعد تو پست دوم این همه توضیح دادی !! :))))))) حالت خوبه ؟! خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
شوخی کردما، دمت گرم که توجه کردی.
یه کرکمی دیگه دارم مینویسم، به اونم توجه کن لطفا. مرسی عشقم <3


نقل قول: این درواقع همون ctrl +z هست که برنامه ها رو میفرسته به بگ گراند!


یعنی چی؟ ctrl + z منظور چیه ؟

نقل قول: بعد از اینکار انگار سیستم فهمید پروسه زامبی تولید شده؛ اون بع فرزندخوندگی init1 در اورد و اونم زدش پوکوندش [تصویر:  biggrin.gif] [تصویر:  biggrin.gif]

و. تابع atexit اجر شد


فرایند والد که زامبی نیست و atexit هم داخل فرآیند والد اجرا میشه. یا اینکه اگه والد قبل از فراخوانی wait فرزندش کیل بشه زامبی میشه ؟ درست گفتم؟


نقل قول: دلیل اون عدد منفی ثابت هم اینه که تابع bye بد نوشته شده:
نقل قول: عددی که واسه reault بدست میاد خیلی بزرگتر مقداری هست که توی int  میتونه جا بگیره ؛ باید مثل شکل زیر بشه تا نتیجه دلخواه بدست بیاد
نقل قول: و دلیل اینکه اون rand هم هی همون عدد رو برمیگردونه اینه که مقدار اولیه اش رو تعیین نمیکنی یعنی srand

ممنون از توضیحات کاملا درسته، اشتباه کردم Biggrin (عاقبل کپی پیست. البته فقط تابع bye منظورم هست) خنده بلد − بهینه شده برای ورژن جدید
نقل قول: تو پست اولت نقل و قول کردی که پسورد بلافاصه نمایش داده میشه (ترسیدم) بعد تو پست دوم این همه توضیح دادی !! :))))))) حالت خوبه ؟! [تصویر:  biggrin.gif] [تصویر:  biggrin.gif]


آخه کل کاری که کردم این بود خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید   نوکرم! تو خوبی؟ خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
کد php:
./KillBill t.txt
fg 


نقل قول: یعنی چی؟ ctrl + z منظور چیه ؟
هر برنامه ای که اجرا میشه میتونید بهش سیگنالهای خاصی رو بفرستید که کارهای متفاوتی انجام میدن!
یا میتونید دستی این رو به برنامه بفرستید؛ مثلا ctrl +c ؛  SIGINT میفرسته به برنامه ...
یا اینکه توسط برنامه های دیگه یه سیگنال بهشون ارسال کنید!
مثلا کاری که kill توی لیتوکس میکنه اینه که شماره pid رو میگیره و سیگنالی که بهش فرمان دادی رو به برنامه میفرسته!

کد php:
#include <stdio.h>
#include <unistd.h>
int main(){
while(
1){
sleep(5);
printf("1\n");
}
return 
0;


این برنامه رو کامپایل کن و اجرا کن؛
اول ctrl +c بزن ؛ میبینی که برنامه کارش به اتمام میرسه
دوباره اجراش کن و حالا اینبار ctrl + z بزن!  

------
معادل دستورات بالا اینظوری میشه
کد php:
kill -2 PID
kill 
-19 PID 

دستور اول به برامه سیگنال خاتمه میده! (که هرچند برنام میتوه سیگنال رو هندل کنه و بسته نشه و ..)
دستور دوم سیگنال stop میده

-------------------
-------------------

نقل قول: فرایند والد که زامبی نیست و atexit هم داخل فرآیند والد اجرا میشه. یا اینکه اگه والد قبل از فراخوانی wait فرزندش کیل بشه زامبی میشه ؟ درست گفتم؟

ااا من میگم یه چیزی این وسط جور در نمیاد  خنده بلد − بهینه شده برای ورژن جدید  خنده بلد − بهینه شده برای ورژن جدید

دو نکته باید بگم؛
نکته اول اینکه من به اشتباه فکر میکردم atexit توی فرزند داره اجرا میشه!!
پس این جمله ام غلطه:
نقل قول: بعد از اینکار انگار سیستم فهمید پروسه زامبی تولید شده؛ اون بع فرزندخوندگی init1 در اورد و اونم زدش پوکوندش
جمله صحیح این میشه:
بعد از اینکه fg رو اجرا کردم (با توجه به توصیحات بالا) برنامه به روال اجرای خودش برگشت؛ شبیه این میشه کد کد شما اینطوری تغییر پیدا کنه:
کد php:
       res_child_pid getpid();
//        kill(parent_pid, SIGSTOP);
       printf("\e[1;1H\e[2J");
    


نکته دوم اینه پروسه زامبی پروسه ی فرزندی هست که اجراش تموم شده! یعنی کار واسه انجام دادن نداره؛ ولی والدش در حال اجراست و سیگنالی که از فرزند اومده رو هندل نکرده؛
اگه والد kill بشه کل بچه هاش هم کیل میشن دیگه؛
کد php:
$|++;
$p=fork();
if(
$p>0){
print 
"i'am parent\n";
sleep(30);
}else{
sleep(2);
exit(
0);

اینو با perl اجرا کن؛ و بعدش لیست پروسه هات رو ببین؛  
فرزند کارش بعدش ۲ ثاینه تموم میشه؛
ولی چون والدش داره به یه کار دیگه میرسه و توجه نمیکنه که فرزندش کارش تموم شده؛ فرزند میشه زامبی!
ولی بعد از ۳۰ ثانیه که والد هم کارش تموم شد؛ هم خودش و هم فرزنداش کارشون تموم میشه


----------
خنده بلد − بهینه شده برای ورژن جدید روی حرفای منم حساب باز نکن به هیچ وجه خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید  من واسه خودم یه چیزی میگم واسه خودم خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
مرسی

دوتا سوال میشه اسم پروسس فرزند و تغییر داد؟ داخل ps و اینکه میشه سیگنال SIGKILL و هندل کرد؟ با sigaction و اینا؟
(۳۱-اردیبهشت-۱۳۹۷, ۰۰:۵۹:۰۲)nImaarek نوشته است: [ -> ]:مرسی

دوتا سوال میشه اسم پروسس فرزند و تغییر داد؟ داخل ps و اینکه میشه سیگنال SIGKILL و هندل کرد؟ با sigaction و اینا؟

نه؛ fork دقیقا همون پروسه رو اجرا میکنه؛ یعنی فرزند و والد همشون با یه اسم اجرا میشه..
تاجایی که من اطلاع دارم نه نمیشه!! یعنی اگه بشه جای تعجب داره؛ اونوقت هیچ تمام برنامه ها هندلش میکنن و ..

-------
ولی من همش منتظرم شما یه چیزی رو بری بگردی پیدا کنی و بهم بگی خنده بلد − بهینه شده برای ورژن جدید  خنده بلد − بهینه شده برای ورژن جدید و از کارم ایراد بگیری خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
نقل قول: ولی من همش منتظرم شما یه چیزی رو بری بگردی پیدا کنی و بهم بگی [تصویر:  biggrin.gif]  [تصویر:  biggrin.gif] و از کارم ایراد بگیری [تصویر:  biggrin.gif] [تصویر:  biggrin.gif]


میشه اسم پروسس فرزند عوض کرد اینم سند
یه خرده صبر میکنم ببینم میتونی متوجه بشی چیکار کردم سوت − بهینه شده بری ورژن جدید  بعدش سورس و میزارم.
اینیکی و از جایی کپی نکردم. لول.
فایل بفرست
احساس میکنم یکم زیادی شوخی کردم. واقعا معذرت میخوام. بخدا منظوری نداشتما شما استاد مایی. من کلا بخاطر شما میام اینراویچ قلب عشق - بهینه شده برای ورژن جدید 
در هر صورت خیلی مخلصیم Baby
صفحه‌ها: 1 2