首页
社区
课程
招聘
未解决 1
发表于: 2024-5-19 14:08 2070

未解决 1

2024-5-19 14:08
2070
收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 3905
活跃值: (3157)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
都还没有Recv哪里来的数据?
看的不是缓冲区的随机内容吗
2024-5-19 14:10
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
ANormalUser 都还没有Recv哪里来的数据? 看的不是缓冲区的随机内容吗
我悟了,找到了
2024-5-19 14:17
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
ANormalUser 都还没有Recv哪里来的数据? 看的不是缓冲区的随机内容吗
大佬,那WSARcev的返回数据,能被修改吗
2024-5-19 14:19
0
雪    币: 3905
活跃值: (3157)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
ACT忆梦 大佬,那WSARcev的返回数据,能被修改吗
return前缓冲区可以写的啊(
2024-5-19 14:20
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
ANormalUser return前缓冲区可以写的啊(
不太懂了
2024-5-19 14:34
0
雪    币: 237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7

要看同步还是异步,同步确实WSARcev返回就有数据,而异步是即时返回的但缓冲区没有数据,数据在另外的等待接口或事件里,参考IOCP。

最后于 2024-5-19 22:29 被mb_hgrbqfun编辑 ,原因:
2024-5-19 22:24
0
雪    币: 6552
活跃值: (4346)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
8
断点断下后内存窗口查看数据地址, 这个时候还没有执行完recv操作,所以内存中不存在数据,需要ctrl + f9运行到返回,这个时候再看前面的内存地址就是接收的数据。
2024-5-19 23:38
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
mb_hgrbqfun 要看同步还是异步,同步确实WSARcev返回就有数据,而异步是即时返回的但缓冲区没有数据,数据在另外的等待接口或事件里,参考IOCP。
我觉得是异步,谢谢老哥,我去看看
2024-5-20 09:44
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
yimingqpa 断点断下后内存窗口查看数据地址, 这个时候还没有执行完recv操作,所以内存中不存在数据,需要ctrl + f9运行到返回,这个时候再看前面的内存地址就是接收的数据。
我想写代码 hook 修改 recv,它只有执行到返回,数据才被写入到内存,我用的是frida也是刚学,还不太清楚,通过什么方式等他有了数据再进行更改
2024-5-20 09:47
0
雪    币: 237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
ACT忆梦 我想写代码 hook 修改 recv,它只有执行到返回,数据才被写入到内存,我用的是frida也是刚学,还不太清楚,通过什么方式等他有了数据再进行更改[em_5]
肯定是recv返回才有数据的,你要先在frida的onEnter记录保存缓冲区的地址,然后在frida的onLeave里根据返回长度获取去读取缓冲区的数据,数据在onLeave才能读,
onEnter: function (args) {
...
       },
onLeave: function (retval) {
           if (retval.toInt32() > 0) {
       确保能访问args
               var data = Memory.readByteArray(args[1], retval.toInt32());
2024-5-21 08:50
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
mb_hgrbqfun 肯定是recv返回才有数据的,你要先在frida的onEnter记录保存缓冲区的地址,然后在frida的onLeave里根据返回长度获取去读取缓冲区的数据,数据在onLeave才能读, onEnte ...
大佬,我是这么做的,它能够读取到数据,但是写入用onLeave,那么也是WSARcev执行完后才会调用,hook写入数据,那么在之前WSARcev就已经把数据包返回到本地了,这个时候再写也没什么用了,我就是这个问题,我不知道该怎么做了
2024-5-21 09:07
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
mb_hgrbqfun 肯定是recv返回才有数据的,你要先在frida的onEnter记录保存缓冲区的地址,然后在frida的onLeave里根据返回长度获取去读取缓冲区的数据,数据在onLeave才能读, onEnte ...
var lpBuffersPtr;

Interceptor.attach(Module.getExportByName('Ws2_32.dll', 'WSARecv'), {
    onEnter: function (args) {
        lpBuffersPtr = args[1];
    },
    onLeave: function (retval) {
        var lpBuffers = Memory.readPointer(lpBuffersPtr);

        if (lpBuffers == 65536) {
            var buf = Memory.readPointer(lpBuffersPtr.add(4));

            var newData = [0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x20];
            Memory.writeByteArray(buf, newData);

            var byteArray = Memory.readByteArray(buf, 384);
            console.log(byteArray);
        }
    }
2024-5-21 09:10
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
mb_hgrbqfun 肯定是recv返回才有数据的,你要先在frida的onEnter记录保存缓冲区的地址,然后在frida的onLeave里根据返回长度获取去读取缓冲区的数据,数据在onLeave才能读, onEnte ...
我x64dbg调试发现,它WSARcev返回后数据已经写入了而且数据包已经到本地了,再往下调试发现才到frida的hook这个时候再去修改数据已经没有意义了,数据包已经到本地了,大佬这个该怎么搞
2024-5-21 09:13
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
mb_hgrbqfun 肯定是recv返回才有数据的,你要先在frida的onEnter记录保存缓冲区的地址,然后在frida的onLeave里根据返回长度获取去读取缓冲区的数据,数据在onLeave才能读, onEnte ...
但是我用WPE这个工具它又可以实现修改WSARcev返回数据,不知道它是怎么实现的
2024-5-21 09:14
0
雪    币: 237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
不能吧,frida  onLeave是可以修改返回值的啊,此时还没有返回,可以修改缓冲区的,
2024-5-21 09:57
0
雪    币: 64
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17

写入的数据比原来的数据大怎么办,大佬

最后于 2024-5-21 19:49 被ACT忆梦编辑 ,原因:
2024-5-21 10:00
0
游客
登录 | 注册 方可回帖
返回
//