继续小家伙的开发

这几天假期全部贡献给小家伙了!

前两天的进展比较缓慢,卡在了截获api上,在本进程上一切正常,但是一注入到别的进程,截获了一两次就会发生崩溃.由于使用的方法是改写代码段的方式,所以可能是同步的问题,但是我实验的都是单线程啊,一直不愿意相信是这个原因.后来实在没有别的方法可以想了,只好实验一下.我想如果能够把待截获的api的执行码拷贝到一个新的空间S,加以保存,然后改写原来的api开头部分,使之跳转到我的函数A,A里面再去调用S里面的原始API,应该就可以,这样改写只会发生一次.实验了一下,发现问题依旧.

上google搜索了一下,终于还是用起了detours函数库,简单地看了一下他的原理和用法,感觉和我的想法差不多啊(呵呵),不过不大理解他为什么要改写pe的段。先不追究了,实现我的功能才是正道。因为我想要注入到别的进程当中,所以使用了动态的方法,便以出来一实验还是同样的问题---崩溃!这下我的认真考虑一下了,肯定是什么地方没有考虑到!仔细想了一遍,唯一的不同就是初始化api钩子的时机不一样:我是在热键的触发下,而一般的例子都是在dllmain中。看来还是多线程(进程)冲突的问题!稍微改了一下,当然只是在目标进程体才会进行api钩子动作,一切正常。又实验了一下自己原来的想法,似乎成功过一下,后来该来改去的又不行了,唉,看来脑子比较乱了!

改dll中api代码的方法比较危险,并且有多进程并发的情况需要处理,这就需要保证在改写代码段时只有一个执行者,一个比较保险的方法就是在dllmain里面动作。但是还是不明白为什么钩记事本之类的单进程时也会出现问题,难道是我感兴趣的动作刚好会触发一个新的进程?有事件要好好研究一下进程,线程,dll之间的交互!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值