当前位置: 首页 > news >正文

网站托管 建设方案/百度seo通科

网站托管 建设方案,百度seo通科,天津做网站的大公司,惠州市博罗县建设局网站项目实战——外挂开发(30小时精通C和外挂实战) 外挂开发1-监控游戏外挂开发2-秒杀僵尸外挂开发3-阳光地址分析外挂开发4-模拟阳光外挂开发5-无限阳光 外挂开发1-监控游戏 外挂的本质 有两种方式 1,修改内存中的数据 2,更改内存中…

项目实战——外挂开发(30小时精通C++和外挂实战)

  • 外挂开发1-监控游戏
  • 外挂开发2-秒杀僵尸
  • 外挂开发3-阳光地址分析
  • 外挂开发4-模拟阳光
  • 外挂开发5-无限阳光

外挂开发1-监控游戏

外挂的本质
有两种方式
1,修改内存中的数据
2,更改内存中的代码
找到内存地址,从此地址开始写入4个字节90909090

改代码和改数据是一样的,改阳光找到一个内存地址,将想改的数值填充到内存空间去
改代码,找到内存地址,将想要填充的数据填到内存空间

数据和代码没有本质区别

在这里插入图片描述

该内存改代码都是找到内存地址,像内存地址填充数据

明白这些后开始写代码
有个细节监控植物大战僵尸是否打开

创建一个新的线程

While(1){
If(植物大战僵尸打开){
可以点击按钮
}else{
不可以点击按钮
}
Sleep(1000);//为了不让其太过于频繁,此处隔着1秒检测一次
}

此循环是死循环,跳不出,会堵塞进程,导致其他事情干不了

所有这个代码要放到子线程去执行

打开上次写的程序创建线程
线程只需创建一次,我们在外挂程序一打开就创建线程,在初始化的地方创建

BOOL CPVZCheaterDlg::OnInitDialog()此为初始化对话框
// TODO:  在此添加额外的初始化代码
CreateThread();创建线程,返回handle句柄,通过线程句柄可以操控线程
CreateThread(_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,_In_ SIZE_T dwStackSize,_In_ LPTHREAD_START_ROUTINE lpStartAddress,		函数地址,我们可以右击转到定义看此参数含义_In_opt_ __drv_aliasesMem LPVOID lpParameter,_In_ DWORD dwCreationFlags,_Out_opt_ LPDWORD lpThreadId
);
HANDLE WINAPI CreateThread
( __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes, // 指向SECURITY_ATTRIBUTES 的指针,为新线程指定安全描述 __in       SIZE_T dwStackSize, // 初始化线程堆栈尺寸 __in       LPTHREAD_START_ROUTINE lpStartAddress, //线程函数所指向的地址起始函数   
__in_opt   LPVOID lpParameter, // 给线程函数传递的参数   
__in       DWORD dwCreationFlags, // 有关线程的标志  __out_opt  LPDWORD lpThreadId //系统分配给线程的ID);  

要在dlg.h中创建句柄对象

	//子线程句柄HANDLE m_monitorThread;m_monitorThread = CreateThread(NULL, NULL, func, NULL, NULL, NULL);
Func返回的应该是下面的类型值需要在全局区声明DWORD (WINAPI *PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter
);//用来监控游戏的线程
DWORD WINAPI monitorThreadFunc(LPVOID lpThreadParameter){
return NULL;
}FindWindow();//查看窗口是否打开,两个参数窗口类名,窗口名称
FindWindowW(_In_opt_ LPCWSTR lpClassName,
_In_opt_ LPCWSTR lpWindowName);

都是字符串类型故使用
使用工具spy++,查找窗口的望远镜,拖到游戏窗口上去,
类型MainWindow
窗口名称Plants vs. Zombies GOTY

外挂开发2-秒杀僵尸

	//当游戏窗口关闭后,不仅禁止点击还要将之前打钩的去掉g_dlg->m_bnKill.SetCheck(FALSE);g_dlg->m_bnSun.SetCheck(FALSE);

接下来就是真正的秒杀僵尸了。

真的要秒杀僵尸该如何实现此功能
打开OD,将exe载入

CTR+G	找到修改内存的地址
00566D10  |.  89B5 C8000000 mov dword ptr ss:[ebp+0xC8],esi       

;

向上找到其生命值减少的代码

00566D06      2B7424 20     sub esi,dword ptr ss:[esp+0x20]

要想将其变成下方

00566D06      2BF6          sub esi,esi   
00566D08      90            nop
00566D09      90            nop

我们看的是其机器码就是将此内存地址00566D06开始的4个字节变成后面四个字节

00566D06      2B742420    

要想将其变成下方

00566D06      2BF69090      

这样就达到了秒杀僵尸的功能了,我们发现第一个字节都是一样的,我们改后面三个字节就可以了

00566D07     742420 	//原版不需要秒杀僵尸
00566D07     F69090   //需要秒杀僵尸

不需要秒杀僵尸就将742420 覆盖地址00566D07 的内存空间
需要秒杀僵尸就将F69090 覆盖地址00566D07 的内存空间,这两者来回切换,将内存的代码换来换去

这就牵扯到一个跨进程的问题,当勾选了秒杀僵尸后,就要将这3个字节写在植物大战僵尸的内存中。
这里有个函数

static HANDLE g_processHandle;//定义一个全局句柄,可以右击OpenProcess转到定义,发现返回是HANDLEWINAPI,OpenProcess,不需要指针//这里封装的是全局函数
// 将某个值写入植物大战僵尸内存(后面的可变参数是地址链,要以-1结尾)
void WriteMemory(void *value, DWORD valueSize, ...)				//第一个参数传数据,第二个是数据有多大,如数据只有3个字节,...是个地址链
{if (value == NULL || valueSize == 0 || g_processHandle == NULL) return;DWORD tempValue = 0;va_list addresses;va_start(addresses, valueSize);DWORD offset = 0;DWORD lastAddress = 0;while ((offset = va_arg(addresses, DWORD)) != -1){lastAddress = tempValue + offset;::ReadProcessMemory(g_processHandle, (LPCVOID)lastAddress, &tempValue, sizeof(DWORD), NULL);}va_end(addresses);::WriteProcessMemory(g_processHandle, (LPVOID)lastAddress, value, valueSize, NULL);
}
//下面是重载的函数比较简单,告诉写数据,数据占的字节,数据所在地址
void WriteMemory(void *value, DWORD valueSize, DWORD address) {WriteMemory(value, valueSize, address, -1);
}//下面三句代码放在此处是,肯定发现了游戏的窗口,句柄不为空,则进程句柄也不为空//获得植物大战僵尸的进程idDWORD processPid;GetWindowThreadProcessId(windowHandle, &processPid);//此处通过植物大战僵尸的窗口句柄拿到进程id//获得植物大战僵尸的进程句柄g_processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processPid);//PROCESS_ALL_ACCESS访问内存,传权限访问内存数据,//此时进程句柄拿到了,我们就可以秒杀僵尸了等操作void CPVZCheaterDlg::OnBnClickedKill()
{if (m_bnKill.GetCheck()){//需要秒杀僵尸BYTE data[] = {0xF6,0x90,0x90};//F69090 ,此处详情看Word,这是我们要写进内存的数据WriteMemory(data,sizeof(data),0x00566D07);//写入内存,需要进程句柄,具体内容如上所示,参数比较多相对复杂,这里直接封装了一些写内存的在上面//注意上面的写内存函数是我们自定义封装好的WriteMemory,而不是系统的WriteProcessMemory,在程序开头有,这里只需传三个参数,地址}else{//不需要秒杀僵尸BYTE data[] = { 0x74, 0x24, 0x20 };//742420 ,此处详情看Word,这是我们要写进内存的数据WriteMemory(data, sizeof(data), 0x00566D07);}
}

外挂开发就这么简单,步骤
先分析对应汇编在哪里,再搞清楚将汇编改成什么,搞清楚将汇编改成什么就能搞清楚将机器码换成什么,已经搞清楚将机器码换成什么到时候将内存地址写入对应机器码就可以了

外挂就是将内存中的数据或者机器码给换掉,这里其他僵尸如安全帽的秒杀就得靠自己找了,都是一样的

外挂开发3-阳光地址分析

#include <iostream>
using namespace std;int g_age;int main(){int a = 10;g_age = 20;//局部变量地址变来变去//cout << &a << endl;//00AFFA1C	00A3FBE0/*cout << &g_age << endl;*/getchar();return 0;
}

使用CE找到阳光内存地址
发现每次打开游戏阳光内存地址是不一样的

阳光是个类的成员变量,局部变量调用是在栈空间的,所以每次打开游戏内存地址不同
而全局变量只要编译之后,内存地址都是固定的

    7: 	int a = 10;
0076530E  mov         dword ptr [ebp-8],0Ah  8: 9: 	g_age = 20;
00765315  mov         dword ptr ds:[0076F354h],14h  

局部变量a的地址是ebp-8

全局变量g_age的值是0076F354h,它的地址是写死的,只要编译完了,最终机器码里就是这个
只要编译完了,那么之后无论打开多少次程序,执行的机器码都是那个机器码,那个机器码中的地址固定死的不会变

局部变量是会变的,a的地址是ebp-8,ebp寄存器中的值是会变的
但全局变量的地址0076F354h是固定死的。

大家都有的误区

内存是什么是虚拟内存,不是内存条上的地址,真正内存条上的东西是不允许你访问的,只允许操作系统访问,操作系统会将物理内存(真正内存条的内存)和虚拟内存挂钩

举例,32位系统没打开一个exe,都会为这个exe(也可以认为是进程)分配4GB的虚拟内存,如果再打开一个exe它也有4GB的虚拟内存。设这两个虚拟内存都有相同的内存地址0X110,但此内存地址对应的真正的物理内存地址是不同的,这个由操作系统管理。

我们程序员面对的都是虚拟内存,不管是什么开发,操作系统都是这样管理内存的。
我们讲的内存地址都是虚拟内存地址,不是内存条的物理内存地址,这就是操作系统内存管理的环节了。

向内存地址里面写代码,这个游戏无论打开还是关掉,这个外挂都是好使的,还有这个游戏和外挂放到被的电脑上打开,游戏和外挂都是好使的。这说明植物大战僵尸这个游戏它不管在谁的电脑上打开多少次,它的每句代码内存地址都是固定死的。

外挂开发4-模拟阳光

我们观察到阳光的地址值是发生变化的,证明阳光不是直接一个简单的全局变量,也不是局部变量内存,局部变量调用完就没了,我们发现游戏玩了很久阳光一直都在,不能说一个函数调用完这个阳光就没了。
阳光不是局部变量,那它可能是这样
有很多类,阳光是个类

#include <iostream>
using namespace std;//int g_age;
struct Sun{int temp1;int value;//阳光值
};//游戏数据可能会弄成全局
struct GameData{int temp;Sun *sun;
};GameData *g_data;int main(){g_data = new GameData();g_data->sun = new Sun();//首先创建一个阳光对象//程序每次打开都要new阳光,地址值变换g_data->sun->value = 20;cout << &g_data->sun->value << endl;getchar();return 0;
}

既然阳光地址值每次都不一样,那我们怎么去写外挂呢?
我们可以从GameData *g_data;入手,这个指针变量地址值是不变的,这是个全局变量,意味着内存地址不会变。

g_data指针指向GameData()对象,GameData()对象里的sun指针会指向Sun()对象,这个就是模拟的结构。

全局变量的地址值是不变的。
在这里插入图片描述

全局指针变量g_data的地址值是固定死的,它存储的是gamedata的地址,我们可以通过这个找到g_data的存储空间里存储的地址(new出来的是变化的),就能找到gamedata的存储空间,找到了gamedata的存储空间就能找到成员变量sun指针(跳过前面4个字节地址)变量的存储空间,知道它里面存储的值(阳光存储空间的地址值)就能找到阳光存储空间,就能找到阳光存储空间中的阳光值value(跳过前面8个字节地址)。

只要顺着这固定死的g_data的地址值就能一直找到最后。

无论new多少次都有办法找到value在哪里,虽然每次new的对象地址发生变化了。
只要结构是这样的,我们只要找到固定死的就能找到最后的value。

New出来的地址每次是不一样的。

使用汇编来表示

0x100	是全局变量g_data的地址值
[0x100]	这是gamedata对象的地址值(中括号是取出0x100地址所存储的值)
[0x100]  是变量temp的地址值
[0x100]+0x4	这是sun指针变量的地址值
[[0x100]+0x4]	这是sun对象的地址值(sun指针变量的地址所存的东西)
[[0x100]+0x4]	+ 0X8	这就是value阳光之的内存地址

尽管阳光之value是放到堆空间的,内存地址不断的变,但我仍然可以通过一些固定的数值找到value的存储空间。

我们在使用CE时,右下角有个手动添加地址(add address manual),这里可以添加地址(此处地址为 固定地址)

先添加地址为0080F354先勾选指针,有个偏移先偏移4,后偏移8.点击确定

外挂开发5-无限阳光

关键是找阳光的上级的固定地址值全局变量

不太好找,结构非常复杂

需要不断调试,找到

到此就讲完了
无CD是可以自己找的

每个游戏不一样,代码不同,主要难点在于分析代码,这个外挂就是改内存改代码仅此而已。

相关文章:

项目实战——外挂开发(30小时精通C++和外挂实战)

项目实战——外挂开发&#xff08;30小时精通C和外挂实战&#xff09; 外挂开发1-监控游戏外挂开发2-秒杀僵尸外挂开发3-阳光地址分析外挂开发4-模拟阳光外挂开发5-无限阳光 外挂开发1-监控游戏 外挂的本质 有两种方式 1&#xff0c;修改内存中的数据 2&#xff0c;更改内存中…...

【人工智能专栏】Constructive损失解析

Constructive Loss 相比较于 MSE Loss \text{MSE Loss} MSE Loss 和 MAE Loss \text{MAE Loss} MAE Loss 直接将结果与目标数值比较的做法,使用 Constru...

PHP经销商订货管理系统小程序源码

经销商订货管理系统&#xff1a;重塑供应链效率的利器 &#x1f680; 开篇&#xff1a;解锁供应链管理的新纪元 在竞争激烈的商业环境中&#xff0c;经销商作为供应链的关键一环&#xff0c;其订货效率直接影响到整个供应链的流畅度和响应速度。传统的订货方式往往繁琐、易出…...

【网络世界】HTTPS协议

目录 &#x1f308;前言&#x1f308; &#x1f4c1; HTTP缺陷 &#x1f4c1; HTTPS &#x1f4c2; 概念 &#x1f4c2; 加密 &#x1f4c2; 加密方式 &#x1f4c1; 中间人攻击 &#x1f4c1; CA机构和证书 &#x1f4c2; 数据摘要&#xff08;数据指纹&#xff09; &…...

根据空域图信息构造飞机航线图以及飞行轨迹模拟matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 航路网络建模 4.2 航线图构建 4.3 飞行轨迹模拟的具体步骤 5.完整程序 1.程序功能描述 空域图是指航空领域中的一种图形表示方式&#xff0c;它涵盖了空中交通管理所需要的各种信息&a…...

llama-factory 系列教程 (五),SFT 微调后的模型,结合langchain进行推理

背景 微调了一个 glm4-9B的大模型。微调后得到Lora权重&#xff0c;部署成vllm 的API&#xff0c;然后通过langchain接入完成相关任务的推理。 关于SFT 微调模型的部分就不做介绍了&#xff0c;大家可以参考前面的文章&#xff0c;将自己的数据集 在 Llamafactory 的 dataset…...

hive 中编写生成连续月sql

记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…...

前端开发实用的网站合集

文章目录 一、技能提升篇vueuseJavaScript中文网JavaScript.infoRxJsWeb安全学习书栈网码农之家 二、UI篇iconfont&#xff1a;阿里巴巴矢量图标库IconPark3dicons美叶UndrawError 404摹克 三、CSS篇You-need-to-know-cssCSS TricksAnimate.cssCSS ScanCSS Filter 四、颜色篇中…...

蓄势赋能 数智化转型掌舵人百望云杨正道荣膺“先锋人物”

2024年&#xff0c;在数据与智能的双涡轮驱动下&#xff0c;我们迎来了一个以智能科技为核心的新质生产力大爆发时代。在数智化浪潮的推动下&#xff0c;全球企业正站在转型升级的十字路口。在这个充满变革的时代&#xff0c;企业转型升级的道路充满挑战&#xff0c;但也孕育着…...

(七)前端javascript中的函数式编程技巧2

函数式编程范式的技巧 迭代算法-可以替代for in let count 10;while (count--) {console.log(count); }斐波拉契的实现 function fabci(n) {console.log("&#x1f680; ~ fabci ~ n:", n);if (n 1 || n 2) {return 1;}return fabci(n - 1) fabci(n - 2);}cons…...

LeetCode热题 翻转二叉树、二叉树最大深度、二叉树中序遍历

目录 一、翻转二叉树 1.1 题目链接 1.2 题目描述 1.3 解题思路 二、二叉树最大深度 2.1 题目链接 2.2 题目描述 2.3 解题思路 三、二叉树中序遍历 3.1 题目链接 3.2 题目描述 3.3 解题思路 一、翻转二叉树 1.1 题目链接 翻转二叉树 1.2 题目描述 1.3 解题思路 根…...

DNS查询服务器的基本流程以及https的加密过程

DNS查询服务器的基本流程&#xff0c;能画出图更好&#xff0c;并说明为什么DNS查询为什么不直接从单一服务器查询ip&#xff0c;而是要经过多次查询&#xff0c;多次查询不会增加开销么&#xff08;即DNS多级查询的优点&#xff09;&#xff1f; 用户发起请求&#xff1a;用户…...

后台管理系统(springboot+vue3+mysql)

系列文章目录 1.SpringBoot整合RabbitMQ并实现消息发送与接收 2. 解析JSON格式参数 & 修改对象的key 3. VUE整合Echarts实现简单的数据可视化 4. List&#xff1c;HashMap&#xff1c;String,String&#xff1e;&#xff1e;实现自定义字符串排序&#xff08;key排序、Val…...

Android经典面试题之Kotlin中 if 和 let的区别

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 在Kotlin中&#xff0c;if和let虽然有时候用来处理相似的情景&#xff0c;但它们实际上是用于不同的场景并具有不同的性质。下面我们来详细对比…...

python inf是什么意思

INF / inf&#xff1a;这个值表示“无穷大 (infinity 的缩写)”&#xff0c;即超出了计算机可以表示的浮点数的范围&#xff08;或者说超过了 double 类型的值&#xff09;。例如&#xff0c;当用 0 除一个整数时便会得到一个1.#INF / inf值&#xff1b;相应的&#xff0c;如果…...

Cursor搭配cmake实现C++程序的编译、运行和调试

Cursor搭配cmake实现C程序的编译、运行和调试 Cursor是一个开源的AI编程编辑器&#xff0c;开源地址https://github.com/getcursor/cursor &#xff0c;它其实是一个集成了Chat-GPT的VS Code。 关于VS Code和VS的对比可以参考这篇文章VS Code 和 Visual Studio 哪个更好&…...

C#-了解ORM框架SqlSugar并快速使用(附工具)

目录 一、配置 二、操作步骤 1、根据配置映射数据库对象 2、实体配置 3、创建表 4、增删改查 增加数据 删除数据 更新数据 查询数据 5、导航增删改查 增加数据 删除数据 更新数据 查询数据 6、雪花ID 三、工具 SqlLite可视化工具 MySQL安装包 MySQL可视化…...

巴黎奥运会 为啥这么抠?

文&#xff5c;琥珀食酒社 作者 | 朱珀 你是不是挺无语的 这奥运会还没有开始呢 吐槽大会就停不下来了 接近40度的高温 公寓没有空调 奥运巴士也没空调 连郭晶晶老公霍启刚 这种见惯大场面的也破防了 你可能会问 好不容易搞个奥运会 干嘛还要抠抠搜搜的呀 在咱们看…...

Python日期和时间处理库之pendulum使用详解

概要 在处理日期和时间时,Python 标准库中的 datetime 模块虽然功能强大,但有时显得过于复杂且缺乏一些便捷功能。为了解决这些问题,Pendulum 库应运而生。Pendulum 是一个 Python 日期和时间处理库,它在 datetime 模块的基础上进行了扩展,提供了更加友好的 API 和更多的…...

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

01 引言 随着大数据技术的飞速发展&#xff0c;Apache Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;随着业务的扩展和技术的发展&#xff0c;企业面临着不断增加的存储成本和运维复杂性问题。为了更好地…...

详解Qt 之QPainterPath

文章目录 前言QPainterPath 与 QPainter 的区别QPainterPath 的主要函数和成员成员函数构造函数和析构函数路径操作布尔运算几何计算 示例代码示例 1&#xff1a;绘制简单路径示例 2&#xff1a;使用布尔运算合并路径示例 3&#xff1a;计算路径长度和角度 更多用法... 总结 前…...

深入理解Apache Kylin:从概念到实践

深入理解Apache Kylin&#xff1a;从概念到实践 引言 Apache Kylin 是一个分布式分析引擎&#xff0c;专为在大规模数据集上进行快速多维分析&#xff08;OLAP&#xff09;设计。自2015年开源以来&#xff0c;Kylin 已经成为许多企业在大数据分析领域的首选工具。本文将从概念…...

vue3框架Arco Design输入邮箱选择后缀

使用&#xff1a; <a-form-item field"apply_user_email" label"邮箱&#xff1a;" ><email v-model"apply_user_email" class"inputborder topinputw"></email> </a-form-item>import email from /componen…...

制作镜像

1.镜像 image&#xff1a; 是一个文件&#xff0c;包含了微型操作系统、核心代码&#xff08;可执行程序&#xff09;、依赖环境&#xff08;库&#xff09; 2.仓库 repository&#xff1a; 存放镜像文件的地方 3.容器&#xff1a; container &#xff1a;是运行镜像的地方--…...

Kylin系列(二)进阶

Kylin系列(二)进阶 目录 简介Kylin架构深入解析 Kylin架构概述核心组件 高级Cube设计 Cube设计原则Cube优化策略 实时数据分析 实时数据处理流程实时Cube构建 高级查询与优化 查询优化技术SQL优化 Kylin与BI工具集成 Tableau集成Power BI集成 监控与调优 系统监控性能调优 常…...

Maven实战.依赖(依赖范围、传递性依赖、依赖调解、可选依赖等)

文章目录 依赖的配置依赖范围传递性依赖传递性依赖和依赖范围依赖调解可选依赖最佳实践排除依赖归类依赖优化依赖 依赖的配置 依赖会有基本的groupId、artifactld 和 version等元素组成。其实一个依赖声明可以包含如下的一些元素&#xff1a; <project> ...<depende…...

关于React17的setState

不可变值 state必须在构造函数中定义 在setState之前不能修改state的值&#xff0c;不要直接修改state,使用不可变值 可能是异步更新 直接使用时异步的 this.setState({count: this.state.count 1 }, () > {console.log(count by callback, this.state.count) // 回调函…...

2024华为OD机试真题-英文输入法Python-C卷D卷-100分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。 按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。 注意 英…...

magento2 安装win环境和linux环境

win10 安装 安装前提&#xff0c;php,mysql,apach 或nginx 提前安装好 并且要php配置文件里&#xff0c;php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息&#xff0c;如果ssl信息没有&#xff0c;则可以忽略 填写域名和后台地址&#xff0…...

【城市数据集】世界城市数据库和访问门户工具WUDAPT

世界城市数据库和访问门户工具WUDAPT WUDAPTLCZ分类具体步骤参考 在 城市气候研究中&#xff0c;用于描述城市特征的数据集一般采用基于类别的传统方法&#xff0c;将城市地区分为数量有限的类型&#xff0c;从而导致精确度下降。越来越多的新数据集以亚米微尺分辨率描述城市的…...