首页
社区
课程
招聘
[求助]在程序刚启动时Hook ReadFile函数
发表于: 2010-4-18 20:13 12868

[求助]在程序刚启动时Hook ReadFile函数

2010-4-18 20:13
12868
想写个加密狗监控程序练手,碰到了难题,特上来求助。
如下的程序结构:   --> 可理解为调用。

A.exe --> B.ocx --> C.dll --> D.dll --> ReadFile(读狗),
当B刚初始化的时候(此时A的界面都没出现), ReadFile会被执行,
目前我只能做到在A完全起动后再去Hook ReadFile函数(修改IAT),但这时已经晚了,
有没有大侠给点思路?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
您说的方法正是现在外面流行的抢注方法,代码未展开前就先注入了

除了多次自校验以外没有很好的方法

若是你是做大型游戏的  奉劝表多想了  我没见过有大游戏对自己程序内部进行主动对抗的。原因是太占本身资源了

您只能针对您程序某个极关重要的CALL进行判断。。以防他的注入后的调用
2010-4-18 20:28
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上的可能误会了,我要的就是这种“抢注方法”,而不是防止抢注
因为要监控程序与加密狗之间的通信嘛
2010-4-18 20:42
0
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
晕死

要方法???

不告诉你- -。。   一看就是用来干坏事滴
2010-4-18 20:45
0
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
其实论坛有个文章他已经写到你要的东西了 自己耐心找找吧
2010-4-18 21:03
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
风林是个热心人啊, 我搜了半天也没找到才发贴的。
我这不是干坏事的哈,网上这类程序大把下的,自己写的目的纯粹是为练手,了解下其实现原理。
2010-4-18 21:19
0
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好象是关于什么调试器什么的。。忘记哪篇了
抢注的确不错
2010-4-18 21:32
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
1改A.exe的TLS?
2在A进程被加载时,MS有个XX函数吧,就是如果查一下RING3调试器的编写,应该知道整个过程,那么可以改这个做点手脚吧
纯粹灌水,瞎说一通。。
2010-4-19 12:19
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好邪恶~~ 全局钩子只能在界面出现后才能注入,因为都是基于消息的,如果要更早,就自己去启动进程并挂起它,下面的动作就随便你了
2010-4-19 13:55
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
因为都是基于消息的,如果要更早,就自己去启动进程并挂起它,下面的动作就随便你了
2010-4-19 14:01
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
lpk.dllllll
2010-4-19 16:48
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我现在就是自己去启动进程并挂起它的,可惜挂起的又太早了,发现DLL文件都没有加载完哦,所以就没法HOOK了。应该在DLL都加载完毕后才挂起,HOOK后再继续运行。
我想思路是对的,具体怎么弄还是不会。
2010-4-19 20:34
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
倒,inline-hook不就行了吗
2010-4-19 21:43
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
蛋疼的不行

Simplest way:
Create process as suspended
-> Overwrite ProcessStartStub、ModuleOEP/TLS or anywhere else, with a loader stub
-> Resume the main thread.
-> Your loader stub is executed. Do any thing as your wish here.
-> Execute the original code and process started.

DT ways
1、LoadImageNotify.
    When the notify of the main module trigered(right after CreateProcesNotify),  the ntdll and main module  is already mapped, you can hook the main module here. This is almost the earlest inject point.

2、CreateProcessNotify
    This notify is trigered by the first thread of the process. In fact, when you got this, the process is just “Started” yet.
*The EPROCESS is allocated, but partial initialized.
*The PEB is allocated, but almost empty.
*Ntdll is mapped, but not regiester to ldr list. The main module is not loaded yet.
But you can still inject your code, if you know how.

3)CreateThreadNotify
   Maybe this is the earlest and "graceful" way to got known a process "will" start.  In fact,  this notify is called by the thread which calling CreateProcess, and even the first instruction of the created process is not got executed yet.
   You can hook here, if you are the most DT man
2010-4-20 03:30
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
楼上高人啊,留下记号。
不过,还想问一下,还有没有更早的inject点可以修改某个段的属性,比如,让某个数据段成为共享的(share),让所有的实例都共享那个数据段。当然,exe文件中那个数据段肯定是没有共享属性的。
按我的想法,这个功能可能要在ring0下才能实现吧。应该是修改loader,而不是进程本身。
2010-4-20 10:46
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
16
在PE结构里改块属性试试。
2010-4-20 11:18
0
雪    币: 44
活跃值: (24)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
劫持其中一个DLL或劫持系统DLL。
2010-4-21 00:12
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
多谢,不过我是想能在load的过程中修改,这样,就可以避过对文件的效验。
2010-5-1 18:29
0
雪    币: 35
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
去研究一下hideod 很快就就会明白了
2010-5-1 19:03
0
游客
登录 | 注册 方可回帖
返回
//