|
|
本帖最后由 青春向上 于 2025-10-23 22:39 编辑
位置签到页面是一个网址,通过算法助手等工具hook开启网页调试,详见:一个简单的web调试逆向
刚进来就在控制台中发现开发者遗留日志,点击切换至源代码:
发现代码:
- jsBridge.bind('CLIENT_USER_LOCATION', function(object){
- console.log("客户端返回的位置数据:"+JSON.stringify(object));
- //省略
- })
复制代码 问ai知:“这段代码涉及到 JSBridge(JavaScript 桥接) 的概念,通常用于 前端(Web)与客户端(Native,如 iOS、Android 应用)之间的通信。”并且阅读附近代码,再经过测试,发现可以通过以下代码重新获取位置:
- jsBridge.postNotification('CLIENT_USER_LOCATION',{message:''});
复制代码 说明位置信息是app告诉网页的,所以可以通过修改app改变返回值,进而伪造位置。但这里我们使用js修改已获取的值。
使用开发者工具定位签到按钮,发现调用sign函数
在控制台中输入sign,点击快速跳转源码:(也可通过搜索,但此处能使用“javascript:sign();”调用,说明window对象有它,进而可以在控制台输入)
sign源码:
- function sign(){
- var acId="xxx";
- $("#zopacity_info").show();
- $("#zopacity").show();
- var fid=$("#fid").val();
- var uid='xxx';
- var latitude=$("#latitude").val(); //维度
- var longitude=$("#longitude").val(); //经度
- var ip ="";
- var url="/pptSign/stuSignajax";
- if(chongfu>0){
- clientToast("不能重复签到");
- return;
- }else{
- //var classId="xxx";
- sendData2(url);//最终调用此方法
- }
- }
复制代码
sendData2源码:
- function sendData2(url){
- var activePrimaryId="xxx";
- //判断这个设备是否已经签到过了
- var lskey = "pptactive"+activePrimaryId;
- var lsvalue = window.localStorage[lskey];
- if(lsvalue){
- clientToast("同一设备不允许重复签到!");
- jsBridge.postNotification('CLIENT_EXIT_LEVEL', {}) ; //返回,退出网页
- return;
- }
- var addressP=$("#paramAddress").val(); //请求需要的数据
- var latitude=$("#latitude").val();
- var longitude=$("#longitude").val();
- var fid=$("#fid").val();
- if(res=="success"||res=="success2"){
- //签到成功,计入localStorage
- var lskey = "pptactive"+activePrimaryId;
- //window.localStorage[lskey] = 1;
- if(!window.localStorage[lskey]){
- window.localStorage[lskey] = new Date().Format("yyyy-MM-dd HH:mm:ss")+" "+name2+" "+'292679477'+" "+activePrimaryId;
- }
- <blockquote> var params =xxxx //一堆参数,包含姓名、位置名、经纬度、设备id等
复制代码 省略了许多代码,大概功能是:
1,查找localStorage判断是否已签到,避免换账号帮签。这是本地验证,还有通过设备id进行服务器验证。
2,获取一些数据,包含姓名、位置名、经纬度、设备id等,用于发送签到请求。
但它没有重新从app中获取位置信息,信息通过下列代码获取:
- var addressP=$("#paramAddress").val(); //请求需要的数据
- var latitude=$("#latitude").val();
- var longitude=$("#longitude").val();
- var fid=$("#fid").val();
复制代码 那伪造位置就简单了,直接使用js修改即可。
- $("#latitude").val('xxx');
- $("#longitude").val('xxx');
- $("#paramAddress").html('xxx');
- sign()//立即签到
复制代码 deviceCode从app中获取,在dex中添加随机id,详见“最终教程.txt”
简单使用postman伪造一个,返回success即成功。
经纬度用于判断是否位于签到地点
address、name只是显示
最后分享一个专门适配学习通app的纯js代码:
https://wds.ecsxs.com/231985.js |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|