首页
论坛
课程
招聘
[原创]腾讯2010竞赛第三阶段题目思路+代码
2010-11-22 10:18 13315

[原创]腾讯2010竞赛第三阶段题目思路+代码

2010-11-22 10:18
13315
本文使用注入DLL设置硬件断点以及模拟执行指令的方式来记录API调用。流程如下:

1,将EXE自身复制一份,修改入口点和DLL标志,变成xixihaha.dll。
2,将xixihaha.dll注入目标进程。
3,DLL会挂钩以下5个函数:
VOID HookLdrLoadDll();  //分析新载入模块的导出表
VOID HookCsrNewThread();  //对新创建的线程下硬件断点
VOID HookKiUserExceptionDispatcher(VOID); //处理异常
VOID HookZwGetContextThread(); //防止硬件断点检测1
VOID HookZwSetContextThread(); //防止清除硬件断点


4,对所有模块的导出表进行分析,将所有信息记录到全局数组,并对第一个要监视的API下硬件断点。
5,硬件断点断下来后,分析API的返回地址,如果是EXE调用该API,说明要监视的第一个API被调用,开始模拟执行EXE的指令。
6,如果不是EXE调用,则对返回地址下断,执行到返回后,再对第一个API下断。
7,模拟执行指令过程中,如果EIP不在EXE内,则分析此地址对应的API名称,获取第二个API。

PS:
1,模拟执行指令没有加入大循环代码块的分析,否则,速度应该会再快一点
2,通过Hook KiUserExceptionDispatcher来处理异常,而不是通过调试器和设置ExceptionHandler,可以避免目标程序的大部分检测。首先分析异常是否是我们要处理的类型,如果是,直接处理然后返回(不再调用原始的异常处理),如果不是,首先将DRX寄存器清掉,然后再调用原始的异常处理,调用完毕后,再将DRX寄存器内容恢复。

exile.rar

[2022夏季班]《安卓高级研修班(网课)》月薪三万班招生中~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (21)
雪    币: 7054
活跃值: 活跃值 (3309)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 活跃值 22 2010-11-22 10:28
2
0
第一时间前来膜拜
雪    币: 1075
活跃值: 活跃值 (17)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
accessd 活跃值 2 2010-11-22 11:11
3
0
把这5个函数放到内核中挂钩就更完美了,这样就可以防止测试程序使用sysenter指令绕过这几个函数。另外,楼主hook了KiUserExceptionDispatcher,忘记hook ZwContinue了。
这个答案居然才得了第三真的挺亏的。
另外, "xixihaha"这个名字好熟悉啊.........
雪    币: 272
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Esper 活跃值 2010-11-22 11:11
4
0
做的真好阿, 膜拜
雪    币: 643
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
StudyRush 活跃值 3 2010-11-22 11:19
5
0
纯粹的膜拜,向大牛学习。
雪    币: 318
活跃值: 活跃值 (80)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
wuwenyao 活跃值 2 2010-11-22 13:09
6
0
来膜拜的,下载看看如何模拟指令运行和异常处理
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qwangwei 活跃值 2010-11-23 10:54
7
0
牛人,看不懂!!。。。
雪    币: 113
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nonoxx 活跃值 2010-11-23 11:10
8
0
果然强..不过个人不喜欢使用喜用系统API.能手动实现的全部自己实现..竞赛什么的完全没兴趣..没RMB绝对不乱搞- -!`..
雪    币: 1349
活跃值: 活跃值 (479)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
djxh 活跃值 2010-11-23 11:18
9
0
这个牛B,下代码学习.感谢..
雪    币: 33
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PEBOSS 活跃值 2010-11-23 13:19
10
0
好强大的代码
雪    币: 223
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aiie 活跃值 2010-11-23 17:31
11
0
学习思路...
雪    币: 5711
活跃值: 活跃值 (953)
能力值: ( LV15,RANK:1431 )
在线值:
发帖
回帖
粉丝
lelfei 活跃值 23 2010-11-23 19:29
12
0
前来学习+膜拜!
雪    币: 207
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cumac 活跃值 2010-11-28 18:53
13
0
收下了,牛就是牛啊
雪    币: 102
活跃值: 活跃值 (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
twoseconds 活跃值 2010-11-29 20:51
14
0
向大牛学习。
雪    币: 117
活跃值: 活跃值 (26)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 活跃值 2 2011-1-12 14:43
15
0
大多数写这类文章的高人,都只放片断源码,初学者往往无法顺利完成编程,
也有放了完整源码,但不讲编译条件,程度不好的还是无法完成,这样的学习效果有限,
像楼主这样把整个project发上来的真的很少,向楼主致敬
雪    币: 224
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wesenwesen 活跃值 2011-1-13 00:28
16
0
运行了一下,在创建进程哪里可住了,然后DLL住进去没反应?
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
哪天会下雨 活跃值 2011-1-13 02:46
17
0
神秘人果然厉害
雪    币: 30
活跃值: 活跃值 (17)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lyricC 活跃值 2011-1-13 10:28
18
0
腾讯2010竞赛第三阶段题目思路+代码
感谢
雪    币: 224
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wesenwesen 活跃值 2011-1-16 00:26
19
0
大伙在跑代码的时候能跑通吗?
我的跑不通
雪    币: 731
活跃值: 活跃值 (228)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
房有亮 活跃值 3 2011-1-16 12:05
20
0
顶。。。楼主,这个很不错
雪    币: 219
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chinahanwu 活跃值 2011-1-20 10:17
21
0
其中有太多的东西需要慢慢消化,先感谢LZ一下,顺便问一句:HOOK的时候使用PUSH RET指令返回真实DLL领空,而不是直接用JMP,原因是怕被检测到JMP吧?
雪    币: 102
活跃值: 活跃值 (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
twoseconds 活跃值 2011-1-21 10:16
22
0
学习+膜拜!
游客
登录 | 注册 方可回帖
返回