iVocaloid论坛

标题: 【反工】【又是水表文= =】对V3job插件lua解释器的初步解析 [打印本页]

作者: Zleepwalking    时间: 2013/6/2 17:30     标题: 【反工】【又是水表文= =】对V3job插件lua解释器的初步解析

我觉得V3的lua解释器挺好玩,就是api太少了不过瘾,于是:
我拿上次写的那个批量调教洛天依的job开刀。
把定义挪到前面,开头改成:
  1. function main(processParam, envParam)

  2.   local msgboxret
  3.   local LyricNum
  4.   local LyricCycle
  5.   local Interval
  6.   local Lyric1
  7.   local Lyric2
  8.   local PitchCycle
  9.   local LengthChange1
  10.   local LengthChange2
  11.   local CyclePatterns = {60, 60, 60, 60}
  12.   local temppattern
  13.   
  14.   msgboxret = VSMessageBox("abc", 0)
  15.   msgboxret = VSMessageBox(msgboxret, 0)
  16.   ret, temppattern = VSDlgGetStringValue("CyclePattern1")
  17.   VSMessageBox(ret, 0)
复制代码

正常运行的话会出来一个abc的msgbox,然后又出来一个1的msgbox(运行成功的返回值),然后再出来一个0的返回值。

Vocaloid3实在太庞大了,我在DSCL3里半天找不到可疑的导出函数名,干脆在user32的MessageBoxW下断点。


运行job,成功停在了MessageBoxW,几步跟出,找到了这个地方:


Caller.png

这貌似是lua解释器的函数调用器。通过ECX的值取得被调用函数的地址然后Call。

在Msgbox的时候,call的地址是VOCALOID.004FCED0
在GetStringValue的时候,call的地址是VOCALOID.004FCD70

我跟入004FCD70,
GSV.png
跑到这里的时候,EAX指向了"CyclePattern1",这是传入的参数。
继续跑……
好吧。。。玩脱了。。。没找到什么有价值的东西,因为我还没有初始化对话框,这个函数执行应该会失败。。。
反正我后面还调用了好几次这个东西。。我把调用器的断点去掉,给GetStrVal加了断点,继续……

NGS.png
好嘞。。恶心的对话框出来了,叫我给它填参数。。。我就把Lyric1随便填了个东西,继续……


GSV2.png
好嘞。。中断卡住了,单步,到这里又遇见了传入参数,继续单步……


EAWFEWFW.png
跑到这一步,eax变成了刚才输入的东西,说明真正的函数可能在红框内执行完毕,我转到EAX的地址,把eawfewfw改掉:
sb.png

水表。。。。

我把中断去掉,运行:
shuibiao....png

于是就出来十个水表,不是十个eaw什么东西的……

这只是个很简单的演示,找到了改变解释器GetStringVal函数的方法。
我的想法是在两个字符串出现的地方跳出去,
执行我们自己的函数,然后改掉return的值。
这样就可以用原有的api实现更多的功能了……

我们甚至可以开发一种语法,让job可以调用windows api什么的,像这样:
ret, voidvar = VSDlgGetIntValue(".push 1000")
ret, ptr = VSDlgGetIntValue(".invoke kernel32.malloc')
然后我们自己的怪异的迷你的不完善的解释器,往内存里压了1000这个参数,去申请了1000个字节大的内存。。。。。

↑先记下来,有空继续研究吧。


图片附件: GSV2.png (2013/6/2 17:19, 36.15 KB) / 下载次数 4
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIxMDJ8MzAwYzUwMjB8MTc0OTUwNTA0NHwwfDA%3D



图片附件: NGS.png (2013/6/2 17:17, 11.58 KB) / 下载次数 5
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIxMDF8NGUwZmI0YTl8MTc0OTUwNTA0NHwwfDA%3D



图片附件: GSV.png (2013/6/2 17:14, 39.6 KB) / 下载次数 3
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIxMDB8YjFiYTlmMTV8MTc0OTUwNTA0NHwwfDA%3D



图片附件: Caller.png (2013/6/2 17:09, 21.4 KB) / 下载次数 4
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIwOTl8MTBlOTAzN2F8MTc0OTUwNTA0NHwwfDA%3D



图片附件: EAWFEWFW.png (2013/6/2 17:20, 41.66 KB) / 下载次数 3
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIxMDN8NGFkZDViNjN8MTc0OTUwNTA0NHwwfDA%3D



图片附件: sb.png (2013/6/2 17:22, 5.74 KB) / 下载次数 4
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIxMDR8YTAxOTM2MTF8MTc0OTUwNTA0NHwwfDA%3D



图片附件: shuibiao....png (2013/6/2 17:25, 24.73 KB) / 下载次数 5
http://bbs.ivocaloid.com/forum.php?mod=attachment&aid=NzIxMDV8MjliZTlmNTJ8MTc0OTUwNTA0NHwwfDA%3D


作者: rgwan    时间: 2013/6/2 17:47

V3各种漏洞。
作者: vIp.禁區    时间: 2013/6/3 01:15

哦这个想法不错!对了你是计算机专业吗?
作者: Zleepwalking    时间: 2013/6/3 08:40

vIp.禁區 发表于 2013/6/3 01:15
哦这个想法不错!对了你是计算机专业吗?

高一狗。。。
v3只是天然呆而已。。。反编不难
作者: Zleepwalking    时间: 2013/6/3 17:23

发现此项技术没啥用= =
整了半天总算会用os.execute了……也会给它加命令行参数了……只要把路径中的/替换成//就可以
如果不是很注重效率,调api完全可以执行外部程序




欢迎光临 iVocaloid论坛 (http://bbs.ivocaloid.com/) Powered by Discuz! X2