首页
社区
课程
招聘
[原创]MSC解题报告
2015-1-26 19:17 20689

[原创]MSC解题报告

2015-1-26 19:17
20689
收藏
点赞1
打赏
分享
最新回复 (50)
雪    币: 709
活跃值: (2240)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 25 2015-1-27 10:33
26
0
牛鼻,android大牛,学习了
雪    币: 368
活跃值: (1181)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
ThomasKing 6 2015-1-27 11:08
27
0
跪拜博士大牛!
雪    币: 429
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2015-1-27 11:14
28
0
常备武器库,结合动态分析,果然高效啊
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
waylife 2015-1-27 11:55
29
0
厉害,各种奇淫技巧
雪    币: 18
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
deadxing 2015-1-27 12:00
30
0
前来学习!!!
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dratiger 2015-1-27 12:02
31
0
大牛真是神啊!第三题我也是把进程的内存dump出来的,不过里面搜索出来的dex都不正确。不知道问题出在哪里?
雪    币: 57
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
中流 2015-1-27 12:24
32
0
围观一下,恭喜楼主
雪    币: 3094
活跃值: (224)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
kwanhua 2015-1-27 14:41
33
0
谢谢大牛分享....能给下apk吗?我等渣渣拿不到后几题的apk
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
heartbeast 2015-1-27 15:07
34
0
别用百度了,用Google
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
heartbeast 2015-1-27 15:08
35
0
DIAS:Automated Online Analysis for Android Applications PDF在这里,不知道你们能不能看:
http://xplorebcpaz.ieee.org/stamp/stamp.jsp?tp=&arnumber=6984671
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Matrix 2015-1-27 16:16
36
0
第三题算法相关的代码:

http://akana.mobiseclab.org/index.jsp?type=result&md5=HW27879e3820a3ca5487e66e7b3417f6a170f0dcb5d9ccf4a4c619b24bbc6e3ab080dad30f2c3bffe1def2bd74749ce23b

给大家参考
雪    币: 201
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Litche 2015-1-27 17:05
37
0
apk能不能发出来下
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Matrix 2015-1-27 18:08
38
0
apk不是原版的啊。

另外,第四题的那个libmobisec.so保护的挺好,ida,甚至包括我们的解析工具,都完全失效了。比如说动态节区的打印的信息如下,完全是我们之前没遇到,值得学习。

index        d_tag        d_val_or_d_ptr
0        0x60198899        -1988738981
1        0x74389238        -1039113264
2        0xe4194519        -594982116
3        0x12a1cca9        1285437848
4        0xc89c6495        -935030432
5        0xc6d4c35f        -1848102621
6        0x50950898        1684645620
7        0x8a90424        943252561
8        0x431073c        -1862184825
9        0xbeccb25c        572517296
10        0xd4894c1c        -863408356
11        0xc489721c        -1131834596
12        0x47349122        1205084888
13        0xe3090390        -991386749
14        0xd02c2430        672402664
15        0x9bdc4241        -386939863
16        0x4a9c8482        -363248496
17        0xfa140bb4        -32548080
18        0x8dc2f063        -795603891
19        0x9f29a80d        -1541829864
雪    币: 88
活跃值: (131)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
chenwitch 2015-1-27 19:00
39
0
DIAS论文是收费的啊
雪    币: 6090
活跃值: (599)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
君君寒 2015-1-27 19:10
40
0
大家可能需要的论文
就是文中提及到的
希望有人翻译一下。
thx
上传的附件:
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jieniruyan 2015-1-28 11:25
41
0
好像不是同一篇
http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6984671
雪    币: 188
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Romangol 2015-1-29 11:25
42
0
论文原作者表示放一个更为完整的版本吧

见附件
上传的附件:
雪    币: 163
活跃值: (1233)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 1 2015-1-30 17:17
43
0
所以我把从0x1284到0x129C的地方都NOP了,在0x12AC的地方调用log函数。

这个arm汇编,nop指令对应的机器码是啥哈
雪    币: 163
活跃值: (1233)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 1 2015-1-30 18:02
44
0
我采用    指令所在地址+4+偏移量=跳转目标地址

这个偏移量算出来不对。
正确的公式是?
雪    币: 20
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rexdf 2015-1-30 19:16
45
0
感觉很高端的样子啊
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hmbhmb 2015-2-1 00:17
46
0
麻弊,简直是膜拜!!学霸太强了!有你一半功力就不得了了。
雪    币: 163
活跃值: (1233)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 1 2015-2-4 17:58
47
0
arm汇编的BL 比较好算
指令所在地址A ,目标地址B
(B-(A+8))/4

Thumb就比较复杂了,目前没找到通用的公式。
雪    币: 163
活跃值: (1233)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 1 2015-2-5 15:34
48
0
第二题
Java层没做什么,直接把输入放到底层的libcrackme.so里做了判断。发现JNI_Onload里做了些处理,接着securityCheck里面最后有判断,将输入和一个wojiushidaan做比较。输入后发现密码错误,因此可以猜测前面一大段逻辑的作用就是会把这个最终的字符串改掉。其实只需要知道最终判断时候那个地址上的值就行了,先尝试了调试,发现一旦attach就退出,做了反调试。注意到比较之前有个android_log_print函数,因此可以直接利用这个函数做打印。我选择patch方法是直接把这个函数往下移,因为在0x12A4地址处正好有需要的数据给了R2,所以我把从0x1284到0x129C的地方都NOP了,在0x12AC的地方调用log函数。把patch好的so直接放回去,随便输入就能看到最终比较的密码了。

原版的汇编

.text:00001284 92 FF FF EB                             BL      __android_log_print
.text:00001288 00 00 95 E5                             LDR     R0, [R5]
.text:0000128C 04 10 A0 E1                             MOV     R1, R4
.text:00001290 00 20 A0 E3                             MOV     R2, #0
.text:00001294 A4 32 90 E5                             LDR     R3, [R0,#JNINativeInterface.GetStringUTFChars]
.text:00001298 05 00 A0 E1                             MOV     R0, R5
.text:0000129C 33 FF 2F E1                             BLX     R3
.text:000012A0 60 10 9F E5                             LDR     R1, =(CheckPassword - 0x5FBC)
.text:000012A4 07 20 91 E7                             LDR     R2, [R1,R7] ; CheckPassword
.text:000012A8
.text:000012A8                         loc_12A8                                ; CODE XREF: Java_com_yaotong_crackme_MainActivity_securityCheck+120j
.text:000012A8 00 30 D2 E5                             LDRB    R3, [R2]
.text:000012AC 00 10 D0 E5                             LDRB    R1, [R0]
.text:000012B0 01 00 53 E1                             CMP     R3, R1

我改之后的汇编

.text:00001284 00 00 A0 E1                             NOP
.text:00001288 00 00 95 E5                             LDR     R0, [R5]
.text:0000128C 00 00 A0 E1                             NOP
.text:00001290 00 00 A0 E1                             NOP
.text:00001294 00 00 A0 E1                             NOP
.text:00001298 00 00 A0 E1                             NOP
.text:0000129C 00 00 A0 E1                             NOP
.text:000012A0 60 10 9F E5                             LDR     R1, =(off_628C - 0x5FBC)
.text:000012A4 07 20 91 E7                             LDR     R2, [R1,R7] ; off_628C
.text:000012A8
.text:000012A8                         loc_12A8                                ; CODE XREF: Java_com_yaotong_crackme_MainActivity_securityCheck+120j
.text:000012A8 04 00 A0 E3                             MOV     R0, #4
.text:000012AC 02 10 A0 E1                             MOV     R1, R2
.text:000012B0 87 FF FF EB                             BL      __android_log_print
.text:000012B4 05 00 00 1A                             BNE     loc_12D0

在修改当中,发现.text:00001288 00 00 95 E5                             LDR     R0, [R5]
改为00 00 A0 E1,程序在没进入函数前,程序就会崩溃。
DDMS的提示为:
02-05 06:39:32.430: A/libc(2490): Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 2490 (yaotong.crackme)

为什么会崩溃呢?
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NISL 2015-4-23 19:50
49
0
菜鸟问一句,拜读了那篇论文,是将下载那个Indroid压缩文件直接用第三方recovery刷,还是要单独编译啊,是用mmm吗?
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhengweird 2015-4-28 14:17
50
0
第五题的话我做了。。感觉就那个复杂的算法不知道怎么搞?楼主说暴力破解。可我看了算法复杂度有2^128呢。不知如何处理。
游客
登录 | 注册 方可回帖
返回