乐易论坛-乐易网易语言培训教程火山PC视窗中文编程交流论坛

 找回密码
 立即注册

手机号登录

用手机号号登陆

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

办理VIP,定制软件,报名培训联系QQ请牢记揰掵佲的QQ号1615457736 1615457734 其他都是骗子易语言0基础入门课程
易语言汇编快速入门课程《64位某信Hook技术实战基础教程》【投稿课程】百日Js加密分析实战课程(无密下载)
【强烈推荐】《火山视窗0基础入门系列课程》《64位某信Hook技术实战进阶教程》【投稿课程】《0基础x64位游戏内存辅助开发教程 》
《火山视窗POST基础入门课程》《64位某信数据库操作课程》【投稿课程】广告位招租联系QQ1615457736
查看: 19658|回复: 13

[纯源码] 通过APIHook实现反远程注入及钩子检测

[复制链接]

[纯源码] 通过APIHook实现反远程注入及钩子检测

[复制链接]
已绑定手机
尘。
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
470
注册时间
2014-8-18
最后登录
1970-1-1

勋章墙

2017-9-20 20:18:36 | 显示全部楼层 |阅读模式

据统计90%查看本帖的人,都已经注册本站了哦

您需要 登录 才可以下载或查看,没有账号?立即注册

×
写在最前:
这只是一份demo.朋友软件被通过注入的方式做了PJ,我就帮忙写了这份源码
实际上这只是一种治标不治本的方法,但是也有一定的可行性
就这种方法而言,我的这份demo并非完善,甚至还有很多很显而易见的漏洞
比如我没HOOK LoadLibraryEx,也没有hook 使用宽字符的函数,不过原理基本没啥变化,有心人可以自行完善和补充.

工作原理:
1.通过hook LoadLibrary拦截所加载的模块.
b.在LoadLibrary中插入自己的暗桩代码.同时自己再调用LoadLibrary,根据暗桩是否触发判断hook是否被恢复
c.通过模块路径,模块版权信息,数字签名判断模块是否为非法模块

代码说明:
如下是对LoadLibraryA Hook的代码
把LoadLibrary返回的hModule保存起来,并且插入了我们自己的暗桩代码,如果是调用我们自己的验证模块,则调用模块内的check函数
同时还用一个定时器调用LoadLibrary.以确保check函数被一直调用
  
子程序名返回值类型公开备 注
模块检查  
变量名类 型静态数组备 注
i整数型  
hModule整数型  
fileFullName文本型  
filePath文本型  
info文件版本信息  
计次循环首 (loaded.size (), i)
hModule = GetModuleHandle (loaded.get (i))
判断 (hModule = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=NULL”#换行符 )
fileFullName = getModulePath (hModule)
判断 (fileFullName = “”)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ getPath=NULL”#换行符 )
filePath = _全路径取路径 (fileFullName)
判断 (-1 ≠ 寻找文本 (取运行目录 (), filePath, , ))
判断 (whiteList.index (loaded.get (i)) = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ whiteListModule”#换行符 )

取文件版本信息 (fileFullName, info)
判断 (-1 ≠ 寻找文本 (info.合法版权, “Microsoft Corporation. All rights reserved”, , ))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ Microsoft Corporation Library”#换行符 )
判断 (VerifyEmbeddedSignature (A2W (fileFullName)))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ userModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )




计次循环尾 ()


i支持库列表   支持库注释   
eAPI应用接口支持库


check函数:
check函数取得MessageBoxW函数的地址,并且修改头4字节的内存为timeGettime()
因为易语言用的都是ascii,所以MessageBoxW一般很少用到
当然后期的修改也可以对timegettime的值做加密再写入或者用pipedName等其他办法代替,还可以甚至加上你的心跳包
  
子程序名返回值类型公开备 注
模块检查  
变量名类 型静态数组备 注
i整数型  
hModule整数型  
fileFullName文本型  
filePath文本型  
info文件版本信息  
计次循环首 (loaded.size (), i)
hModule = GetModuleHandle (loaded.get (i))
判断 (hModule = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=NULL”#换行符 )
fileFullName = getModulePath (hModule)
判断 (fileFullName = “”)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ getPath=NULL”#换行符 )
filePath = _全路径取路径 (fileFullName)
判断 (-1 ≠ 寻找文本 (取运行目录 (), filePath, , ))
判断 (whiteList.index (loaded.get (i)) = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ whiteListModule”#换行符 )

取文件版本信息 (fileFullName, info)
判断 (-1 ≠ 寻找文本 (info.合法版权, “Microsoft Corporation. All rights reserved”, , ))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ Microsoft Corporation Library”#换行符 )
判断 (VerifyEmbeddedSignature (A2W (fileFullName)))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ userModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )




计次循环尾 ()


i支持库列表   支持库注释   
eAPI应用接口支持库


钩子检查:
取出我们写入的时间值,和timeGetTime做比对,看看是否超过一定的范围,是的话则说明钩子被处理
  
子程序名返回值类型公开备 注
模块检查  
变量名类 型静态数组备 注
i整数型  
hModule整数型  
fileFullName文本型  
filePath文本型  
info文件版本信息  
计次循环首 (loaded.size (), i)
hModule = GetModuleHandle (loaded.get (i))
判断 (hModule = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=NULL”#换行符 )
fileFullName = getModulePath (hModule)
判断 (fileFullName = “”)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ getPath=NULL”#换行符 )
filePath = _全路径取路径 (fileFullName)
判断 (-1 ≠ 寻找文本 (取运行目录 (), filePath, , ))
判断 (whiteList.index (loaded.get (i)) = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ whiteListModule”#换行符 )

取文件版本信息 (fileFullName, info)
判断 (-1 ≠ 寻找文本 (info.合法版权, “Microsoft Corporation. All rights reserved”, , ))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ Microsoft Corporation Library”#换行符 )
判断 (VerifyEmbeddedSignature (A2W (fileFullName)))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ userModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )




计次循环尾 ()


i支持库列表   支持库注释   
eAPI应用接口支持库


模块检查
a.首先我们判断是否有非白名单内的模块在根目录下加载,是的话判定为非法模块.这种办法可以预防一些挟持注入.当然可能这样写有点不合理
b.判断文件的版权信息,如果是白名单版权的则认定为有效文件
c.判定数字签名是否有效.
  
子程序名返回值类型公开备 注
模块检查  
变量名类 型静态数组备 注
i整数型  
hModule整数型  
fileFullName文本型  
filePath文本型  
info文件版本信息  
计次循环首 (loaded.size (), i)
hModule = GetModuleHandle (loaded.get (i))
判断 (hModule = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=NULL”#换行符 )
fileFullName = getModulePath (hModule)
判断 (fileFullName = “”)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ getPath=NULL”#换行符 )
filePath = _全路径取路径 (fileFullName)
判断 (-1 ≠ 寻找文本 (取运行目录 (), filePath, , ))
判断 (whiteList.index (loaded.get (i)) = 0)
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ whiteListModule”#换行符 )

取文件版本信息 (fileFullName, info)
判断 (-1 ≠ 寻找文本 (info.合法版权, “Microsoft Corporation. All rights reserved”, , ))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ Microsoft Corporation Library”#换行符 )
判断 (VerifyEmbeddedSignature (A2W (fileFullName)))
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ userModule”#换行符 )
编辑框1.加入文本 (loaded.get (i)“.hModule=”到文本 (hModule)“ hackerModule”#换行符 )




计次循环尾 ()


i支持库列表   支持库注释   
eAPI应用接口支持库


写在最后:
本人搞了几年游戏了,也多少了解到一些PJ与反PJ,个人观点还是认为没必要太崇拜壳子
基本把关键代码VM一下也差不多了,壳子更多的是调试和一些相关的检测,这些其实网上很多资料了.
起码我这一两年来,我的验证系统都只用vmp1.22做了vm,没有任何其他的壳子的保护.
主要的还是自己的系统是否严谨,是否能有效的增加PJ的难度.
如果一个市面上销售的软件,个人更倾向于一个全局钩子,对一些敏感的api做处理,自身把用到的一些敏感的api自己做一个hook做处理,加上CRC可能效果未必比壳差
当然了,以上都是本人的愚见而已,希望大神们也不吝赐教.
回复

使用道具 举报

已绑定手机
xuanxuan
等级头衔

等級:初识编程

Rank: 1

积分成就
易币
贡献
主题
精华
金钱
积分
12
注册时间
2018-2-16
最后登录
1970-1-1

勋章墙

2018-2-21 04:24:00 | 显示全部楼层
谢谢分享            
回复

使用道具 举报

已绑定手机
楼主
尘。 楼主
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
470
注册时间
2014-8-18
最后登录
1970-1-1

勋章墙

2017-9-20 20:20:04 | 显示全部楼层
补充下附件:
exe.e (22.1 KB, 下载次数: 54)
check.e (3.04 KB, 下载次数: 43)
回复

使用道具 举报

已绑定手机
已实名认证
yyjpcx
等级头衔

等級:程序制作者

Rank: 6Rank: 6

积分成就
易币
贡献
主题
精华
金钱
积分
1295
注册时间
2014-11-28
最后登录
1970-1-1

勋章墙

2017-9-23 02:52:07 | 显示全部楼层
论坛 附件  下载的大小是39B
回复

使用道具 举报

已绑定手机
已实名认证
yyjpcx
等级头衔

等級:程序制作者

Rank: 6Rank: 6

积分成就
易币
贡献
主题
精华
金钱
积分
1295
注册时间
2014-11-28
最后登录
1970-1-1

勋章墙

2017-9-20 20:53:42 | 显示全部楼层
远程汇编   也可以的

点评

是的,所以说这个方法绕过的办法太多了,所以也提到了全局钩子做HOOK  发表于 2017-9-20 23:18
javascript:;
回复

使用道具 举报

已绑定手机
冯古屋
等级头衔

等級:【编程大师】

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分成就
易币
贡献
主题
精华
金钱
积分
660
注册时间
2014-9-4
最后登录
1970-1-1

勋章墙

2017-9-20 21:49:34 | 显示全部楼层
不明觉厉!!!
回复

使用道具 举报

已绑定手机
小码人
等级头衔

等級:编程起步

Rank: 5Rank: 5

积分成就
易币
贡献
主题
精华
金钱
积分
507
注册时间
2016-3-4
最后登录
1970-1-1

勋章墙

2017-12-22 09:33:11 | 显示全部楼层
666666,学习了!
回复

使用道具 举报

已绑定手机
Jtuzi小兔
等级头衔

等級:初识编程

Rank: 1

积分成就
易币
贡献
主题
精华
金钱
积分
4
注册时间
2018-1-25
最后登录
1970-1-1

勋章墙

2018-1-25 16:00:10 | 显示全部楼层
感谢分享,学习学习
回复

使用道具 举报

已绑定手机
Jtuzi小兔
等级头衔

等級:初识编程

Rank: 1

积分成就
易币
贡献
主题
精华
金钱
积分
4
注册时间
2018-1-25
最后登录
1970-1-1

勋章墙

2018-1-28 18:48:51 | 显示全部楼层
感谢分享!下来学习学习!
回复

使用道具 举报

已绑定手机
rjl6258537
等级头衔

等級:初识编程

Rank: 1

积分成就
易币
贡献
主题
精华
金钱
积分
4
注册时间
2019-1-6
最后登录
1970-1-1

勋章墙

2019-1-21 03:44:23 | 显示全部楼层
谢谢分享     
回复

使用道具 举报

如果懒得打字,请选择右侧内容快捷回复 提醒:以任何方式进行『恶意灌水』的行为,进行封号处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

热点推荐上一条 /5 下一条

QQ|网站地图|手机版|小黑屋|乐易论坛-乐易网 | 湘ICP备19007035号

拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表乐易立场!

娄底市乐易网络科技有限公司声明:乐易原创培训课程版权均为我公司所有,未经许可,不得擅自翻录,盗版,破解本站课课程,我们将保留法律诉讼的权利

GMT+8, 2025-7-7 08:40 , Processed in 0.089168 second(s), 66 queries .

Powered by Discuz! X3.4

Copyright © Tencent Cloud.

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