qiufuyu123 / CasioEmuNeo

卡西欧classwizard系列模拟器,支持调试,rop一件注入
GNU General Public License v3.0
41 stars 7 forks source link

Injector: make "load ROP from string" more flexible #20

Closed bczhc closed 7 months ago

bczhc commented 7 months ago

A sample ROP string:

; 二、三行拼字示例:(~和剪刀符号各一行)
; mode: 110an,线性/线性模式
; 在经过smart_strcpy后,ER2会变为输入区(0xd180)
7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E ;17个“~”
E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 ;17个剪刀
A82121FE ; (2:21A8) POP ER0 + Return,将会:0x3010 -> ER0即0x10 -> R0 让R0为0x10
1030
AE212230 ; (2:21AE) 偏移16(0x10)像素(第二行)打印ER2,此时ER2会后移17字节
A82121FE ; (2:21A8) POP ER0 + Return,会让R0为0x20
20FD
5C202248 ; (2:205C) 偏移32(0x20)像素(第三行)打印ER2
; 2:205C函数返回后,会冻结计算器。
qiufuyu123 commented 7 months ago

image 虽然我一般就直接用编译器了,不会手写地址,编译的产物就是一串hex image 所以直接 汇编-> 编译-> hex-> 复制/黏贴进来 一把梭,也蛮方便的 以后可以试试直接这样操作

bczhc commented 7 months ago

https://github.com/bczhc/CasioEmuNeo/commit/b196bf059bd050d661a6aced0619f996404c97a8

没来得及合并进,你改一下。strtoul的string问题。

bczhc commented 7 months ago

很严重的内存问题,多亏了你发现(笑。也许有时间该用valgrind跑一下了

edit:哦我忘了valgrind不检测栈上的invalid readd...

qiufuyu123 commented 7 months ago

okok看到了 所以linux下未分配内存填充的是\0对吗 windows下会填充一些奇怪的值(所以我才发现

bczhc commented 7 months ago

image 虽然我一般就直接用编译器了,不会手写地址,编译的产物就是一串hex image 所以直接 汇编-> 编译-> hex-> 复制/黏贴进来 一把梭,也蛮方便的 以后可以试试直接这样操作

嗯,这个我之后玩玩,现在就是看的你的知乎专栏,还没看进阶篇呢。这个就是我自己的“练习”嘛。

bczhc commented 7 months ago

okok看到了 所以linux下未分配内存填充的是\0对吗 windows下会填充一些奇怪的值(所以我才发现

不知道啊,它没'\0'就会一直往后读,不确定的谁知道能读到什么。比如后面是个'0',那(uint8_t) strtoul("100", nullptr, 16)就是0。(还有转换失败也会返0)

qiufuyu123 commented 7 months ago

ok push了