之前都是在分析PE文件的,这个是找工作时的一个笔试题分析一个android恶意。用了一个星期熟悉java和android的东西然后写了这个分析有什么不对的地方还请大家见谅

1.基本信息

病毒名称:未知

病毒类型:含恶意广告

样本MD5:4360c2c29ed03898b925e07f4d648b4e

样本大小:7.43MB

2.概述

恶意代码部分先于程序启动加载自己的页面,用户只有点击“获取积分“,下载一个它提供的应用才获取积分能开始游戏,同时恶意代码获取手机的手机型号 系统版本 IMSI icd 等信息到发送到219.234.85.220/219.234.85.222。


3.静态分析

恶意代码在正常应用上进行绑定,恶意代码部分主要在下图标红部分。

android binder 代码 安卓代码分析_系统版本

manifest.xml分析


权限列表

<uses-permission android:name="android.permission.VIBRATE" />允许设备振动
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 操作外部存储设备
    <uses-permission android:name="android.permission.INTERNET" />允许打开网络套接字
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />允许安装程序
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />允许程序访问有关GSM网

信息

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />允许程序访问Wi-Fi网络状态信息
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />读取电话状态
<uses-permission android:name="android.permission.GET_TASKS" />允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等

恶意activity

     

<activity android:name="com.androidemu.gba.gba.Mym" android:configChanges="keyboardHidden|orientation" />
        <activity android:name="com.androidemu.gba.gba.LogOut" />
//

 

代码分析

分析程序入口

protected void onCreate(Bundle paramBundle) // 
  {
    this.settings = getSharedPreferences("MainActivity", 0);
    super.onCreate(paramBundle);
    setVolumeControlStream(3);
    setTitle(2131165197);
    getListView().setOnCreateContextMenuListener(this);
    this.creatingShortcut = "android.intent.action.CREATE_SHORTCUT".equals(getIntent().getAction());
    aeo(); //此函数中会开启  <activity android:name="com.androidemu.gba.gba.LogOut" />

  }
//
  public void aeo()
  {
    this.Captain = new Captain(this);
    if ((this.Captain.isOpen()) && (!Captain.PN.isGame))
    {
      AppConnect.getInstance("a5a4c7af109259db240c3a6917409553", "WAPS", this);//写入数据,获取网络状态
      AppConnect.getInstance(this).setAdViewClassName("com.androidemu.gba.gba.Mym");
// OfferName= com.androidemu.gba.gba.Mym  存储到"AppSettings
      startActivity(new Intent(this, LogOut.class)); 开启  <activity android:name="com.androidemu.gba.gba.LogOut" />
      finish();
    }
    while (true)
    {
      return;
      Captain.PN.isGame = false;
      klz();
    }
  }
//

分析class LogOut extends Activity

public void onCreate(Bundle paramBundle)
  {
    requestWindowFeature(1);
    getWindow().setFlags(1024, 1024);
    super.onCreate(paramBundle);
bujuset();//显示 积分大于0即可永久免费无广告全屏运行……等的窗口

如果积分大于0开始真正的游戏,否则如果“获取积分被点击”联网显示应用列表

上传手机信息。

 

AppConnect.getInstance(this);
  }
private void bujuset()
  {
    LinearLayout localLinearLayout = new LinearLayout(this);
    localLinearLayout.setGravity(17);
    localLinearLayout.setOrientation(1);
    TextView localTextView1 = new TextView(this);
    TextView localTextView2 = new TextView(this);
    localTextView2.setId(1);
    localTextView1.setWidth(-2);
    localTextView2.setWidth(-2);
    localTextView1.setGravity(17);
    localTextView2.setGravity(17);
    Button localButton1 = new Button(this);
    Button localButton2 = new Button(this);
    localButton1.setHeight(90);
    localButton2.setHeight(90);
    ImageView localImageView = new ImageView(this);
    localImageView.setImageResource(2130837504);
    localTextView1.setText("积分大于0即可永久免费无广告全屏运行");
    localTextView2.setText("积分加载中...");
    localButton1.setText("开始游戏");
    localButton2.setText("免费获取积分");
    localLinearLayout.addView(localImageView);
    localLinearLayout.addView(localTextView1);
    localLinearLayout.addView(localTextView2);
    localLinearLayout.addView(localButton1);
    localLinearLayout.addView(localButton2);
    setContentView(localLinearLayout);
    localButton1.setOnClickListener(new View.OnClickListener()//点击开始游戏
    {
      public void onClick(View paramView)
      {
        if (LogOut.this.point > 0)//如果几分大于0那么进入游戏
        {
          com.trendy.pokemontk.Captain.PN.isGame = true;
          Intent localIntent = LogOut.this.getBaseContext().getPackageManager().getLaunchIntentForPackage(LogOut.this.getBaseContext().getPackageName());
          localIntent.addFlags(67108864);
          LogOut.this.startActivity(localIntent);//开启游戏的activity com.trendy.pokemontk.Alarmreceiver
          LogOut.this.finish();
        }
        while (true)
        {
          return;
          com.trendy.pokemontk.Captain.PN.isGame = false;
          Toast.makeText(LogOut.this.getApplicationContext(), "积分不足,请点击免费获取积分的按钮", 1).show();
        }
      }
    });
    localButton2.setOnClickListener(new View.OnClickListener()//点击获取积分
    {
      public void onClick(View paramView)
      {
        AppConnect.getInstance(paramView.getContext()).showOffers(paramView.getContext());
      }
    });
  }

  public void showOffers(Context paramContext)
  {
a(paramContext, b, y.e + this.H); 
paramContext, 
b,
http://app .wapx.cn /action/ account/offerlist?
  }
private void a(Context paramContext, String paramString1, String paramString2)
  {
    try
    {
      Intent localIntent = new Intent(paramContext, h(paramContext));
//参数二: com.androidemu.gba.gba.Mym
 //另:public class Mym extends OffersWebView
      localIntent.setFlags(268435456);
      localIntent.putExtra("Offers_URL", paramString2); //http://app .wapx.cn /action/ account/offerlist?广告应用列表地址
      localIntent.putExtra("USER_ID", paramString1);
      localIntent.putExtra("URL_PARAMS", c);
      localIntent.putExtra("CLIENT_PACKAGE", this.J);
      localIntent.putExtra("offers_webview_tag", "OffersWebView");
      paramContext.startActivity(localIntent);//启动activity com.androidemu.gba.gba.Mym

显示 广告 发送手机型号 系统版本 IMSI icd 等信息到219.234.85.220


return;
    }
    catch (Exception localException)
    {
      while (true)
        localException.printStackTrace();
    }
  }

分析 com.androidemu.gba.gba.Mym

com.androidemu.gba.gba.Mym的解析出现错误

android binder 代码 安卓代码分析_android binder 代码_02

但是根据开启activity的intent

l ocalIntent.putExtra("USER_ID", paramString1);
      localIntent.putExtra("URL_PARAMS", c);
      localIntent.putExtra("CLIENT_PACKAGE", this.J);
      localIntent.putExtra("offers_webview_tag", "OffersWebView");

可以推断这个部分是显示应用列表上传手机的相关信息。

如下图waps/SDKUtils包含的api以及抓包的分析也可以可推断。

android binder 代码 安卓代码分析_android binder 代码_03

android binder 代码 安卓代码分析_android binder 代码_04

抓包


1510  249.394056000   27.18.59.151 219.234.85.220  HTTP  607   GET /action/connect/active?app_id=a5a4c7af109259db240c3a6917409553&udid=250824171159829&imsi=310260371538173&net=wifi&base=wapx.cn&app_version=1.3.8&sdk_version=1.7.1&device_name=GT-N7000&device_brand=samsung&y=5ab68cc24a4025769552c1aec9cc36d7&device_type=android&os_version=2.3.4&country_code=CN&language=zh&cid=5ist3abgr1f1jt30q0sff2pkd81j7gsc&act=com.trendy.pokemontk.MainActivity&channel=WAPS&device_width=1024&device_height=600&at=1355563304240 HTTP/1.1

如上抓包的内容显示程序上传了手机型号 系统版本 imsi 等等信息。