0%

(有更新)

微软Edge内置有一个小游戏,在浏览器输入edge://surf就能访问

但是玩起来很费力,怪兽跑的太快了,障碍物有时候也很难躲,我把游戏的game.js 源码做了修改,可以实现无敌
But!!! 还是不够完美,一个人玩实在是太孤独了,我把刷新路人的间隔调到了很低,而且把路人刷新的位置从屏幕之外改到了屏幕中间,哈哈

修改成在线游戏

如果你打开浏览器的devtool查看一下源码,你会发现我修改的地方做的中文注释,你也可以试着修改
我准备进一步把这个游戏优化成在线游戏,所以我引入了peerjs,socket.io这两个库,我想如果有一个websocket的服务器,那么每个玩家都可以发送ws message到服务器,服务器再转发给每一个在线的玩家,这样就可以实现多人。如果你看到报错的peerjs,那是其实我给每个访问网站的用户分配一个peer id,但是由于服务器端口有限,3001端口的peerjs服务器我无法部署。

有更新>>

旧的github仓库被我删了,新的仓库已经实现了websocket联机。部署游戏服务器需要开放两个端口,主要端口3000提供http服务和websocket服务,另一个3001端口为每个连接的websocket用户提供一个peerjs id,方便将来使用peerjs 实现无服务器的 P2P 用户间直连

修改时遇到的问题

我仔细研究了代码,从debug断点开始,慢慢的熟悉了代码。 经过我google搜索作者的名字加上EdgeSurf,我发现了原作者的一篇采访,作者说是代码是使用原生的js写的,然后使用webpack打包成game.js,于是我是用webpack-unpack把game.js反编译成 开包game.js后的文件 ,可以看到这是一个json文件,于是我又写了一个脚本重新组合.js来把这个json文件转写成一个个js文件, 你看到的目录拆开里的0.js到28.js每一个都是一个COMMONJS模块,其中最重要的起始模块是21.js,这我们可以从game.js开头的源码中看出来 image

为了验证我的猜想,我把这个0到28的模块使用browserfy重新组合,然后用组合后的js代替了game.js,游戏果然能够运行
很遗憾的是原作者使用webpack压缩后使源码变得很难阅读,有些变量名都被压缩成了一个字母,这给逆向开发带来很大难度

有兴趣的小伙伴可以fork这个项目,我们一起魔改这个html5游戏。

这是github仓库的main分支https://github.com/George-Guo-tech/How-to-change-the-Edge-Surf-game/tree/main/

你们可以克隆到本地或者云服务器上自己试试

有更新>>

main分支包含了一些拆包分析的文件以及game.js我写的带中文注释的源码,master分支不含源码和分析文件

什么是three.js

three.js是最为流行的javascript 3D效果库

炫酷的3D网页

https://bruno-simon.com/
这是一个国外作者开源的个人作品集网站,访客可以使用3D的小车在网页中浏览,在特定区域按下回车就能浏览其他的外部链接

免费3D模型资源网站

https://sketchfab.com/
https://mixamo.com

这些网站有大量的免费3D模型,使用three.js可以方便地将这些别人的模型载入自己的网站

blender—3D建模的最好工具

(待更新)

windows本地调试器 (有更新)

常用的调试器有很多,基本上所有编程语言的IDE都会带有调试的功能,python的pycharm, jupyter notebook, java的 eclipse,intelliJ, c++的visual studio

Windows本地调试器(以Windbg为例)不同于编程语言的调试,Windbg调试的对象是一个程序所调用的windows操作系统的API,例如使用USER32!CreateWindowExA创建窗口和使用ws2_32.dll来访问网络

接下来,结合编程语言的调试(源码调试)和操作系统API的调试,就能对项目进行深入的研究

即便是在没有源码的情况下,windows本地调试也能给我们一些线索,帮助逆向开发

大佬的Github源码

https://github.com/chengciming/wechatPc

下载源码,我们就可以开始了

国内可以使用gitee,一些github加速网站,以及一些github镜像网站

不想自己下载可以加群 147694968 求助源码

将wechatPc-master.rar文件下载到本地后,解压到当前文件夹

wechatRobot目录内是执行注入操作的wechatRobot.exe的项目源码

wechatdll目录内是需要被注入的wechatdll.dll的项目源码

Bin目录是这两个项目的成品输出目录

步骤+演示

大佬的github上给出了项目的通信机制

通讯流程:WechatDll(注入到微信) <–> [WS] <–> WechatRobot(操作界面) <–> [WS] <–> ServerPhp(服务端) <–> [WS] <–> Web(HTML操作界面)

我们以此流程来进行

步骤0 开启微信2.8.0.121 (有更新)

如图

image-20210507133202708

如果你打开2.8.0.121被要求强制升级,先将安装2.6版微信并登录一次,再安装2.8。(方法仅供参考)
如果点击登录并扫码后提示“你的微信版本过低”。可以从我的github https://github.com/George-Guo-tech/wechatPc 下载带防更新补丁的更新版,或自己尝试如下:image-20210708161437476

这时我们打开 procexp.exe ,没有的话到微软官方网站下载sysinternals工具包

image-20210507134844407点击那个准星,拖到打开的微信的窗口上,它就自动帮我们定位到了进程,可以看到进程ID是11368

接下来打开windbg

image-20210507135115012点击file,attach to a process, 在弹窗的ProcessID输入刚刚找到的IDimage-20210507135225209

点击OK之后,你会发现微信的窗口怎么点都没反应,这是因为这个进程已经被windbg暂停了,如果你的windbg设置好了符号,你就可以看到windbg自动识别出来了微信进程所调用的所有dll模块,设置符号的方法如图所示:image-20210507135912353image-20210507135951315

可以按照我的格式设置

之后输入命令.reload 重新加载符号,再输入x wechatwin!*,这个命令能列出wechatwin.dll里的所有函数

image-20210507140327790

我们甚至可以看到有一个叫StartWachat的函数

输入命令lmDvmWeChatwin,我们可以看到公司名字是腾讯image-20210507140906143

输入lmDvmWeChatdll,会发现什么都没有,这是因为我们还没有注入我们的wechatdll.dll

步骤1 开启php服务端和web端

首先介绍这个项目的结构和功能,这个项目的根本功能是:在web端(web目录下的index.html)里我们的所有操作都能转化成微信exe进程的操作。

每当我们在web端点击新开一个微信并且登录进去,php服务端(相当于一个ws服务器)以及hook端(wechatRobot.exe)就将这个微信账号和一个微信的exe进程相联系起来。具体的实现方法是将web端发送的ws(websocket, 不懂请看我关于websocket的文章)操作指令包转发给微信exe进程,从而实现在web端控制exe。

php服务端会一直检测当前的web进程以及wechatrobot.exe进程,将所有web端的操作和消息转发给wechatrobot.exe,wechatrobot.exe验证web端身份后将消息发给对应的微信exe

首先开启php服务端(index.php),这需要装有compser的php环境,要么自己安装php和composer,

要么加群下载vender.rar并解压到ServerPhp目录。

之后就可以运行index.php了, 进入ServerPhp文件夹,按住shift右键空白处,选择在此处打开powershell,

进入powershell后,输入命令../phpbin/php.exe index.php,(如果你使用自己安裝的php环境,就直接使用命令php index.php)开启后如图

image-20210506194832735此时php已经开始监听web端和hook端了,hook端将消息传到8686端口,php就能收到,php同样可以从8686发送消息给hook端

这时我们打开Web目录里的index.html,会看到image-20210506195438059服务端已经发现了这个web端,并赋予这个web端id为1

这时我们在web端点击绿色微信图标,点击新开一个image-20210506195830487红色的提示意思是没有发现在线的微信,这是因为我们还没有将hook端连接到服务器

阅读全文 »

实现匿名上网,首先不能使用自己真实的ip,即使是动态ip也能够暴露一台电脑的大致位置。

同时,使用大陆外的代理服务器也能绕开GFW(防火长城)的DNS污染和ip封锁。这样就能访问google了。

#部署服务器

代理服务器如何工作?

代理服务器代替你向服务器发出请求,并将服务器的回复转发给你。开启全局代理后,你所有HTTP,TCP(socks4协议支持tcp)和UDP(socks5协议支持udp)请求包都会交由服务器接管,你发出一个向google.com的TCP请求包,代理服务器收到后,将请求包中原本你的ip替换为服务器ip。

##购买服务器(或者其它,以阿里云香港为例)

阿里云服务器可以支持按流量付费,cpu越好,带宽越高,服务器价格越贵。香港服务器也有许多,每个服务器的位置不同,和你家的ip之间的延迟也不同,可以通过按流量付费多尝试几个服务器,选择低较低延迟的。同样不同的云服务提供商(腾讯云,华为云等)与国内移动,联通,电信的链接有好有坏,经过我用cloudping实测,阿里云香港的服务器与国内移动宽带的衔接较好,延迟较低。

如果需要实现国外ip低延迟的访问,也可以直接选择国外的谷歌云,digitalocean等云服务器。(延迟只会对网络游戏,直播,视频聊天这种实时网络造成影响,对于观看youtube视频,查找google,下载文件不会造成影响。)

##在服务器上搭建ss服务器

为什么需要ss?

ss是shadowsocks 的缩写,ss是一种基于socks5协议的加密方式。

为了保证你和代理服务器之间通讯的加密性,在你的电脑上安装ss用户端后,ss用户端会将你和代理服务器之间的交流加密,从而使防火墙无法检测到敏感字段和国外的ip或域名。

在Ubuntu或CentOs上搭建ss服务器

###安装

Debian / Ubuntu:

apt-get install python-pip pip install shadowsocks

CentOS:

yum install python-setuptools && easy_install pip pip install shadowsocks

###使用

ssserver -p 443 -k password -m rc4-md5

如果要后台运行:

sudo ssserver -p 443 -k password -m rc4-md5 --user nobody -d start

如果要停止:

sudo ssserver -d stop

这里有参考视频:https://www.bilibili.com/video/BV12f4y1B7M7?from=search&seid=10367338852122070800

更新>>

网页教程链接:https://sphard.com/ebooks/kxsw/ss/ss.html

##安装ss客户端

参考视频:https://tlanyan.me/shadowsock-clients/&sa=U&ved=2ahUKEwjq4ICun8bvAhU4w4sBHaMJCLYQFjAAegQIBhAB&usg=AOvVaw2gAk6djzKFQo6ig3hMWKiT

当然,如果你不在乎安全因素,想白嫖代理服务器,你也可以去找网络上的免费机场

PC逆向工具

Ollydebug 简称OD

OD是强大的动态调试工具,可以将C语言,C++,Python所写的*二进制可执行文件(windows中的exe文件,bat文件)*进行反汇编(转化为汇编语言源码)

Cheat Engine 简称CE

CE可以监控exe程序的内存使用,实时调试和修改程序正在使用的内存

OD加CE进行微信逆向

易语言TV视频教程

网易云课堂

websocket协议

类似于http1.1协议的keep alive Youtube教程
多数编程语言都有现成的websocket库可以使用,

因为个人喜好原因,以Nodejs的socket.io库为例

使用Nodejs编写一个websocket多人线上共享编辑的app

app后端

首先你要装好nodejs和npm,接着建一个新的文件夹,作为项目的根目录。

Nodejs需要库:socket.io 和express

如果没有安装过socket.io和express,打开命令行(windows 为cmd),将路径切换到新建的文件夹下

windows使用命令:cd /d 这里是你的文件夹路径

输入:npm install express socket.io --save

这会在当前文件夹创建一个node_modules作为库目录,创建package.json和package-lock.json来记录这个项目当前的库依赖。

创建文件index.js作为服务器,并编辑index.js,如下:

1
2
3
4
5
const express = require('express')//导入express库
const app = express()//创建express app
const server = require('http').Server(app)//用Nodejs自带的http库服务器
const io = require('socket.io')(server)//给服务器加上websocket功能
app.use(express.static( __dirname ))//服务器开始服务当前index.js所在文件夹下的所有文件
1
2
3
4
5
6
7
8
9
io.on('connection', (socket) => {//当一个用户使用ws(websocket)连接到服务器时
console.log('有一个用户连接了!') //服务器提醒

socket.on('message', (evt) => {//当用户通过ws发送消息时
console.log(evt) //在服务器上显示消息内容
socket.broadcast.emit('message', evt)//将这个消息发送给所有连接的用户

})
})
1
2
3
io.on('disconnect', (evt) => {//当某个用户的ws连接断开时
console.log('有用户断开了')}) //服务器提醒

1
server.listen(3000) //服务器开始运行在本机3000端口

这时你在网页里打开 localhost:3000, 你会看到如下图:

这是因为index.js会服务同目录下的所有文件,但出于安全考虑,http服务器不会显示文件夹下的文件,防止蓄意不良的人探查服务器的结构。我们必须输入文件路径,而不是文件夹路径。

这时我们新建一个文件名为 1.txt,输入 localhost:3000/1.txt,就能访问到1.txt里的内容

我的思路

【1】只需每个用户在编辑文档的时候都发送ws命令给服务器,我们就可以在后端协调多个用户的操作了

【2】对于较小的文档,每个用户编辑后,都发送全文给所有在线用户,(我们就使用这个办法)

app前端

多人同时对文本的处理,只需要很简单的html就能实现

html是浏览器使用最广泛的文件类型,浏览器通过运行html文件内的javascript,在用户与html交互时可以给予响应,还可以发送请求到远程服务器。

我们用简单的html语言写一个网页。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 首先,html文件以 <html> 开始 -->
<html>
<!-- html网页的标题 在<title>和</title>之间 -->
<title>这个网页支持实时合作编辑</title>
<!-- html网页的主体 在<body>和</body>中间 -->
<body>
<!-- h3代表三级标题 -->
<h3>这个网页支持实时合作编辑</h3>
<!-- div代表一个块 -->
<div>
<!-- textarea代表文本框 这里设置文本框背景色为深绿色 字体为白色 提示为:在这里输入你想要编辑的文本... -->
<textarea rows="30" cols="50" id="editor" style="background-color:darkgreen;color:#fff" placeholder="在这里输入你想要编辑的文本..."></textarea>
</div>
</body>

这时我们有了html的各种元素,接下来需要javascript来实现和服务器之间的通信

首先,当我们需要在浏览器发起一个socket.io请求时,浏览器需要加载客户端的socket.io库 当初使用npm install socket.io时,下载就包含了客户端的库, 或者直接百度搜索socket.io客户端CDN

<script>代表运行javascript代码块 src代表代码块的资源地址 ./代表当前网页的url

./再加上相对路径就等于要请求的绝对路径url

其实更推荐使用cdn,因为用户使用cdn,可减少服务器流量负担,当你真正部署服务器时,需要考虑这些

1
2
3
<script src="../node_modules/socket.io-client/dist/socket.io.js"></script>
<!-- 或者使用 <script src="这里输入百度得到的cdn地址"></script> -->

接下来有了库,再新建一个<script>标签,开始写代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
var socket = io('http://localhost:3000');//建立ws连接到本地服务器

const editor = document.getElementById("editor")//editor是先前html里的文本框元素
editor.addEventListener("keyup", (evt) => { //当文本框检测到一次键盘按键时
const text = editor.value //获取文本框当前内容,将内容写入变量text
socket.send(text) //将text发送给服务器
})
socket.on('message', (data) => { //当收到服务器消息时
editor.value = data //文本框内容更新为服务器的消息内容
})

</script> //javascript代码块结束
</html> //html结束

视频演示

WebRTC协议

视频演示

#引言:逻辑门电路

##继电器

我们在初中就学习过电磁感应,线圈通电会产生磁场,利用这个磁场再去控制一个电路的开关,这就是最早的继电器

继电器

许多继电器链接起来,就构成了有逻辑思维的电路:以下为一个与门(And Gate)

只有当前两个继电器都通电时,灯泡才能点亮

以下是几种常见逻辑门:

或门:image-20210325124715228

非门(反向器):image-20210325124809134

或非门:image-20210325124930571

以下为常见逻辑门的符号表示:

##振荡器(时钟)

当接通时,磁力使开关断开,断开后失去磁力,就会再次接通电路。时钟就会不断地开关。

##锁存器

这是由两个或非门构造的触发器,称为 R - S(或 R e s e t - S e t,复位/置位)触发器

image-20210325124413190

闭合上边的置位开关

image-20210325124435107

这是即使你再断开开关,灯泡仍然会亮着

image-20210325153936798

这时闭合下边的复位开关,灯泡熄灭

image-20210325155210783

触发器的电路可以简化成:image-20210325155525804

接下来我们改进这个触发器,我们加上输出Q为零的情况
$$
\overline{Q}
$$

image-20210325155741925

只要保持位为0,置位信号和复位信号都不会对电路输出产生影响

image-20210325163116367

这就是一个电平触发的D型锁存器了,D(Data)表示数据端输入。所谓电平触发是指当 保持位输入为某一特定电平时,触发器才对数据端的输入值进行保存

(更高级的触发器!)两个R-S触发器相连接,可以组成 边沿触发的D型触发器

image-20210325164855645

image-20210325165041642

#cpu

2.3Ghz的cpu就是指每秒能够进行23亿次运算的cpu。也就是时钟每秒变化23亿次。

cpu从内存条(RAM)上的0地址开始运行,每次时钟跳动,就往下跳一个地址。

cpu运行的视频介绍可以参考:

在自己的笔记本上部署个人网站,随时随地分享自己学习到的新知识,发现的新玩意

你需要:

一个http服务器:Python 里的simple-http-server和Flask;NodeJs里的Express 都是简单的http服务器;Tomcat;nginx;这种比较复杂,适合大型网站的服务器
一个html网页文件:html是绝大多数网页所用的语言,你可以右键网页背景,查看网页原始码来查看一个网页的全部成分;
一个公网ip或域名:因为要想别人能够访问你的网站,你的笔记本必须获得一个公网ip,或者域名
获得公网ip的方法:(1) 与互联网运营商联系,申请将家里的光猫改为桥接模式,然后通过路由器拨号(如果没有使用路由器,使用笔记本拨号)获得一个在电脑关机之前都不会改变的公网ip;这时其他用户就可以通过公网,直接访问你的路由器的端口了,只需要路由器再将端口转发给笔记本的端口,用户就能访问你的笔记本上共享的文件了。(2) 如果你能够获得光猫管理员权限;也可自己修改光猫为桥接模式。
注意:移动不提供公网ipv4拨号,但可以使用ipv6;在有些公网ip紧张的地区,联通,电信的公网ipv4拨号也不会无偿提供。

​ 获得域名的方法:使用DDNS(动态域名解析服务),如花生壳,阿里云等动态域名解析服务,将你目前的ip地址对应成一个域名,写入到一个或多个DNS服务器中,用户访问你的域名时会连接到这个DNS服务器,这个DNS服务器将你的所在的公网ip,以及所在公网ip里的子网ip发送给用户
端口转发(内网穿透):将路由器某个端口对应到笔记本某个端口

参考链接:

https://post.smzdm.com/p/adwr4eed/ 光猫改桥接