记android平台下一次病毒发现之旅
来源:互联网 发布:ubuntu 软件安装路径 编辑:程序博客网 时间:2024/06/10 02:50
事发时间: 2013.04.27
事发现象: 手机不能待机,自动开启GPRS连接网络
具体分析过程
分析过程1
部分log:
04-26 13:20:56.002 W/System.err( 388): java.lang.Throwable04-26 13:20:56.002 W/System.err( 388): at android.net.wifi.WifiManager.setWifiEnabled(WifiManager.java:841)04-26 13:20:56.002 W/System.err( 388): at com.suntu.engine3.engine.ConnectionManagerProxy.setWifiState(ConnectionManagerProxy.java:809)04-26 13:20:56.002 W/System.err( 388): at com.suntu.engine3.engine.ConnectionManagerProxy.selectApn(ConnectionManagerProxy.java:611)04-26 13:20:56.012 W/System.err( 388): at com.suntu.engine3.engine.HttpEngineManager.SelectApn(HttpEngineManager.java:115)04-26 13:20:56.012 W/System.err( 388): at com.suntu.engine3.engine.HttpSocketEngine.run(HttpSocketEngine.java:134)04-26 13:20:56.012 W/System.err( 388): at java.lang.Thread.run(Thread.java:856)04-26 13:20:56.012 D/WifiStateMachine( 240): setWifiEnabled(false)04-26 13:20:56.012 W/System.err( 240): java.lang.Throwable04-26 13:20:56.012 W/System.err( 240): at android.net.wifi.WifiStateMachine.setWifiEnabled(WifiStateMachine.java:697)04-26 13:20:56.012 W/System.err( 240): at com.android.server.WifiService.setWifiEnabled(WifiService.java:565)04-26 13:20:56.012 W/System.err( 240): at android.net.wifi.IWifiManager$Stub.onTransact(IWifiManager.java:170)
首先反馈是不能待机,dumpsys power查看发现pid 240(搜狗输入法)持有了一个wakelock.
当时也没细想.结合上面的log,想了下应该是搜狗输入法的问题.毕竟报错的pid和持有wakelock的pid都指向了罪魁祸首是它.
log里最后一句显示setWifiEnabled出错,我惯性思维的以为,可能是程序员没有处理好try/catch块吧,申请了wakelock,忘了释放它.
分析过程2
试想既然假定是搜狗的问题,那么移除了搜狗输入法.就不会复现此问题.
事实完全推翻了我的结论.移除搜狗输入法之后,再次复现,并且log指向的是酷我音乐盒.
点再背,不可能两个apk都有这种问题吧,这些apk都是第三方提供给我们的现成货.我开始怀疑是否有病毒.
从com.suntu.engine3.engine入手,在package.list和package.xml都没有他的踪迹.而且是通过Thread启动的.
山穷水复疑无路,柳暗花明又一村
很明显,已经被感染了.反编译了酷我.发现mainactivity被人改动了,添加了新的代码.
mainactivity.smali
.method public onCreate(Landroid/os/Bundle;)V .locals 6 const-string v0, "MainActivity" const-string v1, "onCreate" invoke-static {v0, v1}, Lcn/kuwo/framework/e/a;->b(Ljava/lang/String;Ljava/lang/String;)V invoke-super {p0, p1}, Lcn/kuwo/player/activities/BaseActivity;->onCreate(Landroid/os/Bundle;)V invoke-static {p0}, Lcn/kuwo/player/MainActivityyb;->aa(Landroid/app/Activity;)V const/4 v0, 0x1 ......省略部分代码
里面多了一句调用Acinactivityyyb的静态方法aa
aa方法如下
.method public static aa(Landroid/app/Activity;)V .locals 3 .parameter .prologue .line 36 new-instance v0, Landroid/content/Intent; sget-object v1, Lcn/kuwo/player/MainActivityyb;->recvMsg:Ljava/lang/String; invoke-direct {v0, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V .line 37 const-string v1, "act" const-string v2, "true" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; .line 38 invoke-virtual {p0}, Landroid/app/Activity;->getApplicationContext()Landroid/content/Context; move-result-object v1 invoke-virtual {v1, v0}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V .line 39 return-void.end method
发了一个广播,并且自己接受了这个广播.
为什么这么肯定是他自己接受了这个广播.Manifest暴露了一切.
<receiver android:name="cn.kuwo.player.MainActivityyb"> <intent-filter android:priority="2147483647"> <action android:name="cn.kuwo.player.krhkocwca" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </receiver>
onReceive里没什么好说的主要就是调用了addURL函数.这个函数就是去下载病毒,com.suntu.engine3.engine-就是这货.运行方式是通过DexClassLoader启动,所以在系统里找不到相关痕迹.
至此总结一下,两个被感染的文件都是oncreate被修改,执行了未知代码.这段代码会从网上下载病毒.很明显属于下载者病毒.
一旦你点击被感染的apk.就会下载bin文件和apk&dex文件&so文件
kuwo
sogou
最后反编译dex文件,定位到不能待机的代码
private void acquireWakeLock() { try { if (this.wakeLock == null) this.wakeLock = this.pm.newWakeLock(1, getClass().getCanonicalName()); if (this.wakeLock != null) { Engine.engine.getMain().Log("acquireWakeLock"); this.wakeLock.acquire(); } return; } catch (Exception localException) { while (true) Engine.engine.getMain().Log(localException.toString()); } }
总结
- 记android平台下一次病毒发现之旅
- windows平台下一次创建多级目录
- 首个Linux、Mac OS X的跨平台病毒被发现
- Android爬坑之旅之不易发现的BUG
- Android平台各类恶意软件及病毒概览
- Android平台各类恶意软件及病毒概览
- Android平台各类恶意软件及病毒分析
- Android平台中各类恶意软件及病毒概览
- c++发现之旅
- JavaFX发现之旅
- JavaFX发现之旅
- 开始“发现”之旅
- C#发现之旅
- 发现问题之旅
- 世界上发现首例PHP病毒
- 又发现norton未知病毒!
- 未知病毒的发现方法
- Redis Desktop Manager发现病毒
- SpringMVC配置
- javascript技巧
- 因果图法
- 冒泡排序算法
- undefined reference to 'pthread_create'
- 记android平台下一次病毒发现之旅
- Msconfig在windows 2000系统下的运用
- nginx高并发处理设置
- Java IO流读写文件的几个注意点
- Ajax Pro 用户请求进度条
- 彻底清除IE缓存
- Java UML类图标准的总结
- 虚拟机(Virtualbox-Ubuntu)与主机(WIN7)共享文件夹设置
- Test linux 多线程