首页
社区
课程
招聘
未解决 [求助]闭贴。已经解决。谢谢各位大佬。
发表于: 2020-6-20 23:23 4746

未解决 [求助]闭贴。已经解决。谢谢各位大佬。

2020-6-20 23:23
4746

闭贴。已经解决。谢谢各位大佬。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-6-22 01:58 被乐弟弟编辑 ,原因: 已经解决。
收藏
免费 1
支持
分享
最新回复 (9)
雪    币: 433
活跃值: (1930)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2

沙发 我没看仔细

最后于 2020-6-21 01:19 被萌克力编辑 ,原因:
2020-6-20 23:40
0
雪    币: 139
活跃值: (292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
萌克力 读写不够骚呗 而且内核HOOK窗口相关API,是无法让窗口不被枚举的。 加上听你说的像是x32的环境...还是省省吧
老哥可能没仔细看帖子,
只要不在计次循环 里 有读内存操作。

无论在循环上面还是下面读内存 绘制窗口。都没有任何异常。
2020-6-20 23:43
0
雪    币: 12857
活跃值: (9172)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
考虑api高频调用被检测
2020-6-21 00:01
0
雪    币: 9753
活跃值: (3409)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
既然都注入进去了,那直接用汇编来读不就行了?
2020-6-21 00:31
0
雪    币: 688
活跃值: (229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
同进程下,还用什么ReadProcessMemory,直接读写指针不是更好么.
但我认为,问题不是出在内存读取上面,而是在线程上面.
除了上面所说的方式,根据你特征描述,我觉得还有个方式会出卖你的,
就是线程的入口地址,检测到线程入口地址,就知道你代码所在的内存区域,无需QueryVirtualMemory也可以知道是不是自己的内存区域.
而为什么你前一段代码没有问题,我认为是因为检测机制是心跳的方式循环检测所有已知的内存区域,
而你的前一段代码是执行一次就消失了,错过了心跳检测...所以免于一死.
尝试下隐藏(欺骗)线程入口地址,或者索性不使用自己的线程做事情,使用APC或者是HOOK一个游戏自身的繁忙的线程来做事.

ps
1.:除了线程入口,心跳循环枚举线程上下文(ThreadContex),获取CIP(EIP/RIP)的方式,也可以暴露你的模块(DLL)所在的内存区域.
所以说,那些什么隐藏DLL的功能,都是傻子骗傻子的方式.有就是有,没就是没,除非是死代码,否则肯定有执行的,有执行就会
暴露位置.

2.高频率API调用检测的可能性几乎也是0,因为API的调研频率,根本是无法估量的,10毫秒一次对于某些API来说算是高,而对于某些API
来说,这个还是非常正常的,比如绘制API和性能计时器的API.除非厂商真的出了一个ReadProcessMemory API调用频率检测,那真的是日了狗,
真.山寨.
2020-6-21 00:38
0
雪    币: 139
活跃值: (292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
flarejune 同进程下,还用什么ReadProcessMemory,直接读写指针不是更好么. 但我认为,问题不是出在内存读取上面,而是在线程上面. 除了上面所说的方式,根据你特征描述,我觉得还有个方式会出卖你的 ...
前面的读写代码 也是在线程里面。毫秒级无限循环读。没有问题。  只不过不在计次循环里面。

在同一个线程里面。 只要在线程里面的计次循环 有读内存操作。无论读空白地址。,还是任意什么操作 都会被检测。
不应该是ReadProcessMemory被检测。

还是那个尴尬问题。只要不在计次循环里面读。都一切正常
2020-6-21 00:44
0
雪    币: 688
活跃值: (229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
关键是,你前一段代码,虽然也有循环的处理,但是整个运行周期,是不是很短?
要检测是不是ReadProcessMemory的原因,直接做测试吧,HOOK一个游戏繁忙的线程,然后ReadProcessMemory.
游戏最繁忙的线程,就是主线程(GUI THREAD)了,就干它.

说到底.你也认为不是ReadProcessMemory的问题,那根据我上面所说,除了披露ReadProcessMemory不存在问题之外,
也说明了一点就是你DLL注入的这个行为,还有很多方式被发现的.
而你说单挂绘制操作(你这个绘制操作肯定是在GUI线程上面干的咯)就没有问题,也正好证明了:在游戏自己的线程里面,做啥都没问题,
也证明了HOOK没有被发现,游戏没有对自己的代码进行CRC检测.

总结收盘(问题就1点):
1.注入行为被发现,通过线程入口/CIP这些方式,一样可以发现已经被抹除的DLL,除此当然也有其它的方式.
1.a:根据情况所猜想,本人依然认为最大可能被发现的方式,就是你这个常驻的循环线程被检测到CIP,从而导致整个注入行为被发现.
见招拆招,先从这里入手吧(隐藏ThreadContext的CIP试下,返回一个游戏所属的代码地址,如果游戏有严格检测的话,你还必须返回一个真实
有效的代码地址.text段里面的范围),
1.b:通常情况下,要隐藏线程的CIP,是有点困难的,特别是地方如果在内核有处理的话.
2020-6-21 01:17
1
雪    币: 139
活跃值: (292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢大佬的 用心回复。 我试试去。  这个检测 是真的耐人寻味。哈哈哈。
2020-6-21 01:27
0
雪    币: 8401
活跃值: (4976)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
应该是读取时间检测,你要做方框透视肯定刷新和调用读取API时间要很快才能绘制方框,游戏公司在这个方面有检测也算正常
2020-6-21 12:29
0
游客
登录 | 注册 方可回帖
返回
//