京东云2存储情况.jpeg
由于k2p的mt7621老了,wifi5的速度只有400mbps上下,不能满足新设备的网速需求(连宽带都跑不满),看着京东云还能跑京豆回本,就在2021-08-24买了一个京东云无线宝2代(AX1800 Pro)也就是现在说的亚瑟,本着高通高性能armcpu还有usb3指望能刷个机什么的,结果没等到他出固件,就换了软路由,现在依然作为ap使用,因为固件太菜,所以始终只有做ap的命。

2023年4月22日16点20分京东云突然重启,系统被强制更新到r2279
原来是r2242,并且自动更新是关的,插件也没有跑,说明京东云有隐藏后门(大概是jdc_agent)

开SSH

最后一个能用的是1.5.40r2181,目前最新的1.5.50r2204是不行的,另外这个版本还会更新到easymesh,如果没有不同型号的需要进行组网,强烈不建议更新
登录京东云,打开f12控制台,运行一下这个

$.ajax({
    url: "/jdcapi",
    async: false,
    data: JSON.stringify({
        jsonrpc: "2.0",
        id: 1,
        method: "call",
        params: [
            $.cookie("sessionid"),
            "service",
            "set",
            {
                "name": "dropbear",
                "instances": {"instance1": {"command": ["/usr/sbin/dropbear"]}}
            }
        ]
    }),
    dataType: "json",
    type: "POST"
})

如果是1.5.50r2204的固件,可以试试这个 评论区Monic提供加密脚本 的内容在京东云断网的情况下恢复出厂设置(不会删缓存)后贴到控制台运行,因为是加密的,也不知道运行了什么,安全性自辩

22年11月头,目前最新的固件是1.5.70r2242,2181无法下发aiecpluginES,所以必须更新,咩咩已经成功带着ssh升级到了这个最新版,方法不公开发布,目前没有可以直接在此固件开ssh的办法,这里提供一些思路:

  1. 旧版固件可以开ssh
  2. 固件更新成功后会重启,亮蓝灯,这时手机app可以连接控制路由器
  3. 大概1分钟后,亮绿灯启动插件,然后会下发/opt/etc/下的插件脚本nattype.sh jdc_docker.sh aiecpluginES.sh aiecpluginextA.sh这4个文件,其中aie开头的是插件,另外两个是nat测试和docker环境的启动脚本,以及/opt/etc/init.d/r2242_hotfix这个开机启动的补丁
  4. 补丁每次开机重置一次定时计划任务,几分钟定时kill掉一次dropbear

因为他是基于Openwrt的,其中/usr/sbin/dropbear为本次请求运行的命令,带着cookie还能运行其他的命令
如果需要开机启动,那只需要在/etc/rc.local中的exit 0前面加入这个命令,具体怎么加,可以查查vi怎么用
另外如果你用京东云拨号,那么这个ssh服务也是可以从公网访问的,如果不想,请自行增加iptables规则来屏蔽从pppoe访问tcp22
这也算是个隐藏功能吧,不是什么漏洞

DNS劫持

虽然作为AP模式,但是他依然会劫持接在它下面dns到他自身,也就是udp53
其实劫持也没啥,主要是他的DNS解析太慢了,而且局域网主机名.lan后缀的都无法正常传递到上级路由解析
具体的话可以iptables -t nat -L PREROUTING检查一下是否有这条规则,解决方案也很简单,命令咩咩已经写好了,运行将删除这条劫持dns的规则,也可以按上面的方式加到开机启动

iptables -t nat -L PREROUTING --line-num | grep dpt:domain | awk '{system("iptables -t nat -D PREROUTING "$1)}' ​​​

至于如何验证劫持关掉了呢?nslookup jdcloudwifi.com解析不出来则为成功(京东云劫持这个域名用于快速访问路由器设置)
另外发现他还是会不定时加回来,所以还需要crontab -e加到计划任务里

* * * * * iptables -t nat -L PREROUTING --line-num | grep dpt:domain | awk '{system("iptables -t nat -D PREROUTING "$1)}'

这样一分钟会自动检查一次并删掉劫持的规则

或者可以把dns请求劫持一下到主路由

iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 192.168.1.1:53

1.5.70r2242收敛了一点,ap模式不会再劫持全部dns,收敛了一点,可以不处理正常用

target     prot opt source               destination         
DNAT       udp  --  anywhere             anywhere             udp dpt:domain STRING match  "|0b6a64636c6f75647769666903636f6d|" ALGO name bm TO 65535 to:192.168.1.3

QoS

京东云自带QoS规则,可以使用iptables -t mangle -L查到,积分模式切换的就是QoS模式,具体的脚本是/etc/ipt_qosnss.sh

端口转发

用这个路由器大概也会用它的赚京东功能吧?由于他的UPnP比较奇怪,就算上级路由开了UPnP他也是nat3,那么就需要给他做端口转发,因为他跑的插件虽然说最多就两个,但是具体跑的是哪一个是不固定的,可以先查一下端口监听

netstat -anp | grep 0.0.0.0 | grep -v -E 'wpa|hostap|nmbd|dns|smb|nginx|cnssdaemon|dro
pbear|jdc_|127.0.0.1:'

centaurs和happ-vod监听了38033和18688.jpeg
然后把他们监听的端口加到主路由的端口转发就行
另外有一个/opt/etc/nattype.sh用于检测nat类型,观察了一下,他会在18700-18799的范围内随机检测,因此这部分也要转发

另外还有个办法,看京东云的防火墙都开放了什么端口,照着添加转发也可以

iptables -L  zone_wan_input

更新到r2242之后,有了一个新方法,这是热补丁的一部分
/sbin/haiapi call '{"payload":[{"method":"firewall.get_port_access_list"}],"version":"1.0.0","action":"call"}'
显示的是个json,需要转发什么端口是什么协议清晰可见

实在是懒的话,直接把10000-59999都转给京东云就完事咯

Openwrt防火墙-端口转发.jpeg

外置双插件

因为京东云给的越来越少了,咩咩这里是内置X哔哩哔哩(aiecpluginE)外置Y爱奇艺(aiecpluginA),并且内置跑的比外置还猛,Y插件也占不满500g的硬盘,那么就将内置的X也移动过去
插件安装在/opt中,aiecplugin开头的文件夹就是,其中aiecpluginA的存储是在aiecpluginA.conf中,aiecpluginE则是一个软连接链过去的cache文件夹

cd /opt/aiecpluginE
# 将内置的缓存复制到外置
cp -a /mnt/mmcblk0p27/aiecpluginE /mnt/sda1/aiecpluginE
# 将插件运行目录换成外置的
rm Log cache
ln -s /mnt/sda1/aiecpluginE/cache cache
ln -s /mnt/sda1/aiecpluginE/Log Log
# 让路由状态显示的是实际的缓存大小
cd /mnt/mmcblk0p27/
rm -rf aiecpluginE
ln -s /mnt/sda1/aiecpluginE aiecpluginE
# 重启插件
ps | grep mmcblk0p27
kill 上面第一列所有的数字用空格隔开

22年11月头,aiecpluginE已经被aiecpluginES插件取代,这是一个跑在docker里的插件,2181无法下发,所以被迫更新到最新的2242
因为插件是个docker容器,所以要将其改为外置就简单了,刚刚被傻逼iOS的下拉刷新坑了,写的全没了,现在就简单写一下吧,假设你的外置盘在/mnt/sda1

docker stop centaurs
cd /mnt/mmcblk0p27
cp -a aiecpluginES /mnt/sda1/aiecpluginES
ln -s /mnt/sda1/aiecpluginES aiecpluginES
docker start centaurs

固件降级

编辑文件/lib/upgrade/platform.sh,找到check_hlos_type()这个方法,把-a $ver -ge $version_no删掉,大概在31行

elif [ -n "$type" -a $ver -ge $version_no ];then

改为

elif [ -n "$type" ];then

就可以在web选择旧版固件降级了
另外评论区有个旧版固件和旧版的platform.sh,因为不知道后期会有什么变化,优先推荐直接修改文件而不是替换,如果不会改可以替换试试(1.5.50r2204测试通过)

Bug

2022年12月初,京东云给2代亚瑟把双插件发成了内外A,也就是爱奇艺的ipes,导致积分暴降,60mbps上一天0.6,之前刚出雅典娜1.2,21年刚买2.5元
原来的aiecpluginA服务变成了aiecplugin2A和aiecpluginsame2A,aiecplugin2A内置,aiecpluginsame2A外置
但是不知道是不是开发的人根本看不懂代码还是有bug,导致这内外两个A只能启动一个,插盘就启动外置的,不插就启动内置的,向客服反馈一个月多次让工程师看也没找到问题,外置存满了内置还是0缓存

LED

红灯:emmc读写,绿灯:wan口传输,蓝灯:wan口插入

echo mmc0 > /sys/class/leds/led_r1/trigger
echo netdev > /sys/class/leds/led_b1/trigger
echo netdev > /sys/class/leds/led_g1/trigger
echo eth4 > /sys/class/leds/led_b1/device_name
echo eth4 > /sys/class/leds/led_g1/device_name
echo link > /sys/class/leds/led_b1/mode
echo 'tx rx' > /sys/class/leds/led_g1/mode

备份emmc

因为京东云2代和1代不一样,系统是装在emmc里的,积分也是用emmc跑的,众所周知闪存的写入量是有限的,很有可能跑积分给跑挂了(比如持续红灯不开机)既然开了ssh那就备份一下比较好
如果插usb盘:

dd if=/dev/mmcblk0 bs=10M of=/mnt/sda1/jdc2emmc.img

使用nc网络传输到另一台设备上:
先在存镜像的电脑上运行(Linux,如果用op的话去掉-q 0,但完成后不会自动退出,自己看盘读写)

nc -q 0 京东云ip 12345 > jdc2emmc.img

在京东云运行

dd if=/dev/mmcblk0 bs=10M | nc -l -vv -p 12345

其他

京东云对外有个54171端口,转发/api到80端口,是固定端口,建议屏蔽避免被运营商扫,并且这里的api可以修改/opt/etc/config中的文件,另外后台还跑着一个使用固定证书验证访问的webdav服务
ssh证书免密登录把pub里的内容加到这个文件/etc/dropbear/authorized_keys
另外看看评论区,有帮助