eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Протекторы —› Распаковка Hasp envelop конверта под Linux
Посл.ответ Сообщение


Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 5 июля 2019 21:27 · Поправил: daFix New!
Цитата · Личное сообщение · #1

Приветствую! Попалась задачка по изучению одного бинаря, но он накрыт конвертом. В линухе я не силён, поэтому даже установка GDB для меня проблема - упёрся в отсутствие нужных библиотек для запуска. Реверсил всё это дело через удалённый IDA отладчик, но не придумал как обойти антиотладку через fork. Времени мало и углубляться во внутренности линухи некогда, поэтому буду рад хоть какой-то информации. Задача минимум - просто снять дамп, максимум - снять конверт. Если на паблике инфы вообще нету и задача за пару вечеров не решаема, готов выслушать коммерческие предложения в личке.
Если что, антиотладка там реализована через форк процесса с последующим ptrace. Просто занопить fork и вернуть 0 ни к чему хорошему не приводит

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 5 июля 2019 22:35 New!
Цитата · Личное сообщение · #2

Хорошо, если посто ptrace, а не два процесса ptrace-ят друг друга, причем часть полезного функционала реализована как раз через ptrace


Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 5 июля 2019 22:44 New!
Цитата · Личное сообщение · #3

kunix
Увы, они активно prtace-ят друг друга. За функционал сказать наверняка не могу, но наверняка есть какая-то нагрузка по типу наномитов или ещё какой нибудь хрени

Ранг: 70.3 (постоянный)
Статус: Участник

Создано: 5 июля 2019 22:45 New!
Цитата · Личное сообщение · #4

установка GDB
Привет.
Какой линь?

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 5 июля 2019 22:58 New!
Цитата · Личное сообщение · #5

daFix А ptrace через прямые системные вызовы?


Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 5 июля 2019 22:58 · Поправил: daFix New!
Цитата · Личное сообщение · #6

sefkrd
Gentoo 4.4.6

Охрененно длинная портянка из кода функции которая занимается отладкой друг друга:

Code:
  1. void __usercall __noreturn start_routine(void *a1@<rdi>, unsigned int a2@<r12d>, unsigned int a3@<r15d>, char *a4@<rsi>)
  2. {
  3.   __int64 v4; // rax
  4.   __pid_t *v5; // rbp
  5.   int v6; // edx
  6.   int v7; // ecx
  7.   unsigned int *v8; // rbx
  8.   __pid_t *v9; // r13
  9.   __int64 v10; // rbp
  10.   int v11; // eax
  11.   ssize_t v12; // rax
  12.   int v13; // ecx
  13.   unsigned int v14; // er15
  14.   unsigned int *v15; // r12
  15.   int v16; // ebx
  16.   __pid_t *v17; // r13
  17.   __int64 v18; // rax
  18.   int v19; // ebp
  19.   int v20; // ecx
  20.   __int64 v21; // rax
  21.   int v22; // ecx
  22.   unsigned int v23; // ecx
  23.   int v24; // eax
  24.   int v25; // edx
  25.   int v26; // eax
  26.   int v27; // edx
  27.   int v28; // er13
  28.   int v29; // eax
  29.   int v30; // ecx
  30.   int v31; // ecx
  31.   int v32; // eax
  32.   __int64 v33; // rax
  33.   int v34; // edx
  34.   __int64 v35; // rax
  35.   unsigned int v36; // edx
  36.   __int64 v37; // rax
  37.   __int64 v38; // rax
  38.   int v39; // ecx
  39.   ssize_t v40; // rax
  40.   __int64 v41; // rax
  41.   const char *v42; // rdi
  42.   int v43; // esi
  43.   __pid_t v44; // edi
  44.   int v45; // [rsp+14h] [rbp-174h]
  45.   __int64 v46; // [rsp+18h] [rbp-170h]
  46.   char v47; // [rsp+27h] [rbp-161h]
  47.   int v48; // [rsp+28h] [rbp-160h]
  48.   unsigned int v49; // [rsp+2Ch] [rbp-15Ch]
  49.   __int64 (__fastcall *v50)(); // [rsp+30h] [rbp-158h]
  50.   int v51; // [rsp+B8h] [rbp-D0h]
  51.   char buf; // [rsp+CBh] [rbp-BDh]
  52.   int pipedes[2]; // [rsp+CCh] [rbp-BCh]
  53.   int stat_loc; // [rsp+D4h] [rbp-B4h]
  54.   char v55; // [rsp+D8h] [rbp-B0h]
  55.   char v56; // [rsp+E8h] [rbp-A0h]
  56.  
  57.   LODWORD(v4) = pipe(pipedes);
  58.   if ( (_DWORD)v4 == -1 )
  59.   {
  60.     v42 = &aFailedToCreate_22[22];
  61.   }
  62.   else
  63.   {
  64.     v45 = sub_C2575D(v4, pipedes, a4); // fork process
  65.     v5 = &dword_10562DC;
  66.     dword_10562DC = v45;
  67.     v6 = 9;
  68.     if ( v45 >= 0 )
  69.     {
  70.       v7 = 14;
  71.       v8 = (unsigned int *)&v55;
  72.       v48 = (unsigned __int64)&v56;
  73.       v47 = (unsigned __int64)&v56;
  74. LABEL_4:
  75.       if ( v7 != 14 )
  76.         goto LABEL_81;
  77.       v9 = v5;
  78.       v10 = qword_106C038;
  79.       v11 = 16;
  80.       if ( v45 > 0 )
  81.       {
  82.         v46 = qword_106C038;
  83.         v5 = v9;
  84.         goto LABEL_11;
  85.       }
  86.       if ( qword_106C038 )
  87.         shmdt((const void *)qword_106C038);
  88.       v46 = v10;
  89.       close(pipedes[1]);
  90.       v12 = read(pipedes[0], &buf, 1uLL);
  91.       v13 = 9;
  92.       v5 = v9;
  93.       if ( v12 <= 0 )
  94.         goto LABEL_34;
  95.       while ( 1 )
  96.       {
  97.         if ( v13 == 9 )
  98.         {
  99.           while ( 1 )
  100.           {
  101.             usleep(0x64u);
  102.             v40 = read(pipedes[0], &buf, 1uLL);
  103.             v31 = 12;
  104.             v28 = 15;
  105.             if ( v40 <= 0 )
  106.               goto LABEL_78;
  107. LABEL_76:
  108.             if ( v28 == 7 )
  109.               goto LABEL_15;
  110.           }
  111.         }
  112.         LOWORD(v48) = stat_loc;
  113.         v20 = 30;
  114.         if ( (_BYTE)stat_loc != 127 )
  115.         {
  116. LABEL_59:
  117.           if ( v20 == 16 )
  118.             goto LABEL_81;
  119.           v34 = 19;
  120.           if ( v48 & 0x7F )
  121.             goto LABEL_90;
  122.           goto LABEL_61;
  123.         }
  124.         v21 = ptrace(PTRACE_GETSIGINFO, a3, 0LL, v8);
  125.         v22 = 7;
  126.         if ( !v21 )
  127.         {
  128.           while ( 1 )
  129.           {
  130.             if ( v22 == 7 )
  131.             {
  132.               v23 = *v8;
  133.               v24 = 23;
  134.               if ( *v8 == 6 )
  135.                 goto LABEL_73;
  136.               v25 = 11;
  137.               if ( v23 == 11 )
  138.                 goto LABEL_67;
  139.               v26 = 19;
  140.               if ( v23 != 19 )
  141.               {
  142.                 if ( ptrace(PTRACE_CONT, a3, 0LL) == -1 )
  143.                   goto LABEL_92;
  144.                 goto LABEL_15;
  145.               }
  146.             }
  147.             else
  148.             {
  149.               v26 = 15;
  150.               if ( v47 & 1 )
  151.               {
  152.                 v44 = a2;
  153.                 v43 = 2;
  154.                 goto LABEL_94;
  155.               }
  156.             }
  157.             if ( v26 == 15 )
  158.               goto LABEL_47;
  159.             v27 = 23;
  160.             v22 = 13;
  161.             if ( *(_DWORD *)&v56 )
  162.             {
  163. LABEL_64:
  164.               if ( v22 != 13 )
  165.               {
  166.                 if ( v47 & 1 )
  167.                 {
  168.                   kill(a2, 2);
  169.                   _exit(0);
  170.                 }
  171.                 goto LABEL_47;
  172.               }
  173.               goto LABEL_15;
  174.             }
  175. LABEL_51:
  176.             if ( v27 != 11 )
  177.             {
  178.               v28 = 7;
  179.               if ( ptrace(PTRACE_CONT, a3, 0LL, 0LL) == -1 )
  180.                 goto LABEL_92;
  181.               goto LABEL_76;
  182.             }
  183.             if ( (_BYTE)stat_loc == 127 )
  184.               break;
  185.             v47 = a2 == *(_DWORD *)byte_10562E0;
  186.             v22 = 17;
  187.             if ( !(stat_loc & 0x7F) )
  188.               goto LABEL_64;
  189.           }
  190.           v35 = ptrace(PTRACE_GETSIGINFO, a2, 0LL, v8);
  191.           v25 = 20;
  192.           if ( v35 )
  193.           {
  194. LABEL_67:
  195.             if ( v25 == 11 )
  196.               goto LABEL_74;
  197.             goto LABEL_47;
  198.           }
  199.           v36 = *v8;
  200.           if ( *v8 > 0x12 )
  201.           {
  202.             v32 = 18;
  203.             if ( v36 == 19 )
  204.             {
  205.               v49 = a3;
  206.               goto LABEL_43;
  207.             }
  208. LABEL_71:
  209.             signal(21, 0LL);
  210.             signal(22, 0LL);
  211.             if ( ptrace(PTRACE_CONT, a2, 0LL, *v8) == -1 )
  212.               goto LABEL_81;
  213.             signal(21, (__sighandler_t)1);
  214.             signal(22, (__sighandler_t)1);
  215.             v24 = 9;
  216. LABEL_73:
  217.             if ( v24 != 9 )
  218.             {
  219. LABEL_74:
  220.               sub_C27D90(a3, 37LL);
  221.               v38 = ptrace(PTRACE_CONT, a3, 0LL, *v8);
  222.               v39 = 11;
  223.               if ( v38 == -1 )
  224.                 goto LABEL_80;
  225.               goto LABEL_15;
  226.             }
  227.             goto LABEL_47;
  228.           }
  229.           v30 = 5;
  230.           if ( v36 == 5 )
  231.             goto LABEL_38;
  232.           if ( v36 != 6 && v36 != 11 )
  233.             goto LABEL_71;
  234.           sub_C27D90(a2, 37LL);
  235.           v37 = ptrace(PTRACE_CONT, a2, 0LL, *v8);
  236.           v20 = 16;
  237.           if ( v37 == -1 )
  238.             goto LABEL_59;
  239. LABEL_47:
  240.           while ( 2 )
  241.           {
  242.             a2 = waitpid(-1, &stat_loc, 1073741825);
  243.             v11 = 13;
  244.             if ( a2 )
  245.             {
  246.               v27 = 11;
  247.               if ( a2 == -1 )
  248.                 goto LABEL_49;
  249.               goto LABEL_51;
  250.             }
  251. LABEL_11:
  252.             if ( v11 == 13 )
  253.             {
  254.               usleep(10000u);
  255.               continue;
  256.             }
  257.             break;
  258.           }
  259.           v49 = a3;
  260.           v14 = a2;
  261.           v15 = v8;
  262.           *(_DWORD *)(v46 + 4) = v45;
  263.           close(pipedes[0]);
  264.           prctl(PR_SET_PTRACER, (unsigned int)*v5, 0LL, 0LL, 0LL);
  265.           close(pipedes[1]);
  266.           v16 = 16;
  267.           v17 = v5;
  268.           v18 = ptrace(PTRACE_ATTACH, (unsigned int)*v5, 0LL, 0LL);
  269.           v19 = 25;
  270. LABEL_35:
  271.           if ( v18 < 0 )
  272.           {
  273.             if ( v19 == 16 )
  274.               _exit(2);
  275.             exit(2);
  276.           }
  277.           if ( v16 == 13 )
  278.           {
  279.             usleep(0x64u);
  280.             ptrace(PTRACE_SETOPTIONS, *(unsigned int *)byte_10562E0, 0LL, 18LL);
  281.             usleep(0x64u);
  282.             v51 = 4;
  283.             v50 = sub_C25BCE;
  284.             v29 = sigaction(18, (const struct sigaction *)&v50, 0LL);
  285.             v30 = 21;
  286.             v6 = 24;
  287.             v5 = v17;
  288.             v8 = v15;
  289.             a2 = v14;
  290.             a3 = v49;
  291.             if ( v29 == -1 )
  292.               break;
  293. LABEL_38:
  294.             if ( v30 != 5 )
  295.               goto LABEL_47;
  296.             v31 = 28;
  297.             if ( a2 != *(_DWORD *)byte_10562E0 )
  298.             {
  299.               if ( (stat_loc & 0xFFFFFF00) == 263424 )
  300.               {
  301.                 ptrace(PTRACE_DETACH, a2, 0LL, 0LL);
  302.                 goto LABEL_47;
  303.               }
  304. LABEL_79:
  305.               v41 = ptrace(PTRACE_CONT, a2, 0LL, 5LL);
  306.               v39 = 2;
  307.               if ( v41 == -1 )
  308.               {
  309. LABEL_80:
  310.                 if ( v39 == 2 )
  311. LABEL_81:
  312.                   v44 = a2;
  313.                 else
  314. LABEL_92:
  315.                   v44 = a3;
  316. LABEL_93:
  317.                 v43 = 9;
  318. LABEL_94:
  319.                 kill(v44, v43);
  320.                 _exit(1);
  321.               }
  322.               goto LABEL_47;
  323.             }
  324. LABEL_78:
  325.             if ( v31 != 12 )
  326.               goto LABEL_79;
  327. LABEL_34:
  328.             v49 = a3;
  329.             v14 = a2;
  330.             v15 = v8;
  331.             v17 = v5;
  332.             close(pipedes[0]);
  333.             v19 = 16;
  334.             v18 = ptrace(PTRACE_ATTACH, *(unsigned int *)byte_10562E0, 0LL, 0LL);
  335.             v16 = 13;
  336.             goto LABEL_35;
  337.           }
  338.           v32 = 16;
  339.           v5 = v17;
  340.           v8 = v15;
  341.           a2 = v14;
  342. LABEL_43:
  343.           if ( v32 != 16 )
  344.           {
  345.             a3 = v49;
  346.             if ( *(_DWORD *)&v56 )
  347.               goto LABEL_47;
  348.             v33 = ptrace(PTRACE_CONT, a2, 0LL, 0LL);
  349.             v7 = 21;
  350.             v34 = 3;
  351.             if ( v33 == -1 )
  352.               goto LABEL_4;
  353. LABEL_61:
  354.             if ( v34 != 3 )
  355.             {
  356.               v11 = 26;
  357.               if ( (v48 & 0xFF00) == 512 )
  358.               {
  359.                 dword_1086494 = 1;
  360.                 sub_C280C4((char *)1, 1u, 0x7DBu, aDebuggerDetect, 69);
  361.                 sub_C27D90(0LL, 38LL);
  362.                 _exit(1);
  363.               }
  364. LABEL_49:
  365.               if ( v11 == 13 )
  366.               {
  367.                 perror(aWaitpid_0);
  368.                 v44 = getppid();
  369.                 goto LABEL_93;
  370.               }
  371.               goto LABEL_15;
  372.             }
  373.             goto LABEL_47;
  374.           }
  375.         }
  376. LABEL_15:
  377.         while ( 1 )
  378.         {
  379.           a3 = waitpid(*v5, &stat_loc, 1);
  380.           if ( a3 )
  381.             break;
  382.           usleep(0x2710u);
  383.         }
  384.         v13 = 20;
  385.         if ( a3 == -1 )
  386.           goto LABEL_90;
  387.       }
  388.     }
  389.     if ( v6 != 9 )
  390.     {
  391.       perror(aSigusrSigactio);
  392.       _exit(1);
  393.     }
  394.     v42 = aForkedFailed;
  395.   }
  396.   perror(v42);
  397. LABEL_90:
  398.   exit(1);
  399. }



kunix пишет:
А ptrace через прямые системные вызовы?

Ну, через импорт всё. Если я правильно понял вопрос)

Ранг: 70.3 (постоянный)
Статус: Участник

Создано: 5 июля 2019 23:12 New!
Цитата · Личное сообщение · #7

Нафига так "просто".. Понять могу, но все же..
На практике - юзай manjaro(archlinux) - установишь через гуй все, что необходимо..

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 5 июля 2019 23:12 · Поправил: kunix New!
Цитата · Личное сообщение · #8

То есть прямых системных вызовов нет.. можно в юзермоде перехватить ptrace, прицепить свой отладчик


Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 5 июля 2019 23:16 New!
Цитата · Личное сообщение · #9

Кстати, забыл сказать - не могу перекинуть на другую систему для реверса потому что в образе установлен эмулятор хаспа от нашего комрада
Разумеется, без него конверт не распакует тело стаба

Ранг: 37.5 (посетитель)
Статус: Участник

Создано: 6 июля 2019 13:00 New!
Цитата · Личное сообщение · #10

daFix пишет:
не придумал как обойти антиотладку через fork

Хе-хе, тоже недавно с этим столкнулся. Решение весьма простое, как оказалось.))

Кстати, подскажите, кто в теме, есть ли инструменты для отладки ядра линя? IDA debugger по понятным причинам в ядро не умеет


Ранг: 1008.9 (!!!!)
Статус: Участник

Создано: 6 июля 2019 13:37 New!
Цитата · Личное сообщение · #11

ида дебуРгер по понятным причинам ядро умеет))
да и сам линукс имеет встроенный дебуРгер

Ранг: 37.5 (посетитель)
Статус: Участник

Создано: 6 июля 2019 14:04 New!
Цитата · Личное сообщение · #12

reversecode пишет:
ида дебуРгер по понятным причинам ядро умеет))

Хм, ну значит я идиот. У меня на системных вызовах ида в ядро не заходит.
И непонятно как она вообще это может сделать, если сервер иды на отлаживаемой машине это обычное ринг3 приложение.


Ранг: 1008.9 (!!!!)
Статус: Участник

Создано: 6 июля 2019 14:08 New!
Цитата · Личное сообщение · #13

видимо нужно прочитать мануал по отладке на иде режима ядра а не режима ring3
https://www.hex-rays.com/products/ida/debugger/index.shtml

| Сообщение посчитали полезным: dma



Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 6 июля 2019 15:55 New!
Цитата · Личное сообщение · #14

spinz
Загрузить свою библиотеку через LD_PRELOADED и сдампить процесс?)
Намекни как нибудь


Ранг: 126.4 (ветеран)
Статус: Участник
Qt Developer

Создано: 6 июля 2019 19:29 · Поправил: hors New!
Цитата · Личное сообщение · #15

daFix пишет:
Если что, антиотладка там реализована через форк процесса с последующим ptrace. Просто занопить fork и вернуть 0 ни к чему хорошему не приводит


Без особого труда это можно обойти редактированием и перекомпиляцией ядра. Сам процесс сборки: --> Link <--

Теоретически это можно частично проэмулировать в RunTime эмуляторах(qemu, unicorn ...). Но тут надо смотреть, есть кое-какие идеи как это сделать, но руки до практических реализаций не доходили. Тем более что всё быстрее решается перекомпиляцией ядра.

daFix пишет:
Задача минимум - просто снять дамп, максимум - снять конверт.


Ну с дампом проблем никаких нет, а вот процесс снятия конверта может и растянуться.


Ранг: 327.6 (мудрец)
Статус: Участник
born to be evil

Создано: 6 июля 2019 21:39 New!
Цитата · Личное сообщение · #16

hors
если мне память не изменяет, главное дамп нужного сделать. дальше в статике обработать куски. но, заэмулить проще, если без wb


Ранг: 72.2 (постоянный)
Статус: Участник

Создано: 7 июля 2019 22:24 New!
Цитата · Личное сообщение · #17

В принципе если есть две версии для вин тоже, то по идеи основные механизмы должны быть одинаковы, сама архитектура защиты. Но тут --> Link <-- размер 2гб, слишком большой. Может у кого есть семпл, интересно посмотреть.

Там же краткое описание:

Code:
  1. В процессе работы утилиты Sentinel LDK Envelope шифруется кодовая секция, ресурсы, перемещаемые элементы, защищаются функции импортов при помощи полиморфных переходников. Также используется технология «stolen bytes» (воровство кода), заменяющая часть рабочего кода кодом из секции защиты, что позволяет успешно бороться со снятием дампа приложения.


Вероятно от дампа толку мало будет, если прот частями данные декодирует. Я просто не знаю специфику линей. В нт без сурков можно лишь небольшой процент кода выделить, вероятно в лине всё обстоит иначе.

Но метод общий - выделить событие EP. На этом месте посмотреть как выглядит модуль. Но это не сделать через штатную трассировку, тем более произойдёт наложение двух трассировок. Нужно крутить эмулятором.


Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 8 июля 2019 01:00 New!
Цитата · Личное сообщение · #18

Dr0p
Под виндой конверт большой сложности не вызывает, там достаточно просто. Иногда даже импорт не трогают.
под линухой вроде нет ни каких "наномитов" и прочей нечисти которые реализуются отладкой себя самого. Чувствую, придётся изучать как всё это дело работает в юзермоде и через LD_PRELOAD библиотеку снимать дамп. Перекомпилировать ядро или отлаживать его для меня пока страшновато звучит, попробую более простыми способами справиться

Ранг: 18.0 (новичок)
Статус: Участник

Создано: 8 июля 2019 17:59 · Поправил: int_256 New!
Цитата · Личное сообщение · #19

ядро там компилится намного проще чем кажется.
Для арча (манжаро):
клонируете гитом любое ядро с AUR к примеру это https://aur.archlinux.org/packages/linux-lts414
открываете в папке config и в нем ставите CONFIG_KGDB=y
пишете makepkg -rsi

ждете кучу времени пока соберется пакет и установится.

обновляете груб
grub-mkconfig -o /boot/grub/grub.cfg
после ребута в списке операционок grub появится ваше ядро
всё!

перед этим я бы советовал добавить CPUCORES=$(nproc --all) в /etc/makepkg.conf чтоб сборка шла на всех ядрах


--> Link <--

| Сообщение посчитали полезным: hors



Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 10 июля 2019 16:00 · Поправил: daFix New!
Цитата · Личное сообщение · #20

hors пишет:
Ну с дампом проблем никаких нет, а вот процесс снятия конверта может и растянуться.


В связи с тем что форум лежал продолжительное время, не мог отписаться. Пока ковырялся по образе, наткнулся на Python!
В общем, питоном снял дамп, собрал вроде правильно, по теперь вот ломаю голову как быть с импортом которого в дампе нету.


2ALL:
Из за работы могу выделять на задачу максимум час в день, поэтому откладываю варианты связанные с перекомпиляцией ядра. На изучение всего этого уйдёт не один день, думаю


Ранг: 286.3 (наставник)
Статус: Участник

Создано: 10 июля 2019 17:40 · Поправил: difexacaw New!
Цитата · Личное сообщение · #21

int_256

Мне линь не интересен, но интересно чем поможет сборка ядра, тоесть какие изменения нужно и зачем вносить ?

Протектор же юзермодный. Или нет ?

Ранг: 18.0 (новичок)
Статус: Участник

Создано: 18 июля 2019 16:07 New!
Цитата · Личное сообщение · #22

difexacaw пишет:

Мне линь не интересен, но интересно чем поможет сборка ядра, тоесть какие изменения нужно и зачем вносить ?

а мне винда не интересна я ее дропнул со всех девайсов 4г назад со всеми говнопротами, говноаверами и телеметрией
т.е. необходимые изменения, которые нужно вносить вам не должны быть интересны тоже

| Сообщение посчитали полезным: Lobido, sefkrd


Ранг: 1.3 (гость)
Статус: Участник

Создано: 18 июля 2019 17:01 · Поправил: Lobido New!
Цитата · Личное сообщение · #23

Во многих системах Linux загрузочный код не хранится в файловой системе с ядром. Вместо этого
в MBR находится загрузчик "boot loader", которому известно,в каких блоках находится ядро.
В этом случае ядро загружается кодом MBR,а необходимость в дополнительном загрузочном коде файловой системы отпадает.

буду рад хоть какой-то информации. Задача минимум - просто снять дамп, максимум - снять конверт.
Crackme Linux / C
Code:
  1. H4sIACu8RFcAA+1Zf3RTVx2/Lz/a0EJe9kMFmZIhaJEtNNp56ATWsKS9kYyVrR0CgyzNjzaSHzV9
  2. DwqDjS6U7S1EOR7dYUfPRJ06PR6HcyJDDqQU+mPTURhuTOZkuM2EoJThaMewz++9776QPInHP/zH
  3. c3yH13vv537v98fn+733vTwednkadRyH1EuHFiEycnINdNzA8GcsBRHA5iMD/K1GJiprRMVXQ0n7
  4. ZTMqaRGy0r9kXQXpqHotD5S0NzF4d0Gvss7Abitz2cr8VNtZTFptDaxd9o4QqET/+aW6RdbfCLce
  5. 7qalrejCtBujr0qfmffsmpptT+78inlJ3VfnerH07nKcbpkwYekjL5mtKPtjoARLg9k2HUJ/b8XS
  6. O1janMWSeFpqfWPQdYUozjtSrivYP4JTrixOT9YVjbgRfk8tjJ/sO/sJbiR5unLOiDJ1mk4h++hj
  7. XNJ1hQORL7re2PTr1f3URPKclZohKpIZ6LvG89NxMjrOATS+jxCGpYGDpM3+Hf4SFH/RlRVPDTMF
  8. h7eAgp3g5w6pdTtOu0aIPHE2exS4680Ik/FgRoYr14voehBw7YL2JLTPUAcl127qgOTam3KNSq5M
  9. yvWz5OkxyfUz0LcLS4cOACVIUSopSicxpfnP41TrDli9s+BmI/yVgBjqSvHSpbCUMLZTdf2cBVwf
  10. pyEB77MrSKyHlCHTRYq8IF0rbX4D4hw5OK26AWVfAOsH55Les9DDg65xK2L8gLKlhCvJNYpTdxED
  11. o/sQZfJlMnd4AuQll0J6ulkm85CkAbJ6yq7JVkQXWK8uOP8PMHUbMeUkplJTktcQOmwkxIiTDy4h
  12. gtMJN1UHvaTPE08F0jNCby/xZLh/94LnEf/rjFt6kTfihZtgYh0/drI5mwO+VkgmnByS+3ej3Gsw
  13. sZvLjRC78lF7pucvMg8m+84bcK8smPCx81jO5C/2O1pg7JautN4rLMMp7zjuPSVg3PMh7HaE0/HR
  14. 9bdg6U+UMyydJyxLr9szF3+KU4bf18LuxdIttHVLzlmjeR5Lb4LYqtWO+3NnICzSgST0yvdi6cNl
  15. /FaZRJ1+2IKTMs9vu0BGPTKxxD/6I5K1e8DMb8hmfKwPv/JnYriB8jb5iGLrCO4dFte67MMOiPIX
  16. M+3yPrJTD5D9mw2QXZgcBzf7+K1PUHoNfyXL7Mf3EgE8dhEUEs7H/gS5s2fqRzZXY+5NOYOlukX5
  17. C/ZM73HefQjvxPyz/XjQQI8cnOLwoNJj2vI23NPPE309f0ajsizYXpgJ08wn6g+QYJezJwyk14eT
  18. H8hCFZZWmHDaYclPyTpA3SCaDHL2zMpVq/uxdAEsHiVZmWI/jqUhPDaG60dFOF6O5jJQcc1Zc/ES
  19. yieW3ieUOpr5rX8gFnsv8VuHKLkPUXLXW7KvI3VR7pdXiV5/XfavUJT7VJLP5M04/YQSzxkSD051
  20. jeP6V/mt36CLJuiihZDUbB2p/l5g64gQxKkG2B1LQLIP801DkBY4LZI5C62RNy8+TZnOZ78LpvIe
  21. nP4prb30g6Mv0HOp5x1qSTqb3aNXksZv9dAK6wCWvmzJT8sGYaX9VN4CkQljK1atxtJY7peArcTS
  22. SSBtbyekoh+njIsmwYaSJrC0CA82mWiiBpvocT7YNFXJW1PNQR0gORvYIgeCY7lbes1xn6PV0eKW
  23. TgCNF+GIqJE273cn70B3pR82iZfukiY8EgQI5o8LH8PJy9PEagjZBOGLt+Ur4MC15N+yXzq4Cfam
  24. PZOd0JHoxAGHdGRfFdiETb3xiiw7gbQMnXIN4BR4YtxhsiJ3qhLUCNdD2DeLFe7UclPe5E4OWvLv
  25. QvZ7j8PxiNADMuZdh0g1GF+HJfaMO2UmHM+CatKLk9yp+4gr+SkwNJJhIwyPg7LkgCV/gmi/gzh+
  26. u30YS6/i5KH5yY1DleKncKoREmSMm8gZ1AiPDGNE6dZAtwe6eROW+yCl4pAnZewkvvaMk6ct/+jP
  27. 6V4wLiBYfYZ/5CkYu9PN9+HUbVaig9T5mVE854Qn7ZnFu5NvjXqkoxef9gA+p4+cF0vSCzgsLdSD
  28. cNYFhXRQIsfab8lhC+5OPfBNGJLD8A1azRn+Wxl+Tyavs2ck4/JK4qQefHyH9CTjy6SRM483y1uP
  29. C5VbLs8TL+Szqc37PdIZKL5s5WUoOuPeON0OwZOrHPc7VjvWOLyr++2ZasNsC1SOuBhL49IHIf58
  30. JvkWj5OnR0N83BTihaEQ/9qxV86+cgbovBGnGyzFOFB6Ds8Z5PcfwnPGYd+Ob5mPBCM5Ri9RgLuM
  31. 618TPv447+T3VPB7+pxzMqJ56zActvIglgegYjL9jlZ7xtECZfg+Tr5Mj0XYMsvgDHjv53TPvKh0
  32. xyD1J/HYMcy9jOUXhXpc/x7U6vrP4jnHPOlbqj31eeGTj7vQfL14PY36b+SsfBuxJ6zcn/+jPZMH
  33. yk6uJEewg5wy79kzB7gW2Ad1IJac0K239AzoWsiRgv2XcjMAbM7+EKp2EH2UCAzJK/t3P5Xb8QE8
  34. RvQ5iTSW3COkmZR7kDTTcgJpqnNR0uhyIWjInmq9d5knNfs5oxXd1fu20EgPq38Ii8BMclgmoR1z
  35. psOyO3XTLPKoqfFIZ5n7s6n7onnxlgVzF4qVX0rfP5cjW+OwKX/MfkrZ+DQWKOv6Y8IN/B4DYdpg
  36. hqIFqoWzpFz66Xvcp6T3DkUXDT6nvt+1vfSLbTXdW55TcW2Lartra613dvgikWCsPZioqkLNvq6u
  37. 9fFE4HZUNRdmgv614Vi7VUWtyHr3EhvMrIiL1kA4YA0LN1cha6MvHLFV3WptSWyw+tp94ZitCs21
  38. Ou9e6qpC8wLBdfPEhC8WiEeRx+ltvsfludvhROt8kfZEOBZA7N2TXNzGexDXbeGmT6407eCU92Ny
  39. /+B9WfYTAYfZsk1355QK3RqQUOYWwP0uzDuK5zfRaTp/P9yVl+D5WrJ+T2H9Jri/D/O24vnw1fXf
  40. gXs3zJ8oWX+UChC/98P9xJgsf6LovZqUGpH/NuBtBFhstmzXNZmnbtM7zNakQbekyjwVdC02m1zV
  41. DrWL0C0gOhniPgLrZnCqPad5alLvNFv1N3BU1GE2MTvE/gKQe34cnho04WbLUpgl9lsA/x3ghoKe
  42. JqLHZbbq3q1S9WBi3VlQSfRtB/knoaYriuIh+NOAPwr454pw4u9+wL8H+ETBDvCz+Ot699cMaeP2
  43. CmeyUn+WU+ikes4Rvz6U5dkavgzwxPgD4N2MrzSJezvha5sBm2uSxiZzrW6VuQYA8HkxZYzGD+s+
  44. DvuX1/jbAvh1gH+aAPeZLXczXiKANwMeKthZXLDjIHYcYKfVXOPU2Hka1j10pTTP/7/+N65sVQNt
  45. x1lL32zlKtpvuvPO2601rW1iTBCtdbb5trpbPyfSkf0he52tts72+TkKjpCta0NU8LVBKySUtkPt
  46. xeJC0NYeE21tYjgSuDUcQDYh2C0gWyIe8Ak+ZAt2eEMJXzSIbMq4rasL2fzxaDQYE/5bcU6Hm/z+
  47. 17Hx1e8GyniWRt6gGdtQ0TcLdPX7iJOt/+6kUnmudEj3F1dkX+U9q1CNfqWRN2nGCzTrd1U3sFYZ
  48. 79WVymvXN7L1ehUofG9Rmps08tr1Hoap663qdxq2fodG3qIZL2P2azW4un6uBuc07XXFvhddTWz9
  49. yjLri8caiujVcYPSdrKASToIpMY/lbWTytg/OV1pezWTWvv/7tKDtFqPpbiuUGeluL5QP6W4oVAX
  50. pbjxar5L8IpCHkvxf/1SRuIxoAuyFq8og5vL4DPK4J8tg9eVwReWwd1l8NYy+JoyOCqDtyNSixWo
  51. m/Gm1kkC7pmQrwGWF/VZuB7u6wFfqMnXZqZni0aPxOTv0cjvoPJGdKMmX99n8g8w+RDDfwL3zaC/
  52. k8mr59mzTI9JY/d5psfP6s3P8AMMr9Qp+G8YPsz0WDT6TzAeRIMiP4NthFMM/4u+NK6zjIfHNP58
  53. yPAdGlzHKf5wlYqeCaa/muFZjf6PceQs0qEhDT6PyR8xKriB6VnEKXEhjV1yzt9ctF9UfCnT49Tk
  54. 617u2vlaxV2bhw6Gf5P5Y2d4nOHnNfJiGX82M38GWB4dDN/GcK3dfQxfovG/j/Gmnj8zGD7E5B+Z
  55. pODdDD/K/NTyf6JMvG8zPauZHvWd9xzDtfVzmeE3MLyNyVfolDrZqeFhlu7admsZrs37fB3jTbN/
  56. 79ApPIxo9Cxn8l/Q8BZg/uzS+BOneirgefdAifyDTM8KjZ5HGT6qU/ATDN/O/Blg/sxk+FNM/jLj
  57. U33nf6YMD3uZ/CGm38bwvjLyLzH5eRo/X6X+GP8lrj+yeHdr8DO6a+fxIsO19c/pFX+GKxRcff+6
  58. Xn9tP2fqyf8U6dBhDf6ZMvK36hW7R5l+9TdcvV7hWavnDiYvmxR8DcMbmX5tHpfolXp4RlMPfqZH
  59. u687GT6J6fk0wzcy/dp628JwLZ/Ib7f5kS8SifuhDSYSsbgX+j4hHI8B0CX4/GvbfZ20m4j5o6wH
  60. /6Aj+NuDgk9g/a5CH9BgbB10osGossTrFcg7e6eQQG2AoHDcL0RUtCu8MYiiYizq6wSImvT6O9Z6
  61. 20VfIsCUKa6hTh+888fbQmIXuAiLNnhhmoJeb+FzSJSGA0goFBG7OkBjIBwjxvxt3qgvHBM6EkFf
  62. gKwIdMULIcI4Em7ze9mcGAuHwsGAt2sDmIpEvPYvtIWFIhlqIsxMg4PhRDyGokoIiuMhIbEBhNaG
  63. wpEg8isL1ifC4LYq3h6MeZmGDXHRKySIQQESEI6t9fq8gXBQoObibV8J+gUv/S7UJXjbCYiiiSC1
  64. Bv4nBJYTxJxXIvQG4sHusKBmTnW+QA8dhRLBIOpMxNvhl5U3HFvHcu/t6ognBG+M/NwKibFCHGrk
  65. SmZJ6IlEPKFlS1Xuj8S7gsQfEKdZ9nrhRxtzmcnEO4NAnI9mSKumUGAlyYyLAsl8JyRbQKGCa76E
  66. vwNAWlhB+gsR8hJA4RCNkUQCxRHsLvim0lBa9CWWYApRCr3eWJwWZ1AQO71CBFKmUhsB92kM1yCR
  67. 0sfsKakvbBOkcEPp/yeOWg1EXR8AAA==


Программа закодирована / Чтобы получить двоичный файл, сохраните текст ниже в файле с именем c1.bin и затем запустите.

$ cat c1.bin | base64 -d | gunzip > c1
$ chmod +x c1
$ objdump -d c1


0x00 Challenger
Password:
+ Checking Password OK.
+ You did it!
+ DONE


Ранг: 524.7 (!)
Статус: Участник
5KRT

Создано: 18 июля 2019 20:59 New!
Цитата · Личное сообщение · #24

Lobido
Code:
  1. #include "stdafx.h"
  2. char key[] = { 0x23, 0x89, 0xF2, 0xC2, 0x6D, 0x3E, 0xC7, 0xB2 };
  3.  
  4. char obfuskated[] = { 0x62, 0xCB, 0xB1, 0x86, 0x28, 0x78, 0x80, 0xB2, 
  5.                                      0x23, 0x89, 0xF2, 0xC2, 0x6D, 0x3E, 0xC7, 0xB2, 
  6.                                      0x23, 0x89, 0xF2, 0xC2, 0x6D, 0x3E, 0xC7, 0xB2,
  7.                                      0x23, 0x89, 0xF2, 0xC2, 0x6D, 0x3E, 0xC7, 0xB2 };
  8.  
  9. void __fastcall obfuscate(char *buf, char *key, signed int len)
  10. {
  11.          for (int i = 0; i < len; ++i)
  12.                  buf[i] ^= key[% 8];
  13. }
  14.  
  15. int main()
  16. {
  17.          obfuscate(obfuskated, key, 0x20);
  18.          printf(obfuskated);
  19.          getchar();
  20. }


Можно вопрос? Ну сделал я этот крякми, и что? За 15 минут в статике разбирается. Каким образом это связано с задачей?

Ранг: 43.1 (посетитель)
Статус: Участник

Создано: 18 июля 2019 22:57 New!
Цитата · Личное сообщение · #25

daFix пишет:
Можно вопрос? Ну сделал я этот крякми, и что? За 15 минут в статике разбирается. Каким образом это связано с задачей?

Возьми с полки пирожок, вытри пыль и положи обратно

| Сообщение посчитали полезным: daFix


Ранг: 1.3 (гость)
Статус: Участник

Создано: 19 июля 2019 03:32 · Поправил: Lobido New!
Цитата · Личное сообщение · #26

Можно вопрос? Ну сделал я этот крякми, и что? За 15 минут в статике разбирается. Каким образом это связано с задачей? > Это намек).
Добавлением STAN ,The Ultimate Disassemble http://www.capstone-engine.org/
возможности генерировать псевдокод из двоичного файла.
Команда file скажет нам, что образец представляет собой динамический и нераздельный двоичный файл,а также первый флаг!
Образец
Code:
  1. $ readelf -S sample.1
  2. There are 33 section headers, starting at offset 0x202240:
  3.  
  4. Section Headers:
  5.   [Nr] Name              Type             Address           Offset
  6.        Size              EntSize          Flags  Link  Info  Align
  7.   [ 0]                   NULL             0000000000000000  00000000
  8.        0000000000000000  0000000000000000           0     0     0
  9.   [ 1] .textD            PROGBITS         0000000000500000  00100000
  10.        0000000000000016  0000000000000000  AX       0     0     1
  11.   [ 2] .textP            PROGBITS         0000000000501000  00101000
  12.        000000000000000b  0000000000000000  AX       0     0     1
  13.   [ 3] .textE            PROGBITS         0000000000502000  00102000
  14.        000000000000000b  0000000000000000  AX       0     0     1
  15.   [ 4] .interp           PROGBITS         0000000000400270  00000270
  16.        000000000000001c  0000000000000000   A       0     0     1
  17. (...)
  18.   [15] .plt              PROGBITS         0000000000400920  00000920
  19.        0000000000000180  0000000000000010  AX       0     0     16
  20.   [16] .text             PROGBITS         0000000000400aa0  00000aa0
  21.        0000000000000922  0000000000000000  AX       0     0     16
  22. (...)
  23.  


Code:
  1.  $ readelf -l sample.1
  2.  
  3. Elf file type is EXEC (Executable file)
  4. Entry point 0x400aa0
  5. There are 10 program headers, starting at offset 64
  6.  
  7. Program Headers:
  8.   Type           Offset             VirtAddr           PhysAddr
  9.                  FileSiz            MemSiz              Flags  Align
  10.   PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
  11.                  0x0000000000000230 0x0000000000000230  R E    8
  12.   INTERP         0x0000000000000270 0x0000000000400270 0x0000000000400270
  13.                  0x000000000000001c 0x000000000000001c  R      1
  14.       [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  15.   LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
  16.                  0x000000000000178c 0x000000000000178c  R E    200000
  17.   LOAD           0x0000000000100000 0x0000000000500000 0x0000000000500000
  18.                  0x000000000000200b 0x000000000000200b  RWE    200000
  19.   LOAD           0x0000000000201e10 0x0000000000601e10 0x0000000000601e10
  20.                  0x00000000000002e4 0x00000000000002f8  RW     200000
  21.   DYNAMIC        0x0000000000201e28 0x0000000000601e28 0x0000000000601e28
  22.                  0x00000000000001d0 0x00000000000001d0  RW     8
  23. (...)
  24.  
  25.  Section to Segment mapping:
  26.   Segment Sections...
  27.    00
  28.    01     .interp
  29.    02     .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .re
  30. la.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
  31.    03     .textD .textP .textE
  32.    04     .init_array .fini_array .jcr .dynamic .got .got.plt .data .bss
  33.    05     .dynamic
  34.    06     .note.ABI-tag .note.gnu.build-id

textD, .textP и .textE все сопоставлены с сегментом 3, который дает права на чтение, запись и выполнение. Весьма вероятно, что код будет сгенерирован или выведен на эти сегменты во время выполнения программы.
Я удалил часть вывода для экономии места. Как вы можете видеть, в дополнение к обычному сегменту .text мы можем найти 3 дополнительных сегмента, начиная с 0x500000 (.textD), 0x501000 (.textP) и 0x502000 (.textE), причем все они имеют разрешения на выполнение.

просто снять дамп, максимум - снять конверт. редактор Bless-hex в помощь (Bless is a Hex Editor ).
 eXeL@B —› Протекторы —› Распаковка Hasp envelop конверта под Linux

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS