Windows静默执行system command

这两天在撸一个远程控制的木马。
在服务端,我们首先要实现的一个功能就是要能够执行系统命令。但是system函数在执行的时候都会自带一个黑乎乎的Console,这东西很容易暴露啊(什么很容易,明明一眼就能看出来好么?)
所以,我们需要一种可以将输出重定向的函数来完成这一光荣而不怎么艰巨的历史使命。打开MSDN,万花丛中我们找到了这个东东——CreateProcess。
下面的代码实现非常简单,我们重定向了系统调用的输出,成功把它带到了沟里~~

#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") // 设置连接器选项

之后我们再拉一个文件句柄出来,用它来接住CreateProcess的输出。
Continue reading

关于Socket.io的一个大坑

在阿里其他的东西没学会,但踩坑填坑的手艺却是大有长进。
这两天在搞一个聊天工具,其中用到了Socket.io这个库。这个库给我的印象其实一直都是非常好的。这个家伙的Websocket封装做的很不错,给开发带来了很大的便利。
昨天脑洞大开想在Server端加上一个Redis的消息队列。这样的话,如果有新的Connection连接进来,Server就可以向他推送近期的消息了。
当然,储存消息的方式不难。我直接用来Redis的Hash存储,这种方式比较适合存储像消息体这样的对象类型。
之后我在监听Login事件的监听器中加上了emit广播,测试了和Redis的连接。
由于不能每进来一个新连接Server都去广播一次,这样很影响用户体验。所以我打算做成单播的形式,只给新加入的Connection推送最近的消息。
于是按照Socket.io的Doc:

// send to current request socket client
socket.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients, include sender
io.sockets.emit('message', "this is a test");
// sending to all clients in 'game' room(channel), include sender
io.sockets.in('game').emit('message', 'cool game');
// sending to individual socketid 
io.sockets.socket(socketid).emit('message', 'for your eyes only'); 

我爽爽的Debug了两个小时,最后还是在stackoverflow上找到了答案。从1.0.0的版本之后,Sockets变成一个list数组了,所以调用姿势变成了这个样子:

//向新加入的用户推送之前的消息
 io.sockets.connected[socket.id].emit('message', {userid:reply.id, username:reply.name, content:reply.content});

简直2333有木有?其实这不是一个大问题,但是网上的教程基本都是1.0.0版本之前的,所以很多教程使用的是现在已经不再兼容的方法。
希望我能成为萝卜,为你填掉这个坑。

离开阿里

想不到的是,我现在想离开这个地方的迫切,和我当初想进来的时候是一样的。
之前大二的时候是想直接工作的,所以收了很多offer,其中有幸拿到了熊厂凤巢、鹅厂SNG和A厂蚂蚁。在这里我不想比较这几家公司到底哪家更好,咱们单纯的聊聊情怀吧。
有人说谈情怀的人太矫情,其实情怀背后的都是现实,人总是互相看不上的。
公司是同类人和同类人的集合,所以情怀是什么呢?
是一个一伙人看不上另一伙人的故事。
我先说说我的故事吧,大三上学期我去了SNG。
组里的老大已是世外高人,平时不见他怎么写代码,只能从其他人那里听到一些关于他牛逼到炸裂的事迹。导师则酷爱shell,第一次看到有人用shell脚本写那么大的系统。我一开始以为只能用C++或者shell了,但是和导师沟通之后,确定了开发需要用的组件有提供我需要的接口之后,我可以随意的使用任何一种我想用的语言了。
当时在做的是关于风控的项目,我有跳板机的权限,我有线上环境,还有线上的数据库。我给数据库做过热双写,也改过距离匹配算法,我很清楚如果我搞砸了会发生什么。
所幸的是,所有的事情都顺利的完成了。
在腾讯,我想说我真的学到了很多东西。我清楚的发现如果出国去感受一下国内的氛围那我可能也就这样了。所以和老大明着说了自己的想法,打算再去其他公司感受一下。
之后我到了蚂蚁金服。
在这里,我没有内网的权限,一打开界面就是“Oops 你没有权限~”,什么线上环境更是无稽之谈。
哦,对了。在这里我还领到了一台让我感动至今的用了79个月的19寸显示器,我很想知道这种“实习生专用”的显示器算不算一种歧视?

Transmissions使用小结

那啥,为啥是小结呢?因为不打算再用了呗。
昨天晚上拿到了《自杀小队》的枪版种子,先是想用公司的网直接下载来着,但是估计是有屏蔽,导致拿到链接之后也是下载不到,初步判断是因为内网的屏蔽政策。
所以打算用自己的服务器下载,那样正好带宽还可以更高一点。所以在网上找到了transmissions的安装包。正打算安装的时候,在网上又找到了一个一键安装包。
这个东西其实就是一个.sh文件,会自动的帮你安好所有的依赖并且配置好参数。这里我着急了,直接用了网上提供的安装包,快速配置了BT客户端,开始下载。
下载的速度确实非常快,正好到了晚餐的时间,就先开着服务和组里的小伙伴们去吃饭了。
吃完饭回来打算看看下载的进度(其实按照之前的下载速度我知道肯定已经下载完了),但是刚回来屁股还没坐热就被叫去开一个什么应急响应和故障的会了。所以我连电脑的屏幕都还没打开。
开会的时候突然收到了一条服务器报警,说是我的服务器欠费了,WTF!
结果一看居然上传了70多个G的流量啊,下载是早搞定了,但是服务一直在做种啊,100M的带宽不打到欠费才怪呢。
于是我痛定思痛,决定以后还是无耻的使用迅雷之类的东西好了。
另外本次疏忽还产生了很严重的附带损失:
开始有一堆二货疯狂的端口扫描我的机器了,这TM就很尴尬啊,吓得宝宝赶紧启动了防御姿势,把安全组全给封了。
那为毛要这么过激呢?
因为机器上有宝宝的渗透测试平台啊,大写的Hack me啊,这TM要是被坏孩子找到了还得了?
另外Jupyter也挂在上面啊,其他什么apache,nginx就不说了,这明摆着的一大堆漏洞(不,这不是漏洞,这简直是天坑啊)
所以宝宝决定老老实实的匿了,不在公网上乱打广告了~~

MikumikuDance初体验

这两天在公司没什么正事做。可能是因为要走了的原因吧,师傅只是很敷衍的安排了个分析方案的项目。
不过讲真,要真的想做事还是有一堆事可以做的,但是我确实对这家公司有点失望,自己本身也不想去找事情做。
上午练习了很长时间的打字(对,你没看错,就是打字~~), 下午突然想起来很早以前一直想玩的一个东西——MMD。这么多空闲时间,不正好是试试新东西的好时候么!
于是从网上下载了汉化的安装包,整个过程真的非常顺畅,一路下一步就完成了安装。
打开界面看了一下,发现上手曲线很平滑,如果之前用过谷歌的草图大师,那应该很快就可以开始愉快地玩耍了。
大概点开所有的菜单看了一下,发现这个软件还是很有深度的。一个9.8M的安装包可以做到这些确实很厉害,霓虹国人在这种奇奇怪怪的地方果然还是很有一手的。
操作过程大同小异,但可以看出作者为了让各种人群都可以享受到这个游戏的乐趣,做了很多的工作,界面很简约,操作起来很舒服。
另外我在安装的时候还发现这个软件自带了一个AR的软件包。要是可以自己做一套初音的舞蹈包那一定非常的不错。想想现在身边也搞不到AR眼镜,最后还是没有安装这个扩展包。
下面是自己随便搞得一个截图:

终末之诗(The End)

I see the player you mean.
我看到你所指的那位玩家了。
******(Playername)?
******(玩家名称)?
Yes. Take care. It has reached a higher level now. It can read our thoughts.
是的。小心。它已达到了更高的境界。它能够阅读我们的思想。
That doesn’t matter. It thinks we are part of the game.
无伤大雅。它认为我们是游戏的一部分。
I like this player. It played well. It did not give up.
我喜欢这个玩家。它玩得很好。它从未放弃。
It is reading our thoughts as though they were words on a screen.
它以屏幕上出现的文字的形式阅读着我们的思想。
That is how it chooses to imagine many things, when it is deep in the dream of a game.

和谐图片检查工具

这两天宝宝确实有点高产啊~~
其实讲真,为了搞这些东西,宝宝公司里的活都暂时搁浅了。
本程序根据颜色(肤色)找出图片中皮肤的区域,然后通过一些条件判断是否为色情和谐图片
程序的关键步骤如下:

  1. 遍历每个像素,检测像素颜色是否为肤色
  2. 将相邻的肤色像素归为一个皮肤区域,得到若干个皮肤区域
  3. 剔除像素数量极少的皮肤区域

我们定义非色情和谐图片的判定规则如下(满足任意一个判定为真):

  1. 皮肤区域的个数小于 3 个
  2. 皮肤区域的像素与图像所有像素的比值小于 15%
  3. 最大皮肤区域小于总皮肤面积的 45%
  4. 皮肤区域数量超过60个

当然,这个算法一看就知道不可能具有100%的精确度。而且由于图片越大,像素点就越多,这样我们想要识别一张照片就会变得很慢。我觉得这种算法的优势就是速度,如果不能在速度方面对人工识别产生维度打击,那这个算法就失去优势了。毕竟人类在这方面有着只可意会不可言传的优势。。。
既然这个东西貌似没有什么卵用,那为啥还要开发他呢?
亲们记不记得我还有40多个G的妹子照片需要分类。我需要过滤掉那些玷污宝宝眼睛的照片,然后把它们全部放到一个叫做“不要看”的Folder里面去啊!这么光荣的一个任务,当然需要这个神奇的东东出马啊。
各位千万别说我low,我又不是搞神经网络的,不会没事搞个什么152层的人工智能算法出来(理论上来说,我搞过一个40W维的~ ~)。再说也不是办什么正事,能凑活着用就可以啦。
最后,宝宝午后优雅测试了一下。配合协程,效果拔群 ~。~
代码什么的还在完善,等完成之后会发出来的(对,宝宝就是不想给~。~)