斐讯K3固件研究

没有评论

2017年3月27日 at 下午2:17分类:其他

斐讯K3和K2的固件差别比较大,WEB页面不再是通过lua来控制。

斐讯K3在httpd(/usr/sbin/httpd)中集成了CGI脚本,网页文件在/www目录

比如我们要研究数据备份的内容,在/www/pc/backupReset.htm可以看到其处理过程:

点击“备份配置”按钮,会调用nvramdl.cgi文件进行处理,此文件存在于httpd可执行文件中:
strings httpd|grep cgi

用IDA分析httpd文件:
对配置文件进行处理的可能是如下函数:
sub_502EC

使用了aes_ecb_128encode加密方式

调用nvram_get读取数据,函数中还调用了hmac_sha1加密算法进行了处理

未完待续..

斐讯K2 UDP转发的问题(时钟无法同步)

没有评论

2017年3月20日 at 上午10:12分类:其他

斐讯K2使用过程中,发现有时会出现时钟无法同步的现象,而且一般是做二级路由的情况下出现,定位过程如下

 

NTP时钟同步使用的UDP 123号端口,我们在本地搭建环境,用两台K2,一台地址为192.168.1.1,PPPOE拨号上网

另一台无线中继到第一台,WAN地址为192.168.1.122,LAN地址为192.168.2.1

先在第二台上把系统的ntp给关掉:

/etc/init.d/sysntpd stop

采用手工同步命令同步时钟:

/usr/sbin/ntpd -n -d -p clock.fmt.he.net

正常情况下应该是这样的:

正常情况下抓取的报文信息:

把端口转发或DMZ打开,然后再运行:

/usr/sbin/ntpd -n -d -p clock.fmt.he.net

报文是这样的:

可以看到,很多报文是超时的,为什么会这样呢?

我们简化一下组网,在本地进行测试,主要测试K2对UDP的转发处理,在K2的LAN接一台计算机,运行IPOP的UDP客户端(192.168.2.203),在K2的WAN口接一台计算机,运行IPOP的UDP服务端(192.168.1.227):
正常情况下,客户端能够发送和接收到UDP报文:

服务端信息:

抓包报文:

注意端口转换信息:客户端是22211-22213,NAT转换后是58706-58708

然后我们开启端口转发,会发现端口转换错误:
客户端收不到返回报文:

服务段收到了客户端的请求,但是会发现客户端的端口没有变化:

抓包报文也显示NAT转换时端口没有变化:

客户端源端口是变化的,经过NAT转换后,源端口变成一样了,这样返回的UDP报文会找不到正确的客户端源端口返回数据,造成客户端无法正确的接受UDP返回报文

为什么会造成此问题?

查看源码会发现,导致此问题的语句为:
端口转发:
iptables -t nat -A port_forward_postrout -d 192.168.2.2/32 -o br-lan -p tcp -j MASQUERADE
DMZ:
iptables -t nat -A DMZ_postrout -d 192.168.2.2/32 -o br-lan -j MASQUERADE
上面两条语句都是对br-lan接口增加了MASQUERADE规则

未完待续..

斐讯K2 V22.5.9.163官方固件定制版本V1.1,集成breed,支持官方版本直刷

没有评论

2017年3月18日 at 下午8:18分类:硬件

本固件为斐讯K2 V22.5.9.163的修改版本

本固件支持从官方版本直接升级,并集成了最新的breed,刷入后自动将bootloader更新为最新breed。



固件下载
--------------------------------------------------------------------------------------------------------------------------------------------
固件下载地址:
http://pan.baidu.com/s/1geCr84N

目录:K2 ROM>V22.5.9.163

固件名:
k2_163_org.bin为官方V22.5.9.163版本,v1.0定制版本刷此固件可以恢复为纯正的官方版本
k2_163_vxx_breed.bin为针对163的定制版本,比如k2_163_v11_breed.bin为定制版本V1.1,带breed后缀的固件自带最新的breed程序。


当前特性
--------------------------------------------------------------------------------------------------------------------------------------------
1、官方固件净化(禁止可疑程序、关闭adpush广告推送)
2、所有添加应用缺省禁止,初始即为“纯净精简”版本
3、支持广告过滤(adbyby)、S S R 和自动中继
4、使能启动任务和计划(定时)任务,支持LED指示灯控制
5、支持官方APP本地和远程(慎用)管理

版本更新记录
--------------------------------------------------------------------------------------------------------------------------------------------
【2017-03-03】V1.0发布

【2017-03-03】V1.1发布
增加S S R和LED控制,支持从官方版本直接升级,自带breed


安装说明
--------------------------------------------------------------------------------------------------------------------------------------------
1、如果你是官方版本的固件,直接在WEB页面的“手动升级”菜单进行升级:
 nww
注:官方固件版本号需大于V21.4.6.12,如果目前的固件版本低于V21.4.6.12,请先升级到V21.4.6.12后再升级此版本

2、如果你是V22.5.9.163定制版本V1.0,请在WEB“手动升级”页面先刷入k2_163_org.bin恢复为官方固件,重启后再按照第1步刷k2_163_vxx_breed.bin,后续的定制版本支持直接从WEB页面手动升级,不需要再恢复为官方固件


3、如果你是其他定制版固件或第三方固件,请到【此贴】下载firmware_k2_V10.bin,在breed中刷入,重启后变为官方版本,然后再按照第1步刷k2_163_vxx_breed.bin




使用说明
--------------------------------------------------------------------------------------------------------------------------------------------
1、刷入固件重启后,在“高级设置”-“系统状态”页面可以看到定制版本号:
bb3


2、此固件自带breed,由于V22.5.9.163版本的分区变化,如果你后续想要刷回其他第三方固件,请先在breed“环境变量设置”中改为“禁用”,然后再刷第三方固件,否则无法启动
bb2
 
breed进入方式:电脑连接LAN口自动获取 IP 地址,按住K2复位键再通电,持续按住几秒,然后电脑访问http://192.168.1.1即可在WEB刷第三方固件

3、、由于空间限制,缺省不安装ssh,如需命令行,可以在“启动项目”添加
/usr/sbin/telnetd -l /bin/login.sh
重启后即可telnet登录K2
 

4、其他功能说明请参考【此贴

linux下的二进制文件操作

没有评论

2017年3月18日 at 上午8:19分类:软件

二进制文件显示:

hexdump

命令语法:

hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]

 

命令参数:

此命令参数是Red Hat Enterprise Linux Server release 5.7下hexdump命令参数,不同版本Linux的hexdump命令参数有可能不同。

参数 长参数 描叙
-b 每个字节显示为8进制。一行共16个字节,一行开始以十六进制显示偏移值
-c 每个字节显示为ASCII字符
-C 每个字节显示为16进制和相应的ASCII字符
-d 两个字节显示为10进制
-e 格式化输出
-f Specify a file that contains one or more newline separated format strings.  Empty lines and lines whose first non-blank character is a hash mark (#) are ignored.
-n 只格式前n个长度的字符
-o 两个字节显示为8进制
-s 从偏移量开始输出
-v The -v option causes hexdump to display all input data.  Without the -v option, any number of groups of output lines, which would be identical to the immediately preceding group of output lines
-x 双字节十六进制显示

比如如下命令查看k2_163_v11_breed.bin文件从0x30000地址开始的64个字节内容:

# hexdump -C -s 0x30000  -n 64 k2_163_v11_breed.bin

 

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

参数注释:

if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

比如拷贝一个文件从偏移量0x30000(196608)开始的64个字节:

#dd if=./k2_163_v11_breed.bin of=./tmp.bin bs=1 skip=196608 count=64

sed是流编辑器,流既可以是字符流也可以是二进制流,可以针对文本字符或二进制字符进行修改替换,可以直接修改二进制文件。
$ sed 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g' binfile > new_binfile

bootloader分析-breed

没有评论

2017年3月16日 at 下午2:19分类:硬件

Ubuntu下安装binwalk:

下载:

#git clone https://github.com/devttys0/binwalk.git

#cd binwalk

安装:

$ sudo python setup.py install

解压需要7z支持

$ sudo apt-get install p7zip-full

分析breed:

解压后的文件在:

~/_breed-mt7620-phicomm-psg1208.bin.extracted

breed分为两个部分:

1、0-0x2850 为一个bin文件,这一部分一般叫做bootstrap.bin,

2、0x2850-最后(0x14e09)为一个LZMA格式(7z)的压缩文件,就是上图的2850.7z,解压后的文件是2850,我们暂把它叫uboot.bin

设备上电后开始执行bootstrap.bin, 先进行ram/flash相关的初始化,然后解压uboot.lzma成uboot.bin,最后执行uboot.bin

 

在网上搜索,找到了K2官方uboot的参考源码,据说breed也是在这个开源基础上修改的:

https://github.com/pepe2k/u-boot_mod