注册 登录
编程论坛 汇编论坛

关于调用dll的问题~

hold009 发布于 2012-12-05 18:45, 1156 次点击
我有一个单机版的游戏,我想修改他的主程序,例如用od打开他,
找到一个:

call EAX
test eax,eax
jmp xxxxx

我想当执行到call eax 后,把test eax,eax这行换成执行 自己编写的dll当自己的dll执行完毕后,返回到jmp xxxx继续执行下面的

如何实现呢?请大侠们指导,感激不尽
15 回复
#2
yuccn2012-12-05 20:08
1 在程序的一个空隙中写入shellcode,改shellcode为一个函数指令,
2 在shellcode中写入加载你的dll并且调用到处函数。
3 把jmp 改成call 到你的shellcode中去

不过要确保jmp的指令长度和call的指令长度一样

啥猜的,不知道行不行(理论上可以)
#3
hold0092012-12-05 21:00
哦哦,我实验下
若有列子的话,或能用高级编程语言实现的话请给个例子哦

我只会 易语言
#4
suijishu2012-12-05 22:12
留名拿分
#5
wp2319572012-12-06 09:00
以下是引用hold009在2012-12-5 21:00:52的发言:

哦哦,我实验下
若有列子的话,或能用高级编程语言实现的话请给个例子哦

我只会 易语言
据传闻,e语言是一种被bs的语言
#6
hold0092012-12-06 12:28
只能能实现偶的功能就行哈
#7
zklhp2012-12-06 12:31
以下是引用wp231957在2012-12-6 09:00:05的发言:

据传闻,e语言是一种被bs的语言

确实 不过也有人bs汇编呢 自己玩着开心就好了
#8
wp2319572012-12-06 12:33
这东东用高级语言写 貌似较难
可能涉及到重定位
ps  我是不懂的
#9
水哥2012-12-06 12:52
重定位的问题高级语言解决不了,汇编做这个没啥难度,改主程序还不如直接一个CreateRemoteThread的好
或者你把我的论坛上的SHELLCODE 的例子改改也成
#10
hold0092012-12-07 09:20
水哥,你给个例子吧,或你说的那个你的shellcode在哪里?如何弄?
#11
hold0092012-12-08 14:10
水哥,给我个交详细的例子哦
#12
lyfz11232012-12-09 10:24
有收获
#13
hold0092012-12-09 11:41
水哥,你给个例子吧,或你说的那个你的shellcode在哪里?如何弄?
#14
zhu2240392012-12-10 08:53
自己编写的DLL 的导入
这个首先你要把DLL 加载到程序进程空间中去
你用 0D的话,要修改段的内容
你要完成的功能是 第一找到位置存放你的shellcode shellcode是机器指令  这个要重定位的  
用jmp指令进行跳转,不用CALL shellcode里面要包含一个jmp回来的指令
这个OD直接调试程序 我木有试过 ,但是机理来说就是 修改指令指针
为什么要重定位,是因为程序在编译过程中就已经确定了各个段和代码的位置了 用的是rav偏移量的概念
这个重定位技术怎么做的
用call指令 比如
call start
start:
pop ebx

这个里面包含的内容是
首先完成的是 EIP的入栈  如果这个时候来句 sub ebx offset start可以求出一个差值 就是跳转后的指令位置和当前指令的距离
你要跳回来 就得跳转点称为p2 call执行后的指令地址值称为P3 那么就有  p3=p2+ebx 来定位这个指令位置

如果你的程序还要使用变量的话  那么你还得修改栈里面的内容

[ 本帖最后由 zhu224039 于 2012-12-10 08:54 编辑 ]
#15
zhu2240392012-12-10 08:56
这方面我也比较迷糊,大概吧,因为我也在努力实现这部分
我是从程序的角度在弄这个事情、
用OD 我不是很熟悉哟
建议 看 《加密和解密》 或者《PE权威指南》 都是牛人的著作
#16
hold0092012-12-16 11:16
水哥,你给个例子吧,或你说的那个你的shellcode在哪里?如何弄?
1