-
-
[原创]看雪CTF2017第6题 Ericky-apk
-
2017-6-12 11:19 2890
-
代码不是很多,大概的翻了一下,发现一个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=进行了比较,猜测可能是最后判断的地方了。
hook了malloc函数,发现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
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
看原图