[原创]看雪CTF2017第6题 Ericky-apk

rozfex 2017-6-12 11:19 715

代码不是很多,大概的翻了一下,发现一个base64函数

.text:00005AFC                 PUSH.W          {R4-R10,LR}
.text:00005B00                 ADD             R7, SP, #0xC
.text:00005B02                 MOV             R9, R0
.text:00005B04                 MOVW            R0, #0x5556
.text:00005B08                 MOV             R10, R1
.text:00005B0A                 MOVT.W          R0, #0x5555
.text:00005B0E                 SMMUL.W         R0, R10, R0
.text:00005B12                 ADD.W           R0, R0, R0,LSR#31
.text:00005B16                 ADD.W           R1, R0, R0,LSL#1
.text:00005B1A                 SUB.W           R1, R10, R1
.text:00005B1E                 CMP             R1, #0
.text:00005B20                 IT GT
.text:00005B22                 ADDGT           R0, #1
.text:00005B24                 MOVS            R1, #1
.text:00005B26                 ORR.W           R6, R1, R0,LSL#2
.text:00005B2A                 MOV             R0, R6  ; size
.text:00005B2C                 BLX             malloc
.text:00005B30                 MOV             R8, R0
.text:00005B32                 CMP.W           R8, #0
.text:00005B36                 BEQ             loc_5BB8
.text:00005B38                 MOV             R0, R8
.text:00005B3A                 MOV             R1, R6
.text:00005B3C                 BLX             __aeabi_memclr
.text:00005B40                 MOV.W           R12, #0
.text:00005B44                 MOV             R1, R8
.text:00005B46                 CMP.W           R10, #0
.text:00005B4A                 BLE             loc_5BAE
.text:00005B4C                 LDR.W           LR, =(aAbcdefghijklmn - 0x5B58)
.text:00005B50                 MOVS            R3, #0
.text:00005B52                 MOV             R1, R8
.text:00005B54                 ADD             LR, PC  ; "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm"...
.text:00005B56
.text:00005B56 loc_5B56                                ; CODE XREF: sub_5AFC+B0j
.text:00005B56                 CMP             R3, R10
.text:00005B58                 BGE             loc_5B7C
.text:00005B5A                 ADD.W           R5, R9, R3
.text:00005B5E                 MOVS            R6, #0
.text:00005B60                 MOVS            R0, #0
.text:00005B62
.text:00005B62 loc_5B62                                ; CODE XREF: sub_5AFC+7Aj
.text:00005B62                 LDRB            R2, [R5,R6]
.text:00005B64                 ORR.W           R0, R2, R0,LSL#8
.text:00005B68                 ADDS            R2, R6, #1
.text:00005B6A                 CMP             R2, #2
.text:00005B6C                 BGT             loc_5B78
.text:00005B6E                 ADDS            R4, R3, R6
.text:00005B70                 MOV             R6, R2
.text:00005B72                 ADDS            R4, #1
.text:00005B74                 CMP             R4, R10
.text:00005B76                 BLT             loc_5B62
.text:00005B78
.text:00005B78 loc_5B78                                ; CODE XREF: sub_5AFC+70j
.text:00005B78                 ADD             R3, R2
.text:00005B7A                 B               loc_5B80
.text:00005B7C ; ---------------------------------------------------------------------------
.text:00005B7C
.text:00005B7C loc_5B7C                                ; CODE XREF: sub_5AFC+5Cj
.text:00005B7C                 MOVS            R2, #0
.text:00005B7E                 MOVS            R0, #0
.text:00005B80
.text:00005B80 loc_5B80                                ; CODE XREF: sub_5AFC+7Ej
.text:00005B80                 RSB.W           R4, R2, #3
.text:00005B84                 MOVS            R5, #0
.text:00005B86                 LSLS            R4, R4, #3
.text:00005B88                 LSLS            R0, R4
.text:00005B8A                 MOVS            R4, #0x12
.text:00005B8C
.text:00005B8C loc_5B8C                                ; CODE XREF: sub_5AFC+AAj
.text:00005B8C                 CMP             R2, R5
.text:00005B8E                 ITTE GE
.text:00005B90                 ASRGE.W         R6, R0, R4
.text:00005B94                 ANDGE.W         R6, R6, #0x3F
.text:00005B98                 MOVLT           R6, #0x40
.text:00005B9A                 SUBS            R4, #6
.text:00005B9C                 LDRB.W          R6, [LR,R6]
.text:00005BA0                 STRB            R6, [R1,R5]
.text:00005BA2                 ADDS            R5, #1
.text:00005BA4                 CMP             R5, #4
.text:00005BA6                 BNE             loc_5B8C
.text:00005BA8                 ADDS            R1, #4
.text:00005BAA                 CMP             R3, R10
.text:00005BAC                 BLT             loc_5B56
.text:00005BAE
.text:00005BAE loc_5BAE                                ; CODE XREF: sub_5AFC+4Ej
.text:00005BAE                 MOV             R0, R8
.text:00005BB0                 STRB.W          R12, [R1]
.text:00005BB4                 POP.W           {R4-R10,PC}
.text:00005BB8 ; ---------------------------------------------------------------------------
.text:00005BB8
.text:00005BB8 loc_5BB8                                ; CODE XREF: sub_5AFC+3Aj
.text:00005BB8                 MOVS            R0, #0  ; status
.text:00005BBA                 BLX             exit

动态的往下跟发现base64的结果跟字符串JPyjup3eCyJjlkV6DmSmGHQ=进行了比较,猜测可能是最后判断的地方了。

 

hookmalloc函数,发现so中有两处调用,第一处往下跟是存放输入的明文,第二处是将通过算法产生的数据存放,然后进行base64

 

在代码中发现很多段这样的小算法,中间通过多处跳转来混淆,由于代码比较少,选择了直接跟下去。

.text:00004ED6                 PUSH            {R0,R4,R5,R7,LR}
.text:00004ED8                 SUB             SP, SP, #8
.text:00004EDA                 MOV             R2, R2
.text:00004EDC                 ADD             SP, SP, #8
.text:00004EDE                 ADD.W           R0, R0, #1
.text:00004EE2                 SUB.W           R0, R0, #1
.text:00004EE6                 MOV             R3, R3
.text:00004EE8                 POP.W           {R0,R4,R5,R7,LR}
.text:00004EEC                 ADD.W           R1, R1, #1
.text:00004EF0                 SUB.W           R1, R1, #1
.text:00004EF4                 CMP             R1, #1
.text:00004EF6                 UXTB            R3, R3
.text:00004EF8                 LDR.W           R4, [R5,R3,LSL#2]
.text:00004EFC                 ADD             R6, R4
.text:00004EFE                 UXTB.W          R10, R6
.text:00004F02                 LDR.W           R7, [R5,R10,LSL#2]
.text:00004F06                 STR.W           R7, [R5,R3,LSL#2]
.text:00004F0A                 STR.W           R4, [R5,R10,LSL#2]
.text:00004F0E                 ADD             R4, R7
.text:00004F10                 UXTB            R4, R4
.text:00004F12                 LDRB            R7, [R2,#1]
.text:00004F14                 LDR.W           R4, [R5,R4,LSL#2]
.text:00004F18                 EOR.W           R4, R4, R7
.text:00004F1C                 STRB.W          R4, [LR,#1]
.text:00004F20                 PUSH.W          {R4-R10,LR}
.text:00004F24                 POP.W           {R4-R10,LR}
.text:00004F28                 B               sub_4F52

动态调试的时候发现有一张表取其中数据与明文进行异或,生成密文进行base64,算法如下:

#include <stdio.h>
 
int main() {
    unsigned char tab[] =
    {
        0xB7, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0xA6, 0x00,
        0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
        0x5B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5A, 0x00,
        0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x74, 0x00, 0x00, 0x00, 0xB2, 0x00, 0x00, 0x00, 0x43, 0x00,
        0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
        0xBE, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00, 0x26, 0x00,
        0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x00, 0x00,
        0x31, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0xCE, 0x00,
        0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00,
        0x70, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0xB1, 0x00,
        0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
        0x55, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xBD, 0x00,
        0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00,
        0xC5, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0x22, 0x00,
        0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
        0xFF, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0xF3, 0x00,
        0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00,
        0x87, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xDF, 0x00,
        0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00,
        0xBA, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x85, 0x00,
        0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00,
        0x32, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x2D, 0x00,
        0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00,
        0xE3, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0xBF, 0x00,
        0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,
        0x47, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x08, 0x00,
        0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00,
        0x7D, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x6D, 0x00,
        0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
        0x1C, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00, 0x94, 0x00,
        0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
        0xAF, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x62, 0x00,
        0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00,
        0x24, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x4C, 0x00,
        0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00,
        0x60, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0xC9, 0x00,
        0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00,
        0x77, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00, 0xAB, 0x00,
        0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00,
        0x3C, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x53, 0x00,
        0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x00,
        0x88, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x4D, 0x00,
        0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
        0xE7, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0xD2, 0x00,
        0x00, 0x00, 0xD1, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00,
        0x8B, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x0D, 0x00,
        0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00,
        0x0A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x82, 0x00,
        0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00,
        0x2F, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x5C, 0x00,
        0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
        0xD0, 0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0xBC, 0x00,
        0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00,
        0x90, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xF2, 0x00,
        0x00, 0x00, 0xB5, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
        0x79, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x2B, 0x00,
        0x00, 0x00, 0xFD, 0x00, 0x00, 0x00, 0xAD, 0x00, 0x00, 0x00,
        0xA5, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x16, 0x00,
        0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00,
        0x07, 0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0xDD, 0x00,
        0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00,
        0x25, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0xA7, 0x00,
        0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0xF9, 0x00, 0x00, 0x00,
        0x95, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x1B, 0x00,
        0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
        0xF7, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00, 0xC8, 0x00,
        0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00,
        0x86, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xB3, 0x00,
        0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
        0x80, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x41, 0x00,
        0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00,
        0x58, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0xD6, 0x00,
        0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
        0x81, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x67, 0x00,
        0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
        0xAC, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xE9, 0x00,
        0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
        0x19, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xD9, 0x00,
        0x00, 0x00, 0xC3, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
        0x4A, 0x00, 0x00, 0x00, 0xD3, 0x00, 0x00, 0x00, 0xE6, 0x00,
        0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00,
        0xD5, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x06, 0x00,
        0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
        0x9C, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 0x00, 0xFA, 0x00,
        0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00,
        0x76, 0x00, 0x00, 0x00, 0xDA, 0x00, 0x00, 0x00, 0x38, 0x00,
        0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
        0x28, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xF4, 0x00,
        0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
        0x52, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x7B, 0x00,
        0x00, 0x00, 0xA9, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
        0x9F, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x65, 0x00,
        0x00, 0x00, 0xF1, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
        0xEE, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x37, 0x00,
        0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00,
        0x5F, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x7E, 0x00,
        0x00, 0x00, 0xC2, 0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00,
        0x66, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0xFE, 0x00,
        0x00, 0x00, 0xF5, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
        0x2A, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x63, 0x00,
        0x00, 0x00, 0xE1, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
        0x54, 0x00, 0x00, 0x00
    };
 
    unsigned char str[18] = "12345678901234567";
    unsigned char rst[18];
    unsigned char cmp[] = {
        0x24,0xfc, 0xa3, 0xba, 0x9d, 0xde, 0x0b ,0x22,
        0x63, 0x96, 0x45 ,0x7a ,0x0e ,0x64 ,0xa6 ,0x18,
        0x74
    };
    unsigned char a,b,c,d;
    int r = 0;
 
    int len = strlen(str);
    for (int i = 1; i <= len; i++) {
        a = tab[i * 4];
        r = (r + a) & 0xff;
        b = tab[r * 4];
        tab[i * 4] = b;
        tab[r * 4] = a;
        c = a + b;
        d = tab[c * 4];
        rst[i-1] = cmp[i-1] ^ d;
    }
 
    return 0;
}

比较懒,直接把表抠了出来,算出来结果是madebyericky94528



快讯:[看雪招聘]十八年来,看雪平台输出了大量安全人才,影响三代安全人才!

最新回复 (0)
返回