DESCIFRANDO TRUEBLUE - Parte 1: La máquina virtual por naehrwert

« Older   Newer »
 
  Share  
.
  1.     Like  
     
    .
    Avatar

    Lo que empiezo, lo termino.

    Group
    FUNDaDoR
    Posts
    12,533
    Location
    En algún lugar del Espacio

    Status
    Offline
    Gracias a oct0xor podríamos tener en nuestras manos la carga de TB descifrado (etapa 2). Por supuesto, lo primero que debe hacer es disparar en la AIF, nuestra herramienta favorita de la operación. El código de entrada de la carga útil es la siguiente:

    CODE
    01
    1337C0DE00000000 _start:
    02
    1337C0DE00000000
    03
    1337C0DE00000000. Conjunto var_58,-0x58
    04
    1337C0DE00000000. Conjunto arg_10, 0x10
    05
    1337C0DE00000000
    06
    1337C0DE00000000 mflr r0
    07
    1337C0DE00000004 bl loc_1337C0DE00000008
    08
    1337C0DE00000008 1337C0DE00000008 loc_1337C0DE00000008:
    09
    1337C0DE00000008 mflr r3
    10
    1337C0DE0000000C lis R4, 0 # 8
    11
    1337C0DE00000010 adi r4, r4, 8 # 8
    12
    1337C0DE00000014 subf. R3, R4, R3
    13
    1337C0DE00000018 beq skip_reloc
    14
    1337C0DE0000001C li R6, 0
    15
    1337C0DE00000020 oris r6, r6, 0x1337
    16
    1337C0DE00000024 ori r6, r6, 0xC0DE
    17
    1337C0DE00000028 lis r4, # 1 0xA848
    18
    1337C0DE0000002C adi r4, r4,-0x57B8 # 0xA848
    19
    1337C0DE00000030 lis r5, # 1 0x10D18
    20
    1337C0DE00000034 adi R5, R5, 0xD18 # 0x10D18
    21
    1337C0DE00000038 subf. R5, R4, R5
    22
    1337C0DE0000003C beq skip_reloc
    23
    1337C0DE00000040 SRDI. R5, R5, 3
    24
    1337C0DE00000044 mtctr r5
    25
    1337C0DE00000048 add r4, r4, r3
    26
    1337C0DE0000004C
    27
    1337C0DE0000004C reloc_loop:
    28
    1337C0DE0000004C LD R5, 0 (R4)
    29
    1337C0DE00000050 SRDI R7, R5, 32
    30
    1337C0DE00000054 cmpw r7, r6
    31
    1337C0DE00000058 bne skip_rewrite
    32
    1337C0DE0000005C clrldi R5, R5, 32
    33
    1337C0DE00000060 complemento R5, R5, R3
    34
    1337C0DE00000064 std r5, 0 (R4)
    35
    1337C0DE00000068
    36
    1337C0DE00000068 skip_rewrite:
    37
    1337C0DE00000068 adi r4, r4, 8
    38
    1337C0DE0000006C bdnz reloc_loop
    39
    1337C0DE00000070
    40
    1337C0DE00000070 skip_reloc:
    41
    1337C0DE00000070 std r0, arg_10 (r1)
    42
    1337C0DE00000074 STDU r1,-0x80 (r1)
    43
    1337C0DE00000078 std r2, 0x80 + var_58 (r1)
    44
    1337C0DE0000007C lis r4, # 1 0x17E40
    45
    1337C0DE00000080 adi r4, r4, # 0x7E40 0x17E40
    46
    1337C0DE00000084 complemento R2, R4, R3
    47
    1337C0DE00000088 bl payload_main

    En el primer bucle se va a reubicar con 0x1337C0DE como un identificador para los 32 bits superiores y volver a escribir que a la base real. El desmontaje anteriormente ya estaba cargado con 0x1337C0DE00000000 como base. Mientras se desplaza a través de la sección de datos al final de la carga útil una rápidamente se da cuenta de que la COTR es 0x1337C0DE00017E40.

    Como yo estaba analizando el código encontré un sub que era básicamente un interruptor muy grande, con valores aleatorios en busca de casos. Una vez que invierte en la sub 0x1337C0DE00002578 y algunos de los siguientes y se analiza su uso en los sub interruptor, yo sabía que me estaba mirando a una máquina virtual fricking.

    CODE
    1
    1337C0DE00002578 vm_push_word_0:
    2
    1337C0DE00002578 LD r11, off_1337C0DE00010128 # stack_ptr
    3
    1337C0DE0000257C ld r9, 0 (R11)
    4
    1337C0DE00002580 adi r0, r9, 4
    5
    1337C0DE00002584 std r0, 0 (R11)
    6
    1337C0DE00002588 STW r3, 4 (R9)
    7
    1337C0DE0000258C BLR

    Paranoid desarrolladores de tuberculosis, incluso utiliza XOR mesas para ocultar las instrucciones y los datos de VM.

    La máquina virtual es en su mayoría pila de base, pero las instrucciones que le permiten trabajar con registros también.

    La siguiente cosa a hacer es dejar sin efecto todas las instrucciones y escribir un desensamblador y el emulador.

    Aquí hay un código para descifrar el binario de máquina virtual embebida para una mayor investigación.

    Voy a escribir más naehrwert


    Edited by Zrandi - 2/6/2012, 23:24
     
    .
0 replies since 2/6/2012, 20:09   29 views
  Share  
.