首页
社区
课程
招聘
[求助]之前调试了一款VB程序,为了修复一个BUG,在OD打开后构建了一段代码,但是遇到返回值的疑惑
发表于: 2017-5-9 23:05 2941

[求助]之前调试了一款VB程序,为了修复一个BUG,在OD打开后构建了一段代码,但是遇到返回值的疑惑

2017-5-9 23:05
2941

原程序在点击获取相对路径的时候,会将带空格的路径转换如下:

F:\1 1\Rolan\Rolan.exe 转换为 ..\..\1 1\Rolan\Rolan.exe 

而我们需要的也是正确的相对路径应该为 ..\..\Rolan\Rolan.exe 

所以我构建了一个函数 rtcmidcharvar(返回:F:\1 1\),然后调用 rtcreplace 直接替换 F:\1 1\ 为 ..\..\

问题来了,构建的函数运行正常,代码如下:

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

00403C82   . |3E:8B45 E0    mov eax,dword ptr ds:[ebp-0x20]          ;  UNICODE "F:\Rolan\破解工具集\设置路径3.exe"

00403C86   . |50            push eax

00403C87   . |68 F43C4000   push Rolan.00403CF4                      ;  UNICODE "\Rolan"

00403C8C   . |6A 01         push 0x1

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

00403C94   . |3E:8B55 E0    mov edx,dword ptr ds:[ebp-0x20]

00403C98   . |8955 94       mov dword ptr ss:[ebp-0x6C],edx

00403C9B   . |8D55 8C       lea edx,dword ptr ss:[ebp-0x74]

00403C9E   . |8D4D CC       lea ecx,dword ptr ss:[ebp-0x34]

00403CA1   . |8945 C4       mov dword ptr ss:[ebp-0x3C],eax

00403CA4   . |C745 BC 02000>mov dword ptr ss:[ebp-0x44],0x2

00403CAB   . |C745 8C 08000>mov dword ptr ss:[ebp-0x74],0x8

00403CB2   . |FF15 3C124000 call dword ptr ds:[<&MSVBVM60.__vbaVarDu>;  msvbvm60.__vbaVarDup

00403CB8   . |8D55 BC       lea edx,dword ptr ss:[ebp-0x44]

00403CBB   . |8D45 CC       lea eax,dword ptr ss:[ebp-0x34]

00403CBE   . |52            push edx                                 ; /Length8

00403CBF   . |6A 01         push 0x1                                 ; |Start = 0x1

00403CC1   . |8D4D AC       lea ecx,dword ptr ss:[ebp-0x54]          ; |

00403CC4   . |50            push eax                                 ; |dString8

00403CC5   . |51            push ecx                                 ; |RetBUFFER

00403CC6   . |FF15 F8104000 call dword ptr ds:[<&MSVBVM60.#632>]     ; \rtcMidCharVar

00403CCC   . |8BD0          mov edx,eax

00403CCE   . |E9 06340300   jmp Rolan.004370D9

比如 mid("F:\1 1\Rolan",1,7),按理说返回的应该是字符串"F:\1 1\"才对,而且CALL rtcmidcharvar应该数值返回到eax,但是在寄存器和数据窗口中能看到返回的却分别如下图:

而我们期望获取的"F:\1 1\"却在数据窗口的0018F47C,请问这个返回是对的吗?为什么eax=0018F474的数据不是"F:\1 1\"呢?如何修改才能定位到字符串"F:\1 1\"呢?


希望各位大牛帮忙解答下,万分感谢!



[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 0
活跃值: (987)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
我计算错了偏移地址  抱歉  献丑了
2017-5-13 15:02
0
游客
登录 | 注册 方可回帖
返回