Android Root方法原理解析及Hook(四) GingerBreak

和zergRush的攻击原理是一样的,其实zergRush的code部分源于GingerBreak,都是先使vold进程崩溃,从logcat拿到调试信息,然后让vold进程以root权限执行恶意的shellcode(boomsh),

       利用了android的/system/vold/DirectVolume.cpp中handlePartitionAdded()函数的漏洞

void DirectVolume::handlePartitionAdded(const char *devpath, NetlinkEvent *evt) {
	int major = atoi(evt->findParam("MAJOR"));
	int minor = atoi(evt->findParam("MINOR"));
	
	int part_num;
	const char *tmp = evt->findParam("PARTN");

	if (tmp) {
		part_num = atoi(tmp);
	} else {
		SLOGW("Kernel block uevent missing 'PARTN'");
		part_num = 1;
	}
+
	if (part_num > mDiskNumParts) {
		mDiskNumParts = part_num;
	}
	...
	if (part_num > MAX_PARTITIONS) {  //攻击点,如果part_num小于1
		SLOGE("Dv:partAdd: ignoring part_num = %d (max: %d)\n", part_num, MAX_PARTITIONS);
	} else {
		mPartMinors[part_num -1] = minor;
	}
	--mPendingPartsCount;
…
}


Android fixed patch and my hook code:

 

#include <cutils/log.h>
#define LOG_TAG “gingerbreak hooker”
void DirectVolume::handlePartitionAdded(const char *devpath, NetlinkEvent *evt) {
	int major = atoi(evt->findParam("MAJOR"));
	int minor = atoi(evt->findParam("MINOR"));
	
	int part_num;
	const char *tmp = evt->findParam("PARTN");

	if (tmp) {
		part_num = atoi(tmp);
	} else {
		SLOGW("Kernel block uevent missing 'PARTN'");
		part_num = 1;
	}
	
+	if (part_num > MAX_PARTITIONS || part_num < 1) {
+       SLOGE("Invalid 'PARTN' value");
+       return;
+	}

	
	if (part_num > mDiskNumParts) {
		mDiskNumParts = part_num;
	}
	...
	if (part_num >= MAX_PARTITIONS) { 
		SLOGE("Dv:partAdd: ignoring part_num = %d (max: %d)\n", part_num, MAX_PARTITIONS);
	} else {
		mPartMinors[part_num -1] = minor;
	}
	mPendingPartMap &= ~(1 << part_num);
…
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值