首页
社区
课程
招聘
[原创]ALICTF2014 evilAPK400完整脱壳分析
发表于: 2014-9-30 00:28 49993

[原创]ALICTF2014 evilAPK400完整脱壳分析

2014-9-30 00:28
49993
收藏
免费 4
支持
分享
最新回复 (52)
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
26
楼主好人啊。。这文章很精彩。。让我们这种菜鸟认识了安卓壳的基本原理
2014-11-13 14:21
0
雪    币: 236
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
下载了,学习下先,感谢分享~~
2014-11-18 17:45
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
楼主威武、360加固保有办法搞定没有?
2014-11-19 09:46
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
感谢深夜放福利
2015-1-5 15:18
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
楼主威武,下载学习。
2015-1-5 15:43
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
支持下。。。。。。。。。。。。。
2015-1-5 15:55
0
雪    币: 206
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
第三方加固怎么解啊
2015-1-5 20:05
0
雪    币: 274
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
支持   ·
2015-1-6 11:35
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
大神的文章,学习学习。。
2015-1-7 14:48
0
雪    币: 205
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
35
学习一下
2015-1-22 16:56
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
标记学习,感谢分享思路
2015-2-3 00:32
0
雪    币: 87
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
感谢分享,后排支持
2015-2-3 22:05
0
雪    币: 123
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
38
威武!学习
2015-2-10 13:14
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
39
可能下面我提的问题比较菜,很渴望得到作者及各位大神的热心解答,在看完了这片脱壳分析的帖子之后,做了尝试,看了作者的文档分析,觉得非常好,并且看了好两天,但是有些谜团仍然没有揭开,下面是我得问题?
   分析过程的遗留问题:
1.到底函数的头在哪里,是不是在JNI_Onload呢,但到底是从哪里开始跳转向KeyFunction的呢?
(这个过程是怎么执行得呢),在一开始得Application中得几个native方法是怎么执行得呢?
2.ali:isDalvik这个变量到底指代的是什么呢,在arm汇编中这些临时变量的值在哪里呢?为什么要取ali:isDalvik的第一个字节来判断是否为0呢,这个到底代表什么??
3.r0=struct1,可是为什么struct1中0x8偏移处又保存的是cls.jar的绝对地址了呢,前面分析的时候是把内存中读到的1024个字节数据的收地址放在了struct1中0x8偏移处阿,怎么现在成了cls.jar的绝对地址呢,这个1024个字节到底是什么东西???
4.在查找内存加载函数的时候,首先是找到libdvm.so的位置,然后再在libdvm.so中查找相应的内存加载函数,这里就是查找openDexFile函数(这是针对4.0以上的情况),但是分析汇编代码的时候,为什么看到作者是这么写的,先通过dlsym获取dvm_dalvik_system_DexFile这个符号,然后再通过lookup这个函数来查找openDexFile这个函数呢(当然,这里都是针对4.0以上 的情况来说的)
2015-3-2 16:24
0
雪    币: 65
活跃值: (112)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
40
欢迎参加ALICTF 2015
2015-3-2 17:01
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
41
学习逆向,多百度/google,多学习相关理论知识还是很有必要的。从你的问题来看,相关理论知识不是很了解,建议花点时间充充电  
第一个问题:这方面的知识不是一两句能说清楚的,不过你可以从google或linker源码中找到答案,简要一句话就是“so文件的init段中的函数(如果有的话)是在加载完so之后第一时间执行的,比jni_onload早”,而你说的函数的头,就是init段里面的函数~~
第二个问题ali:isDalvik是一个全局变量,它是在ali::init_classes函数里面进行初始化的,至于“为什么要取ali:isDalvik的第一个字节来判断是否为0”,是因为在这个init_classes函数里面设定了ali:isDalvik的第一个字节为0,来表示处于DVM运行环境~因为整个加固都是基于DVM的。
第三个问题:可能是我的描述不准确,将“绝对地址”改为“绝对路径”你应该就不会迷糊了~~~
至于第四个问题:我建议你多看看dlopen dlsym机制之后再回想一下,这个真的不是个问题~~

共勉~
2015-3-2 20:43
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
42
亲,你确定我也可以参加?
2015-3-2 20:44
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
43
谢谢万大神的悉心教导,确实发现你指出的一些关键点,我也总结了下:
之前虽然看过linker这方面的一些东西,但是发现是一些皮毛,没有很深入地去与实际场景比较,因此造成现在出现这种疑难杂症,我同时也发现自己对源码地阅读还是处于第一个阶段,比较粗浅,所以以后以后一定多多努力!
这些问题困扰了我挺长时间的,再次谢谢你的诚挚解答啊,以后有问题可能还要多向你讨教,谢谢!
2015-3-3 09:49
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
研究一下。
2015-3-6 11:26
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
喜欢这种
2015-5-12 18:10
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
抽抽,威武
2015-5-18 11:55
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
不错 最近我也在研究这个
2015-9-20 02:20
0
雪    币: 28
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
在其他地方看到wanchouchou感觉熟悉,原来在这里
2015-9-20 22:54
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
楼主能分享一下原版的apk文件吗,想复现一下。。。。
2015-9-25 15:02
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
50
这个时间过于久远,我也找不到了。你论坛里面搜搜看。
2015-9-26 00:42
0
游客
登录 | 注册 方可回帖
返回
//