CHN-beta/xmurp-ua

请教下大佬

Closed this issue · 62 comments

你那个包过滤的c程序,咋写的,只考google,百度吗?我也想写一个,但是万事开头难,对linux底层不是很了解,请大佬给点宝贵经验

OpenWrt 官方有一个写软件包的教程。
https://openwrt.org/docs/guide-developer/helloworld/start
我看的这个学的写Openwrt的软件包。
然后,内核的netfliter钩子看的这个系列的教程
https://blog.csdn.net/wenqian1991/article/details/50363690
剩下的,就是去bootlin看内核源代码,然后printk调试。
那时我对linux也是刚接触,不过正好是暑假,就花了很多时间去杠。

这个改UA,其实改什么都无所谓,UA直接留空也是一样,都可以起到防检测作用,但是有些对UA有要求,那些,你有想过怎么处理吗?比如腾讯下载器,GTA5启动器这样的。

我用FD根本抓不到相关的包,我猜测他们是用TCP协议。

@Subdue0 对,UA改什么都无所谓,只要别看出来是手机就行。

我也发现腾讯下载器的问题了。代码中有根据mark过滤包的机制。可以把来自电脑的数据全部放行。

具体用法看我的博客

@Subdue0 FD是什么?什么用的TCP?

FD就是Windows下的抓包软件,这个软件只能抓http,https的包,我抓gta5(r星登录器)没有抓到相关的包

具体怎么交互的,我也不清楚,对这些比较底层的东西不了解

@Subdue0 Windows下可以用wireshark。

用过wirkshark,他好像不能发包啊,后面我就没用他了

我尝试把它编译进LEDE里面,结果编译不成功,错误提示很多

@Subdue0 用的哪个SDK?我这里编译一下试试。

我用的openwrt官方自带的SDK
https://github.com/Subdue0/openwrt.git

@Subdue0 用的最新的源代码编译的吗?具体哪个型号呢?

7020A的HC5561

不久之前的代码,很新的。

@Subdue0 HC5661对吗?我没有找到5561。
也没有找到7020A,我这里看到HC5661是7620。

5661

你直接用那个7620,hc5661就行了

怎么样?试了吗?

@Subdue0 昨晚试了下,确实会出问题。似乎是编译的时候,找不到内核的源代码。
我周五再具体看看吧。
以我的能力不一定能解决这个问题。

没关系,不能解决就算了

大佬,有办法解决吗?

@Subdue0 你说不能解决就算了,我以为不需要我解决了……

LEDE的代码一向有些问题,不论是SDK还是源代码。比如,官方说一句make就可以用源代码把镜像编译出来,但实际上我这里测试不可以。

以前我给一个LEDE编译过xmurp-iph(改ip的id和ttl的,我没上传到github,因为后来确认不需要),用官方稳定版的SDK,就是整了两个小时,加了一堆额外的参数才过的。参考这篇文章。但是这次我在使用源代码编译的时候,在git仓库中没有找到Linux内核源代码(编译时报的错也是这个),尝试编译了一下完整镜像,才看到它下载了内核源码,但也没有再尝试了。

如果你一定要用LEDE的源代码去编译,或许有一个迂回的可行的办法:先勾选打包SDK、正常地编译出镜像和SDK,然后按照上面那篇文章中说的,加参数编译xmurp-ua。

lean的lede,用py写了一个校园网登录程序,想编译到固件里面,无奈requests怎么也编译不过,官方的openwrt倒是可以编译requests,后面尝试requests换urllib后,又出现大坑,python自带的urllib连request,parse方法都没有

你们学校,使用多个电脑会被检测到吗

我发现我们学校好像是只是检测手机,就是桌面设备不管

如果只是检测手机,可以只过滤掉手机的UA,这样电脑所有的应用都不会受到影响了

@Subdue0 不会检测,同样只是检测手机。

你说得对,只改手机UA就可以了。但有个不太好处理的事情:UA可能被割断在两个ip包里而不是一个。

我觉得可以这样:收到的包只要有ua(哪怕只是一部分)就先stolen,等把ua集齐(或者读完http头发现没有ua)后,再一次性判断、修改、放出;其中可以假定需要收集的包是按顺序连续收到的,如果乱了序就直接丢包。

我现在的程序会在内核日志里输出乱序的比例,印象中包含http头ua字段的包乱序的比例不超过百分之一。这样,其实直接丢掉完全不影响。

我是这样想的,你看看行不行:
过滤所有数据包的ua,检查ua值,检测字段里面有没有包含Mac,X11,Windows字段如果包含,则直接不做处理,放行,如果不包含直接把UA清空

https://blog.51cto.com/gdutcxh/1950189
你说的那个不完整,不知道是不是这个IP包分片操作,如果有需要完整的ua,或许需要了解一下,怎么切割的,能切割就一定能合成

@Subdue0 不是ip层的分片,是tcp层的分片。ip层一般不会再出现分片,尽管原则上允许。我已经写好的程序中,是依靠tcp头的数据判定分片的,你可以看一下代码。但我只是顺序地确认这个字节是否替换、然后替换或不替换,最后改一下校验和、发出去;如果要先确认是否是电脑、再整体替换或不替换,一旦ua被分到两个ip包中,就需要把前一个偷回来攒着,第二个收到后再一起处理,稍麻烦。我小学期试试写写吧,最近忙得头大。不过也说不定明天就去写了,随着灵感走吧。

还有,我觉得直接把ua丢掉可能会出些问题,还是替换成一个看起来像是被代理替换了的比较好。你可以先用privoxy在路由器上试试,看丢掉后用几天,会不会出什么问题。

@Subdue0 我今天改了改程序,除了主函数还需要看一下教程是如何偷包、如何再放入协议栈的、还没改,其它的基本改好了。
在另外一个分支上。
你有空,也可以帮我写,哈哈。

ua清空没事,基本不会影响到正常使用的,只有个别的才会需要验证ua

我在做课设,头大,没什么时间搞这个

你的那个程序是写的local_out那个检查点的钩子吗?

@Subdue0 local_out是啥?

移动设备ua清空,我目前没发现什么不正常的问题,所有应用都正常使用

桌面设备的话,我知道的,有腾讯的下载器,gta5云存档同步,可能还有其他的,我没遇到

要是能实现我说的那样,就是只清空掉移动设备的ua,那可能就是完美的破解程序了,哈哈😄

五个检查点的其中一个,可以过滤上行的数据包

@Subdue0 你说的是netfilter吗?netfilter只有PRE_ROUTING、INPUT、OUTPUT、FORWARD与POST_ROUTING啊。你是说output吗?我挂在postrouting,不过其实挂到forward、prerouting都行。

https://baike.baidu.com/item/Netfilter
你看看百度百科的架构那个图。
我之前也是你那样想的,觉得要么挂在pre,或者是post那一块,就是过滤进来的和出去的都行,后来我查了一些资料,思考了一下,我觉得一定得挂在local_out那个点,为什么呢?
netfilter在tcp/ip协议四层协议栈的网络层,那么架构图中的上层协议栈指的就是网络层以上,也就是传输层、应用层。
我觉得,数据包进来归进来,出去归出去,要过滤的不是进来的数据包,因为这没啥意义,我们需要过滤从上层协议栈也就是所有应用从应用层到传输层再到。。。。。。这样出去的数据包,过滤的位置就是在网络层,注册一个勾子过滤,我们只过滤上行80端口,这个是受到监测的,网络层转发的包(这个转发的包头有什么我也不大清楚,应该是不用管的),我们就管所有应用出去的数据包,总而言之,我觉得那个过滤点就是上层协议栈出去的刚出去的那个点,其他点不是不行,我只是觉得貌似不怎么合适

@Subdue0 对于经过路由器转发的数据(比如,局域网里的手机和百度的通信),经过的是PREROUTING、FORWARD、POSTROUTING,不经过INPUT。INPUT是指路由器自己收到的包。
原则上讲,路由器转发时只改动链路层的内容,网络层及以上都不会改;只是现在路由器要做NAT,所以才会涉及到一些网络层、运输层的改动。
而且,就算是在INPUT挂钩子,抓到的也是包含链路层头的。

@Subdue0 LOCAL_IN是对的,是我弄错了。INPUT和OUTPUT是iptables的说法。

转发的包都不过应用层,没有ua吧,不会影响

@Subdue0 不是不过应用层,是不处理应用层的内容而原样转发过去。

没有ua影响的不是路由器转发,是一些手机应用可能会受影响。(服务器端可能会校验ua,或者拿ua做什么事情。)

我的意思是转发的数据包没有ua的说法,只是拿路由器当中转站,不会导致断网,也就不需要过滤

没事,我测试过的,没UA影响不大,很少服务端会检测这玩意完整性,你试试看

用lean的最新lede的sdk可以编译过了吗?等你写好了,我把他编译进我的路由器里面

@Subdue0 你给我个lean的lede的sdk啊……

我没有尝试去适配lede。

我上次给你那个就是了

这个不行的话,最新openwrt的sdk能编译也行

lean的插件很多,我比较喜欢他的,能用他的编译过那是最好的😎

编译mips架构的,你懂的

@Subdue0 给我SDK,不要源代码。还有,明确告诉我编译哪一个型号,不要说mips你懂的。

@Subdue0 描述问题时说清楚自己的需要,不要总是说自己想喝果汁,问你是哪个果汁,你说加紫菜那个。

@Subdue0 这个SDK可以编译过。

git clone https://github.com/CHN-beta/xmurp-ua.git package/xmurp-ua
make defconfig
ln -s /home/chn/Desktop/lede-sdk-17.01.6-ramips-mt7620_gcc-5.4.0_musl-1.1.16.Linux-x86_64/build_dir/target-mipsel_24kc_musl-1.1.16 /home/chn/Desktop/lede-sdk-17.01.6-ramips-mt7620_gcc-5.4.0_musl-1.1.16.Linux-x86_64/build_dir/target-mips_24kc_musl-1.1.16
make package/xmurp-ua/compile ARCH=mips CROSS_COMPILE=/home/chn/Desktop/lede-sdk-17.01.6-ramips-mt7620_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16/bin/mipsel-openwrt-linux-musl- V=sc

编译的时候还是会遇到找不到内核源代码的问题,我看Makefile一时半会儿找不到内核源代码用哪个环境变量,就干脆一个软链接链接了过来。

kmod-xmurp-ua_4.4.153-15_mipsel_24kc.ipk.tar.gz

@Subdue0 没问题的话我把issue关掉啦。

有问题我在开就行了