开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 14646|回复: 45
收起左侧

[技术专题] 【技术专题】一、Hook专题 a)第一个Hook

[复制链接]
结帖率:100% (1/1)
发表于 2012-7-14 08:43:00 | 显示全部楼层 |阅读模式   湖北省咸宁市
分享视频教程
教程类型: 无声教程
教程讲师: 流年一逝
下载地址1: http://www.3600gz.cn
本帖最后由 |流年灬一逝| 于 2012-7-26 09:20 编辑

前言
第一章
第二章
第三章
第四章
第五章
第六章

既然来了,就坚持读下去吧,认真读下去,一定会有收获的!
************************************************************************************************

一、第一个Hook
有学过PE文件的朋友可能都会这样一个感染文件的方法:
1、  新建一个区段。
2、  把代码放入这个区段里。
3、  在原始代码入口前,增加一条指令,jmp到这个区段中。
4、  执行完整个区段之后,在区段的末尾,jmp回到原始代码的入口。
这样就完成了一个程序的Hook,我们可以直接在程序入口添加一个Hook,弹出信息框,选确定方可进入程序,选否则退出程序。
其实这也就是一个hook,不过这样的Hook并不实用。因为我们并不是想控制程序的运行与否,而是控制程序执行过程而达到我们的一些目的。
我们来用OD写第一个Hook
下面是一个Windows窗口程序,我们在_启动子程序下写如下代码:
未命名.PNG
这是把a置为1b置为2,然后相加赋给c,最后用信息框弹出的程序。
我们今天的任务就是用OD写几条简单的汇编,实现hook挂钩更改a和b的值,最后转存。
我们把这个程序编译出来(推荐用黑月。这样体积比较小,载入OD的时候比较快一点)
之后,将滑块条移到最上面 未命名.PNG
这边有local.3 也就是三个局部变量 未命名.PNG ,说明这就是我们的启动子程序入口。
我们简单看一下:
00401053  |.  DB45 FC       fild [local.1]
00401056  |.  DD5D EC       fstp qword ptr ss:[ebp-0x14]
00401059  |.  DD45 EC       fld qword ptr ss:[ebp-0x14]
0040105C  |.  DB45 F8       fild [local.2]
0040105F  |.  DD5D E4       fstp qword ptr ss:[ebp-0x1C]
00401062  |.  DC45 E4       fadd qword ptr ss:[ebp-0x1C]
00401065  |.  DD5D DC       fstp qword ptr ss:[ebp-0x24]
00401068  |.  DD45 DC       fld qword ptr ss:[ebp-0x24]
0040106B  |.  E8 90FFFFFF   call 1.00401000
00401070  |.  8945 F4       mov [local.3],eax
上面这几句都是浮点操作,是的,易语言中整数计算为浮点,也就是说,这几句汇编就等于我们的c a b 这句。
0040102A  |.  81EC 24000000 sub esp,0x24                             ;  腾出变量的空间
00401030  |.  C745 FC 00000>mov [local.1],0x0                        ;  这几句都是初始化变量
00401037  |.  C745 F8 00000>mov [local.2],0x0
0040103E  |.  C745 F4 00000>mov [local.3],0x0
00401045  |.  C745 FC 01000>mov [local.1],0x1
0040104C  |.  C745 F8 02000>mov [local.2],0x2
上面这几句都是处理变量。
00401073  |.  6A 00         push 0x0                                            (启动子程序代码区)
00401075  |.  6A 00         push 0x0
00401077  |.  6A 00         push 0x0
00401079  |.  68 01030080   push 0x80000301
0040107E  |.  6A 00         push 0x0
00401080  |.  68 00000000   push 0x0
00401085  |.  68 01030080   push 0x80000301
0040108A  |.  6A 00         push 0x0
0040108C  |.  FF75 F4       push [local.3]
0040108F  |.  68 03000000   push 0x3
00401094  |.  BB 00030000   mov ebx,0x300
00401099  |.  E8 B2010000   call 1.00401250
上面这些都是弹出信息框了。
那我们从哪里开始Hook呢?在我们以后的章节中,都是使用API来分配储存HOOK代码的空间的,这里没有什么创建空间的,所以我们就可以找一段空白的代码,作为储存Hook的代码
那么我们就把c=a+b这句代码给Hook
Hook起始位置:00401053  |.  DB45 FC       fild [local.1]                            (启动子程序代码区)
把滑块条往最下面拉,你会发现有很多00数据
00408DEC      00            db 00                                                    (找到的00数据)
00408DED      00            db 00
00408DEE      00            db 00
00408DEF      00            db 00
00408DF0      00            db 00
00408DF1      00            db 00
00408DF2      00            db 00
00408DF3      00            db 00
00408DF4      00            db 00
00408DF5      00            db 00
00408DF6      00            db 00
00408DF7      00            db 00
00408DF8      00            db 00
00408DF9      00            db 00
我们就用这些数据来储存Hook代码。
Hook代码存储区:00408DEC     
我们用OD转到00401053  起始Hook位置,来修改跳转到我们的Hook代码储存区。
00401053     /E9 947D0000   jmp 1.00408DEC                                            (启动子程序代码区)
00401058     |90            nop
00401059  |. |DD45 EC       fld qword ptr ss:[ebp-0x14]
0040105C  |. |DB45 F8       fild [local.2]
0040105F  |. |DD5D E4       fstp qword ptr ss:[ebp-0x1C]
00401062  |. |DC45 E4       fadd qword ptr ss:[ebp-0x1C]
00401065  |. |DD5D DC       fstp qword ptr ss:[ebp-0x24]
00401068  |. |DD45 DC       fld qword ptr ss:[ebp-0x24]
加红的是我们修改之后的指令,我们其实只是修改了jmp 1.00408DEC,原来的指令是:
00401053  |.  DB45 FC       fild [local.1]                                                       (启动子程序代码区)
00401056  |.  DD5D EC       fstp qword ptr ss:[ebp-0x14]
机器码是:DB45 FC DD5D EC 因为我们修改成了far jmp,所以机器码成了E9 947D0000
比原来的少了1个字节,所以就用nop指令来补充这多余的一个字节。
跳转到Hook代码储存区之后,我们开始做什么呢?
当然是修改ab的值了。
00401045  |.  C745 FC 01000>mov [local.1],0x1                                             (启动子程序代码区)
0040104C  |.  C745 F8 02000>mov [local.2],0x2
这两句是启动子程序分别给ab赋值的代码,当代码执行到我们的Hook区域的时候,变量的值为12.我们把它修改成34.
00408DEC      C745 FC 03000>mov dword ptr ss:[ebp-0x4],0x3                     (Hook代码储存区)
00408DF3      C745 F8 04000>mov dword ptr ss:[ebp-0x8],0x4
这是Hook代码储存区的两句。分别给ab赋值34.
注:local.1OD自动解释的,实际是ebp-0x4,local.2也是一样。
然后我们干什么?执行这两句指令过后,变量ab就已经成为34了,这时候我们只需要给变量c赋值就可以了。
00408DFA      8B45 FC       mov eax,dword ptr ss:[ebp-0x4]                      (Hook代码储存区)
00408DFD      0345 F8       add eax,dword ptr ss:[ebp-0x8]
00408E00      8945 F4       mov dword ptr ss:[ebp-0xC],eax
首先给eax赋变量a的值,再递加b的值,最后给c赋值。
然后我们再跳回信息框就可以了。
00408E03   .^\E9 6B82FFFF   jmp 2.00401073                           (Hook代码储存区)
2.00401073为信息框入口地址。
然后我们转存。生成文件为2.exe。运行看看:
未命名.PNG



****************************************************************************************

第一节的内容就是这么多,大家有什么疑问可以跟帖提出来。

示例代码\原程序: 代码_程序.zip (49.95 KB, 下载次数: 312)

评分

参与人数 2好评 +1 精币 +7 收起 理由
bbwtjjw + 1 + 2 不错 希望坚持下去
蟋蟀 + 5 精彩文章希望继续努力

查看全部评分


本帖被以下淘专辑推荐:

结帖率:83% (5/6)
发表于 2012-7-14 08:45:39 | 显示全部楼层   浙江省温州市
沙发 支持!!!
回复 支持 反对

使用道具 举报

发表于 2012-7-14 08:54:10 | 显示全部楼层   澳大利亚
这个很不错,虽然我现在还没看懂,支持楼主!
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2012-7-14 09:16:56 | 显示全部楼层   浙江省嘉兴市
不你知道什么情况- -
回复 支持 反对

使用道具 举报

发表于 2012-7-16 23:28:36 | 显示全部楼层   四川省绵阳市
来支持一个,再慢慢看。!
回复 支持 反对

使用道具 举报

发表于 2012-8-12 09:06:11 | 显示全部楼层   浙江省杭州市
看看看看看
回复 支持 反对

使用道具 举报

发表于 2012-9-2 01:22:51 | 显示全部楼层   江西省九江市
test520 发表于 2012-7-14 09:16
不你知道什么情况- -

我也  不知道什么情况
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2012-9-8 23:03:34 | 显示全部楼层   广东省广州市
根本没看懂是什么...................出视频教程
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2012-9-14 20:54:12 | 显示全部楼层   广东省广州市
出个视频 学习一下吧
回复 支持 反对

使用道具 举报

结帖率:78% (35/45)
发表于 2012-9-17 22:07:06 | 显示全部楼层   广东省潮州市
学习下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表