Android Unity3D 逆向截取交互事件(二) 之逆向修改dll并加入Java的接口

有需求是在完整的apk中截取Android Unity3D并暴露Java的接口。这次文章就是这方面实现的一个小例子。

首先反编译apk,把asserts/bin/manager 文件下的UnityEngine 中的getkey 方法加入调用Android代码的调用:

AndroidJNI.AttachCurrentThread();
    AndroidJNI.PushLocalFrame(0);
    try
    {
        Debug.Log("kyx_keyevent run");
        using (AndroidJavaClass class2 = new AndroidJavaClass("com.kuaiyouxi.keyevent.KYXUnityKeyEvent"))
        {
            object[] args = new object[] { key };
            key = (KeyCode) class2.CallStatic<object>("kyxKeyEvent", args);
        }
    }
    catch (Exception)
    {
        Debug.LogError("kyx_keyevent run");
    }
    finally
    {
        AndroidJNI.PopLocalFrame(IntPtr.Zero);
    }
return GetKeyString(name);

Debug.Log("kyx_keyevent "+(int)key);

Reflector 

package com.kuaiyouxi.keyevent;

import android.util.Log;

public class KYXUnityKeyEvent {
	public static int kyxKeyEvent(int obj){
		Log.e("kyx_keyevent", "run in kyx_keyevent"+obj);
		if(obj == 97 || obj == 100 || obj == 96 || obj == 23){
			obj = 0;
		}
		return obj;
	}
	
	public static String kyxKeyEventString(String obj){
		Log.e("kyx_keyevent", "run in kyx_keyevent"+obj);
		return obj;
	}
	
	public static int kyxKeyDownEvent(int obj){
		Log.e("kyx_keyDownevent", "run in kyx_keyDownevent"+obj);
		if(obj == 97 || obj == 100 || obj == 96 || obj == 23){
			obj = 0;
		}
		return obj;
	}
	
	public static String kyxKeyDownEventString(String obj){
		Log.e("kyx_keyDownevent", "run in kyx_keyDownevent"+obj);
		return obj;
	}
	
	public static int kyxKeyUpEvent(int obj){
		Log.e("kyx_keyUpevent", "run in kyx_keyUpevent"+obj);
		if(obj == 97 || obj == 100 || obj == 96 || obj == 23){
			obj = 0;
		}
		return obj;
	}
	
	public static String kyxKeyUpEventString(String obj){
		Log.e("kyx_keyUpevent", "run in kyx_keyUpevent"+obj);
		return obj;
	}
	
	
	
}

把这个程序编译打包成apk。然后反编译,把上诉代码的smali放进unity3d apk中,打包签名。就可以跑起来了。是不是很简单~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值