• 【安全性测试】利用反编译查看对应activity的方法采用hook技术绑定劫持_入门


      本次主要为了研究手机端的安全性而写的一篇文章,在基于自己对手机安全性的研究下,想到了这些工具之间的结合,当然这也算是第一次对手机安全研究勇敢地踏出一步,也不知道是否成功,还是准备撞南墙撞到底吧!

      使用到的工具:dex2jar、jd-gui、夜神模拟器、adb、Android版eclipse 、xposed框架以及xposed的apk、测试使用到的apk

      语言:Java

      1.反编译过程:

      将使用到的apk把后缀名改为压缩包的形式,例如:a.apk改为a.rar,然后解决压缩。取出 classes.dex文件。

      

      将取出的classes.dex文件放到dex2jar.jar运行。

      将编译出来的classes-dex2jar.jar放到gui即可打开查看源码。

        当遇到反编译失败或者打开gui可能存在乱码时,建议下载最新版本。dex2jar下载地址:http://sourceforge.net/projects/dex2jar/files/      gui下载地址:http://jd.benow.ca/

    注:apk反编译的具体操作步骤可参考  https://blog.csdn.net/s13383754499/article/details/78914592

      2.夜神模拟器连接adb

      打开夜神模拟器直至打开Android桌面,等待的时间有点长。夜神模拟器打开Android桌面之后,打开dos界面,开始连接夜神模拟器。

      

      若遇到类似报错:unable to connect to :5555。可到夜神的.../nox/bin目录下,使用nox_adb连接。

      

      成功之后,再重新使用adb以上的命令,完成连接。

    注:若连接不上,需要设置为USB调试。设置-->开发者选项-->勾选USB调试。没有开发者选项时,点击关于手机/关于平板电脑,连续点击五次版本号,即可让开发者选项可视。

      3.eclipse连接夜神模拟器,DDMS查看xml

      通过adb连接了夜神模拟器之后,接着打开eclipse让夜神连接上来。

      Window-->Show View-->Others,选择Devices

        

      打开DDMS-File Exlorer-/data/data/测试apk的包名(DDMS可在Window-->Open Perspective-->Others,选择DDMS),找到相关xml可进行审阅。例如本次找到的xml有相关账号和密码。

      

       4.编写hook代码

      下载XposedBirdageApi.jar文件,然后将文件放置在新建的项目新建的目录下方。然后将XposedBirdageApi.jar添加到Libraries下。

      修改AndroidManifest.xml,添加相关内容:

      

        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.xposedtest.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <meta-data android:name="xposedmodule" android:value="true" />  
            <meta-data android:name="xposeddescription" android:value="第5次执行hook测试" />  
            <meta-data android:name="xposedminversion" android:value="54" />  
        </application>
    
    </manifest>

      

         <meta-data android:name="xposedmodule" android:value="true" />  
            <meta-data android:name="xposeddescription" android:value="第5次执行hook测试" />  
            <meta-data android:name="xposedminversion" android:value="54" />  注意:value填写是XposedBirdageApi.jar的版本或写比XposedBirdageApi.ja版本更低也可。

       在 assets添加xposed_init文件,文件填写 包名+class。(如:com.example.xposedtest.Main)

       编写hook代码,代码详情如下

    package com.example.xposedtest;
    
    import android.view.View;
    import de.robv.android.xposed.IXposedHookLoadPackage;
    import de.robv.android.xposed.XC_MethodHook;
    import de.robv.android.xposed.XposedBridge;
    import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
    
    import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
    public class Main implements IXposedHookLoadPackage{
    
        @Override
        public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
            // TODO Auto-generated method stub
            String activityname = "com.lkk.tyj.ui.login.LoginAndRegisterActivity";
            String packname = "com.lkk.tyj.ep";
            String fangfa = "onClick";
            if (!lpparam.packageName.equals(packname))  return;
            XposedBridge.log(lpparam.packageName);
            // findAndHookMethod(hook方法的类名,classLoader,hook方法名,hook方法参数...,XC_MethodHook)
            findAndHookMethod(activityname, lpparam.classLoader, fangfa, 
                    View.class,
                     new XC_MethodHook(){
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log("开始劫持了~");
    
                        }
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                             XposedBridge.log("结束劫持了~");
    //                         XposedBridge.log("参数1 = " + param.args[0]);
    //                         XposedBridge.log("参数2 = " + param.args[1]);
    //                         XposedBridge.log("参数3 = " + param.args[2]);
                            }
    
                        }
                    );
            
        }
    
    }

        5.夜神安装xposed的apk

        安装xposed的apk,可以用到 adb install -r  apk文件,安装到夜神模拟器。打开xposed install-->框架-->点击安装/更新,可能会出现无限重启。重启之后,看到激活即代表框架安装成功。

        

        6.安装hook到夜神

        选择项目点击run as-->android application,安装成功之后,xposed install-->模块,选择勾选hook模块,然后重启即可。

        

        注意:属于xposed模块,系统会自动识别。

        然后运行目标APP,再打开xposed install-->日志 查看内容即可。

        

        

  • 相关阅读:
    Hive学习之路 (三)Hive元数据信息对应MySQL数据库表
    Hive学习之路 (二)Hive安装
    Hive学习之路 (一)Hive初识
    MyBatis+Spring SQL效率测试报告
    Java NIO
    Endianess(字节次序)简介
    Maven重复类的解决
    [转]Unicode和UTF-8的关系
    Java IO 体系结构
    建造者模式(Builder)
  • 原文地址:https://www.cnblogs.com/mumushizhige/p/9297822.html
Copyright © 2020-2023  润新知