https://bitbucket.org/ivucica/jslinux-network
不带网络的可读版本
https://github.com/levskaya/jslinux-deobfuscated
我修改过的在这
https://github.com/killinux/deobfuscated
编译内核的时候有个补丁在
https://github.com/killinux/jslinux_reversed
网络基础知识在这
https://haoningabc.iteye.com/blog/2272032
br0的mac地址会跟着新建tap地址改变的原因在这
https://haoningabc.iteye.com/blog/2436006
#@@@@@@@ 安装部署的具体操作 @@@@@@@@@@
具体安装
先安装nginx
wget http://nginx.org/download/nginx-1.15.8.tar.gz yum install pcre pcre-devel -y yum install zlib zlib-devel -y yum install openssl openssl-devel -y ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
centos7的防火墙
80端口
firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --reload websocket端口 firewall-cmd --permanent --zone=public --add-port=3000/tcp firewall-cmd --reload 如果是https firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=443/udp firewall-cmd --reload firewall-cmd --zone=public --list-all firewall-cmd --list-all
###########################
mac和linux设置路由的时候有点区别
yum install bridge-utils yum install python-virtualenv linux route add -net 172.18.197.0 netmask 255.255.255.0 tap0 route add -net 172.18.197.0 netmask 255.255.255.0 eth0 mac route add -net 172.18.197.0 -netmask 255.255.255.0 192.168.1.66
如果想ping百度和google
cat /proc/sys/net/ipv4/ip_forward
br1的混杂模式: ip link set br1 promisc on
iptables -t nat -A POSTROUTING -s "10.0.2.0/255.255.255.0" ! -d "10.0.2.0/255.255.255.0" -j MASQUERADE
######################
websocket:
mod_pywebsocket.standalone
#######
问题
1.两个chrome互通 ,是tab页面的问题 ,两个都在可见的地方,用两个chrome就会通了
2.一个chrome和主机互通,让chrome的httpd可以访问 route
3.br和新建的tap设备mac地址相同 ,为什么? https://haoningabc.iteye.com/admin/blogs/2436006
4.把所有mac都检查一遍
5.tcpdump抓包 ,wireshark分析,结合tcpdump_uint8array
网络协议
http://support.huawei.com/enterprise/docinforeader!loadDocument1.action?contentId=DOC1000004409&partNo=10042
arp有详解
6.脑洞:远端任何时候的linux客户端可以远程操控设备
7.内核模块开发
8.自动安装的脚本和随时修改的编译环境,patch打一个
9.e1000: make ARCH=i386 drivers/net/e1000/
10. drivers/net/e1000/e1000_hw.h:522:#define MAXIMUM_ETHERNET_FRAME_SIZE 1518 /* With FCS */
11.整体的代码调用链
12.新版的tinyEMU ,
13 drivers/serial/8250.c ttyS1 8250 8251 异步通信控制器 ,8255 并行接口
14 PIC 串口,PIC.js, 0x2f8 可编程中断控制器
15.jsmodem也是用的串口ttyS1 ,socat 关联的,jslinux是用tapper.c
16.桌面,sdl?
17.serial2 收到消息后要加个settimeout延迟100ms,如果10则分两次发,如果不设置,则ping DUP!错误,打印会发现发送了n次,
18.用webrtc做im,可以省服务器资源。
19.jsmodem:串口变成16450了?
20.jsmodem的服务端如果不好使
iptables -t nat -A POSTROUTING -s "10.0.2.0/255.255.255.0" ! -d "10.0.2.0/255.255.255.0" -j MASQUERADE
21.硬盘
############ net0 #####
注意net0的源码
grep -nr net0 `find . -name \*.js` PCEmulator.js:1089: this.net0 = new network_driver(this, 0x300, this.pic.set_irq.bind(this.pic, 9), [0x62, 0xb9, 0xe8, 0x01, 0x02,
这部分其实没起作用啊
应为jslinux内部用的tapper.c建立了tap0,绑定了ttyS1,最终还是ttyS1与websocket通信的
#########
注意:
浏览器打开两个jslinux的时候,不要在一个浏览器的多个tab里面,tab切换的时候,非使用的浏览器tab内存会停止工作,两个jslinux互相ping是不通的,chrome浏览器分开两个单独的页面就好了
是否是因为 visibilitychange事件导致
#### 关注下
serials 8250
ttyS1设备 串口1
############
ip tuntap
#############
内核编译参考
https://haoningabc.iteye.com/blog/2338061
kernel linuxstart-20120111.tar.gz
patch_linux-2.6.20 里面的 jsclipboard.c
[root@meituan7 linux-2.6.20]# patch -p1 < ../tmp/linuxstart-20120111/patch_linux-2.6.20
patching file drivers/char/Kconfig
patching file drivers/char/Makefile
patching file drivers/char/jsclipboard.c
patching file drivers/serial/8250.c
patching file drivers/ide/ide-probe.c
patch -p1 < ../../jslinux_reversed/contrib/patches/2.6.20_common_fixes.patch
Makefile里面make -C $(KERNEL_PATH) -j4 这行注释掉,刚才已经编译过内核了
用make ARCH=i386 drivers/net/e1000/
具体:
修改Makefile
。。。
搜索/config %config
改成
%config
/\/ %\/
改成
%/
#grep -nR CONFIG_TUN *
#注意 arch/i386/defconfig:775:# CONFIG_TUN is not set 但是不用修改
.config
这里一定要注意!!!!!!
注释里不要有 CONFIG_TUN
不要在下面加,而是要修改
CONFIG_TUN=y
否则不好使
#make ARCH=i386 drivers/net/e1000/
#这句是ubuntu的img用的 ,deobfuscated不用
tmp/linuxstart-20120111/Makefile
修改
KERNEL_PATH=../../linux-2.6.20
kernel:
make -C $(KERNEL_PATH) ARCH=i386 -j16
make kernel
生成vmlinux.bin 给deobfuscated/jslinux.js 里面用就可以了
后续需要注意的还要看的
/dev/ttyS1和 tun是什么关系?
PCEmulator.js:1039: console.error("hao net0 net_send_packet ne2000: send packet len=" + send_bytes);//not used ? hao
arch/i386/defconfig:775:# CONFIG_TUN is not set
##########
对比自己编译的和网络可通的vmlinux.bin 的 命令行启动的时候的的加载的内容
好使的多了
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky
可以搜到linux内核源码
drivers/net/tun.c:40:#define DRV_COPYRIGHT "(C) 1999-2004 Max Krasnyansky
#@@@@@@@@@@@@@@@ 内核修改具体操作 @@@@@@@@@@@@@@@
1.准备:
deobfuscated 为运行代码 (https://github.com/killinux/deobfuscated )
jslinux_reversed 有多线程自旋锁的补丁 为多线程补丁的目录 (https://github.com/killinux/jslinux_reversed)
deobfuscated-file (包含linux-2.6.20.tar.gz,linuxstart-20120111.tar.gz和patch_linuxstart-20120111.patch 官方原版( https://github.com/killinux/deobfuscated-file)
2. 具体操作
cd deobfuscated-file
tar xvf linuxstart-20120111.tar.gz
tar xvf linux-2.6.20.tar.gz
ls
linux-2.6.20 tmp
cd tmp/linuxstart-20120111/
patch -p2 < ../../patch_linuxstart-20120111.patch
cd ../../linux-2.6.20
cp ../tmp/linuxstart-20120111/config_linux-2.6.20 .config
patch -p1 < ../tmp/linuxstart-20120111/patch_linux-2.6.20
patch -p1 < ../../jslinux_reversed/contrib/patches/2.6.20_common_fixes.patch
patch -p1 < ../tmp/linuxstart-20120111/makefile_patch_linux-2.6.20.patch
cd ../tmp/linuxstart-20120111
make kernel
cp vmlinux26.bin ../../../deobfuscated
3.说明:
内核的加载参考 http://dl.iteye.com/topics/download/2f7a4c85-b587-3577-a13d-1050896ff987
新版的jslinux已经摒弃纯js的代码,使用 asm.js的emscripten加载tinyemu实现risv和x86
https://haoningabc.iteye.com/blog/2437013