`
haoningabc
  • 浏览: 1446809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jslinux总结帖

阅读更多
注意个问题:
chrome不要用两个tab页,否则ping不通
应为只有使用的tab页面才是可操作的
把chrome分两个,两个jslinux都是可见状态才能ping通




大神的原版
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 <maxk@qualcomm.com>

可以搜到linux内核源码
drivers/net/tun.c:40:#define DRV_COPYRIGHT "(C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>"




#@@@@@@@@@@@@@@@  内核修改具体操作 @@@@@@@@@@@@@@@
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









分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics