首页
社区
课程
招聘
[求助]大家帮忙看看这个VB程序为什么调用insrt函数会导致"不支持的automation"错误
发表于: 2017-5-8 10:46 3499

[求助]大家帮忙看看这个VB程序为什么调用insrt函数会导致"不支持的automation"错误

2017-5-8 10:46
3499

   最近无意中得到一款软件,感觉很不错,但是存在一个BUG(或者不完善的地方),所以想到自己OD DIY一下。但是,要用到一个VB中的函数 msvbvm60.__vbaInStrVar。

__vbaInStrVar的原型代码如下:

00456488   >  6A 01         push 0x1

0045648A   .  8D8D 20FFFFFF lea ecx,dword ptr ss:[ebp-0x24]

00456490   .  51            push ecx

00456491   .  8D95 64FFFFFF lea edx,dword ptr ss:[ebp-0x34]

00456497   .  52            push edx

00456498   .  6A 00         push 0x0

0045649A   .  8D85 54FFFFFF lea eax,dword ptr ss:[ebp-0x54]

004564A0   .  50            push eax

004564A1   .  FF15 A4114000 call dword ptr ds:[<&MSVBVM60.__vbaInStr>;  msvbvm60.__vbaInStrVar

单步运行,前面的代码都没弹错,但是执行到

004564A1   .  FF15 A4114000 call dword ptr ds:[<&MSVBVM60.__vbaInStr>;  msvbvm60.__vbaInStrVar

再按F8一次,就弹出如下的错误:

接下来不知道如何做了,因为程序要排错,必须调用InStr函数;


下面补充下我的思路:

unicode "F:\Program Files\Rolan\破解工具集\设置路径2.exe"

通过Instr和Replace将"F:\Program Files\Rolan\破解工具集\设置路径2.exe"转换为vb程序的相对路径"..\..\Rolan\破解工具集\设置路径2.exe"


希望得到大家的帮助,谢谢!研究了2天。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1355
活跃值: (339)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
2

Function  InStr([Start],  [String1],  [String2],  [Compare  As  VbCompareMethod  =  vbBinaryCompare])
00456488        6A  01                  push  0x1
00456490      .    51                        push  ecx
00456497      .    52                        push  edx
00456498      .    6A  00                  push  0x0
004564A0      .    50                        push  eax
您传了几个参数?

2017-5-8 14:48
0
雪    币: 193
活跃值: (847)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
爱琴海 Function&nbsp; InStr([Start],&nbsp; [String1],&nbsp; [String2],&am ...
谢谢  我刚发现我是调用错了API  原本是msvbvm60.__vbaInStr  结果call地址  变成了msvbvm60.__vbaInStrVar
2017-5-8 15:13
0
雪    币: 193
活跃值: (847)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
爱琴海 Function&nbsp; InStr([Start],&nbsp; [String1],&nbsp; [String2],&am ...

谢谢爱情海大哥的回复,我是粗心了点,接下来遇到个新问题,有点困惑,因为无论调用__vbaInStr或者rtcReplace,寄存器中查看eax返回永远是0,参数设置应该都没问题,查了下资料,前面两个函数结果也都应该保存在eax中,所以发问来求解答,谢谢!

★★★★

00437095   .  8B4D E8       mov ecx,dword ptr ss:[ebp-0x18]          ;  调用replace地址

00437098   .  6A 00         push 0x0

0043709A   .  6A FF         push -0x1

0043709C   .  8BF0          mov esi,eax

0043709E   .  6A 01         push 0x1

004370A0   .  8D55 AC       lea edx,dword ptr ss:[ebp-0x54]

004370A3   .  8B3E          mov edi,dword ptr ds:[esi]

004370A5   .  51            push ecx

004370A6   .  8D45 DC       lea eax,dword ptr ss:[ebp-0x24]          ;  这个随意修改好像会出错导致程序运行崩溃

004370A9   .^ E9 D2CBFCFF   jmp Rolan.00403C80                       ;  NOP掉一段call,然后jmp到__vbaInStr函数调用,处理一

段字符串

004370AE      90            nop                                      ;  似乎这样处理没有运行弹错,下面的rtcReplace也能运行

004370AF      90            nop

004370B0      90            nop

004370B1   >  8B4D E0       mov ecx,dword ptr ss:[ebp-0x20]

004370B4   .  50            push eax

004370B5   .  51            push ecx

004370B6   .  FF15 74114000 call dword ptr ds:[<&MSVBVM60.#712>]     ;  msvbvm60.rtcReplace 这里堆栈中数据正确,但是eax返回

也为0

004370BC   .  8BD0          mov edx,eax

★★★★

00403C80   > /6A 01         push 0x1                                 ;  子程序

00403C82   . |68 B03C4000   push Rolan.00403CB0                      ;  UNICODE "F:\Rolan\破解工具集\设置路径3.exe"

00403C87   . |68 A03C4000   push Rolan.00403CA0                      ;  UNICODE "\Rolan"

00403C8C   . |6A 01         push 0x1

00403C8E   . |FF15 D4114000 call dword ptr ds:[<&MSVBVM60.__vbaInStr>;  msvbvm60.__vbaInStr

00403C94   . |8BD0          mov edx,eax

00403C96   . |E9 16340300   jmp Rolan.004370B1

★★★★

2017-5-8 15:51
0
雪    币: 1355
活跃值: (339)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
5

输入的unicode前4字节缺少填充长度信息(bytes)

举个例子:如果在VB中表示字符“12345678”,应该如下:

在前4字节位置得储存长度bytes信息,然后再作为字符串进行instr

引用该字符串的时候则从"1"这个字符串起始地址引用,默认隐含前4字节的长度信息

如果要追根究底,请调试分析:SysAllocStringLen

2017-5-8 16:21
0
游客
登录 | 注册 方可回帖
返回
//