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

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

[cpp] view plain copy
  1. voidDirectVolume::handlePartitionAdded(constchar*devpath,NetlinkEvent*evt){
  2. intmajor=atoi(evt->findParam("MAJOR"));
  3. intminor=atoi(evt->findParam("MINOR"));
  4. intpart_num;
  5. constchar*tmp=evt->findParam("PARTN");
  6. if(tmp){
  7. part_num=atoi(tmp);
  8. }else{
  9. SLOGW("Kernelblockueventmissing'PARTN'");
  10. part_num=1;
  11. }
  12. +
  13. if(part_num>mDiskNumParts){
  14. mDiskNumParts=part_num;
  15. }
  16. ...
  17. if(part_num>MAX_PARTITIONS){//攻击点,如果part_num小于1
  18. SLOGE("Dv:partAdd:ignoringpart_num=%d(max:%d)\n",part_num,MAX_PARTITIONS);
  19. }else{
  20. mPartMinors[part_num-1]=minor;
  21. }
  22. --mPendingPartsCount;
  23. }


Android fixed patch and my hook code:

[cpp] view plain copy
  1. #include<cutils/log.h>
  2. #defineLOG_TAG“gingerbreakhooker”
  3. voidDirectVolume::handlePartitionAdded(constchar*devpath,NetlinkEvent*evt){
  4. intmajor=atoi(evt->findParam("MAJOR"));
  5. intminor=atoi(evt->findParam("MINOR"));
  6. intpart_num;
  7. constchar*tmp=evt->findParam("PARTN");
  8. if(tmp){
  9. part_num=atoi(tmp);
  10. }else{
  11. SLOGW("Kernelblockueventmissing'PARTN'");
  12. part_num=1;
  13. }
  14. +if(part_num>MAX_PARTITIONS||part_num<1){
  15. +SLOGE("Invalid'PARTN'value");
  16. +return;
  17. +}
  18. if(part_num>mDiskNumParts){
  19. mDiskNumParts=part_num;
  20. }
  21. ...
  22. if(part_num>=MAX_PARTITIONS){
  23. SLOGE("Dv:partAdd:ignoringpart_num=%d(max:%d)\n",part_num,MAX_PARTITIONS);
  24. }else{
  25. mPartMinors[part_num-1]=minor;
  26. }
  27. mPendingPartMap&=~(1<<part_num);
  28. }

更多相关文章

  1. Android之通过ContentProvider实现两个app(进程间)间通信以及函
  2. android开发退出程序的几种方式
  3. Android(安卓)ISurface PostBuffer 处理流程
  4. Android(安卓)关闭应用程序的6种方法
  5. Android(安卓)Activity分析
  6. android下查看内存阀值限制
  7. [Android(安卓)Pro] Android中全局Application的onCreate多次调
  8. Android(安卓)四大组件 - bindService 的通信过程
  9. Android(安卓)关闭整个应用程序

随机推荐

  1. Android 双击退出应用
  2. SystemServer 分析
  3. Android InputMonitor
  4. Android工程师面试准备知识点
  5. Android 实现序列化:Parcelable和Serializ
  6. Android Studio使用build.gradle引入gith
  7. android 使用Java自带的HttpURLConnectio
  8. Android删除Alarm的方法
  9. android Dialog 底部弹出
  10. Unity 读写文件之PC端&Android端