首页
社区
课程
招聘
[求助]UE+Stud_PE修改DLL中的SQL语句
发表于: 2008-1-27 09:13 5102

[求助]UE+Stud_PE修改DLL中的SQL语句

2008-1-27 09:13
5102
有DLL不同版本的源程序,在使用过程中发现当前用的DLL中的SQL语中少了一个过滤条件,于是想用UE给当前用的DLL中添加那个过滤条件,我用的是UE替换过功能确认被替换的字符是唯一后,用UE在文件尾删除替换字符串与被替字符串长度差,然后用UE进行替换,接下来用Stud_PE打开修改后的DLL会提示两个错误,主要是因为Import Table 、Export Table和Resources被修改而没有对应所致,用Stud_PE纠正保存后再用Stud_PE打开不出错了,但用regsvr32注册这个DLL时提示LoadLibrary("D:\BLCCSTKStocN.dll") 失败 文件名、目录名或卷标语法不正确.打开Stud_PE中的Functions界面与原dll文件比较发现如下图

再怎样改才能使DLL能正常使用啊?先谢谢了!

主要是怕源程序编译出来的DLL与在用DLL不完全一致会带来新的问题于是才想用UE来修改!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 50161
活跃值: (20625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
估计这步出问题了,你替换的字符如果比原来的长,就有可能破坏原字符后面的数据。
如果字符比原来长,你想办法找到指向这字符的指针,指到其他空白处,放上你新的字符串。
2008-1-27 10:42
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先谢谢kanxue在百忙中抽出时间帮俺看问题!

是的,替换字符比被替换字符长(替换字符为:c.docno=d.docno and d.ifvalid=1 被替换字符为:c.docno=d.docno)
UE下的原DLL字符如下:

00067870h: 63 00 2E 00 64 00 6F 00 63 00 6E 00 6F 00 3D 00 ; c...d.o.c.n.o.=.
00067880h: 64 00 2E 00 64 00 6F 00 63 00 6E 00 6F 00 20 00 ; d...d.o.c.n.o. .
00067890h: 20 00 20 00 00 00 00 00                         ;  . .....

需要添加部分
00065f7eh: 61 00 6E 00 64 00 20 00 64 00 2E 00 69 00 66 00 ; a.n.d. .d...i.f.
00065f8eh: 76 00 61 00 6C 00 69 00 64 00 3D 00 31 00 20 00 ; v.a.l.i.d.=.1. .
00065f9eh: 20 00 00 00 00 00 AE 00 00                      ;  .....?.

我直接将被替换字符替换为下面的部分
61 00 6E 00 64 00 20 00 64 00 2E 00 69 00 66 00 76 00 61 00 6C 00 69 00 64 00 3D 00 31 00 20 00 20 00 00 00 00 00 AE 00 00 63 00 2E 00 64 00 6F 00 63 00 6E 00 6F 00 3D 00 64 00 2E 00 64 00 6F 00 63 00 6E 00 6F 00 20 00 20 00

在做替换之前我把增加文件的长度在文件尾删除掉了.然后用Stud_PE修改Import Table,Export Table及Resourses

我是新手对于您说的"想办法找到指向这字符的指针,指到其他空白处,放上你新的字符串"我再研究研究,想知道有没有类似的例子做参考,在google,baidu及看学论坛里都搜了没有找到!
2008-1-27 12:53
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在修改时发现.text节中没有足够的空间来放修正后的SQL语句,于是用topo V1.2增加足够的空间(1444字节),然后将修正后的字符串放到新增的空间里,再将指向字符的指针指到新位置处,完成后在程序调用时其他功能正常,只有用到修改部分时不行,提示"字符串空间溢出"!
原SQL语句抓图

ToPo增加空间抓图

把修正后的SQL语句放在新增空间

把字符串原指针指向新位置


执行时出现"字符串空间溢出"感觉应该是新的SQL语句位置不在.text节内,有没有可以调整.text节内空闲空间到一起凑够足够的空间这样功能的软件呢?ToPo不能指定.text节内!

另外另一种思路:
在原SQL语句后加" and d.IfValid=1",其长度为0x20,根据文件头中的
FileAligment为0x1000,于是在.text节尾补加0xFE0个空字符(Zero Block);那么.text节的VirtualSize及VirtualOffset该怎么修改?因增加文件长度再依次将受影响部分进行相应调整,这种思路可行吗?
2008-6-3 16:50
0
雪    币: 107
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
延长text 段将使后面的data段等引起地址后移,有重定位问题。
建议先增加一个节,使节的属性与text段属性一致,然后修改原text 段代码
使其jump 或 call 到新增的节中。这种方法我没有试过,会不会引发异常我不敢肯定,感觉成功的机会还是挺大的,如果不行,就要仔细研究一下x86 的保护机制看有没有机会下手了。
2008-6-11 19:57
0
游客
登录 | 注册 方可回帖
返回
//