`
haoningabc
  • 浏览: 1482809 次
  • 性别: 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









分享到:
评论

相关推荐

    javascript写的模拟器运行linux--jslinux

    JavaScript编写的Linux模拟器,即JSLinux,是由著名的程序员Fabrice Bellard创作的一个创新项目。Fabrice Bellard是一位多产的开发者,以其在计算机领域的多项杰出贡献而闻名,包括FFmpeg、QEMU虚拟化软件以及...

    node-jslinux.zip

    node-jslinux 为 jslinux 提供兼容 Node.js 的扩展。 标签:nodejslinux

    html.tar.gz_jslinux

    "jslinux"标签进一步确认了这个压缩包与JSLinux项目有关,意味着其中包含的代码可能是实现JavaScript版本的Linux内核模拟器,或者是相关的用户界面组件、脚本和配置文件。JavaScript Linux的实现依赖于JavaScript的...

    js 模拟 linux

    这一概念由法国程序员 Fabrice Bellard 通过他的项目 JSLinux 实现,该项目链接为 &lt;http://bellard.org/jslinux/&gt;。 JSLinux 是一个基于 JavaScript 的虚拟机,它使用 Emscripten 编译器将 Linux 内核(通常为 vm...

    js函数总结

    JS函数总结,里面包含了函数分类,用于下载积分积攒使用

    JS基础总结

    这篇文档适合刚接触JS和对JS知识点不熟悉的同志。新手的话可以边学边参考文档;有一定基础的可以查漏补缺,便于复习和查阅。

    JS总结第二章

    JS总结第二章自己写的总结 请大家下载看看 谢谢

    js关键字总结.docx

    js关键字总结.docx

    js关键字总结.pdf

    js关键字总结.pdf

    Ext js 学习总结

    个人总结对Ext js 的学习总结,希望对各位朋友有所帮助

    linux安装node.js.pdf

    Linux安装Node.js Linux系统中安装Node.js是指将Node.js runtime环境安装到Linux操作系统中,以便开发和运行基于Node.js的应用程序。Node.js是一个基于JavaScript的runtime环境,提供了一个事件驱动、非阻塞I/O模型...

    js-基础总结深入.md

    借鉴资料,共享思路;没啥特别描述,copy的内容;js-01-基础总结深入,MD文档阅读-对象的理解和使用

    js学习总结希望能帮助大家

    js学习总结,希望能帮助大家,多多指点了

    JS总结第三章

    JS总结第三章自己写的 请大家下载 谢谢

    `JS 总结.html

    `JS 总结.html

    js最全错误总结.xls

    js最全错误总结.xls,

    JS笔记总结

    js课堂总结(全),大家可以看一下,特别是在学习js的同学,建议下载下来看看!

    js英文表示总结.mm

    js英文表示总结.mm

    基于nwjs的网易云音乐Linux版客户端.zip

    标题中的“基于nw.js的网易云音乐Linux版客户端”指的是使用nw.js框架开发的、专为Linux操作系统设计的网易云音乐应用。nw.js(前身是node-webkit)是一款开源的工具,它允许开发者使用HTML5、CSS3、JavaScript等Web...

Global site tag (gtag.js) - Google Analytics