[ScyllaHide] 文章列表-看雪地址:

  • 00 简单介绍和使用
  • 01 项目概览
  • 02 InjectorCLI源码分析
  • 03 PEB相关反调试
  • 04 ScyllaHide配置报错原因定位
  • 05 ScyllaHide的Hook原理

InjectorCLI源码分析

从项目名字,我们可以看出,该项目是注入功能的命令行程序。它实现了HookLibrary.dll的命令行注入,并启动反调试功能。

面对一个开源的、强大的反调试工程,我做了几个简单的测试:

  1. 执行命令:InjectorCLIx86.exe MyTestAntiDebuger.exe HookLibraryx86.dll,将HookLibraryx86.dll注入MyTestAntiDebuger.exe进程,完成反调试测试环境搭建。
  2. 使用procexp.exe查看进程MyTestAntiDebuger.exe的dll,我们并没有发现HookLibraryx86.dll,猜测InjectorCLI含有自加载dll的功能。
  3. 使用PCHunter检测MyTestAntiDebuger.exe进程发现只hook了下面地址:
   7781EA50  - FF25 28B28B77   jmp     dword ptr [Wow64Transition]      ; wow64cpu.77737000

那么问题来了,这一个hook如何实现各种反调试及时呢?

  1. InjectorCLIx86.exe 能实现隐藏dll的注入,尝试注入其它dll(自己随便写了个MessageBox的dll)岂不是一个很好的反检测功能?然而尝试结果是,直接崩溃了。为什么呢???

带着这些问题,我们继续走下去

章节目标

  • 了解InjectorCLI整体函数调用关系
  • 了解InjectorCLI注入原理(需要有PE文件基础),限制条件。
  • InjectorCLIx86.exe为何不能注入其它dll
  • 注入后如何实现反调试

源码分析

先上一张总的函数调用图:

wmain分析

wmain做的三件事儿:

  1. 初始化配置,初始化HOOK_DLL_DATA g_hdd
  2. 解析参数,获得targetPid和dllPath
  3. startInjection(targetPid, dllPath)

初始化配置,包含scylla_hide.ini和NtApiCollection.ini,都是基于Windows ini相关api进行操作的。

scylla_hide.ini先通过Section[SETTINGS]的键CurrentProfile的值获得配置类型。

[SETTINGS]
CurrentProfile=VMProtect x86/x64
[VMProtect x86/x64]
BlockInputHook=0
DLLNormal=1
...
[Obsidium x86]
BlockInputHook=0
DLLNormal=1
DLLStealth=0
...

比如上面的配置,程序将读取Section[VMProtect x86/x64]中所有的键值作为配置项。

startInjection做的三件事(黄色底色的内容)

  1. ReadFileToMemory(将dll读取到内存中)
  2. MapModuleToProcess(dll注入到目标进程)
  3. StartHooking(执行反调试逻辑)

MapModuleToProcess的逻辑是本章的重点,代码量并不多,不过需要扎实的PE知识(可以通过WIndows PE权威指南获得相关知识,很全面)。该函数主要有4个步骤,如下:

  1. 节区映射到imageLocal
  2. 基址重定位
  3. 修正导入表
  4. 内存拷贝到目标进程,根据wipeHeaders参数,拷贝头部信息

通过MapModuleToProcess将dll映射到目标进程,但是并未在目标进程执行任何代码;而StartHooking将dll变成了有意义的任务(反调试)该内容将在下节进行阐述。
为了分析方便,我将Scylla隐藏注入相关代码提了出来,上传到了 github 上,有兴趣的可以去看下。

问题回顾

现在回过头看下文章开头的问题。

问题一:了解InjectorCLI注入原理(需要有PE文件基础),限制条件。

Scylla的dll注入对PE文件进行了重定位,是否适用于所有的dll呢,从代码中我们可以发现,还有很多PE相关的结构未处理,如IMAGE_DIRECTORY_ENTRY_TLS、IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT等,也就是说,这样的dll,注入后会出现异常情况的。(这些未做验证,如有问题,请各路大神指正)

问题二:InjectorCLIx86.exe为何不能注入其它dll

这个其实调试一下就会发现程序崩溃在StartHooking函数中了,该函数对特定的dll导出项(HookData)进行了检测和内存操作,所以崩溃了。看源码之前,一直以为自己使用错了InjectorCLIx86.exe,各种查资料,其实最真实的资料就是源码,一行行代码比什么都直接。

问题三:注入后如何实现反调试

这个下节再议,新年快乐。

广而告之

夜猫出品,欢迎吐槽。更多精彩,可以前往博客地址。

[ScyllaHide] 02 InjectorCLI源码分析相关推荐

  1. bytearrayinputstream java_java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)...

    我们以ByteArrayInputStream,拉开对字节类型的"输入流"的学习序幕. 本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码, ...

  2. 【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析

    [Android SDM660源码分析]- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一.加载 UEFI 默认应用程序 1.1 LaunchDefaultBDSApps ...

  3. 【SemiDrive源码分析】【Yocto源码分析】02 - yocto/meta-openembedded目录源码分析

    [SemiDrive源码分析][Yocto源码分析]02 - yocto/meta-openembedded目录源码分析 一.meta-openembedded 目录 本 SemiDrive源码分析 ...

  4. v18.02 鸿蒙内核源码分析(源码结构) | 内核文件各自含义 | 百篇博客分析HarmonyOS源码

    子曰:"富而可求也,虽执鞭之士,吾亦为之.如不可求,从吾所好." <论语>:述而篇 百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核文件 ...

  5. v62.02 鸿蒙内核源码分析(文件概念) | 为什么说一切皆是文件 | 百篇博客分析OpenHarmony源码

    司马牛忧曰:"人皆有兄弟,我独亡."子夏曰:"商闻之矣:死生有命,富贵在天.君子敬而无失,与人恭而有礼.四海之内,皆兄弟也.君子何患乎无兄弟也?" <论语 ...

  6. 【SA8295P 源码分析】02 - SA8295P 整包镜像分析

    [SA8295P 源码分析]02 - SA8295P 整包镜像分析 一.UFS LUNs 二.开机启动相关镜像介绍 三.QNX Host相关镜像介绍 四.Android GVM 相关镜像介绍 五.其他 ...

  7. v57.02 鸿蒙内核源码分析(编译过程) | 简单案例说透中间过程 | 百篇博客分析HarmonyOS源码

    子畏于匡,颜渊后.子曰:"吾以女为死矣."曰:"子在,回何敢死?" <论语>:先进篇 百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译 ...

  8. 【OpenHarmony-v3.2代码分析】02 - device目录 uboot源码分析

    [OpenHarmony-v3.2代码分析]02 - device目录 uboot源码分析 1. device 目录分析 从本文开始 ,我们正式来分析OpenHarmony-V3.2的源码的 uboo ...

  9. 02.并发编程(2)Thread类源码分析

    概述 在说线程之前先说下进程,进程和线程都是一个时间段的描述,是CPU工作时间段的描述. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一 ...

最新文章

  1. 有点酸!中外程序员都是怎么炫富的? | 每日趣闻
  2. 判断父元素是否为顶部_元素树,检查元素是否有特定的父元素?
  3. Receiver type ‘X’ for instance message is a forward declaration
  4. SCCM2007系列教程之九SCCM站点备份和恢复
  5. npm 发布一个全局的指令
  6. rsync+inotify文件变动后自动同步程序
  7. Redis配置和持久性
  8. [算法]圆圈中最后剩下的数
  9. 网吧的云计算机,云电脑和网吧开启线上网咖是新趋势?
  10. 【Java】恶搞程序实现桌面无限弹窗
  11. tcl语言读取文件一行_TCL语言(九) 路径和文件
  12. 【正则】详解python正则表达式之re.group()用法
  13. SQL相关概念与MYSQL下载安装卸载
  14. python期货数据 库_如何用python或者基于vnpy框架将期货tick数据聚合成1分钟数据呢?...
  15. axure原型怎么让文字自动换行_苹果手机输入法编辑文字时怎样换行
  16. 【翻译】2020年云安全综合指南(风险,最佳实践,认证)
  17. 位图和矢量图谁的色彩更丰富_更少的更多色彩
  18. 【RC延迟电路与快速泄放电路】 multisim 14.0仿真 RC延迟电路与快速泄放电路
  19. C#设计模式之桥接模式
  20. matlab四维图形,MATLAB二维、三维、四维绘图

热门文章

  1. 易知微母公司袋鼠云获过亿元C+轮融资,深耕国产自研数字化领域
  2. 剪了 20% 的刘海、120Hz 刷新率、1TB 存储,最高售价为 12999 元的 iPhone 13 系列来了!
  3. 科学研究是有闲人群的玩艺———读爱因斯坦的短文有感
  4. 腹有诗书气自华,记2016年读过的好书
  5. 开源一款苹果 macOS 工具 - AppleParty(苹果派)
  6. wince车机可以连接电脑吗_WINCE车机平台手机互联使用说明
  7. 为什么要预测、优化工业生产中的问题呢?
  8. 2.6.机载测深激光扫描系统—(Topographic Laser Ranging and Scanning-Principle 读书笔记)
  9. java二进制编辑器_Java Hex Editor免费版-十六进制编辑器下载 v2.0 免费版 - 安下载...
  10. 微信读书中总显示服务器错误,微信读书充值遇到问题怎么办 微信读书充值遇到问题解决方法...