首页
社区
课程
招聘
[分享]基于xposed的关机窃听的demo
发表于: 2014-11-13 13:30 25528

[分享]基于xposed的关机窃听的demo

2014-11-13 13:30
25528

上个月的geekpwn中天才少年flanker做了个关机窃听的演示,感觉很高大上。后来flanker在微博中也透露了基本思路,但是没有放出writeup,伤心,不过还是要感谢flanker的思路。为了能追逐天才少年的步伐,自己最近写了个xposed模块,实现了geekpwn中演示的部分功能,供大家拿去玩耍吧。
PS:碰巧与天才少年的ID相似,我想我们的id都来自Su27吧。哈哈

没什么好写的,说一下大致的hook流程吧

1、hook关机时的提示按钮
 就是点“关机”按钮后弹出来的那个提示框中的“确定”按钮。
这是一个AlertDialog,所以hook住它的setPositiveButton函数,将参数中的onClickListener对象替换掉。
在自定义的onClickListener中实现,播放关机动画,设置屏幕超时等功能。
播放关机动画的地方有点问题,执行一次关机动画命令bootanimation只能播放大概5s钟就停了,为了播放的长一点,播放了两次,然后屏幕超时,自动熄屏。为了标明当前处在“假关机”状态,将状态写入了文件/data/local/tmp/1024.hack中,这应该是最简单的方法了吧,有人说还可以通过broadcast或者service来完成进程间通信,没有测试。

2、hook电源服务,防止屏幕亮起
hook住PowerManagerService中的setScreenStateLocked方法,阻止点亮屏幕。

3、处理电源按键
在“假关机”状态中处理电源按键,如果检测到长按,执行reboot命令重启手机,清除1024.hack中的假关机标志。

4、hook来电
hook 住CallNotifier中的handleMessage方法,如果检测到新的来电,直接调用PhoneUtils中的answerCall方法,就可以接通电话。

      没了,就实现了这么点东西。其中会有不少bug,尤其是在全局的标志文件1024.hack上。不知道天才flanker是怎么实现的。我自己也是想拿来玩玩的,也并没有像把它写成真正有攻击性的木马,毕竟那也是需要深厚功力的。另外,对于TK在微博中提到的那些细节点(参考教主微博http://weibo.com/1401527553/BsyghjzjZ?ref=&type=comment),个人只去想了一下那个“您拨打的电话已关机”,想用转接的方法实现,后来看了点资料,好像是没有方法能实时的转接一个进来的来电。不知道各位大牛有什么想法,有的话可以点拨一下小弟。

-----------------------------------
代码可以参考@monsterok牛的,我就不持续性丢人了。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (18)
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
膜拜楼下
2014-11-13 13:34
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
昨天刚好也发了个类似的。
https://github.com/monstersb/hijackAndroidPowerOff
2014-11-13 14:17
0
雪    币: 44
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
膜拜楼上
2014-11-13 14:24
0
雪    币: 97
活跃值: (98)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
同膜拜。代码要不要写的这么漂亮。
2014-11-13 15:09
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
为何这么6
2014-11-13 23:11
0
雪    币: 253
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感觉不出在实际应用场景中能经得起考验的实际意义,不用喷我,觉得这思路太小儿科了。如果有这权限,不想让它关机呢。
2014-11-14 09:06
0
雪    币: 148
活跃值: (278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
其实没啥意思,geohot才是天才少年,擦
2014-11-14 09:09
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
9
同膜拜楼上……
2014-11-14 12:55
0
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
不错不错
2014-11-14 19:13
0
雪    币: 215
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
其实不需要hook来电短信什么的. 在假关机的时候 直接强转为飞行模式,短信蓝牙WIFI都会挂掉呢!然后开机再上传!
2014-11-15 09:13
0
雪    币: 8
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
思路是差不多的,关于flag的问题,注意到注入到system_process之后,PowerManagerService这些模块是共享一个进程内存空间的,所以直接可以用一个class field来作为flag来代表当前状态,我看monster的代码里也是这么实现的。当然Phone进程和system_process不在一起,这个就不能这么做了。

看了下monster的代码,风格不错,有几个小问题
1. 没有处理震动事件
2. gotoSleep在一些机型上会有一闪而过的动画效果,和正常关机屏幕直接黑屏有区别。最好先写brightness标志位
3. 没有处理LED指示灯
4. “关机”之后再”开机“需要对电源按键的时间做判断,检测用户是否在意图开机,否则对用户来说就是按了很久却没有反应,比较可疑。

另外像楼上所说的,geohot才是真正的天才少年,我们都还要学习,哈哈
2014-11-15 13:41
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享!
2014-11-16 21:11
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看来以后还是要拔电池...

天才骚年能在不带电池的情况下实施监听吗?嘿嘿..

and...用Apple的高富帅貌似暂时不用担心这些问题呢..哈哈
2014-11-18 14:03
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
原来我们都被骗了。。。
2014-11-18 21:16
0
雪    币: 84
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习了。谢谢楼主!
2014-11-21 09:05
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
xposed对于某些方法不起效果
2014-11-26 22:05
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
膜拜……
2014-11-27 00:02
0
雪    币: 1906
活跃值: (712)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习ing,都是牛人
2014-11-27 09:48
0
游客
登录 | 注册 方可回帖
返回
//