搜索

iVocaloid论坛

查看: 1721|回复: 4
打印 上一主题 下一主题

【反工】【又是水表文= =】对V3job插件lua解释器的初步解析 [复制链接]

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
跳转到指定楼层
[1L]楼主
Zleepwalking 发表于 2013/6/2 17:30:08 |只看该作者 |倒序浏览
我觉得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个字节大的内存。。。。。

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

知识共享许可协议 除非另有声明,本帖内容采用 署名-非商业-相同方式共享 3.0 许可协议 授权,且需注明出处,所有权利归发帖人。

使用道具 举报

Rank: 3

0
3
0


UID: 93325
权限: 20
属性: 難燃性
发帖: 74 (0精)
积分: 100
章鱼: 1
大葱: 2
茄子: 433
注册:2011/10/22
存在感:84
[2L]沙发
rgwan 发表于 2013/6/2 17:47:37 |只看该作者
V3各种漏洞。

使用道具 举报

vIp.禁區

Lv.2-鱼仔酱

Rank: 2Rank: 2

0
0
0


UID: 112665
权限: 10
属性: 不明
发帖: 6 (0精)
积分: 11
章鱼: 0
大葱: 1
茄子: 81
注册:2012/11/12
存在感:35
[3L]板凳
vIp.禁區 发表于 2013/6/3 01:15:59 |只看该作者
哦这个想法不错!对了你是计算机专业吗?

使用道具 举报

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
[4L]地板
Zleepwalking 发表于 2013/6/3 08:40:32 |只看该作者
vIp.禁區 发表于 2013/6/3 01:15
哦这个想法不错!对了你是计算机专业吗?

高一狗。。。
v3只是天然呆而已。。。反编不难

使用道具 举报

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
[5L]萝莉
Zleepwalking 发表于 2013/6/3 17:23:46 |只看该作者
发现此项技术没啥用= =
整了半天总算会用os.execute了……也会给它加命令行参数了……只要把路径中的/替换成//就可以
如果不是很注重效率,调api完全可以执行外部程序

使用道具 举报

您需要登录后才可以回帖 登录 | 注册/sign up

申请友链|Archiver|iVocaloid - 自由,开放,合作,共享    | 版权持有者点击这里进行举报

GMT+8, 2025/6/7 16:44

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部