企业微信定位打卡
废话少说:定位修改软件链接奉上
一、定位打卡原理
GPS定位:企业微信可以利用手机的GPS功能进行定位,这是一种基于卫星的定位技术,能够提供相对精确的位置信息,通常精确度在20米以内。这种方式耗电较大,且在室内可能无法使用。
LBS定位技术:LBS(Location Based Services)定位技术是目前手机使用最普遍的定位方式。它通过手机信号塔或Wi-Fi网络来确定手机的位置,适用于大多数日常场景。
虚拟定位打卡的防止:企业微信提供了防止虚拟定位打卡的功能,可以识别虚拟定位软件等方式来篡改打卡定位的行为,并可选择“允许打卡,记录为地点异常”或者“禁止打卡”。目前此功能仅支持iOS平台,安卓平台暂不支持定位作弊检测。
拍照打卡和Wi-Fi打卡:企业微信还可以通过拍照打卡和配置Wi-Fi打卡来防止地点作弊打卡。这两种方式可以增加打卡的真实性,确保员工在指定地点打卡。
二、虚拟定位的漏洞
企业微信在定位打卡方面确实存在一些漏洞,这些漏洞被一些虚拟定位软件如Fake Location所利用,从而实现虚拟定位打卡。
企业微信允许设置固定的打卡时间,但如果没有正确设置,员工可能在非工作时间通过虚拟定位软件打卡,隐瞒迟到早退行为。对于外勤工作人员,由于不在公司,企业微信难以及时监管其工作情况,这为虚拟打卡提供了机会。而且企业微信目前只支持iOS平台的虚拟定位检测,安卓平台暂不支持定位作弊检测,这为安卓用户使用虚拟定位软件提供了便利。
三、Fake Location讲解
Fake Location可以在Root环境下对手机所处的位置进行模拟,并支持模拟时位置的快速切换,从而达到修改定位的目的。同时Fake Location也提供了无需Root的虚拟定位功能,用户可以通过选择模拟位置信息应用,设置Fake Location为模拟位置应用,从而实现虚拟定位。Fake Location可以随意篡改系统地理位置信息,被广泛应用于营销活动薅羊毛、虚拟站街等业务场景,同样适用于企业微信的虚拟打卡。用户可以在模拟器中安装企业微信和Fake Location,通过模拟器的Root权限进行虚拟定位,从而在企业微信上完成异地定位打卡。
Fake Location的下载链接在此。
附录:定位原理
本部分供技术工作者进行相关分析讨论。
1.工作原理
劫持LocationManagerService服务: Fake Location的核心技术在于通过“Hook”手段劫持Android系统中的LocationManagerService服务中的相关函数。LocationManagerService是Android系统中负责处理位置信息的服务,运行在system_server进程中。
返回预设地理位置信息: 当应用程序请求地理位置信息时,被劫持的LocationManagerService会返回Fake Location预先设置的地理位置信息,从而实现地理位置的篡改。
隐蔽性和难以检测性: Fake Location与传统的改定位工具不同,它直接劫持系统位置服务,而不是在目标应用进程空间内操作,因此更加隐蔽且难以被检测。Fake Location实施攻击的步骤
以下是Android中实现GPS定位功能的基本代码示例,Fake Location可能通过修改或劫持这些部分来实现其功能:
// 获取LocationManager实例
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// 创建并绑定LocationListener,监听定位信息的变化
LocationListener locationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {double latitude = location.getLatitude();double longitude = location.getLongitude();Log.d("Location", "Latitude: " + latitude + ", Longitude: " + longitude);}// 其他方法省略...
};// 请求定位更新
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener);
2.攻击步骤
释放恶意模块payload: Fake Location在启动时会释放一些恶意样本到特定的目录,如/data/data/com.lerist.fakelocation/files。
向system_server进程注入恶意模块payload: 通过动态分析手段,Fake Location将payload注入到system_server进程中,实现对LocationManagerService服务的劫持。
加载hook模块: libfakeloc_init.so被注入到system_server进程中,并加载hook模块libfakeloc.so,这是一个apk文件。libfakeloc.so加载后会执行类com.lerist.inject.fakelocation.InjectDex的init方法,在这个方法里,Fake Location添加了一些“系统服务”,用于跨进程通信。
3.分解分析
Fake Location通过劫持Android系统中的LocationManagerService
服务来实现地理位置的模拟。LocationManagerService
是Android系统中负责处理位置信息的服务,运行在system_server
进程中。以下是相关代码示例:
// 创建LocationManager实例
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// 请求位置更新
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0.0f, mLocationListener);
Fake Location通过劫持LocationManagerService
中的requestLocationUpdates
方法,使得当应用调用此方法时,返回的是Fake Location预设的地理位置信息,而不是真实的GPS位置信息。
// 定位实现
private LocationListener mLocationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {if(callback!=null){callback.onDataChange(location);}}
};
Fake Location与传统的改定位工具不同,它直接劫持系统位置服务,而不是在目标应用进程空间内操作,因此更加隐蔽且难以被检测。Fake Location在启动时会释放一些恶意样本到特定的目录,如/data/data/com.lerist.fakelocation/files
。
通过动态分析手段,Fake Location将payload注入到system_server
进程中,实现对LocationManagerService
服务的劫持。
Java.perform(function () {let C4921 = Java.use("u0D5F.u0560");C4921["u052A"].implementation = function () {console.log(`C4921.m18343 is called`);let result = this["u052A"]();console.log(`C4921.m18343 result=${result}`);return true;};
});
libfakeloc_init.so
被注入到system_server
进程中,并加载hook模块libfakeloc.so
,这是一个apk文件。libfakeloc.so
加载后会执行类com.lerist.inject.fakelocation.InjectDex
的init
方法,在这个方法里,Fake Location添加了一些“系统服务”,用于跨进程通信。
Fake Location通过设置回调机制,当地理位置信息发生变化时,回调相应的方法,从而实现地理位置的模拟。
public static interface Callback {void onDataChange(Location location);
}
4.攻击防御
对于应用程序来说,应该仅在必要时请求位置权限,并且在不需要时释放这些权限。以下是Android中请求和释放位置权限的代码示例:
// 请求位置权限
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
}// 释放位置更新
locationManager.removeUpdates(locationListener);
同时也可以通过检测设备是否被root以及是否有模拟位置的应用安装来增加安全性。以下是检测设备是否被root的代码示例:
public static boolean isDeviceRooted() {String[] paths = {"/sbin/", "/system/bin/", "/system/xbin/", "/data/local/xbin/", "/data/local/bin/", "/system/sbin/", "/usr/sbin/", "/usr/bin/"};for (String path : paths) {if (new File(path + "su").exists() || new File(path + "busybox").exists()) {return true;}}return false;
}
安装和定期更新安全软件和防病毒程序,确保设备免受恶意软件的侵害。虽然这不是代码,但是它是防范Fake Location等恶意软件的重要措施。
在设备设置中禁用不必要的位置服务或定位功能,仅在需要时打开。以下是Android中禁用位置服务的代码示例
// 禁用位置服务
locationManager.removeUpdates(locationListener);
通过上述措施和代码示例,可以有效地防范Fake Location等定位修改软件的攻击,保护用户的位置信息安全。
相关文章:

企业微信定位打卡
废话少说:定位修改软件链接奉上 一、定位打卡原理 GPS定位:企业微信可以利用手机的GPS功能进行定位,这是一种基于卫星的定位技术,能够提供相对精确的位置信息,通常精确度在20米以内。这种方式耗电较大,且在…...
libaom 源码分析:码率控制介绍
码率控制 命令行码率控制选项:可以看到码率控制包括丢帧、resize、超分、码控模式、目标码率、目标上限下限(类似 x264、x265 中的 VBV)、码控偏置、GOP 码率等。Rate Control Options:--drop-frame=<arg> Temporal resampling threshold (buf %)--resize-mo…...

RK3568平台开发系列讲解(DMA篇)DMA engine使用
🚀返回专栏总目录 文章目录 一、申请DMA channel二、配置DMA channel的参数三、获取传输描述(tx descriptor)四、启动传输沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DMA子系统下有一个帮助测试的测试驱动(drivers/dma/dmatest.c), 从这个测试驱动入手我们了解…...
C++中的函数对象
C 中函数对象的定义和特点 定义:函数对象(Function Object)也叫仿函数(Functor),是一个类,这个类重载了函数调用运算符()。当创建这个类的对象后,可以像使用函数一样使用这个对象&am…...

Linux指标之平均负载(The Average load of Linux Metrics)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
盛最多水的容器
本节将数组与坐标轴共同组成一个容器,通过改变容器的两个端点使容器装的水最多,容器两个端点不断移动可以通过左右指针算法解决. 问题描述: 给定两个非负整数k1,k2...km每个数代表坐标中的一个点(i,ki).在坐标内绘制m条垂线,垂直线i的两个端点分别为(i,k1)和(i,0)找出其中的两…...

光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量时序光伏功率预测 (Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运行一个main即可运行,数据格式…...

java全栈day10--后端Web基础(基础知识)
引言:只要能通过浏览器访问的网站全是B/S架构,其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址:Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程,建议…...

使用爬虫时,如何确保数据的准确性?
在数字化时代,数据的准确性对于决策和分析至关重要。本文将探讨如何在使用Python爬虫时确保数据的准确性,并提供代码示例。 1. 数据清洗 数据清洗是确保数据准确性的首要步骤。在爬取数据后,需要对数据进行清洗,去除重复、无效和…...

Burp入门(4)-扫描功能介绍
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:burp功能介绍(1)_哔哩哔哩_bilibili 本文介绍burp的主动扫描和被动扫描功能。 一、主动扫描 工作原理: 主动…...
Tourtally:颠覆传统的AI智能旅行规划革命
# Tourtally:颠覆传统的AI智能旅行规划革命 在快速变化的旅行科技世界里,一个划时代的平台正在重新定义我们探索世界的方式。让我们一起认识 Tourtally,这个由人工智能驱动的旅行规划助手,正在彻底改变旅行体验。 ## 旅行规划的…...

chrome允许http网站打开摄像头和麦克风
第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址,点击启用 第三步 重启 Chrome:设置完成后,点击页面底部的 “Relaunch” 按钮,重新启动 Chrome 浏览器,使更改生效。...

视觉经典神经网络与复现:深入解析与实践指南
目录 引言 经典视觉神经网络模型详解 1. LeNet-5:卷积神经网络的先驱 LeNet-5的关键特点: 2. AlexNet:深度学习的突破 AlexNet的关键特点: 3. VGGNet:深度与简洁的平衡 VGGNet的关键特点: 4. ResNe…...

ByConity ELT 测试体验
在实际业务中,用户会基于不同的产品分别构建实时数仓和离线数仓。其中,实时数仓强调数据能够快速入库,且在入库的第一时间就可以进行分析,低时延的返回分析结果。而离线数仓强调复杂任务能够稳定的执行完,需要更好的内…...

对象键值对内容映射
对象映射: 数据字段的英文名映射为更易理解的中文标签进行展示。即数据字段英文名 -> 中文描述。 作用: 提高代码的可读性。支持数据字段与展示内容的解耦,方便修改展示语言或样式,而无需改动数据源。 映射特点:…...
《生成式 AI》课程 第7講:大型語言模型修練史 — 第二階段: 名師指點,發揮潛力 (兼談對 ChatGPT 做逆向工程與 LLaMA 時代的開始)
资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Springhttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的,共包含十个作业。…...

学习C#中的反射
在C#编程中,反射(Reflection)是一项强大且灵活的技术,它允许程序在运行时动态地获取类型信息、创建对象实例、调用方法、访问字段和属性等。这种机制极大地增强了程序的动态性和可扩展性,使得开发者能够在编译时未知的…...
学习使用jquery实现在指定div前面增加内容
学习使用jquery实现在指定div前面增加内容 设计思路代码示例 设计思路 选择要添加内容的指定元素: 使用jQuery选择器来选择你希望在其前添加内容的元素。例如,如果你有一个 元素,其ID为qipa250,你可以使用$(‘#qipa250’)来选择…...
react项目初始化配置步骤
1.npx create-react-app 项目名称 vue项目同理 2.去编辑器市场安装所需插件,例如ESlint以及Prettier-Code formatter formatiing-toggle 3.在项目中安装 ESLint 和 Prettier 及相关插件: 3.1: npm install --save-dev eslint prettier 3.2…...

vue使用百度富文本编辑器
1、安装 npm add vue-ueditor-wrap 或者 pnpm add vue-ueditor-wrap 进行安装 2、下载UEditor 官网:ueditor:rich text 富文本编辑器 - GitCode 整理好的:vue-ueditor: 百度编辑器JSP版 因为官方的我没用来,所以我自己找的另外的包 …...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...