安卓 kuaishou 设备did和egid 学习分析
did和egid注册
接口 https://gdfp.ksapisrv.com/rest/infra/gdfp/report/kuaishou/android
did 是本地生成的16进制 或者 获取的 android_id
public static final Random f16237a = new Random(System.currentTimeMillis());
public static long m19668a() { return f16237a.nextLong(); }
private static String m16457g() {try {return C4314az.m19633a(Long.toHexString(C4316bb.m19668a()), 16, '0');} catch (Throwable th) {th.printStackTrace();return null;}}
接口传输数据:
productName KUAISHOU
ts 1595073602059
deviceInfo 3sCt3iAAMjE5NTY0Njg5AAIQAJ2ewbEC7J3ooFAJAAAkGUqVzgq%2B6ZBgbBLpGRojaWBHvg21P%2FEF%0A0iN01YrwCwIZSPntw6DoUwMzXr8oppoRkz7AGlYqAgwjxP1PhD6%2FZhgTnOZYiTXFyJ79ZTUFq30a%0Ai7elU%2Bppe3lEBOLxl3rzYZ6ZB2tARglqG2XiWRfVu5yrdI%2FiENYDLTbBqfVqJfcKxi0ESCSjbwZQ%0AsiK%2FRMw6MPwoRt60%2BEuORU5yAs6Rws0hYMe7eqs6sEEkQlcdShmtvj2yBTWV%2FRYf5DUXtpqTzWbJ%0Ahy4pS2meEEO9%2F73RpOKatCGhGg%2Foo1uK%2FaKNlZzNb0yIIh9alXI8OWIvTpuJ6paK2fuXxlf2W7wd%0AekGhEK3BrsSkkLpcanUslw9Dq5pMAJnlTl5C9CFK8PNk7B6pRzElnsntHFRHINLSZINLUbrcae4Z%0AfH0IHj78tSp569Isv%2Fsdc98fcQbaDofJOH0aBBYyzwg47HEqunqzVIWb3GmQF9unUwMYEtEOupiL%0Adj4WlCsfXwHnalMvVSPsmeaKCPjm%2FC3kt8SuIS7Q%2FQG7zvvEkX2TgLD%2BrGTkBynAlyaTLbSdhOBV%0AkjsZyomfwxJKYcg4jqpQESgAB%2F%2F5DlPiSKpY54U9os0y%2FyP0jfxmPPR2MGJlEHhF4wIvPjWwtb82%0A38nCeJGod0PwRo%2BWcB1xL2FQdw4POXISIarsC99Ah4FJufxMp7V1b8Htm1hi7EGc3jUAZTFUEfnN%0AymM8oe0CdVaofsLl900hbZpwAslPu35Lat04YVvVZKS1xTDt%2BiLqzyjhPKjD6fVxkppRGavKYh1w%0A9%2Bw2kqoLa9YnHnLvrtkDsr1%2FLmuf2CmjHxLbrlovJ06edV4zy10wAnkCNS7KN%2BBsshOnJmbb8pjp%0ADvF%2F7TtL8BwjdUcH%2BfS4NXiwhLvFpcPUmkZXOYqcQw21TZtaeMoHZlJf5zM2zQwHHNNiy04N6xxS%0A9Dw2z8iL3C1%2BYcX8icsgrSOTHXmBeMH1hgjsbCQtAKgCZaB8h6Z1Eci9GdC%2BFUZcshNRcOxPdrjo%0AZUrT7Llcfu8hd9hBlr3qUccsGiVRseTMr7USVQWr7Ki4tCglC0sy2PiGttV3z3GlkGv4EPf1AYPz%0AnouuNd8iR0H0njIGcKaOFQXUGTF%2FoFtctG0mTjj96gaRtVtnfY0x1Vbo6%2Fvgj7PQ2e8St66n8nzx%0AiOhghPpni3VVqiB%2BoMHMQP6FSxHTTGCN3ez3nVn8Sz%2BMDhFzh%2BxYjPbgf4IXV3jp0fj%2BmF0EvJQq%0AX4G3kODD67WQUR4ju2m1byV674ZDIsLQlVw539goCGlVPOqR9m9teBtOWkBF6fCTacIgQcmhdOJa%0A5lk7291BPvikTQzYbsdhlGHpt3sM2N25M6AS55hw09lw8uZZIzHekaifQg2CMzDn9hmtUfCgQ%2FII%0AXsk1qJ5kvFKeqkbq4NEiEknGKoJWqxnWyQrTJqy6lxB9hrNAU8KXIivfK%2FL%2FhsouE2ubXU8zPbxt%0AVQQZ6wASbe9cANu2NcFdR4tHOC3LUGvLqrdCVIwEiXgQe4QiR%2BUX%2FYQ9NtScA9vzKcS8b3h0jVgo%0ArbbzaHFvyZTYBEEpvJbT%2FAx3tZZLXqTzUCYY%2FNmsI6Ue3cPq6LI8OyqxrRrn%2FqIMMO4zRFWgeAOR%0A1n9N7suVla2bW3WVr1tQXxhWO0J%2B%2Bn%2BARhDYhamh%2FMQAyB%2FUfOj%2FZwf797YNMow5GLjPB%2FiAtwMM%0A0aZps1rqSg2RSa61rOsRDgLZUxSznFmWPXL1pcDCziapimWg3FIrcPdlBpTEhJ7PTx2oDeO64qEI%0Am5BBNkeIw8Al%2FAuL3mmhXl0zICFSBwi2L%2FaN%2Bf1928SAr6oldZx%2F92AAAXYOD8GVexG3tOQZI%2BLT%0AUEtgpzRotdCgSLDjnzjrIQALjnqNTG3mVBIMzMv17OwZRAXwg6Gq5ApzN5vdT66NBzj3jBfOEf57%0A%2Fg%2F5gigZoCLIL5nN8CIGGOwOX6jZu3uO78Pla6HVpvLICRD%2BlsEeChD5DkbMuKqYt2GYAWb44B%2Bp%0AHgi1hQ3aOkT9dWIc%2Bw4U5jimcCvDy0RWyTI4b7FvFPM7VM%2BPEopsuqCmyglHBf9Fdp%2B1xRMIyoL1%0A5%2BSMZs7ard1Zv0mHmkb8eflmVo%2BCvvU%2FTf25SZbFq64d2QNNJwAWuNGZyyrGnYEAJHhrQu1uen7o%0ALdANPPOn7OchweBoAiMVnYM0iDDGSRyv0jT5OPYuLdhMT%2B8ZsQ4V6mosOZZohA9LDcxoA87EzjPe%0ARIjVeb%2BaAQxnMKQKz66qc%2FEzNotP01DKyK%2BzZ4skVDWJuMZbkLxsgiBfE7%2BIk5rDNAhUignAa83J%0AqmU0v1WPCpuqe47vw%2BVrodWm8sgJEP6WwQdmJddfnDZz7p1YwpWTpGU3KUL80Ch6Wu5o4ddb5xw6%0AsmyqbSCTBbNC3%2FZvr%2FQuFNo2692n993d0E655JNM0WXbGGAq%2BPr4aVezc%2BYNsAhS0xHcLk1POoQM%0AHvle220aKLaF3zwPkoK8vQO0IwvH7nocI4DUqjGlkHsVaAnbMYTwDPZdjfgFPTP8aoRXctuqm%2Fp6%0AC%2BOrD1CwGKJCe1FpVSxPCynEUJq5YqHYtveA%2BH1Hc8%2FQer8uoDc2A1cmZc7oDuf6x4XSGsnPWoiM%0AbcQgfwAFZI6AcM6rFDlYIzIRBGVCBXsE8D6wPlWvAHYQz7BwZDUz8%2By1grZO7wYl4hMtbyZErgzI%0AIV4ktl7JrZ9nzV4bUhACmXEysdzdAn%2BM4I6C%2FBUzhyRw33WPK%2FoQGyPcQQ3A3RyZfSDfN0rnMgyE%0AsV655ANcWFaSyweqHdZK15PUM3kmDFVZZCWbXgdSWOfzrS04tOouKAx7OCF3B149%2Fw8Tl4am1q%2Bb%0AO0A770K9HXhOv4eId6JwRgds%2BnrcD3u%2BglChj6KkfcjmBoAYzlhS7IP%2FWcASrwmldIi207p3XMmv%0AkS3LcFy68W2en4JluUpfxhYZdm70oMVxRHBm6Oysz5XdU4J58AZ%2FtQ%2FFxbe0VIgefv3qtwY0iAv%2B%0AatUB%2BwbE%2FAvi4frlrK6iYwJ7F5yKxE%2FVZwu2Nh%2BAwYrsAgSbrVSUT8K6rpg1hUA%2B%2FR9zEC%2BdPnpM%0AOYSNqmNhclXeyixErKpUlSceJHSsIvgModdynT8%2BJma1eC33u9NA6j5IYBJICe0zf3jlYCNakjuh%0A6iQgnN4Oal%2FEsP7gFGt%2B8cXh1r1SGQ%3D%3D%0A
sign 2195646899cf1cc7a6d51bfbff3cfd31e6d9930c37
sv 2
{k31=fuels:wZ2fk8aflZefxsefl5CfxJQ=, k30=Flyme 7.1.7.1A, k33=notExist, k32=KWE_NC, k35=8.1.0, k34=[3.0,1080,2124,3.0,318.976,320.386], k37=OPM1.171019.026, k36=1.1.7.5.1, k39=1594992720872, k38=KWE_NC, k40=Meizu/meizu_M1852_CN/M1852:8.1.0/OPM1.171019.026/1540458566:user/release-keys, k42=KWE_NC, k41=KWE_N, k44=release-keys, k43=KWE_PN, k46=3885793280, k45=KWE_NC, k48=KWE_NC, k47=unknown, k49=0, k51=2c951907b69eb332, k50=KWE_NC, k53=KWE_NC, k52=meizu_M1852_CN, k55=a2:25:cb:02:6c:d8, k54=notExist, k57=KWE_PN, k56=KWE_NC, k59=1, k58=M1852, k60=unknown, k62=KWE_NC, k61=Meizu, k64=852QLDV924G42, k63=flyme, k66=56c4bf75e79c15c6, k65=KWE_NC, k68=KWE_PN, k67=KWE_N, k69=KWE_NC, k71=KWE_NPN, k70=KWE_NC, k73=KWE_NPN, k72=KWE_NC, k75=KWE_PN, k74=KWE_PN, k77=KWE_PN, k76=KWE_NC, k79=KWE_NC, k78=KWE_NC, k80=KWE_NU, k82=[1,BMI160_ACCELEROMETER Accelerometer Non-wakeup,50463488,BOSCH,19.6133,2500,0.18,5.9820566E-4:1,BMI160_ACCELEROMETER Accelerometer Wakeup,50463488,BOSCH,19.6133,2500,0.18,5.9820566E-4:35,BMI160_ACCELEROMETER Accelerometer-Uncalibrated Non-wakeup,50463488,BOSCH,19.6133,2500,0.18,5.9820566E-4:35,BMI160_ACCELEROMETER Accelerometer-Uncalibrated Wakeup,50463488,BOSCH,19.6133,2500,0.18,5.9820566E-4:4,BMI160_GYROSCOPE Gyroscope Non-wakeup,50463488,BOSCH,2.1815972,5000,0.9,6.6577064E-5:4,BMI160_GYROSCOPE Gyroscope Wakeup,50463488,BOSCH,2.1815972,5000,0.9,6.6577064E-5:16,BMI160_GYROSCOPE Gyroscope-Uncalibrated Non-wakeup,50463488,BOSCH,2.1815972,5000,0.9,6.6577064E-5:16,BMI160_GYROSCOPE Gyroscope-Uncalibrated Wakeup,50463488,BOSCH,2.1815972,5000,0.9,6.6577064E-5:27,Device Orientation Non-wakeup,1,qualcomm,1.0,0,0.025,0.1:27,Device Orientation Wakeup,1,qualcomm,1.0,0,0.025,0.1:15,Game Rotation Vector Non-wakeup,1,qualcomm,1.0,5000,0.515,0.1], k81=KWE_NC, k84=27b63c793f46a83a, k83=KWE_FIRST, k86=KWE_N, k85=32622d8245dfe338, k88=noexsist, k87=3043341723, k89=1618696036, k91=1436926309, k90=KWE_NC, k93={"1":"0","0":6,"2":"false","8":"9","10":"KWE_N"}, k92=1595075739488, k95=0|183528f283c77d0cd0546206b607f638|7, k94=KWE_N, k97=09a0509a749e5304b670aabc548d508e, k96={"0":"1594988383000","1":"1"}, k99=KWE_NS, k98=KWE_NS, k1=KWE_NC, k2=WiFi, k3=com.smile.gifmaker, k4=KWE_NC, k5=54134046720, k6=0, k7=ANDROID_56c4bf75e79c15c6, k8=user, k9=3960YSZb8eGSEQuHyyHWM00lA2-UbYhFYDRRpstfiVo, k100=d7b7d042-d4f2-4012-be60-d97ff2429c17, k11=1, k10=0, k13=KWE_NC, k12=notExist, k15=KWE_NC, k14=AND:3193040869, k17=192.168.51.169, k16=Mz-Builder-L21, k19=sdm710, k18=isContent, k20=KWE_NC, k22=7.2.0.12758, k21=KWE_NC, k24=KWE_NC, k23=Meizu, k26=armeabi-v7a,armeabi, k25=0, k28=qcom, k27=M1852, k29=Dalvik/2.1.0 (Linux; U; Android 8.1.0; M1852 Build/OPM1.171019.026)}
研究某手的时候,会发现某手接口中存在两个参数至关重要,一个did,另外一个是egid。
它们也就是快手的双参设备,如果从charles抓个设备包的话,请求频率过多,就会遇到请求太快访问频繁的问题
先抓个设备参数:
did: ANDROID_7c65a948b18ba4t5
egid:DFPB24F4EA19896D552C3C9578A09565335CDD5T20CF8991BECFDB15C69D974B


解决办法就是模拟请求,批量注册设备,效果如下:
刚注册出来的设备是不能直接使用的,还需要发送xxx 等相关接口日志激活。

这里放几个设备,有需要的小伙伴自取:
{'egid': 'DFPC681A0395B4984FB539014DB3493926FBBEA31961EE2E8FB428B881B3744F', 'did': '56ca8cbecec16c77'}
{'egid': 'DFPE862C9C29EB683AAA1CE7C9F01973E62C39E922E744F20954D4D6B3553DDC', 'did': 'f7a84c04051e6ec7'}
{'egid': 'DFPB6828D54C5C2CFA87C71834C175990B9E45E70DB066EFB29B463BEE7FD165', 'did': 'dc281d3be2e0c75a'}
经过测试,像搜索接口,视频评论,视频列表,用户主页等接口都可以应用。
相关文章:
安卓 kuaishou 设备did和egid 学习分析
did和egid注册 接口 https://gdfp.ksapisrv.com/rest/infra/gdfp/report/kuaishou/android did 是本地生成的16进制 或者 获取的 android_id public static final Random f16237a new Random(System.currentTimeMillis()); public static long m19668a() { return f1623…...
基于Vue+ELement实现增删改查案例与表单验证(附源码)
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 …...
webpack:使用externals配置来排除打包后的某个依赖插件IgnorePlugin的使用
背景 假设,我们写了一个库并使用 webpack 打包输出 bundle,但是这个库依赖一个第三方包,比如依赖 lodash,这时候我们不想把这个库打包进 bundle 里因为体积会变大,而且我们的主项目里已经安装了这个 lodash࿰…...
2023年中国工业脱水机行业供需分析:随着自动化和智能化技术的快速发展,销量同比增长4.9%[图]
工业脱水机行业是指专门从湿润的固体物料中去除水分的设备制造和相关服务。它广泛应用于食品加工、化工、制药、纺织、环保等行业,用于去除物料中的水分,提高产品质量和降低能耗。 工业脱水机行业分类 资料来源:共研产业咨询(共研…...
[论文笔记]MacBERT
引言 今天带来MacBERT的阅读笔记。论文题目是 重新审视中文自然语言处理的预训练模型。 本篇主要是探讨中文预训练语言模型在非英文语言中的有效性,然后提出了一种简单而有效的模型,称为MacBERT,它在多个方面改进了RoBERTa,特别是采用纠错型掩码语言模型(MLM as correcti…...
AI发展目前最大挑战是什么?
影响AI成本的因素包括多个方面: 首先,AI技术的复杂性是其成本高昂的一个重要原因。AI技术需要进行大量数据处理、模型训练和优化,这需要耗费大量的计算资源和时间。同时,AI技术需要高水平的专业人才进行设计、开发和维护…...
自然语言处理NLP:LTP、SnowNLP、HanLP 常用NLP工具和库对比
文章目录 常见NLP任务常见NLP工具英文NLP工具中文NLP工具 常见NLP任务 Word Segmentation 分词 – Tokenization Stem extraction 词干提取 - Stemming Lexical reduction 词形还原 – Lemmatization Part of Speech Tagging 词性标注 – Parts of Speech Named entity rec…...
百度交易中台之内容分润结算系统架构浅析
作者 | 交易中台团队 导读 随着公司内容生态的蓬勃发展,内容产出方和流量提供方最关注的“收益结算”的工作,也就成为重中之重。本文基于内容分润结算业务为入口,介绍了实现过程中的重难点,比如千万级和百万级数据量下的技术选型和…...
【索引】常见的索引、B+树结构、什么时候需要使用索引、优化索引方法、索引主要的数据结构、聚簇索引、二级索引、创建合适的索引等重点知识汇总
目录 索引的分类 什么时候需要 / 不需要创建索引? 有什么优化索引的方法 MySQL索引主要使用的两种数据结构是什么 为什么 MySQL 采用 B 树作为索引 聚簇索引和二级索引 根据给定的表,如何创建索引比较好 索引的分类 普通索引:最基本的…...
Egg 封装接口返回信息
中间件封装 代码 const msgArr {"200":成功,"401":token失效 } module.exports (option, app) > {return async function(ctx, next) {try{//成功是返回的信息ctx.emit(code,data,msg)>{console.log(1111,code,data,msg)ctx.body {code,data:dat…...
Android AMS——创建APP进程(五)
接上一篇,在 ActivityTaskSupervisor 中会判断进程是否存在,如果进程不存在,则会创建进程,执行 startProcessAsync() 方法。如果进程存在,则执行 realStartActivityLocked() 方法。在APP 的启动时,进程是不存在的。所以我们先来分析一下进程不存在的情况。 一、创建进程…...
凉鞋的 Unity 笔记 102. 场景层次 与 GameObject 的增删改查
102. 场景层次 与 GameObject 的增删改查 在上一篇,我们完成了 Unity 引擎的 Hello world 输出,并且完成了第一个基本循环: 通过这次基本循环的完成,我们获得了一点点的 Unity 使用经验,这非常重要。 有实践经验后再…...
信息安全:网络安全审计技术原理与应用.
信息安全:网络安全审计技术原理与应用. 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后“安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线…...
嵌入式Linux应用开发-第十三章APP怎么读取按键值
嵌入式Linux应用开发-第十三章读取按键及按键驱动程序 第十三章 APP怎么读取按键值13.1 妈妈怎么知道孩子醒了13.2 APP读取按键的4种方法13.2.1 查询方式13.2.2 休眠-唤醒方式13.2.3 poll方式13.2.4 异步通知方式13.2.4.1 异步通知的原理:发信号13.2.4.2 应用程序之…...
Web 中间件怎么玩?
本次主要是聊聊关于 web 中间件, 分为如下四个方面 什么是 web 框架中间件 为什么要使用 web 中间件 如何使用及其原理 哪些场景需要使用中间件 开门见山 web 中间件是啥 Web 框架中的中间件主要指的是在 web 请求到具体路由之前或者之后,会经过一个或…...
HMTL知识点系列(4)
目录 1. 在你过去的项目中,你如何解决HTML的布局和样式问题?2. 你能否解释一下HTML的“文档对象模型”(DOM)是什么,以及它的重要性?3. 你有没有经验处理网页的兼容性问题,特别是在不同浏览器之间…...
CFS内网穿透靶场实战
一、简介 不久前做过的靶场。 通过复现CFS三层穿透靶场,让我对漏洞的利用,各种工具的使用以及横向穿透技术有了更深的理解。 一开始nmap探测ip端口,直接用thinkphpv5版本漏洞工具反弹shell,接着利用蚁剑对服务器直接进行控制,留下…...
【RabbitMQ实战】07 3分钟部署一个RabbitMQ集群
一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群,开始。 前提条件,docker安装了docker-compose。如果没安装的话,参考这里 docker-compose文件参考bitnami官网:https://github.com/bitnami/contai…...
PS 切片工具 选择切片 切片存储
上文 PS 透视裁剪工具 中 我们简单讲述了透视裁剪工具 今天 我们来讲他后面的切片工具 首先 他的用途还是很多的 例如 你有一个很大的图片 其中包括 轮播 导航 主题内容 但他们都在一个图片上 你就可以用切片工具 将完整的图片切成多个部分 这里 我们选择了切片工具 光标也会…...
Git版本控制系统
概念: 一个免费的 开源 分布式源码仓库,帮助团队维护代码 个人使用 多人联机使用 git安装: 这里直接看大佬的安装 文章 很不错的 git 安装配置https://blog.csdn.net/mukes/article/details/115693833 安装完毕之后: 使用命名git -v查看…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
在Zenodo下载文件 用到googlecolab googledrive
方法:Figshare/Zenodo上的数据/文件下载不下来?尝试利用Google Colab :https://zhuanlan.zhihu.com/p/1898503078782674027 参考: 通过Colab&谷歌云下载Figshare数据,超级实用!!࿰…...
C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...
