- 博客(78)
- 收藏
- 关注
原创 使用 JavaParser 解析代码
要判断 Java 代码文本中一个方法的输入参数个数和类型,可以借助 JavaParser 这样的第三方库来解析 Java 代码并获取方法的参数信息。对于局部变量的个数和类型,也可以通过类似的方法来解析语句中的局部变量信息。上面的代码中,我们使用 JavaParser 加载 Java 文件并创建 CompilationUnit 对象,然后遍历所有的方法声明,获取方法的参数信息和局部变量信息。2)编写 Java 代码,使用 JavaParser 解析 Java 代码并获取方法参数以及局部变量信息。
2024-05-25 12:40:14 534
原创 Soot 安装和简单使用
Soot 是 McGill 大学的 Sable 研究小组自 1996 年开始开发的 Java 字节码分析工具,它提供了多种字节码分析和变换功能。通过它可以进行过程内和过程间的分析优化,以及程序流图的生成;还能通过图形化的方式输出,让用户对程序有个直观的了解。尤其是做单元测试的时候,可以很方便的通过这个生成控制流图然后进行测试用例的覆盖,显著提高效率。Soot 项目已经不再继续维护,其最高支持到 Java 9 版本。如果要在更新的项目中使用,请配置项目组最新开发和维护的 SootUp 项目(
2024-03-25 07:15:00 1369
原创 实现桌面动态壁纸(一)
本文章以在 Windows 桌面管理层窗口(桌面图标后面)嵌入第三方窗口为主题,主要针对动态壁纸实现原理进行讲解。
2023-10-09 02:43:21 3692 21
原创 【软件测试·研究向】Major 变异测试工具使用教程
Major (主要变异框架, The Major Mutation Framework)是一个高效、灵活的突变分析框架。主要突变框架提供了三个主要组件:(1)Major 变异器:Java 编译器 (javac) 的编译器插件;(2)Mml 配置文件:一种用于定制突变生成的 DSL(领域特定语言);(3)分析器:一种可有效确定活突变体、突变体检测率或完整突变体测试矩阵的测试运行器;
2024-08-21 18:31:33 736
原创 [软件测试·研究向] MuJava 工具遇到的问题汇总和体会
MuJava 是初学者(研究向)常常会去使用的一个工具,也是 Java 软件测试的一个老牌工具。用于为 Java 代码生成变异体和运行单元测试。但是此工具已经有十年没有更新了,这款软件可以说现在已经不能够支持对主流软件框架运行测试。但是使用它进行简单代码的测试还是可以的。下面我将就我在研究中遇到的一些坑点和各位探讨一下。本人也是软件测试方面的一个小萌新,文章多有疏漏,尽请谅解。
2024-08-07 20:15:27 1023 1
原创 实现组件存储 WinSxS 文件夹解析
WinSxS 组件存储文件夹中的文件目录比较复杂,有些时候需要枚举或者检索目录中某个组件的特定版本的副本会很麻烦。在这篇文章中,我将提供一个解析组件存储文件夹的初步程序。包括相关测试示例。
2024-07-12 18:30:25 863
原创 【Windows】实现窗口子类化(基于远程线程注入)
子类化是通过更改窗口过程来重新定义窗口的行为。要更改窗口过程,窗口过程应驻留在创建窗口的进程中。我计划通过注入子类化模块在不了解创建窗口的进程的情况下替换窗口行为。众所周知,注入是一个简单的 DLL,当 DllMain 被调用时DLL_PROCESS_ATTACH,我正在进行 Hack。这段代码很简单,首先我们要知道要注入到目标进程(injectee)中的 DLL(SubClassModule)的名字。因此,它必须写入目标进程的地址空间中。本文发布于:2024.07.10,修改于:2024.07.10。
2024-07-10 21:27:30 756
原创 实现桌面动态壁纸(二)
这是从零开始系列的第二节,在本节中,我们进一步讨论WorkerW窗口的功能,介绍桌面窗口创建的流程,同时讨论为什么在Vista上无法嵌入窗口。从零实现桌面动态壁纸(二)
2024-07-05 00:03:01 1362
原创 Hook 实现 Windows 系统热键屏蔽(二)
接下来,将进一步分析 Ndr(64)AsyncServerCall(All) 函数的相关原理,从的角度对本地远程过程调用进行拦截。讨论 winlogon.exe 进程响应的一部分过程时所采用的 Ncalrpc 通信机制,通过( Hooking )注入代码来修改该线路上的( Key Points),包括。
2024-07-03 09:38:06 1252
原创 检测窗口是否最大化兼容 Win10/11
在 Win10/11 上有很多 UWP 进程,检测窗口是否最大化将迎来新的挑战。这些窗口以它不能够使用 Win32 的 IsWindowVisible 获取窗口可见性。必须使用 DWM API 来判断此类窗口的状态。
2024-06-10 15:59:20 405 3
原创 【Windows】UWP - Application Frame 窗口句柄溯源
当 GUI 线程的窗口属于 Windows/UWP 应用程序时,它们始终由进程 ApplicationFrameHost 托管。如果依然使用 Win32 的那套方法我们最终将获取到根进程ApplicationFrameHost.exe 而不是实际的 AppContainer 进程或者 RuntimeBroker 进程。
2024-06-10 12:06:52 845
原创 用户态下屏蔽全局消息钩子 —— ClientLoadLibrary 指针覆盖
拦截 SetWindowsHookEx 函数的官方方法是在系统或程序运行的早期,安装一个 WH_DEBUG 类型的 Win32 钩子,这将允许你捕获后面几乎所有 Win32 钩子的挂钩过程(除了WH_KEYBOARD_LL 低级键盘钩子无法拦截以外),具体可以参考。首先,它定位回调指针的地址。首先是一种触发操作时的调用堆栈,可以看出间接调用了 __ClientLoadLibrary 指针指向的函数,然后依次调用钩子回调队列中的函数。它保存 DLL 的路径、指向通知函数的指针以及一些尚不清楚的数据。
2024-05-26 00:58:42 769
原创 编程实现标题栏窗口摇动——显示桌面的未公开细节研究
本文提供一种前瞻方法来触发窗口顺序改变。如果您在 Windows 11(或 Windows 10)系统上抓住窗口标题并用鼠标摇动它,屏幕上所有其他打开的窗口都将最小化到任务栏。然后,如果您再次摇动同一个窗口,它们将返回到屏幕上。此功能称为“窗口摇动” (TitleBar Window Shake)或 Aero Shake,自 Windows 7 起可用。
2024-05-25 23:30:03 788
原创 Mujava 工具的简单使用
首先下载openjava.jar和mujava.jar,以及自己手写一个mujava.config指向存放mujava的目录,并将这些文件放在mujava目录下。此时,基本的mujava环境就搭建好了。图 3 BubbleSort传统变异结果。图 4 BubbleSort类变异结果。图 2 BackPack类变异结果。图 6 BubbleSort杀死率。本文发布于:2024.05.25.图 5 BackPack杀死率。
2024-05-25 12:33:57 365
原创 Windows 固定快捷方式到任务栏
将应用程序固定到任务栏是 Windows 7 中首次引入的一项功能。自其发明以来,微软(根据 Raymond Chen 的说法)就打算不提供(无限的)编程操作。显然,一些开发人员认为他们的应用程序是世界上最棒的,谁不希望我们的应用程序在安装时固定到任务栏?!目前操作任务栏固定的方法有很多种,这里整理常用的几种方法。
2024-05-18 18:19:40 1894 1
原创 实现桌面动态壁纸——认识 WebView2 控件
上一节我们讲解了如何将任意窗口嵌入桌面壁纸层和图标层之间,它是向用户展示动画所必需的准备工作。但是,我们并没有去实现动态壁纸的前端部分,动态壁纸的前端组件一般由浏览器微核或视频解码器集成。这一节我将为您介绍基于 WebView2 控件技术的自定义浏览器微核,这将涉及到动态壁纸的前端组件的组成部分。一、什么是 WebView2?Microsoft Edge WebView2 控件允许在本机应用中嵌入式 Web 技术(HTML、CSS 以及 JavaScript)。
2024-05-10 07:30:00 1283
原创 解决从网页复制代码带有多余行号问题
我们在 Web 上找到一份很好的教程时,往往喜欢复制或者保存他人提供的代码。但是,有些网页带有自动编号功能,这会使得复制的文本处理起来比较麻烦。我们观察到每一行左侧都有行号的编号,我们在复制到 txt 中时候,会出现多余行号和前缀空格。目前此程序适用于处理标准的 Java 代码,是否有特殊情况导致出错的我暂时还没遇到。这时候,我想到了写一个脚本去自动化处理。运行这个脚本并输入要处理的文件以及输出文件路径。我们不需要这样,但是手动去除会很麻烦且容易出错。我们看一下生成的效果,非常棒,我也很喜欢。
2024-03-23 13:24:13 435
原创 JavaParser 手动安装和配置
JavaParser 是一款流行的 Java 代码分析工具。它是一套简单而轻量级的开源工具,可以来分析、转换和生成 Java 代码。。我们可以通过流行的构建工具 Maven 或者 Gradle ,添加依赖项来部署本地仓库、编译和使用 JavaParser。下面分析使用 JavaParser 从 Github 上手动下载和部署的方法。
2024-03-22 23:58:38 2296 1
原创 Win 11 24H2 桌面窗口层次改动
Win11 24H2 最近在测试渠道发布了(3 月 13 日)。经过这几天的测试,我们已经观察到 Win11 为了优化用户体验,对资源管理器一些实现细节进行了改动。当然,这些改动在 UI 上体现的不是很明显。但是,可见的是,删除了很多旧的东西。
2024-03-22 21:39:11 653
原创 重启 explorer 进程的正确做法(二)
在上一篇中我认为:“我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者 taskkill /f /im 等方法重启资源管理器( explorer.exe ),其实这是。所以,我们正确的做法是,在调用 TerminateProcess 之前,修改注册表 “AutoRetartShell” 的值为 0 ,然后再在结束进程后恢复值为 1 即可。其实,并不能一口咬定以前的方法不正确。重启资源管理器进程的方法不唯一,但长期以来大家对实施方法用的不到位。要知其然,更要知其所以然。
2024-03-10 16:13:42 919
原创 java 指定编码 utf-8、解决编码报错问题
在编译 java 或者运行 java 类、jar 文件时,我们往往会遇到编码错误导致的问题,例如:程序中中文编码的输入输出变为乱码,编译时报错“无法识别的 GBK 字符” 等。这些问题都是由于 JDK 的程序 java.exe 和 javac.exe 默认以 GBK 编码运行导致的。而我们常见的代码编辑器或集成开发软件(如:EditPlus、IDEA、Eclipse)则默认以 Unicode utf-8 的编码格式运行,编码方式的不同就导致了程序的异常。这样就可以解决这类问题。
2024-03-09 12:47:14 1747
原创 Randoop 报错 Cannot find the Java compiler 的解决方案
JDK 目录下找到 lib 子目录,只有 JDK 有编译环境 tool.jar 文件,而 Randoop 的最近几个版本似乎会默认读取 JRE 的目录,而 JRE 没有 tools.jar。在变异测试中,可以利用 Randoop 的随机测试用例,并结合 MuJava 工具,来初步筛选掉可能的等价变异体,并保留非等价变异体(部分需要手工操作)。编写测试用例是一项困难且耗时的工作,但同时又是好的软件工程的重要部分。Randoop是一个随机测试的测试用例生成的工具,能够自动的为Java代码中的类生成单元测试。
2024-03-09 00:49:30 903
原创 对通知区域(Win 系统托盘)窗口层次的分析
Windows 的通知区域也就是我们俗称的系统托盘,该区域是为了显示应用程序或系统的重要通知以及支持应用程序的最小化操作而诞生的。关于他的历史由来有一些有趣的说法,有兴趣的可以搜索资料了解一下。在前面的几篇文章中,我详细介绍了在新旧不同版本的 Windows 系统上获取通知区域图标信息的方法。后来,我考虑到:如果缺乏对通知区域界面的基本知识的了解,可能会影响通知区域图标信息的获取方法的理解。
2024-03-04 00:17:51 1767
原创 获取 Windows 通知中心弹窗通知内容(含工具汉化)
从 Windows 8.1 开始,Windows 通知现在以 Toast 而非 Balloon 形式显示( Bollon 通知其实现在是应用通知的一个子集),并记录在通知中心中。到目前为止,为了检索通知的内容,您必须抓取窗口的句柄并尝试读取它的文本内容,或者其他类似的东西。
2024-03-03 23:38:12 1764
翻译 【翻译】使用通知监听器 API 获取 Windows 通知中心的内容
从 Windows 8.1 开始,Windows 通知现在以 Toast 而非 Balloon 形式显示,并记录在通知中心中。到目前为止,为了检索通知的内容,您必须抓取窗口的句柄并尝试读取它的文本内容,或者其他类似的东西。特别是在 Toast 可用之后,这样做变得很困难,但从 Windows 10 Anniversary Edition (10.0.14393.0) 版本开始, MS 实现了“通知监听器” API(),允许您以与获取 Android 通知相同的方式获取 Windows 通知。
2024-03-03 17:15:48 264
原创 Soot 工具命令行参数解释完整版
由于网络上对 Soot 工具的参数解释仅局限于模仿官方帮助文档介绍的部分常用参数,而未对其他参数进行解释。我将记录一下自己通过 机翻+人工校对 的 soot.Main -help 命令给出的参数列表。
2024-03-01 00:50:15 946
原创 获取 Windows 系统托盘图标信息的最新方案(三)
在《获取 Windows 系统托盘图标信息的最新方案(一)》中(下文简称 《最新方案(一)》),我们讨论了在 Win11 22H2 上获取系统托盘图标信息的方法,即拦截 Shell_TrayWnd 窗口的 WM_COPYDATA 消息。在《最新方案(一)》中,我们主要使用 Inline hook 重写 CTray::v_WndProc 函数,也就是窗口过程函数来拦截 WM_COPYDATA 消息。具体分析了两种注入 explorer 的实现方法:(1)创建挂起进程的远程线程注入;
2024-02-22 19:21:17 1537 13
原创 获取 Windows 系统托盘图标信息的最新方案(二)
系列文章分析获取系统通知区域图标的多种方法。解释了在 Win11 22H2 更新后无法获取托盘图标信息的问题所在,并给出了有效的解决方案。这一篇主要是对第一篇第 4 节的解析注册表中系统通知图标信息的方法进行详细的解释。
2024-02-20 23:24:11 1591 3
原创 获取 Windows 系统托盘图标信息的最新方案(一)
本文分析获取系统通知区域图标的多种方法。解释了在 Win11 22H2 更新后无法获取托盘图标信息的问题所在,并给出了有效的解决方案。这篇文章发布前,我一直在我的一篇历史文章中更新我的研究进度。在解决这个这个问题的过程中,我逐步地了解到了通知消息传递的一些细节,而在此之前对细节实现的分析过程只是被我潦草地堆砌在一起,并没有很好地梳理事情的整个流程。所以我决定将文章重新整理出来。也就是大家现在看到的这篇长文,请认真地阅读下去,这将会解决一部分的一直以来在文献中含糊不清的问题。
2024-02-20 18:08:25 2050 2
原创 Windows 重启 explorer 的正确做法
我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者 taskkill /f /im 等方法重启资源管理器( explorer.exe ),其实这是不正确的。我们应该使用重启管理器接口来重启 explorer 进程。
2024-02-19 22:29:22 3253
原创 Windows 使设置更改立即生效——并行发送广播消息
在 Windows 上使得设置的更改立即生效的方法不唯一。本文分析全局发送 WM_SETTINGCHANGE 消息来通知系统设置发生更改这一方法。该方法适用范围比较广泛,但有时候还是需要结合 SHChangeNotify 等函数来刷新更改,甚至还有一部分设置更改就只能重启计算机生效。
2024-02-19 18:50:23 1378
原创 Windows 虚拟桌面信息(一)分析注册表
Win 10/11 的虚拟桌面微软暂时没有开放接口,有很多信息对开发者是闭塞的,对于开发动态壁纸程序来说,这个功能也是需要的,我们需要检测多桌面的情况,以允许不同桌面用不同的壁纸。相关的研究目前就是对未公开的 COM 接口进行操作的,可以实现很强大的功能。本系列将逐一复现外网的相关研究结论。当然,这一部分研究注册表的结果是我自己发现的。
2024-02-14 00:00:18 419
原创 键盘重映射禁用 CtrlAltDel 键的利弊
在 Ndr-LRPC Hook 和 WMsg Hook 等方法完善前,网络上公开的禁用 CtrlAltDel 键的方法是使用 "Scancode Map" 键盘扫描码映射表这个方法,本质上是利用微软提供的注册表设置来达到屏蔽的效果。这确实在前一阶段是较好的解决方案,所以在更新完前两种方案后,我不打算对这个方法避而不谈,相反,我觉得该方法可以用于更广泛的方面,甚至许多键盘快捷键修改程序就利用了类似的方法。本文将就具体的实现细节给出通用修改工具以及谈谈这种方法存在优缺点。
2024-02-13 21:02:19 1774
原创 模拟发送 Ctrl+Alt+Del 快捷键
对于开启了安全登陆的窗口工作站 Server 系统,需要在登陆时按下 Ctrl + Alt + Del 才能成功登陆。此时,研究一种编程模拟发送组合热键以便于验证安全注意序列(SAS)是有必要的,通过研究发现发送这样子的快捷键往往需要一些特殊的技巧,因为他它和一般的快捷键不同(诸如,Win + D)。
2024-02-11 00:19:30 1474 1
原创 使用 WMI 查询安全软件信息
WMI 是 Windows Management Instrumentation 的缩写,是微软提供的用于管理Windows 系统的一种技术。它提供了一种标准的接口,允许开发者通过编程方式获取和操作 Windows 操作系统的各种信息,包括硬件、软件、网络配置等。WMI 是基于CIM(Common Information Model)标准的实现,它使用了面向对象的方式来组织和表示系统的信息。通过使用 WMI API,我们可以方便地查询和管理 Windows 系统的各种信息。
2024-02-07 21:30:59 1089
原创 使用 NtQuerySystemInformation 遍历进程信息
通过遍历系统进程信息,我们可以了解系统中运行的各种进程的详细信息,从而更好地进行系统管理和性能优化。本文介绍了一种通过调用 Windows 系统API来获取并遍历系统进程信息的技术,并提供了一段示例代码以帮助读者理解该技术的实现方法。
2024-02-07 11:42:06 1245
原创 浅析一款非驱动考试网关程序(一)
监考程序需要对网络流量进行过滤,不允许除了考试网站以外的其他网站的访问。其实就是实现了一个小型的网关程序,一般地有驱动实现和非驱动实现两种方式。本文只针对一款简易的非驱动实现的监考程序进行分析。注意:本文通过对某考试监考网关客户端程序的逆向分析研究,节选其中断网的实现过程进行讲解。
2024-02-06 20:10:31 774
固定快捷方式到开始菜单任务栏
2024-06-27
如何在 explorer 初始化时注入(Win10/11)?
2024-02-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人