首页
社区
课程
招聘
未解决 [求助]动态库做简单修改后,出现加载动态库失败。代码贴上,有奖问答。 50.00雪花
发表于: 2021-4-11 17:04 3744

未解决 [求助]动态库做简单修改后,出现加载动态库失败。代码贴上,有奖问答。 50.00雪花

2021-4-11 17:04
3744

vc的动态库仅仅修改了一个指令
jbe 对应的机器码 修改为 jmp
我确定指令修改后并没有改变文件的长度。源代码如下
100031B7 83C4 04 add esp, 4
100031BA 3D C3EF3301 cmp eax, 133EFC3
100031BF 0F86 95000000 jbe 1000325A ; 这里做了修改
100031C5 6A 06 push 6
100031C7 8D4424 38 lea eax, dword ptr [esp+38]
100031CB 68 24130310 push 10031324 ; ASCII "100888"
100031D0 50 push eax
100031D1 E8 6AEE0100 call 10022040
100031D6 83C4 0C add esp, 0C
100031D9 85C0 test eax, eax
100031DB ^ 74 AB je short 10003188
100031DD 6A 06 push 6

 

——————————————————分割线————————————
ollydbg装载启动后,右键汇编填充,键入jmp后,点击汇编
100031BF 0F86 95000000 jbe 1000325A
————————————————————————————————————————————————
100031BF /E9 96000000 jmp 1000325A 上述黑体部分变成这样。用自己的程序调用里面的函数,结果都正常了。
但是,放到客户真正的运行环境中,会出现加载动态库失败的错误。
因为客户软件太老了,新设备识别码不对,让软件直接跳过识别码部分。我的猜测是:客户软件在运行的时候,好像会通过loadlibray函数装载动态库,就在装载的时候,应该是检测了动态库的特征码,如果不是原始库,就拒绝装载。不知道各位遇到过这类问题没有。
命名没有变更,肯定是一样的。修改后文件修改时间跟原来不一样了。
请各遇到类似问题的大神给予指点。


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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2930
活跃值: (6676)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我觉得可能是识别码参数不对导致退出, 想要跳过识别码可不知能只修改一处还得给识别码赋值写死。你最好好好调调看看出错在哪。
2021-4-11 20:58
0
雪    币: 4519
活跃值: (5149)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3

修复重定向,这里包含一个绝对地址,你如果改后的代码没有引用这个地址,应该在重定位节中重置对本条指令进行重定位修复那条记录,如果搞不定或者不明白我说什么可以QQ联系我帮你修复。

最后于 2021-4-11 23:18 被sonyps编辑 ,原因:
2021-4-11 23:13
0
雪    币: 1790
活跃值: (3786)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
100031BF:处指令看起来修改前修改后指令长度不一样,你 应该选择自动补齐。用NOP指令填充剩余长度,确保指令修改前后长度不变。 0F86 95000000 和  E9 96000000  
2021-4-12 13:32
0
雪    币: 3710
活跃值: (2669)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
5
lz搞完了吗?
2021-4-12 14:49
0
雪    币: 1622
活跃值: (223)
能力值: ( LV8,RANK:135 )
在线值:
发帖
回帖
粉丝
6
程序是不是开了重定向,可以考虑把你修改的dll重定向关掉试试。用StudPE改很简单
2021-5-7 19:03
0
游客
登录 | 注册 方可回帖
返回
//