android 绕过动态权限,android绕过permission验证及fork进程权限提升

脱壳时写patch补丁时Native代码并没有太高的权限,以至于如文件IO、网络IO等基本的C函数都无法使用,提示权限不足。在网上搜索了资料大致进行以下几种尝试:

1、APK在安装时会在/data/system/packages.xml记录当前app需要申请的权限,如下:

尝试将所有权限添加到此packages.xml里没有作用,测试失败,具体原因以后再看

ActivityManagerService.java (frameworks\base\services\java\com\android\server\am)中将checkPermission、checkCallingPermission、enforceCallingPermission函数返回值修改为PERMISSION_GRANTED,修改后编译framework.jar、framework2.jar、services.jar然后刷入机器测试发现此修改容易造成系统起不来,不稳定,具体原因以后再看;

3、修改zygote fork后的进程的权限,zygote fork进程最终会调用forkAndSpecializeCommon函数,在forkAndSpecializeCommon中会判断是不是启动systemserver进程还是其它app进程,其它进程的话permittedCapabilities和effectiveCapabilities将设置成0

文件名:/dalvik/vm/native/dalvik_system_Zygote.cpp

if (isSystemServer) {

/*

* Don't use GET_ARG_LONG here for now.  gcc is generating code

* that uses regis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android USB串口通信实现: 1. 首先需要在AndroidManifest.xml文件中添加USB权限: ```xml <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> ``` 2. 获取USB设备权限: ```java private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private UsbManager mUsbManager; private PendingIntent mPermissionIntent; private void requestPermission() { mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); registerReceiver(mUsbReceiver, filter); HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList(); for (UsbDevice device : deviceList.values()) { mUsbManager.requestPermission(device, mPermissionIntent); } } private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { // 权限获取成功,进行USB通信 } } else { // 权限获取失败 } } } } }; ``` 3. 进行USB通信: ```java private UsbDeviceConnection mConnection; private UsbEndpoint mEndpointIn; private UsbEndpoint mEndpointOut; private void setupDevice(UsbDevice device) { mConnection = mUsbManager.openDevice(device); if (mConnection != null && mConnection.claimInterface(device.getInterface(0), true)) { UsbInterface intf = device.getInterface(0); for (int i = 0; i < intf.getEndpointCount(); i++) { UsbEndpoint endpoint = intf.getEndpoint(i); if (endpoint.getDirection() == UsbConstants.USB_DIR_IN) { mEndpointIn = endpoint; } else if (endpoint.getDirection() == UsbConstants.USB_DIR_OUT) { mEndpointOut = endpoint; } } } else { mConnection = null; } } private void sendData(byte[] data) { if (mConnection != null && mEndpointOut != null) { mConnection.bulkTransfer(mEndpointOut, data, data.length, TIMEOUT); } } private byte[] readData() { byte[] buffer = new byte[1024]; if (mConnection != null && mEndpointIn != null) { mConnection.bulkTransfer(mEndpointIn, buffer, buffer.length, TIMEOUT); } return buffer; } ``` 绕过USB弹框验证: 1. 获取系统管理员权限: ```java public void getAdmin() { Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(this, AdminReceiver.class)); startActivityForResult(intent, REQUEST_CODE_ADD_DEVICE_ADMIN); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_ADD_DEVICE_ADMIN && resultCode == RESULT_OK) { // 系统管理员权限获取成功 } } ``` 2. 使用DevicePolicyManager方法进行操作: ```java private DevicePolicyManager mDpm; private void disableUsbDialog() { mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName componentName = new ComponentName(this, AdminReceiver.class); mDpm.addUserRestriction(componentName, UserManager.DISALLOW_USB_FILE_TRANSFER); } private void enableUsbDialog() { mDpm.clearUserRestriction(new ComponentName(this, AdminReceiver.class), UserManager.DISALLOW_USB_FILE_TRANSFER); } ``` 其中,AdminReceiver类需要继承DeviceAdminReceiver,并在AndroidManifest.xml文件中进行注册。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值