991cnx_rop吧 关注:87贴子:478
  • 24回复贴,共1

重写版贪吃蛇(CNX C)

只看楼主收藏回复

首先,在此感谢@casio2009,@amngis以及我的朋友@Humanity2020对我重写贪吃蛇的支持。他们教会了我大量gadget的用法,并给程序的方方面面提了很多宝贵的建议。
Here, I would like to thank casio2009, amngis and my friend Humanity2020 for their support in rewriting Snake.They taught me the usage of a large number of gadgets and gave me a lot of valuable suggestions on every aspects of the program.
在我发布程序以及具体思路前,先在此声明:禁止任何人将本帖中的任何内容传到微信、QQ等社交媒体上,6月微信视频号中的函数绘图教程已是前车之鉴。ROP技术的广泛传播可能会导致991cnx机型被全面禁止在考试中使用,这可能会给上海高考考生们带来困扰。
下面正文开始:重写版的贪吃蛇,主程序长度缩减至672字节,相比旧版缩减44%。模拟器测试已通过,但真机未测试。(也欢迎8u们尝试继续缩短它或是采用新的思路,写出更短的程序)程序链接:https://pan.baidu.com/s/19fzSb2P_wiuIZuk5U5iyLw?pwd=nxu8 提取码: nxu8
该版贪吃蛇由于将蛇身放在E3D4处存储,最多可支持768节蛇身,再长将会污染主程序。蛇的每一节遵照传统,仍为3*3。蛇的速度存在主程序第0x5c~5d处,为小端字节序,数值越小蛇速度越快。重写版贪吃蛇的改变有:
1、鉴于蛇可能覆盖屏幕的一半以上,食物将极有可能生成在蛇身上(作者至今已遇到5次),因此该版贪吃蛇中食物为空心3*3方块,以作区分。
2、每一次死亡之后,蛇在按下任何方向键之前将会保持不动。
3、重写版贪吃蛇使用0x02a84e检测按键,因此修复了原版中按下8/9/AC跳出的漏洞
4、重写版贪吃蛇使用0x0177da生成食物,因此修复了原版中食物可能生成于地图外的漏洞
程序中有许多奇怪的操作(例如render_bitmap判定撞墙),详见程序注释snake.txt。
参考文献:
RH_QDG 991CNX的ROP程序单次分支方法
RH_QDG 991CNX函数08EA4的利用方法
amngis [重发]一个用于计算数据的地址(991CNX VerC/F)
amngis Xyzst循环
casio2009 991CNX/580VNX render_bitmap
casio2009 Random Object on Screen
北冥の鱼_鲲 f吧2024年度总结&991CNX地址CF对照表新版


IP属地:上海1楼2025-07-09 21:06回复
    @amngis @Humanity2020


    IP属地:上海2楼2025-07-09 21:08
    收起回复
      2026-01-26 17:29:12
      广告
      不感兴趣
      开通SVIP免广告
      模拟器复现:snake.bin复制到E9E0,launcher.bin里FD243030后面的部分复制到D552,PC设为8fc4,SP设为d552即可


      IP属地:上海3楼2025-07-09 21:12
      回复
        明天我看看能不能尽快在真机上复现一下


        IP属地:北京来自Android客户端4楼2025-07-09 22:03
        回复
          前排膜


          IP属地:浙江来自Android客户端5楼2025-07-09 22:10
          回复
            强👍


            IP属地:上海来自Android客户端8楼2025-07-10 07:57
            回复
              Actually, the program crashed because you use 1:87CC (memcpy loop) but forgot to "disable interrupt", hence we need to add "8C 92 30 30" behind "D8 91 30 30" in the launcher and it will run normally.
              Here's the result. I play with max_cnt = 0x30.


              IP属地:越南来自Android客户端9楼2025-07-10 09:53
              收起回复
                计算器上真机实验算是成功,但是蛇怎么不动?


                IP属地:北京来自Android客户端10楼2025-07-10 09:54
                回复
                  2026-01-26 17:23:12
                  广告
                  不感兴趣
                  开通SVIP免广告
                  真机实验成功


                  IP属地:上海12楼2025-07-10 17:33
                  收起回复
                    成功!


                    IP属地:上海来自iPhone客户端13楼2025-07-10 20:37
                    收起回复
                      建议将蛇身改为从D180开始存储,以支持更多空间


                      IP属地:北京来自Android客户端14楼2025-07-14 09:57
                      收起回复
                        s,我是哪步出问题了吗,怎么两次都是这个结果,蛇身为锯齿状且极快,没有吃到身体的判定(小字体启动和普通字体结果相同)


                        IP属地:上海来自Android客户端15楼2025-07-14 11:31
                        收起回复