Giter Site home page Giter Site logo

anyproxy-fgo-rule's People

Contributors

attt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

anyproxy-fgo-rule's Issues

留下使用方法,有缘人看到这里可以试试

在Ubuntu16.04系统上

sudo apt install curl git
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs gcc g++ make
sudo npm install -g anyproxy
git clone https://github.com/Attt/Anyproxy-fgo-rule.git
cd Anyproxy-fgo-rule/
anyproxy --rule ./fgo.js
# 打开localhost:8002,点左侧RootCA生成crt秘钥,然后会卡住,直接Ctrl c掉上条命令
sudo mkdir /usr/share/ca-certificates/mine
sudo cp /root/.anyproxy/certificates/rootCA.crt /usr/share/ca-certificates/mine
# root可替换成你的用户名,普通用户在/home/用户名/.anyproxy/certificates/rootCA.crt
sudo nano  /etc/ca-certificates.conf
# 没有nano也可以用vi或者gedit之类的编辑器
# 在最后一行加上 mine/rootCA.crt
# 保存退出
sudo update-ca-certificates
anyproxy --rule ./fgo.js --intercept
# 再次启动,点RootCA,扫码下载秘钥到手机
# 安装秘钥,以小米手机为例,设置-更多设置-系统安全-从SD卡安装 即可
# 在WLAN设置那里查看你当前的WiFi详情,代理那里改成手动,输入你电脑的IP,端口是8001
# 理论上讲就可以了

撤退胜利科技示例

/* 
	//modify
	撤退胜利
*/

module.exports = { * beforeSendRequest(requestDetail) {
	if ((requestDetail.url.indexOf('ac.php') != -1) && requestDetail.requestData.indexOf('key=battleresult')!=-1) {
		var newRequestData = requestDetail.requestData;
		var newReqBodyStr = newRequestData.toString();
		if(newReqBodyStr.indexOf('battleResult%22%3a3')!=-1){
			newReqBodyStr = newReqBodyStr.replace('elapsedTurn%22%3a1','elapsedTurn%22%3a3');
			newReqBodyStr = newReqBodyStr.replace('elapsedTurn%22%3a2','elapsedTurn%22%3a3');
			newReqBodyStr = newReqBodyStr.replace("battleResult%22%3a3", "battleResult%22%3a1");
			var regex1 = /aliveUniqueIds%22%3a%5b([\d+,%2c]+)%5d/gi;
			newReqBodyStr = newReqBodyStr.replace(regex1, "aliveUniqueIds%22%3a%5b%5d");
		}
		var b = new Buffer(newReqBodyStr);
		newRequestData = b;
		return {
			requestData: newRequestData
		};
	}
},
};

fiddlerScript.js

fiddlerScript.js reports error on line 1, as shown in the image

error

在安卓手机本机跑科技服务器

对于安卓5.0以上的安卓手机,我们可以用termux在本机跑科技服务器,从而彻底摆脱电脑或者云服务器。
以下是操作步骤:

  1. 下载安装termux
  2. 打开termux,它会联网安装环境。
  3. apt update,用官方源就行,不要用ustc的termux源,早就废了。
  4. apt install git nodejs nano 安装git、nodejs、nano
  5. npm install -g anyproxy 用npm安装anyproxy
  6. anyproxy-ca,之后提示是否创建证书,直接回车创建在/data/data/com.termux/files/home/.anyproxy/certificates/rootCA.crt。
  7. git clone https://github.com/Attt/Anyproxy-fgo-rule.git,把科技代码放在本地。
  8. termux-setup-storage,之后会提示是否授权termux访问本机媒体和文件,选择是,会在家目录新建storage文件夹通向手机存储。使得本来不共通的数据变得可以访问。
  9. cp /data/data/com.termux/files/home/.anyproxy/certificates/rootCA.crt /data/data/com.termux/files/home/storage/downloads/termux.crt,我这里改成了termux.crt,不改也行。
  10. 系统设置-系统安全-从SD卡安装里在download文件夹下找到termux.crt并安装。在termux里,update-ca-certificates不好使,跟普通的linux不一样,我们只要让安卓本身认识这个证书就好,不再需要让termux认识证书(termux可能用的就是系统证书,只能说一石二鸟)。
  11. nano Anyproxy-fgo-rule/any-fgo.sh,编辑any-fgo.sh,将fgo.js替换成/data/data/com.termux/files/home/Anyproxy-fgo-rule/fgo.js,绝对路径总是不会出错的。之后可以根据喜好编辑Anyproxy-fgo-rule/fgo.js来加撤退胜利等功能。
  12. chmod +x Anyproxy-fgo-rule/any-fgo.sh,加上可执行权限
  13. Anyproxy-fgo-rule/any-fgo.sh,开始运行科技。注意,termux里的netstat不好使,你可能看不到任何端口,想kill掉进程直接用ps -ef看吧,没几个进程,node那个就是。想看是否启动了anyproxy,直接浏览器打开127.0.0.1:8889看就好。
  14. 在WLAN设置里把http代理改成127.0.0.1,端口8888,可以在第三个选项规定127.0.0.1不走代理。如果是4G的话,就新建APN,其他选项保持和默认APN相同,只改代理和端口。
  15. 最后注意一点,要定时清理termux家目录下的.anyproxy/caches/下面的缓存,不然你手机存储要炸。直接rm -rf .anyproxy/caches/*就行,那些都是请求缓存,删了之后你在anyproxy网页上就看不到请求的具体内容了,对科技没啥影响。

科技还没凉透,整合版genymotion专用ova包了解一下

http://217.69.12.109/s/iqTGb1vgQ2TrUDA

这是我整合了xposed框架、大佬的xfgo模块以及科技服务器的安卓模拟器ova包。使用方法见网盘里的使用方法视频,差不多是无脑操作了。各位有兴趣的话可以试一试。
功能是二十万血,百倍攻,三十,五宝,撤退胜利,大英雄变盖提亚,普通B叔变1.5.2巨英雄。
再次感谢巨佬的xfgo模块,神了,6得一批。
在安卓模拟器里跑linux服务器2333,也要感谢之前介绍经验的@ZizhuoWang大佬,Termux也是强无敌。

且用且珍惜

官方已经注意到这个repo了。。下次更新应该和谐掉了,希望不会大面积封禁账号。

修改了一下fgo.js, 使之能处理国服的新圣杯战线

主要的功能

//下面是处理userSvt
            var svts = decJson['cache']['replaced']['battle'][0]['battleInfo']['userSvt'];
            //var count = 0;
            for (var i = 0; i < svts.length; i++) {
                
                
                
                {
                    svts[i]['atk'] = 40000;
                    svts[i]['skillLv1'] = '10';
                    svts[i]['skillLv2'] = '10';
                    svts[i]['skillLv3'] = '10';
                    
                    svts[i]['treasureDeviceLv'] = '5';
                    //console.log('原始血量:'+ ohp + ' 新血量:' + svts[i]['hp']);
                    //count = i;
                }
                if (svts[i]['hpGaugeType'] != undefined) {
                    

                    // 最大1动
                    svts[i]['maxActNum'] = 0;
                    // 充能6格
                    svts[i]['chargeTurn'] = 6;
                    
                }




            }
            decJson['cache']['replaced']['battle'][0]['battleInfo']['userSvt'] = svts;

//不能上传js文件,上传的是txt,使用时改下后缀就行
war_board.txt

一首凉凉送给各位

拿小号做了实验,科技凉凉2333.
最后多了一个sign,等大佬破解吧哈哈哈

{
	"response": [{
		"resCode": "00",
		"success": {},
		"fail": {},
		"nid": "battle_setup",
		"usk": "975bb9df1282d8c8a28b",
		"isBattleLive": 0,
		"isEncrypt": 0,
		"encryptApi": ["battlesetup", "battleresume"],
		"svtIds": [],
		"questIds": [1000000, 1000001, 1000002, 1000003, 1000607, 1000706, 1000709, 1000711, 1000716, 1000720, 1000721, 1000819, 1000825, 94008824, 94009105, 2000115, 2000211],
		"mstSkillIds": []
	}],
	"cache": {
		"replaced": {
			"mstMasterMission": [{
				"id": 10001,
				"startedAt": 1521871199,
				"endedAt": 1532275199,
				"closedAt": 1532879999
			}, {
				"id": 100045,
				"startedAt": 1531065600,
				"endedAt": 1531670399,
				"closedAt": 1532275199
			}, {
				"id": 100046,
				"startedAt": 1531670400,
				"endedAt": 1532275199,
				"closedAt": 1532879999
			}],
			"battle": [{
				"userId": "100115223282",
				"questId": 94012301,
				"questPhase": 1,
				"battleType": 1,
				"followerId": 1000,
				"followerType": 1,
				"seed": 1826544874,
				"isCompress": false,
				"status": 1,
				"result": 0,
				"createdAt": 1532080473,
				"updatedAt": 1532080473,
				"mstEventDetail": {
					"eventId": 80055,
					"flag": 225522,
					"pointImageId": 15,
					"eventGaugeType": 5,
					"condQuestId": 94012301,
					"condMessage": "~关于活动奖励界面~\n\n通关「复刻:鬼哭醉梦魔京 罗生门 短程版」中的\n『开幕 平安樱前线』之后,就可解锁活动奖励界面。\n在此界面中,可以确认已获得的伤害点数,\n以及领取完成了的活动任务奖励。",
					"tutorialImageIds": "[]",
					"shopCondQuestId": 94012301,
					"shopCondMessage": "~关于活动奖励界面~\n\n通关「复刻:鬼哭醉梦魔京 罗生门 短程版」中的\n『开幕 平安樱前线』之后,就可解锁活动奖励界面。\n在此界面中,可以确认已获得的伤害点数,\n以及领取完成了的活动任务奖励。",
					"script": "{}",
					"rewardPageBgId": 0,
					"bgmId": 0,
					"afterBgmId": 0,
					"guideImageId": 0,
					"guideImageIds": "[0]",
					"guideLimitCount": 0,
					"guideLimitCounts": "[0]",
					"shopGuideImageIds": "[0]",
					"shopGuideLimitCounts": "[0]",
					"shopPageBgId": 27000,
					"shopBgmId": 58,
					"shopAfterBgmId": 58,
					"eventTypeFlag": 242,
					"terminalDisplayType": 1
				},
				"rankingEventId": 80055,
				"eventId": 80055,
				"followerClassId": 0,
				"resultInfo": {
					"dropGiftIds": [],
					"rewardQp": 5400,
					"rewardExp": 10190,
					"rewardFriendShip": 0,
					"rewardFriendShipDic": {
						"200500": 515,
						"401900": 515,
						"501200": 515,
						"602100": 515,
						"702200": 515
					},
					"rewardFriendPoint": 400,
					"rewardUserEquipExp": 10190
				},
				"battleInfo": {
					"appVer": "1.21.0",
					"dataVer": "214",
					"myUserSvt": [],
					"myUserSvtEquip": [],
					"myDeck": {
						"svts": [{
							"id": 1,
							"userSvtId": 253458917,
							"userId": "100115223282",
							"isFollowerSvt": false,
							"userSvtEquipIds": [0],
							"uniqueId": 1
						}, {
							"id": 2,
							"userSvtId": 253461920,
							"userId": "100115223282",
							"isFollowerSvt": false,
							"userSvtEquipIds": [0],
							"uniqueId": 2
						}, {
							"npcId": 0,
							"id": 3,
							"userSvtId": 1,
							"isFollowerSvt": true,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "坂田金时",
							"enemyScript": {},
							"uniqueId": 3
						}, {
							"id": 4,
							"userSvtId": 253462308,
							"userId": "100115223282",
							"isFollowerSvt": false,
							"userSvtEquipIds": [0],
							"uniqueId": 4
						}, {
							"id": 5,
							"userSvtId": 253458096,
							"userId": "100115223282",
							"isFollowerSvt": false,
							"userSvtEquipIds": [0],
							"uniqueId": 5
						}, {
							"id": 6,
							"userSvtId": 22103092,
							"userId": "100115223282",
							"isFollowerSvt": false,
							"userSvtEquipIds": [0],
							"uniqueId": 6
						}],
						"userEquipId": 152041
					},
					"passiveSkillContainer": {
						"svtSkillLvContainers": [{
							"svtId": "602100",
							"mstSkillLv": {
								"skillId": 50350,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[295,214]",
								"vals": ["[1000,-1,-1,60]", "[1000,-1,-1,60]"],
								"script": "{}",
								"skillDetailId": "50350",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,60]\",\"[1000,-1,-1,60]\"]"
							},
							"mstSvtIndividuality": [5000, 602100, 2, 105, 201, 301, 304, 1000, 2001, 2000, 2040, 2019, 2008, 2011, 2037, 2002, 1004, 1132]
						}, {
							"svtId": "602100",
							"mstSkillLv": {
								"skillId": 62350,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[265]",
								"vals": ["[1000,-1,-1,150]"],
								"script": "{}",
								"skillDetailId": "62350",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,150]\"]"
							},
							"mstSvtIndividuality": [5000, 602100, 2, 105, 201, 301, 304, 1000, 2001, 2000, 2040, 2019, 2008, 2011, 2037, 2002, 1004, 1132]
						}, {
							"svtId": "702200",
							"mstSkillLv": {
								"skillId": 54450,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[118]",
								"vals": ["[1000,-1,-1,80]"],
								"script": "{}",
								"skillDetailId": "54450",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,80]\"]"
							},
							"mstSvtIndividuality": [5000, 702200, 2, 106, 201, 301, 304, 1000, 2001, 2019, 2008, 2011, 2037, 1004, 1132]
						}, {
							"svtId": 700600,
							"mstSkillLv": {
								"skillId": 54150,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[118]",
								"vals": ["[1000,-1,-1,20]"],
								"script": "{}",
								"skillDetailId": "54150",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,20]\"]"
							},
							"mstSvtIndividuality": [5000, 700600, 1, 106, 202, 300, 303, 1000, 2001, 2000, 2040, 2008, 2012]
						}, {
							"svtId": 700600,
							"mstSkillLv": {
								"skillId": 62250,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[265]",
								"vals": ["[1000,-1,-1,125]"],
								"script": "{}",
								"skillDetailId": "62250",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,125]\"]"
							},
							"mstSvtIndividuality": [5000, 700600, 1, 106, 202, 300, 303, 1000, 2001, 2000, 2040, 2008, 2012]
						}, {
							"svtId": "200500",
							"mstSkillLv": {
								"skillId": 34250,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[388]",
								"vals": ["[1000,-1,-1,125]"],
								"script": "{}",
								"skillDetailId": "34250",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,125]\"]"
							},
							"mstSvtIndividuality": [5000, 200500, 2, 102, 201, 302, 304, 1000, 2001, 2006, 2008, 2011, 2037]
						}, {
							"svtId": "200500",
							"mstSkillLv": {
								"skillId": 20550,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[199]",
								"vals": ["[1000,-1,-1,100]"],
								"script": "{}",
								"skillDetailId": "20550",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,100]\"]"
							},
							"mstSvtIndividuality": [5000, 200500, 2, 102, 201, 302, 304, 1000, 2001, 2006, 2008, 2011, 2037]
						}, {
							"svtId": "501200",
							"mstSkillLv": {
								"skillId": 83550,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[109]",
								"vals": ["[1000,-1,-1,100]"],
								"script": "{}",
								"skillDetailId": "83550",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,100]\"]"
							},
							"mstSvtIndividuality": [5000, 501200, 2, 104, 201, 300, 303, 1000, 2001, 2000, 2040, 2008, 2011, 2037, 2113]
						}, {
							"svtId": "501200",
							"mstSkillLv": {
								"skillId": 80451,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[373]",
								"vals": ["[1000,-1,-1,90]"],
								"script": "{}",
								"skillDetailId": "80451",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,90]\"]"
							},
							"mstSvtIndividuality": [5000, 501200, 2, 104, 201, 300, 303, 1000, 2001, 2000, 2040, 2008, 2011, 2037, 2113]
						}, {
							"svtId": "501200",
							"mstSkillLv": {
								"skillId": 62450,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[265]",
								"vals": ["[1000,-1,-1,175]"],
								"script": "{}",
								"skillDetailId": "62450",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,175]\"]"
							},
							"mstSvtIndividuality": [5000, 501200, 2, 104, 201, 300, 303, 1000, 2001, 2000, 2040, 2008, 2011, 2037, 2113]
						}, {
							"svtId": "401900",
							"mstSkillLv": {
								"skillId": 34550,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[388]",
								"vals": ["[1000,-1,-1,200]"],
								"script": "{}",
								"skillDetailId": "34550",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,200]\"]"
							},
							"mstSvtIndividuality": [5000, 401900, 2, 103, 202, 300, 303, 2009, 1000, 2001, 2000, 2040, 2008]
						}, {
							"svtId": "401900",
							"mstSkillLv": {
								"skillId": 88552,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[100]",
								"vals": ["[1000,-1,-1,115]"],
								"script": "{}",
								"skillDetailId": "88552",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,115]\"]"
							},
							"mstSvtIndividuality": [5000, 401900, 2, 103, 202, 300, 303, 2009, 1000, 2001, 2000, 2040, 2008]
						}, {
							"svtId": "401900",
							"mstSkillLv": {
								"skillId": 62350,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[265]",
								"vals": ["[1000,-1,-1,150]"],
								"script": "{}",
								"skillDetailId": "62350",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,150]\"]"
							},
							"mstSvtIndividuality": [5000, 401900, 2, 103, 202, 300, 303, 2009, 1000, 2001, 2000, 2040, 2008]
						}, {
							"svtId": "401900",
							"mstSkillLv": {
								"skillId": 960503,
								"lv": 1,
								"chargeTurn": 0,
								"funcId": "[1234]",
								"vals": ["[1000,-1,-1,400,ShowState:1]"],
								"script": "{}",
								"skillDetailId": "960503",
								"priority": 0,
								"updatedAt": 0,
								"createdAt": 0,
								"svals": "[\"[1000,-1,-1,400,ShowState:1]\"]"
							},
							"mstSvtIndividuality": [5000, 401900, 2, 103, 202, 300, 303, 2009, 1000, 2001, 2000, 2040, 2008]
						}]
					},
					"enemyUserSvt": [],
					"boostItems": [],
					"enemyDeck": [{
						"svts": [{
							"npcId": 94012305,
							"id": 1,
							"userSvtId": 7,
							"isFollowerSvt": false,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "恶鬼A",
							"enemyScript": {},
							"roleType": 1,
							"deckSvtName": "恶鬼",
							"uniqueId": 7,
							"dropInfos": []
						}, {
							"npcId": 94012305,
							"id": 2,
							"userSvtId": 8,
							"isFollowerSvt": false,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "恶鬼B",
							"enemyScript": {},
							"roleType": 1,
							"deckSvtName": "恶鬼",
							"uniqueId": 8,
							"dropInfos": []
						}]
					}, {
						"svts": [{
							"npcId": 94012306,
							"id": 1,
							"userSvtId": 9,
							"isFollowerSvt": false,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "濡女A",
							"enemyScript": {},
							"roleType": 1,
							"deckSvtName": "濡女",
							"uniqueId": 9,
							"dropInfos": []
						}, {
							"npcId": 94012305,
							"id": 2,
							"userSvtId": 10,
							"isFollowerSvt": false,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "恶鬼",
							"enemyScript": {},
							"roleType": 1,
							"deckSvtName": "恶鬼",
							"uniqueId": 10,
							"dropInfos": [{
								"mstGiftId": 10022,
								"type": 2,
								"objectId": 1,
								"num": 3000,
								"originalNum": 3000,
								"limitCount": 0,
								"lv": 0,
								"rarity": 0
							}]
						}, {
							"npcId": 94012306,
							"id": 3,
							"userSvtId": 11,
							"isFollowerSvt": false,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "濡女B",
							"enemyScript": {},
							"roleType": 1,
							"deckSvtName": "濡女",
							"uniqueId": 11,
							"dropInfos": []
						}]
					}, {
						"svts": [{
							"npcId": 94012304,
							"id": 1,
							"userSvtId": 12,
							"isFollowerSvt": false,
							"userSvtEquipIds": [],
							"userId": 0,
							"name": "兵主部",
							"enemyScript": {},
							"roleType": 2,
							"deckSvtName": "兵主部",
							"uniqueId": 12,
							"dropInfos": [{
								"mstGiftId": 20030,
								"type": 2,
								"objectId": 6507,
								"num": 1,
								"originalNum": 1,
								"limitCount": 0,
								"lv": 0,
								"rarity": 2
							}]
						}]
					}],
					"viewEnemyInfo": [],
					"raidInfo": [],
					"startRaidInfo": [],
					"superBossInfo": [],
					"userEquipId": 152041,
					"callDeck": [],
					"shiftDeck": [],
					"transformDeck": {
						"svts": []
					},
					"userSvt": [{
						"id": 1,
						"userId": 0,
						"svtId": 700600,
						"lv": 60,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 7629,
						"atk": 8025,
						"skillLv1": 6,
						"skillId1": 39551,
						"equipTargetId1": 0,
						"individuality": ["5000", "700600", "1", "106", "202", "300", "303", "1000", "2001", "2000", "2040", "2008", "2012"],
						"exceedCount": 0,
						"classPassive": [54150, 62250],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillLv2": 6,
						"skillLv3": 2,
						"skillId2": 17350,
						"skillId3": 26550,
						"treasureDeviceId": 700601,
						"treasureDeviceLv": 4,
						"deathRate": 520,
						"status": 0
					}, {
						"id": "22103092",
						"userId": "100115223282",
						"svtId": "401900",
						"lv": "1",
						"limitCount": "0",
						"dispLimitCount": 1,
						"imageLimitCount": 1,
						"commandCardLimitCount": 1,
						"iconLimitCount": 1,
						"portraitLimitCount": 0,
						"exp": "0",
						"hp": "200000",
						"atk": "133500",
						"skillLv1": "10",
						"skillId1": 13550,
						"equipTargetId1": 0,
						"individuality": ["5000", "401900", "2", "103", "202", "300", "303", "2009", "1000", "2001", "2000", "2040", "2008"],
						"exceedCount": "0",
						"classPassive": [34550, 88552, 62350, 960503],
						"adjustHp": "0",
						"adjustAtk": "0",
						"skillLv2": "10",
						"skillLv3": "10",
						"skillId2": 1,
						"skillId3": 2,
						"treasureDeviceId": 401901,
						"treasureDeviceLv": "5",
						"deathRate": 300,
						"status": "0"
					}, {
						"id": "253458096",
						"userId": "100115223282",
						"svtId": "501200",
						"lv": "1",
						"limitCount": "0",
						"dispLimitCount": 1,
						"imageLimitCount": 1,
						"commandCardLimitCount": 1,
						"iconLimitCount": 1,
						"portraitLimitCount": 1,
						"exp": "0",
						"hp": "200000",
						"atk": "151000",
						"skillLv1": "10",
						"skillId1": 238550,
						"equipTargetId1": 0,
						"individuality": ["5000", "501200", "2", "104", "201", "300", "303", "1000", "2001", "2000", "2040", "2008", "2011", "2037", "2113"],
						"exceedCount": "0",
						"classPassive": [83550, 80451, 62450],
						"adjustHp": "0",
						"adjustAtk": "0",
						"skillLv2": "10",
						"skillLv3": "10",
						"skillId2": 1,
						"skillId3": 2,
						"treasureDeviceId": 501201,
						"treasureDeviceLv": "5",
						"deathRate": 360,
						"status": "0"
					}, {
						"id": "253458917",
						"userId": "100115223282",
						"svtId": "602100",
						"lv": "1",
						"limitCount": "0",
						"dispLimitCount": 1,
						"imageLimitCount": 1,
						"commandCardLimitCount": 1,
						"iconLimitCount": 1,
						"portraitLimitCount": 1,
						"exp": "0",
						"hp": "200000",
						"atk": "185300",
						"skillLv1": "10",
						"skillId1": 219550,
						"equipTargetId1": 0,
						"individuality": ["5000", "602100", "2", "105", "201", "301", "304", "1000", "2001", "2000", "2040", "2019", "2008", "2011", "2037", "2002", "1004", "1132"],
						"exceedCount": "0",
						"classPassive": [50350, 62350],
						"adjustHp": "0",
						"adjustAtk": "0",
						"skillLv2": "10",
						"skillLv3": "10",
						"skillId2": 1,
						"skillId3": 2,
						"treasureDeviceId": 602101,
						"treasureDeviceLv": "5",
						"deathRate": 316,
						"status": "0"
					}, {
						"id": "253461920",
						"userId": "100115223282",
						"svtId": "702200",
						"lv": "1",
						"limitCount": "0",
						"dispLimitCount": 1,
						"imageLimitCount": 1,
						"commandCardLimitCount": 1,
						"iconLimitCount": 1,
						"portraitLimitCount": 1,
						"exp": "0",
						"hp": "200000",
						"atk": "160600",
						"skillLv1": "10",
						"skillId1": 220550,
						"equipTargetId1": 0,
						"individuality": ["5000", "702200", "2", "106", "201", "301", "304", "1000", "2001", "2019", "2008", "2011", "2037", "1004", "1132"],
						"exceedCount": "0",
						"classPassive": [54450],
						"adjustHp": "0",
						"adjustAtk": "0",
						"skillLv2": "10",
						"skillLv3": "10",
						"skillId2": 1,
						"skillId3": 2,
						"treasureDeviceId": 702201,
						"treasureDeviceLv": "5",
						"deathRate": 520,
						"status": "0"
					}, {
						"id": "253462308",
						"userId": "100115223282",
						"svtId": "200500",
						"lv": "1",
						"limitCount": "0",
						"dispLimitCount": 1,
						"imageLimitCount": 1,
						"commandCardLimitCount": 1,
						"iconLimitCount": 1,
						"portraitLimitCount": 1,
						"exp": "0",
						"hp": "200000",
						"atk": "143800",
						"skillLv1": "10",
						"skillId1": 3450,
						"equipTargetId1": 0,
						"individuality": ["5000", "200500", "2", "102", "201", "302", "304", "1000", "2001", "2006", "2008", "2011", "2037"],
						"exceedCount": "0",
						"classPassive": [34250, 20550],
						"adjustHp": "0",
						"adjustAtk": "0",
						"skillLv2": "10",
						"skillLv3": "10",
						"skillId2": 1,
						"skillId3": 2,
						"treasureDeviceId": 200501,
						"treasureDeviceLv": "5",
						"deathRate": 315,
						"status": "0"
					}, {
						"id": 7,
						"userId": 0,
						"svtId": 9934700,
						"lv": 22,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 15903,
						"atk": 3551,
						"skillLv1": 1,
						"skillId1": 960206,
						"equipTargetId1": 0,
						"individuality": ["5000", "5010", "1", "105", "201", "1004", "1112", "2001", "2019"],
						"exceedCount": 0,
						"classPassive": [],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillId2": 0,
						"skillId3": 0,
						"skillLv2": 0,
						"skillLv3": 0,
						"treasureDeviceId": 302,
						"treasureDeviceLv": 1,
						"criticalRate": 300,
						"starRate": -100,
						"tdRate": 900,
						"tdAttackRate": 900,
						"deathRate": 500,
						"aiId": 1000000,
						"passiveSkill": [],
						"chargeTurn": 6,
						"actPriority": 1000,
						"maxActNum": 1,
						"hpGaugeType": 1,
						"npcSvtType": 2,
						"displayType": 1,
						"npcSvtClassId": 0
					}, {
						"id": 8,
						"userId": 0,
						"svtId": 9934700,
						"lv": 22,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 15903,
						"atk": 3551,
						"skillLv1": 1,
						"skillId1": 960206,
						"equipTargetId1": 0,
						"individuality": ["5000", "5010", "1", "105", "201", "1004", "1112", "2001", "2019"],
						"exceedCount": 0,
						"classPassive": [],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillId2": 0,
						"skillId3": 0,
						"skillLv2": 0,
						"skillLv3": 0,
						"treasureDeviceId": 302,
						"treasureDeviceLv": 1,
						"criticalRate": 300,
						"starRate": -100,
						"tdRate": 900,
						"tdAttackRate": 900,
						"deathRate": 500,
						"aiId": 1000000,
						"passiveSkill": [],
						"chargeTurn": 6,
						"actPriority": 1000,
						"maxActNum": 1,
						"hpGaugeType": 1,
						"npcSvtType": 2,
						"displayType": 1,
						"npcSvtClassId": 0
					}, {
						"id": 9,
						"userId": 0,
						"svtId": 9933000,
						"lv": 25,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 35319,
						"atk": 4274,
						"skillLv1": 1,
						"skillId1": 960206,
						"equipTargetId1": 0,
						"individuality": ["5000", "5010", "2", "104", "201", "1004", "1110", "2001", "2019"],
						"exceedCount": 0,
						"classPassive": [],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillId2": 0,
						"skillId3": 0,
						"skillLv2": 0,
						"skillLv3": 0,
						"treasureDeviceId": 273,
						"treasureDeviceLv": 1,
						"criticalRate": 100,
						"starRate": 0,
						"tdRate": 1200,
						"tdAttackRate": 1200,
						"deathRate": 500,
						"aiId": 1000000,
						"passiveSkill": [],
						"chargeTurn": 6,
						"actPriority": 250,
						"maxActNum": 1,
						"hpGaugeType": 1,
						"npcSvtType": 2,
						"displayType": 1,
						"npcSvtClassId": 0
					}, {
						"id": 10,
						"userId": 0,
						"svtId": 9934700,
						"lv": 32,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 55267,
						"atk": 4881,
						"skillLv1": 1,
						"skillId1": 960206,
						"equipTargetId1": 0,
						"individuality": ["5000", "5010", "1", "105", "201", "1004", "1112", "2001", "2019"],
						"exceedCount": 0,
						"classPassive": [],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillId2": 0,
						"skillId3": 0,
						"skillLv2": 0,
						"skillLv3": 0,
						"treasureDeviceId": 302,
						"treasureDeviceLv": 1,
						"criticalRate": 300,
						"starRate": -100,
						"tdRate": 900,
						"tdAttackRate": 900,
						"deathRate": 500,
						"aiId": 1000000,
						"passiveSkill": [],
						"chargeTurn": 6,
						"actPriority": 1000,
						"maxActNum": 1,
						"hpGaugeType": 1,
						"npcSvtType": 2,
						"displayType": 1,
						"npcSvtClassId": 0
					}, {
						"id": 11,
						"userId": 0,
						"svtId": 9933000,
						"lv": 25,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 35319,
						"atk": 4274,
						"skillLv1": 1,
						"skillId1": 960206,
						"equipTargetId1": 0,
						"individuality": ["5000", "5010", "2", "104", "201", "1004", "1110", "2001", "2019"],
						"exceedCount": 0,
						"classPassive": [],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillId2": 0,
						"skillId3": 0,
						"skillLv2": 0,
						"skillLv3": 0,
						"treasureDeviceId": 273,
						"treasureDeviceLv": 1,
						"criticalRate": 100,
						"starRate": 0,
						"tdRate": 1200,
						"tdAttackRate": 1200,
						"deathRate": 500,
						"aiId": 1000000,
						"passiveSkill": [],
						"chargeTurn": 6,
						"actPriority": 250,
						"maxActNum": 1,
						"hpGaugeType": 1,
						"npcSvtType": 2,
						"displayType": 1,
						"npcSvtClassId": 0
					}, {
						"id": 12,
						"userId": 0,
						"svtId": 9933400,
						"lv": 45,
						"limitCount": 1,
						"dispLimitCount": 0,
						"imageLimitCount": 0,
						"commandCardLimitCount": 0,
						"iconLimitCount": 0,
						"portraitLimitCount": 0,
						"exp": 0,
						"hp": 122898,
						"atk": 7952,
						"skillLv1": 1,
						"skillId1": 960206,
						"equipTargetId1": 0,
						"individuality": ["5000", "5010", "106", "201", "1004", "1113", "2005"],
						"exceedCount": 0,
						"classPassive": [],
						"adjustHp": 0,
						"adjustAtk": 0,
						"skillId2": 0,
						"skillId3": 0,
						"skillLv2": 0,
						"skillLv3": 0,
						"treasureDeviceId": 285,
						"treasureDeviceLv": 1,
						"criticalRate": 100,
						"starRate": 0,
						"tdRate": 800,
						"tdAttackRate": 800,
						"deathRate": 200,
						"aiId": 1000000,
						"passiveSkill": [],
						"chargeTurn": 6,
						"actPriority": 500,
						"maxActNum": 1,
						"hpGaugeType": 1,
						"npcSvtType": 2,
						"displayType": 1,
						"npcSvtClassId": 0
					}]
				},
				"id": "77937272"
			}]
		},
		"updated": {
			"userQuest": [{
				"userId": 100115223282,
				"questId": 94012301,
				"questPhase": 0,
				"clearNum": 0,
				"isNew": false,
				"isEternalOpen": false,
				"expireAt": 0,
				"keyExpireAt": 0,
				"keyCountRemain": 0,
				"challengeNum": 1,
				"status": 0,
				"lastStartedAt": 1532080473,
				"createdAt": 1532080473,
				"updatedAt": 1532080473
			}],
			"userGame": [{
				"id": "151909",
				"userId": "100115223282",
				"usk": "975bb9df1282d8c8a28b",
				"appuid": "84933655",
				"appname": "consiadjec",
				"rksdkid": "1",
				"rkchannel": "24",
				"name": "osinecjcda",
				"birthDay": "0",
				"actMax": "129",
				"actRecoverAt": "1524001049",
				"carryOverActPoint": 452,
				"genderType": "1",
				"lv": "107",
				"exp": "12398350",
				"qp": "111507360",
				"costMax": "102",
				"friendCode": "100115223282",
				"favoriteUserSvtId": "22102994",
				"friendKeepBase": "10",
				"friendKeepAdjust": "47",
				"commandSpellRecoverAt": "1485184731",
				"svtStorageAdjust": "0",
				"svtEquipStorageAdjust": "0",
				"svtKeepBase": "350",
				"svtKeepAdjust": "0",
				"svtEquipKeepBase": "350",
				"svtEquipKeepAdjust": "0",
				"userEquipId": "152041",
				"freeStone": "90",
				"chargeStone": "0",
				"getPay": "0,0,0,0,0,0,0",
				"mana": "729",
				"rarePri": "0",
				"mainDeckId": "1343529",
				"activeDeckId": 1343568,
				"tutorial1": "268477422",
				"tutorial2": "0",
				"tutorialProgress": "3",
				"darkGachaNum": "0",
				"mregtime": "1485109212",
				"zerotime": "1532016000",
				"sweepNum": "15",
				"uflag": "0",
				"deviceinfo": "8116d384655ae538c1abfd2c2804346b;Android OS 7.1.1 \/ API-25 (NMF26F\/V9.5.5.0.NDDCNFA);Xiaomi MI MAX 2;com.bilibili.fatego",
				"md5str": "7zkwinysaq",
				"md5key": "671fba0fa6e2866749d481dbd748c88c",
				"regtime": "1485109212",
				"lasttime": "1532078218",
				"thawAt": "0",
				"updatedAt": "1485184731",
				"createdAt": "1485184731",
				"rewardGetIds": "[\"45\",\"47\",\"48\",\"49\",\"50\",\"51\",\"52\",\"53\",\"54\",\"55\",\"56\",\"57\",\"58\",\"59\",\"60\",\"61\",\"62\",\"63\",\"64\",\"65\",\"66\",\"67\",\"68\",\"69\",\"70\",\"71\",\"72\",\"73\",\"74\",\"75\",\"76\",\"77\",\"78\",\"79\",\"80\",\"81\",\"82\",\"83\",\"84\",\"85\",\"86\",\"87\",\"88\",\"89\",\"90\",\"92\",\"93\",\"94\",\"95\",\"96\",\"97\",\"98\",\"99\",\"100\",\"101\",\"102\",\"103\",\"104\",\"110\",\"105\",\"106\",\"107\",\"108\",\"109\",\"111\",\"112\",\"113\",\"114\",\"115\",\"116\",\"117\",\"118\",\"119\",\"120\",\"121\",\"122\",\"123\",\"124\",\"125\",\"126\",\"127\",\"128\",\"129\",\"131\",\"132\",\"133\",\"134\",\"135\",\"136\",\"137\",\"138\",\"139\",\"140\",\"141\",\"142\",\"143\",\"144\",\"145\",\"146\",\"147\",\"148\",\"149\",\"150\",\"151\",\"152\",\"153\",\"154\",\"155\",\"156\",\"157\",\"158\",\"159\",\"160\",\"161\",\"162\",\"163\",\"164\",\"165\",\"166\",\"167\",\"168\",\"169\",\"170\",\"171\",\"172\",\"173\",\"174\",\"175\",\"176\",\"177\",\"178\",\"179\",\"180\",\"182\",\"183\",\"184\"]",
				"weekFriendPoint": "0",
				"chargeRewardRecord": "",
				"firstgoldtime": "1532078015",
				"loginresettime": "1532030400",
				"last_ac": "decksetup",
				"last_ac_time": "1532080442",
				"appVer": "1.21.0",
				"tint01": "0",
				"tint02": "1",
				"tint03": "0",
				"tint04": "179",
				"tint05": "0",
				"tint06": "1",
				"tint07": "1",
				"tint08": "1",
				"tint09": "0",
				"rpRecoverAt": "0",
				"carryOverRaidPoint": "0",
				"mainSupportDeckId": "1",
				"message": "",
				"stone": 90,
				"friendKeep": 57,
				"svtKeep": 350,
				"svtEquipKeep": 350
			}],
			"userSvtCollection": [{
				"userId": 100115223282,
				"svtId": 700600,
				"status": 1,
				"maxLv": 0,
				"maxHp": 0,
				"maxAtk": 0,
				"maxLimitCount": 0,
				"skillLv1": 1,
				"skillLv2": 1,
				"skillLv3": 1,
				"treasureDeviceLv1": 1,
				"treasureDeviceLv2": 1,
				"treasureDeviceLv3": 1,
				"friendship": 0,
				"friendshipRank": 0,
				"updatedAt": 1532080473,
				"createdAt": 1532080473,
				"costumeIds": []
			}]
		},
		"serverTime": 1532080473
	},
	"sign": "89b52919e8902e6652bd2e593c637432"
}

关于anyproxy缓存问题

anyproxy在家目录下有一个.anyproxy/cache文件夹。
长期开着科技,cache的体积越来越大。
能不能直接rm -rf掉这些cache文件夹?

自己研究的新功能

sv['limitCount'] = Convert.ToString(4);
sv['dispLimitCount'] = Convert.ToString(4);
sv['commandCardLimitCount'] = Convert.ToString(3);
sv['iconLimitCount'] = Convert.ToString(4);
最高灵基再临形态展示
if(sv['svtId']=="600200"){//咒腕到爷爷
sv['svtId'] = Convert.ToString(602500);
sv['treasureDeviceId'] = Convert.ToString(602501);
sv['skillId1'] = Convert.ToString(41650);
sv['skillId2'] = Convert.ToString(13553);
sv['skillId3'] = Convert.ToString(324650);
sv['hp'] = Convert.ToString(14246);
sv['atk'] = Convert.ToString(12767);
}
if(sv['svtId']=="600100"){//小次郎到梅林
sv['svtId'] = Convert.ToString(500800);
sv['treasureDeviceId'] = Convert.ToString(500801);
sv['skillId1'] = Convert.ToString(321550);
sv['skillId2'] = Convert.ToString(322550);
sv['skillId3'] = Convert.ToString(323650);
sv['hp'] = Convert.ToString(15259);
sv['atk'] = Convert.ToString(11546);
}
if(sv['svtId']=="601400"){//舞娘到孔明
sv['svtId'] = Convert.ToString(501900);
sv['treasureDeviceId'] = Convert.ToString(501901);
sv['skillId1'] = Convert.ToString(82550);
sv['skillId2'] = Convert.ToString(100551);
sv['skillId3'] = Convert.ToString(101551);
sv['hp'] = Convert.ToString(14409);
sv['atk'] = Convert.ToString(11598);
}
if(sv['svtId']=="700900"){//牛头人到狐狸
sv['svtId'] = Convert.ToString(500300);
sv['treasureDeviceId'] = Convert.ToString(500302);
sv['skillId1'] = Convert.ToString(23650);
sv['skillId2'] = Convert.ToString(25550);
sv['skillId3'] = Convert.ToString(108655);
sv['hp'] = Convert.ToString(15259);
sv['atk'] = Convert.ToString(11546);
}
if(sv['svtId']=="700500"){//爱酱到濑光
sv['svtId'] = Convert.ToString(702300);
sv['treasureDeviceId'] = Convert.ToString(702301);
sv['skillId1'] = Convert.ToString(52551);
sv['skillId2'] = Convert.ToString(224550);
sv['skillId3'] = Convert.ToString(225550);
sv['hp'] = Convert.ToString(14500);
sv['atk'] = Convert.ToString(12556);
}
替换从者
sv["skillId1"] = "321550";
sv["skillId2"] = "321550";
sv["skillId3"] = "321550";
//321550为梅林一技能

感谢大大的脚本,以前用正则确实蛋疼

IOS测试时永远跑芙芙

证书也认证了,关于本机那里的证书信任也开了,代理服务器也设置了,在电脑上测试了模拟器也可以,但是一到苹果上就不行,永远卡在跑芙芙那里是怎么回事?客户端上也没有反应

关于Fiddler中的%3D问题

%3D是URL编码的结果,System.Web.HttpUtility.UrlDecode可以进行URL解码,System.Web.HttpUtility.UrlEncode用于编码
需要import System.Web

是失效了吗还是我的配置问题?

iOS客户端,Anyproxy是用Mac配置的。
log里看到应该代理服务工作是正常的:

[AnyProxy Log][2018-05-27 16:00:14]: [internal https]proxy server for static.biligame.net established
[AnyProxy Log][2018-05-27 16:00:14]: received https CONNECT request pinterface.biligame.net
[AnyProxy Log][2018-05-27 16:00:14]: will forward to local https server
[AnyProxy Log][2018-05-27 16:00:14]: [internal https]proxy server for pinterface.biligame.net established
[AnyProxy Log][2018-05-27 16:00:14]: received request to: HEAD p.biligame.com/api/client/verify_channel?&
[AnyProxy Log][2018-05-27 16:00:14]: received request to: GET p.biligame.com/api/client/config?************************************
[AnyProxy Log][2018-05-27 16:00:15]: received https CONNECT request line3-s2-ios-fate.bilibiligame.net
[AnyProxy Log][2018-05-27 16:00:15]: will forward to local https server
[AnyProxy Log][2018-05-27 16:00:15]: [internal https]proxy server for line3-s2-ios-fate.bilibiligame.net established
[AnyProxy Log][2018-05-27 16:00:15]: received https CONNECT request line1-s2-ios-fate.bilibiligame.net
[AnyProxy Log][2018-05-27 16:00:15]: will forward to local https server

但是手机里打开游戏时提示“与服务器连接中断”
手机和电脑上的证书都已经信任了。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.