-
-
[原创]2015第2届移动安全挑战赛第一题分析
-
发表于: 2015-10-19 08:09 2695
-
设备iphone6plus ios9.0.2
安装失败,静态分析下,拖到hopper分析,看了下label列表,看到敏感方法 onClick,静态分析如下
用到加密方式:凯撒加密、AES
github上可以搜到Ceasar_CipherModel代码
还原代码如下:
安装失败,静态分析下,拖到hopper分析,看了下label列表,看到敏感方法 onClick,静态分析如下
-[ViewController onClick]: 0000b6a0 push {r4, r5, r6, r7, lr} ; Objective C Implementation defined at 0x1cd38 (instance) 0000b6a2 add r7, sp, #0xc 0000b6a4 push.w {r8, r10, r11} 0000b6a8 sub sp, #0x20 0000b6aa str r0, [sp, #0x10] 0000b6ac movw r0, #0x355c 0000b6b0 movt r0, #0x1 0000b6b4 movw r1, #0x354e 0000b6b8 movt r1, #0x1 0000b6bc movw r2, #0x3528 0000b6c0 movt r2, #0x1 0000b6c4 movw r3, #0x3534 0000b6c8 add r0, pc ; @selector(decrypt:password:) 0000b6ca movt r3, #0x1 0000b6ce movw r5, #0x352c 0000b6d2 add r1, pc ; @selector(originalMessage) 0000b6d4 movt r5, #0x1 0000b6d8 movw r6, #0x10e4 0000b6dc ldr r0, [r0] ; @selector(decrypt:password:) 0000b6de movt r6, #0x1 0000b6e2 str r0, [sp, #0x1c] 0000b6e4 add r3, pc ; @selector(setCodedMessage:) 0000b6e6 ldr r0, [r1] ; @selector(originalMessage) 0000b6e8 add r5, pc ; @selector(initWithCipherKey:) 0000b6ea str r0, [sp, #0x18] 0000b6ec movw r0, #0x343a 0000b6f0 movt r0, #0x1 0000b6f4 add r2, pc ; @selector(decrypt) 0000b6f6 add r0, pc ; @selector(alloc) 0000b6f8 ldr.w r8, [r3] ; @selector(setCodedMessage:) 0000b6fc ldr.w r10, [r5] ; @selector(initWithCipherKey:) 0000b700 add r6, pc ; @"mrMZAbjtZozDOGI9UeeH6g0iLHNnTNsFyzS0tYca4R3KkaQ0doxdDVuxZ7HoqYOcxFhgDiEvdGKix95VJNEUP8rdox4cm7GHVkbVcTJPmrTtH7hompW+xjTgGg2zQhs0tUGQ8lCggev2SNoWcaUOUU==" 0000b702 ldr r4, [r0] ; @selector(alloc) 0000b704 mov.w r11, #0x5 0000b708 ldr r1, [r2] ; @selector(decrypt) 0000b70a str r1, [sp, #0x14] 0000b70c movw r0, #0x38c2 ; XREF=-[ViewController onClick]+200 0000b710 mov r1, r4 ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b712 movt r0, #0x1 0000b716 add r0, pc ; objc_cls_ref_Ceasar_CipherModel 0000b718 ldr r0, [r0] ; objc_cls_ref_Ceasar_CipherModel, argument #1 for method imp___symbolstub1__objc_msgSend 0000b71a blx imp___symbolstub1__objc_msgSend 0000b71e sub.w r11, r11, #0x1 ------>设置ceasar_cipher model 的cipherKey,循环5次解密4,3,2,1,0 0000b722 mov r1, r10 ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b724 mov r2, r11 0000b726 blx imp___symbolstub1__objc_msgSend 0000b72a mov r5, r0 0000b72c mov r1, r8 ------------>设置setCodedMessage ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b72e mov r2, r6 0000b730 blx imp___symbolstub1__objc_msgSend 0000b734 ldr r1, [sp, #0x14] ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b736 mov r0, r5 ; argument #1 for method imp___symbolstub1__objc_msgSend 0000b738 blx imp___symbolstub1__objc_msgSend 0000b73c ldr r1, [sp, #0x18] ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b73e mov r0, r5 ; argument #1 for method imp___symbolstub1__objc_msgSend 0000b740 blx imp___symbolstub1__objc_msgSend 0000b744 mov r2, r0 ---->凯撒解密后的字符串用作aes解密 0000b746 movw r0, #0x388c 0000b74a movt r0, #0x1 0000b74e ldr r1, [sp, #0x1c] ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b750 add r0, pc ; objc_cls_ref_AESCrypt 0000b752 ldr r0, [r0] ; objc_cls_ref_AESCrypt, argument #1 for method imp___symbolstub1__objc_msgSend 0000b754 movw r3, #0x1098 0000b758 movt r3, #0x1 0000b75c add r3, pc --->aes解密秘钥 ; @"ZGlhb2RhX2ppYW5rYW5nCg==" 0000b75e blx imp___symbolstub1__objc_msgSend ---->对凯撒解密后的数据进行aes解密 0000b762 mov r6, r0 0000b764 cmp.w r11, #0x0 ------>循环 5次 0000b768 bgt 0xb70c 0000b76a movw r0, #0x346c 0000b76e mov r10, r4 0000b770 movt r0, #0x1 0000b774 ldr.w r8, [sp, #0x10] 0000b778 add r0, pc ; @selector(textFeild) 0000b77a ldr r1, [r0] ; @selector(textFeild), argument #2 for method imp___symbolstub1__objc_msgSend 0000b77c mov r0, r8 ; argument #1 for method imp___symbolstub1__objc_msgSend 0000b77e blx imp___symbolstub1__objc_msgSend 0000b782 movw r1, #0x349e 0000b786 movt r1, #0x1 0000b78a add r1, pc ; @selector(text) 0000b78c ldr r1, [r1] ; @selector(text), argument #2 for method imp___symbolstub1__objc_msgSend 0000b78e blx imp___symbolstub1__objc_msgSend 0000b792 movw r1, #0x3492 0000b796 movt r1, #0x1 0000b79a add r1, pc ; @selector(UTF8String) 0000b79c ldr r5, [r1] ; @selector(UTF8String) 0000b79e mov r1, r5 ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b7a0 blx imp___symbolstub1__objc_msgSend 0000b7a4 mov r4, r0 0000b7a6 mov r0, r6 ; argument #1 for method imp___symbolstub1__objc_msgSend 0000b7a8 mov r1, r5 ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b7aa blx imp___symbolstub1__objc_msgSend 0000b7ae mov r5, r0 0000b7b0 ldrb r0, [r5] ; "UTF8String" 0000b7b2 cmp r0, #0x0 0000b7b4 beq 0xb7d6 0000b7b6 ldrb r1, [r4] 0000b7b8 cmp r1, r0 0000b7ba bne 0xb7d2 0000b7bc movs r6, #0x1 0000b7be mov r0, r5 ; argument #1 for method imp___symbolstub1__strlen, XREF=-[ViewController onClick]+304 0000b7c0 blx imp___symbolstub1__strlen 0000b7c4 cmp r6, r0 0000b7c6 bhs 0xb7d6 0000b7c8 ldrb r0, [r5, r6] 0000b7ca ldrb r1, [r4, r6] 0000b7cc adds r6, #0x1 0000b7ce cmp r1, r0 0000b7d0 beq 0xb7be 0000b7d2 movs r4, #0x0 ; XREF=-[ViewController onClick]+282 0000b7d4 b 0xb7d8 0000b7d6 movs r4, #0x1 ; XREF=-[ViewController onClick]+276, -[ViewController onClick]+294 0000b7d8 movw r0, #0x37fe ; XREF=-[ViewController onClick]+308 0000b7dc mov r1, r10 ; argument #2 for method imp___symbolstub1__objc_msgSend 0000b7de movt r0, #0x1 0000b7e2 add r0, pc ; objc_cls_ref_UIAlertView 0000b7e4 ldr r0, [r0] ; objc_cls_ref_UIAlertView, argument #1 for method imp___symbolstub1__objc_msgSend 0000b7e6 blx imp___symbolstub1__objc_msgSend 0000b7ea movw r1, #0x3438 0000b7ee cmp r4, #0x1 0000b7f0 movt r1, #0x1 0000b7f4 movw r6, #0x1022 0000b7f8 add r1, pc ; @selector(initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:) 0000b7fa movt r6, #0x1 0000b7fe movw r2, #0xffa 0000b802 add r6, pc ; cfstring__S_m 0000b804 movt r2, #0x1 0000b808 ldr r1, [r1] ; @selector(initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:) 0000b80a add r2, pc ; @"" 0000b80c bne 0xb81a 0000b80e movw r3, #0xffe 0000b812 movt r3, #0x1 0000b816 add r3, pc ; cfstring____xcknx___b_R__eQ__ 0000b818 b 0xb824 0000b81a movw r3, #0x1022 ; XREF=-[ViewController onClick]+364 0000b81e movt r3, #0x1 0000b822 add r3, pc ; cfstring____x______ 0000b824 movw r5, #0x1002 ; XREF=-[ViewController onClick]+376 0000b828 movs r4, #0x0 0000b82a movt r5, #0x1 0000b82e str.w r8, [sp] 0000b832 add r5, pc ; cfstring_nx__ 0000b834 str r6, [sp, #0x4] 0000b836 str r5, [sp, #0x8] 0000b838 str r4, [sp, #0xc] 0000b83a blx imp___symbolstub1__objc_msgSend 0000b83e movw r1, #0x33ee 0000b842 movt r1, #0x1 0000b846 add r1, pc ; @selector(show) 0000b848 ldr r1, [r1] ; @selector(show) 0000b84a add sp, #0x20 0000b84c pop.w {r8, r10, r11} 0000b850 pop.w {r4, r5, r6, r7, lr} 0000b854 b.w 0x179c0 ; endp
用到加密方式:凯撒加密、AES
github上可以搜到Ceasar_CipherModel代码
还原代码如下:
NSString* data = @"mrMZAbjtZozDOGI9UeeH6g0iLHNnTNsFyzS0tYca4R3KkaQ0doxdDVuxZ7HoqYOcxFhgDiEvdGKix95VJNEUP8rdox4cm7GHVkbVcTJPmrTtH7hompW+xjTgGg2zQhs0tUGQ8lCggev2SNoWcaUOUU=="; NSString* password = @"ZGlhb2RhX2ppYW5rYW5nCg=="; int times = 5; do{ times--; Ceasar_CipherModel* model = [[Ceasar_CipherModel alloc] init]; model.cipherKey = times; model.codedMessage = data; [model decrypt]; data = [AESCrypt decrypt:model.originalMessage password:password]; }while (times > 0); NSLog(@"result : %@",data);
第一次: hDmx1/d5KNhr1BBYQlRNVsZSEaOdw4MtKTpT3082x/x9lZucw0qEm+UhMaOVuoSLyqD1x0elXGXqM4nFSP3W8khfyg1ynDEwLhLt12m68U8= 第二次: e1s6fwEoaC3l/4VLi1DA4KKPJdGcGWK3elMxPqOuG7MNa9fcfWu6gpui+m3q1akL 第三次: 4p2eb81lORtnnduYgcAc3pxfqGh8Fybny9NFnTzYJ6B= 第四次: QNEcNAUUYKq5mMZJTh3J5w== 第五次: Sp4rkDr0idKit
第一题结果为:Sp4rkDr0idKit
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
赞赏
雪币:
留言: