Сейчас на форуме: (+5 невидимых)

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


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

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

-----
Research For Food




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 05 июля 2019 22:35
· Личное сообщение · #2

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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 05 июля 2019 22:44
· Личное сообщение · #3

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

-----
Research For Food





Ранг: 77.2 (постоянный), 73thx
Активность: 0.190.15
Статус: Участник

Создано: 05 июля 2019 22:45
· Личное сообщение · #4

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



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

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

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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 05 июля 2019 22:58 · Поправил: daFix
· Личное сообщение · #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 через прямые системные вызовы?

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

-----
Research For Food





Ранг: 77.2 (постоянный), 73thx
Активность: 0.190.15
Статус: Участник

Создано: 05 июля 2019 23:12
· Личное сообщение · #7

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



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

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

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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 05 июля 2019 23:16
· Личное сообщение · #9

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

-----
Research For Food




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 06 июля 2019 13:00
· Личное сообщение · #10

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

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

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2019 13:37
· Личное сообщение · #11

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



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 06 июля 2019 14:04
· Личное сообщение · #12

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

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2019 14:08
· Личное сообщение · #13

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

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


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 06 июля 2019 15:55
· Личное сообщение · #14

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

-----
Research For Food





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

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

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


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

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

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


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

-----
http://ntinfo.biz





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 июля 2019 21:39
· Личное сообщение · #16

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

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 07 июля 2019 22:24
· Личное сообщение · #17

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

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

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


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

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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 08 июля 2019 01:00
· Личное сообщение · #18

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

-----
Research For Food




Ранг: 20.8 (новичок), 7thx
Активность: 0.010.02
Статус: Участник

Создано: 08 июля 2019 17:59 · Поправил: int_256
· Личное сообщение · #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


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

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


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


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

-----
Research For Food





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

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

int_256

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

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

-----
vx




Ранг: 20.8 (новичок), 7thx
Активность: 0.010.02
Статус: Участник

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

difexacaw пишет:

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

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

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

Ранг: -1.3 (гость)
Активность: 0.01=0.01
Статус: Участник

Создано: 18 июля 2019 17:01 · Поправил: Lobido
· Личное сообщение · #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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 18 июля 2019 20:59
· Личное сообщение · #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 минут в статике разбирается. Каким образом это связано с задачей?

-----
Research For Food





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

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

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

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

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

Ранг: -1.3 (гость)
Активность: 0.01=0.01
Статус: Участник

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

Можно вопрос? Ну сделал я этот крякми, и что? За 15 минут в статике разбирается. Каким образом это связано с задачей? > Это намек).
Добавлением STAN ,The Ultimate Disassemble http://www.capstone-engine.org
возможно генерировать псевдокод из двоичного файла.
просто снять дамп, максимум - снять конверт. редактор Bless-hex в помощь (Bless is a Hex Editor ).




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 19 июля 2019 05:14
· Личное сообщение · #27

Lobido
Ок. Выше я уже написал о том что получилось питоном снять дамп. И сейчас проблема в том что структуры ELF файла изрядно попорчены протектором.
Система - огрызок, в ней ничего нету. Следовательно, устанавливать в систему что-то крайне проблематично
Lobido пишет:
Добавлением STAN

Тут можно поподробнее?
Lobido пишет:
The Ultimate Disassemble http://www.capstone-engine.org

IDA вполне справляется со своей задачей для ковыряния в дампе и реверса алгоритмов шифрования

-----
Research For Food





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 21 июля 2019 03:03 · Поправил: difexacaw
· Личное сообщение · #28

Lobido

Тоесть что бы в линях найти решение обычного юзер крэкми нужно работать с осевым загрузчиком и ядром ?

Есчо и в статике разобрать семпл, так это не крэкми тогда получается. Что ты в статике найдёшь в криптованном дампе..

> возможно генерировать псевдокод из двоичного файла.

А что делать со статик псевдо-кодом ?

У вас какие то специфические крэкми, самые простые походу, без криптовки и паковки. Блокнот что ле отлаживаете и для этого нужно трогать MBR ?

> необходимость в дополнительном загрузочном коде файловой системы отпадает.

Если такое нужно для отладки простейшего юзер апп, то даже представить стрёмно как отлаживать драйвера или юзер апп сложнее блокнота..

В этих строках чувствуется вся гибкость и удобство линей.)

Добавлено спустя 4 минуты
daFix

В линях наверно свои фишки. Я так и не понял зачем пересобирать ядро, можете объяснить для не шарящих в линях ?

-----
vx





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 21 июля 2019 03:59
· Личное сообщение · #29

difexacaw
Lobido походу увидел что кто-то реверсит что-то линуховое и не читая темы решил подкинуть крякми. Хз...
А товарищи сверху предлагали патчить ядро для обхода ограничения в один отладчик на процесс. Ну или тупо для того чтобы иметь возможность запилить отладку над всеми линуховыми Debug API

-----
Research For Food





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 21 июля 2019 04:14
· Личное сообщение · #30

daFix

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

-----
vx



. 1 . 2 . >>
 eXeL@B —› Протекторы —› Распаковка Hasp envelop конверта под Linux
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати