2025pwn_A_childs_dream
- 其他
- 2025-09-08 09:09:02

文章目录 fc/sfc
mesen下载和使用推荐
fc/sfc.mesen.ca/docs/
mesen2安装,vscode安装zg
任天堂yyds
w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停
D658地方有个flag 发现DEEE会使用他。且只有这个地方,maybe会输出flag,应该属于DEDF这个函数,因为和上面通过RTL隔开了
00CD5E [004D5E] A9 00 00 LDA #$0000 …… 00CD73 [004D73] 22 AC C0 00 JSL $00C0AC 00C0AC [0040AC] 3B TSC …… 00C8E0 [0048E0] 22 69 E0 00 JSL $00E069 00E069 [006069] 08 PHP …… 00E073 [006073] CB WAI 中断 00E074 [006074] AF 30 00 00 LDA $000030 …… 00E07C [00607C] 6B RTL …… 00C8EA [0048EA] 6B RTL 00CD77 [004D77] 80 E5 BRA $00CD5E发现R的时候没有 JSL $00E069 直接到并且也没有 RTL返回到BRA $00CD5E
但当开始00C0AC时候 此时返回地址是正常的 发现返回地址比保存到栈里的返回地址多1,可能是这个汇编的特色吧
所以问题就出在这段00C0AC [0040AC] 3B TSC -> 00C8EA [0048EA] 6B RTL这段代码里不但改掉了返回地址,并且没有进入00E069 里
然后设了个条件断点观察栈的返回地址改变时候自动下断点
发现进入 --------sub start-------- 018301 [008301] A3 04 LDA $04,S后改变的 调试后又发现是018316 [008316] 20 28 00 JSR $0028导致的,会跳转到0028去执行
000028 [000028] 54 00 7F MVN $7F,$00 00002B [00002B] 60 RTS ----------------大致逻辑如下
// 假设有一个 `stack[]` 数组表示堆栈,`memory[]` 数组表示内存 void subroutine() { A = stack[4]; // LDA $04,S memory[0] = A; // STA $00 Y = A; // TAY A = stack[8]; // LDA $08,S X = A; // TAX A = stack[10]; // LDA $0A,S int temp = X; // 保存 X 的值 X = Y; // XBA: 交换 A 和 X Y = temp; A |= stack[6]; // ORA $06,S memory[41] = A; // STA $29 A = stack[12]; // LDA $0C,S if (A == 0) { goto skip_decrement; } A--; // DEC skip_decrement: // PHB 及 PLB 没有直接映射 subroutine_0028(); // JSR $0028 A = stack[6]; // LDA $06,S memory[2] = A; // STA $02 return; // RTL } 010028 [000028] 54 00 7F MVN $7F,$00 此时A=2 X=0 Y=1ff9 DB=7E 第一次复制: 源地址:$7F:0000 的值被复制到 目标地址 $00:1FF9。 X 和 Y 递增: X = 0 + 1 = 1 Y = 1FF9 + 1 = 1FFA(以十六进制计算,加 1 是 1FF9 → 1FFA)。 A 减 1:A = 2 - 1 = 1。 第二次复制: 源地址:$7F:0001 的值被复制到 目标地址 $00:1FFA。 X 和 Y 递增: X = 1 + 1 = 2 Y = 1FFA + 1 = 1FFB. A 减 1:A = 1 - 1 = 0. 第三次复制(A 变为 0,但 MVN 会继续执行直到 A 为 $FFFF): 源地址:$7F:0002 的值被复制到 目标地址 $00:1FFB。 X 和 Y 递增: X = 2 + 1 = 3 Y = 1FFB + 1 = 1FFC. A 减 1:A = 0 - 1 = -1(以十六进制表示为 $FFFF)。所以目标就是怎么改0x7f0000
期间自己乱尝试的时候发现前面的按键会导致后面的R的结果不一样。猜测可能是由影响的,自己准备下个断点监视0x7f0000内容。尝试后发现上下按钮对返回地址有影响,类似上按钮+1,下按钮-1,但加的比特位置有区别,貌似和左右移动有关。并且球球不能掉下去,不然会清零
这个地方逆得不是很明白,有时间再看看 所以最终目标将其变成DEDF即可,还要保证球球不掉落下
因为会自动加1,所以是DEDE
2025pwn_A_childs_dream由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“2025pwn_A_childs_dream”
上一篇
LLM大模型学习资料整理
下一篇
数据结构day02