1. Си / Говнокод #26076

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    void sensor_init_regctl(void)
    
    {
      int iVar1;
      
                        /* Reading /rom/custom_setting_gm.ini
                           Setting I2CPortChange val from file */
      custom_setting_gm_get_I2C();
                        /* Checking for I2CPortChange in /rom/custom_setting_gm.ini
                           (default = 1) */
      iVar1 = GET_I2CPortChange_glob();
      if (iVar1 != 0) {system("rmmod gpioi2c"); usleep(50000);Regctl_main_function();system("insmod /npc/patch/gpioi2c2.ko");} return;}
    
    void Regctl_main_function(void)
    {
      uint uVar1; uVar1 = Regctl_set_ioctl5(0x90c00000,0x54);
      Regctl_set_2_dwWriteRegVal(-0x6f400000,0x54,uVar1 & 0xfffc3fff | 0x28000);
      return;
    }
    
    int Regctl_set_ioctl5(ulong param_1,ulong param_2)
    
    {
      int __fd;  int iVar1;  ulong local_20;  ulong uStack28;  int *local_10;  int iStack12;
    
      local_10 = &iStack12;
      local_20 = param_1;
      uStack28 = param_2;
      __fd = pl_open_file("/dev/regctl",2,"dwReadRegVal",0x1b);
      if (__fd == 0) {
        printf("%s: error:  open dev/misc/regctl  fail \n","dwReadRegVal");
      }
      else {
        iVar1 = ioctl(__fd,5,&local_20);
        if (iVar1 == -1) {
          printf("%s: error:  regctl ioctl fail \n","dwReadRegVal");
          pl_close_file(__fd,"dwReadRegVal",0x26);
          __fd = 0;
        }
        else {
          pl_close_file(__fd,"dwReadRegVal",0x2a);
          __fd = *local_10;
        }
      }
      return __fd;
    }
    int Regctl_set_2_dwWriteRegVal(int param_1,int param_2,int param_3)
    
    {
      int __fd; int iVar1; int local_24 [2];int local_1c; int local_18;int *local_c; local_c = local_24; local_24[0] = param_3;  local_1c = param_1; local_18 = param_2;
      __fd = pl_open_file("/dev/regctl",2,"dwWriteRegVal",0x3c);
      if (__fd == 0) {
        printf("%s: error:  open dev/misc/regctl  fail \n","dwWriteRegVal");
      }
      else {
        iVar1 = ioctl(__fd,1,&local_1c);
        if (iVar1 == -1) {
          printf("%s: error:  regctl ioctl fail \n","dwWriteRegVal");
          pl_close_file(__fd,"dwWriteRegVal",0x49);
          __fd = 0;
        }
        else {
          pl_close_file(__fd,"dwWriteRegVal",0x4d);
          __fd = 1;
        }
      }
      return __fd;
    }

    Помогите разреверсить код из прошивки камеры Rubetek RV-3414 (основана на SoC GrainMedia GM8136). Это код из Ghidra. Интересует функция Regctl_main_function.

    dump из strace:
    open("/dev/regctl", O_RDWR) = 3 <0.000901>
    ioctl(3, _IOC(_IOC_NONE, 0, 0x5, 0), 0x7eee2c18) = 0 <0.000308>
    close(3) = 0 <0.000256>
    open("/dev/regctl", O_RDWR) = 3 <0.000422>
    ioctl(3, FIBMAP, 0x7eee2c1c) = 0 <0.000105>
    close(3)

    local_20 и uStack28 - это struct?

    Запостил: a0a1, 10 Декабря 2019

    Комментарии (55) RSS

    • Бинарник (npc): http://wdfiles.ru/6h01 (armv5te)
      Ответить
      • GM8136 SDK:
        https://drive.google.com/file/d/0B40VEajjRUcHTmNuN2N0R3dWaUk/view?usp=sharing
        https://mega.nz/#!Ml9mhQwJ!h4WUydoOc7gGpUSkNCYpzd9uAOyUl oHHMvikItL2FS8
        https://www.dropbox.com/s/hnh8cydk4m2ab08/GM8136%20SDK%20release%20v1.0.rar?dl=0
        http://pan.baidu.com/share/link?uk=2553453276&shareid=3324610145
        Ответить
    • Это к @bormand и @j123123, может быть к @ikanus-gray
      Ответить
      • Хуй знает как гидра переменные нумерует... Если по оффсету во фрейме - да, похоже на структуру.
        Ответить
        • А в функции Regctl_set_2_dwWriteRegVal? Тоже структура?
          Ответить
    • а это автогенеренный код из асма?
      Ответить
      • ну разумеется
        Ответить
      • Это называется "декомпиляция". Для x86 см., например, snowman.
        Ответить
      • https://en.wikipedia.org/wiki/Ghidra
        Ответить
        • Блджад, сайт твоей ёбаной гидры не робит. 403.
          Ответить
          • лол) Вот архив: https://web.archive.org/web/20191128034612/https://www.ghidra-sre.org/ ))
            Ответить
            • Чья ты бутафория, эй-оу-эй-уан?
              Ответить
            • С «Гитхаба» можно вообще любую версию скачать, только компилировать самому придётся:
              https://github.com/NationalSecurityAgency/ghidra
              Ответить
          • Там вроде специально 403 чтобы русские хакеры этот инструмент не скачивали.
            Ответить
            • Точно, у меня через впн всё работает.

              Интересно, когда все долбоёбы поймут, что блочить по geoip — затея космической глупости?
              Ответить
              • Может проделки рук РКН?
                Ответить
                • Не. Там именно сами пиндосы блочили, насколько я помню.
                  Ответить
            • Вот пидоры.
              Ответить
            • Какая защита )))

              Сразу видно, что профессионалы своего дела.
              Ответить
              • А что по функции Regctl_set_2_dwWriteRegVal? Тоже структура?
                Ответить
    • uStack28 что-то нигде не используется, возможно это часть local_20, а в ioctl вторым параметром передается её размер 5. Судя по размеру структурка или массив.

      sizeof(ulong) == 4? Скорее всего 3 оставшихся бата от uStack28 для выравнивания.

      ЗЫ. бинарь лень разбирать.
      Ответить
      • Выровнял твои гланды, проверь.
        На, заебал.

        * g o a t s e x * g o a t s e x * g o a t s e x *
        g                                               g  
        o /     \             \            /    \       o
        a|       |             \          |      |      a
        t|       `.             |         |       :     t
        s`        |             |        \|       |     s
        e \       | /       /  \\\   --__ \\       :    e
        x  \      \/   _--~~          ~--__| \     |    x  
        *   \      \_-~                    ~-_\    |    *
        g    \_     \        _.--------.______\|   |    g
        o      \     \______// _ ___ _ (_(__>  \   |    o
        a       \   .  C ___)  ______ (_(____>  |  /    a
        t       /\ |   C ____)/      \ (_____>  |_/     t
        s      / /\|   C_____)       |  (___>   /  \    s
        e     |   (   _C_____)\______/  // _/ /     \   e
        x     |    \  |__   \\_________// (__/       |  x
        *    | \    \____)   `----   --'             |  *
        g    |  \_          ___\       /_          _/ | g
        o   |              /    |     |  \            | o
        a   |             |    /       \  \           | a
        t   |          / /    |         |  \           |t
        s   |         / /      \__/\___/    |          |s
        e  |           /        |    |       |         |e
        x  |          |         |    |       |         |x
        * g o a t s e x * g o a t s e x * g o a t s e x *
        Ответить
      • Да, скорей всего это структура.

        uint uVar1; uVar1 = Regctl_set_ioctl5(0x90c00000,0x54); printf("uVar1: %d\n", uVar1);

        Если заменить
        local_20 = param_1;
          uStack28 = param_2;
          iVar1 = ioctl(__fd,5,&local_20);

        на
        //пишу по памяти, не проверял
        typedef struct {
                unsigned int  a1;
                unsigned int  a2;
        }just_another_struct;
        just_another_struct my_struct;
          my_struct.a1 = param_1;
          my_struct.a2 = param_2;
          iVar1 = ioctl(__fd,5,&my_struct);


        то: в первом случае uVar1 - 0, в другом - положительная цифра
        Ответить
        • Сколько раз ты сел на хуй, прежде чем стал кодить на сях?
          Покайся, тут свои.
          Ответить
      • Второй параметр используется в regctl.ko. Ссылка на pastebin ниже
        Ответить
      • 5 - это номер ioctl'а.
        Ответить
        • тада первый парам это указитель на структуру?

          #define SNESTI_JAITSO 5

          ioctl(pointer_to_jaitso, SNESTI_JAITSO) ?
          Ответить
          • В первом параметре хендл девайса. Аргументы ioctl в третьем.
            Ответить
            • int ioctl(int fd, unsigned long request, ...);
              запрос поступает к создавшему дивайс дройверу?

              а стек е, как в пинде?
              Ответить
              • > стек
                Не, там всё намного проще. Полистай книжку про прыщедрова.
                Ответить
    • /dev/regctl создаёт модуль ядра regctl.ko

      Ссылка на бинарь: http://wdfiles.ru/6h0f

      На Pastebin (где код из Ghidra, функции, которая принимает ioctl): https://pastebin.com/raw/ctZ0dHze

      Весь код нужен для инициализации сенсора SC2135.
      Ответить
      • Вот тут - https://github.com/ZigFisher/Glutinium/blob/master/hisi-sensors/src/smartsens_sc2135/sc2135_sensor_ctl.c похоже на нужный код, только у меня grainmedia, а там hisilicon. К тому же там нормальная инициализация , а у меня какая-то магия с arm_ioremap
        Ответить
    • показать все, что скрытоДамп, детка, дамп,
      Давай снимем ДАМП!
      Ответить
    • показать все, что скрыто* g o a t s e x * g o a t s e x * g o a t s e x *
      g g
      o / \ \ / \ o
      a| | \ | | a
      t| `. | | : t
      s` | | \| | s
      e \ | / / \\\ --__ \\ : e
      x \ \/ _--~~ ~--__| \ | x
      * \ \_-~ ~-_\ | *
      g \_ \ _.--------.______\| | g
      o \ \______// _ ___ _ (_(__> \ | o
      a \ . C ___) ______ (_(____> | / a
      t /\ | C ____)/ \ (_____> |_/ t
      s / /\| C_____) | (___> / \ s
      e | ( _C_____)\______/ // _/ / \ e
      x | \ |__ \\_________// (__/ | x
      * | \ \____) `---- --' | *
      g | \_ ___\ /_ _/ | g
      o | / | | \ | o
      a | | / \ \ | a
      t | / / | | \ |t
      s | / / \__/\___/ | |s
      e | / | | | |e
      x | | | | | |x
      * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить
      • Какой анскилл )))
        Ответить
        • показать все, что скрытоНа, заебал.

          * g o a t s e x * g o a t s e x * g o a t s e x *
          g                                               g  
          o /     \             \            /    \       o
          a|       |             \          |      |      a
          t|       `.             |         |       :     t
          s`        |             |        \|       |     s
          e \       | /       /  \\\   --__ \\       :    e
          x  \      \/   _--~~          ~--__| \     |    x  
          *   \      \_-~                    ~-_\    |    *
          g    \_     \        _.--------.______\|   |    g
          o      \     \______// _ ___ _ (_(__>  \   |    o
          a       \   .  C ___)  ______ (_(____>  |  /    a
          t       /\ |   C ____)/      \ (_____>  |_/     t
          s      / /\|   C_____)       |  (___>   /  \    s
          e     |   (   _C_____)\______/  // _/ /     \   e
          x     |    \  |__   \\_________// (__/       |  x
          *    | \    \____)   `----   --'             |  *
          g    |  \_          ___\       /_          _/ | g
          o   |              /    |     |  \            | o
          a   |             |    /       \  \           | a
          t   |          / /    |         |  \           |t
          s   |         / /      \__/\___/    |          |s
          e  |           /        |    |       |         |e
          x  |          |         |    |       |         |x
          * g o a t s e x * g o a t s e x * g o a t s e x *
          Ответить
        • Нахуй ты отвечаешь уебку?
          Ответить
          • показать все, что скрытоНа, заебал.

            * g o a t s e x * g o a t s e x * g o a t s e x *
            g                                               g  
            o /     \             \            /    \       o
            a|       |             \          |      |      a
            t|       `.             |         |       :     t
            s`        |             |        \|       |     s
            e \       | /       /  \\\   --__ \\       :    e
            x  \      \/   _--~~          ~--__| \     |    x  
            *   \      \_-~                    ~-_\    |    *
            g    \_     \        _.--------.______\|   |    g
            o      \     \______// _ ___ _ (_(__>  \   |    o
            a       \   .  C ___)  ______ (_(____>  |  /    a
            t       /\ |   C ____)/      \ (_____>  |_/     t
            s      / /\|   C_____)       |  (___>   /  \    s
            e     |   (   _C_____)\______/  // _/ /     \   e
            x     |    \  |__   \\_________// (__/       |  x
            *    | \    \____)   `----   --'             |  *
            g    |  \_          ___\       /_          _/ | g
            o   |              /    |     |  \            | o
            a   |             |    /       \  \           | a
            t   |          / /    |         |  \           |t
            s   |         / /      \__/\___/    |          |s
            e  |           /        |    |       |         |e
            x  |          |         |    |       |         |x
            * g o a t s e x * g o a t s e x * g o a t s e x *
            Ответить
    • a0a1, вы прямо как 12-летний подросток, пытаетесь заебать весь мир своими никому не интересными проблемами.
      Что, если нет модерации на ресурсе, значит, надо тут же снимать штаны и начинать срать во все стороны?
      Ответить
    • О, помню реверсил эту хуйню.
      Ответить

    Добавить комментарий