逆向怎么玩 - 动态调试jetBrains CLion实录

本文详细记录了如何进行CLion的动态调试逆向工程,包括克服没有源代码和混淆的困难,获取入口函数所在类,新建和修复入口类,修复ClassPath、资源和JVM选项,最终实现程序的动态调试。文中还介绍了关键工具的使用,如java -verbose、HotSpot™ Serviceability Agent等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明

CLion程序版权为jetBrains所有、注册码授权为jetBrains及其付费用户所有,本篇只从兴趣出发,研究其程序运行原理及注册码生成算法。

  • 不会释出任何完整的源代码.
  • 网上查了下,已有注册机,所以想要key的同学不要找我:p

背景

在上篇:CLion注册码算法逆向分析实录

我们通过结合jdb、jd-gui等工具,静态分析被混淆过的CLion的clion.jar中的class信息,顺利拿到了CLion的注册码算法.

但是,如果能在动态调试中分析代码路径,拿注册码并推算法不是更愉快么?
本篇将从动态调试的角度展开逆向之旅,作为对上篇的一个补充。

本篇用到的关键技术和工具:

  • java -verbose
  • HotSpot™ Serviceability Agent
  • jetBrains intellij IDEA 14.3
  • jetBrains CLion 1.0.4
  • jd-gui 1.2
  • jinfo

动态调试的困难

因为没有源代码,而CLion的class经过混淆,且有很多运行时生成的class,所以无法直接通过简单地使用类似jd-gui之类的工具来得到java文件。

如果仅仅是名称和控制流混淆,其实还是比较简单的情况,不是太变态的情况下,jd-gui可以拿到java代码,如果混淆的很厉害,一般也有字节码可以看,所以需要我们对字节码或混淆代码的阅读感觉比较熟练即可。

如果是上面的相对简单的情况,我们可以有耐心地重建或者修补反编译而来的java代码,以达到调试的目的。

CLion的情况不同,它还有一些运行时生成的类,再加上混淆,使得我们很难仅仅通过反编译来完成动态调试的准备。


获取入口函数所在的类名

办法总比困难多,让我们开始准备动态调试吧!

通过上一篇博文的分析,我们已经熟悉了CLion程序启动的一些代码路径,首先要找到程序的入口函数main,并重建它。怎么找呢?

  • 方法1:通过启动脚本来找

可以通过查看$CLION_HOME/bin下的clion.sh来看启动参数:

133 MAIN_CLASS_NAME="$CL_MAIN_CLASS_NAME"
134 if [ -z "$MAIN_CLASS_NAME" ]; then
      #注意这里
135   MAIN_CLASS_NAME="com.intellij.idea.Main"
136 fi
...
176 LD_LIBRARY_PATH="$IDE_BIN_HOME:$LD_LIBRARY_PATH" "$JDK/bin/java" \
177   $AGENT \
178   "-Xbootclasspath/a:$IDE_HOME/lib/boot.jar" \
179   -classpath "$CLASSPATH" \
<think>我们正在解决CLion中CMake配置时出现的C编译器错误问题。错误信息指向CMakeTestCCompiler.cmake文件,通常表示CMake在测试C编译器时失败。根据引用[2]和引用[3]的提示,这可能是由于编译器路径配置不正确或编译器本身无法工作导致的。用户提供的编译器路径为:`D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/gcc.exe`解决方案步骤:1.**验证编译器路径**:首先确认该路径下确实存在`gcc.exe`。如果路径中有空格或特殊字符,可能会导致问题,但这里路径没有空格。注意:路径中的斜杠方向在Windows中可以是正斜杠或反斜杠,但最好使用正斜杠或双反斜杠。2.**检查编译器是否可用**:打开命令提示符,导航到上述路径,运行`gcc--version`,看是否能够正确输出GCC版本。如果不能,说明编译器可能损坏或环境变量有问题。3.**在CLion中配置工具链**:-打开CLion,进入`File->Settings->Build,Execution,Deployment->Toolchains`-在右侧,检查或添加一个MinGW工具链,将`Environment`设置为`MinGW`,然后指定`gcc.exe`的完整路径(即上面的路径)。同时,确保`CCompiler`和`C++Compiler`字段自动填充正确(通常会自动填充为相同目录下的`gcc.exe`和`g++.exe`)。4.**检查CMakeLists.txt**:确保没有错误的设置,特别是`project`命令之前的编译器设置。通常不需要在CMakeLists.txt中设置编译器路径,因为CLion会通过工具链设置。5.**清理并重新加载CMake项目**:-删除项目目录下的`cmake-build-debug`和`cmake-build-release`目录(或者任何你构建的目录)。-CLion中,点击`File->ReloadCMakeProject`。6.**如果问题仍然存在**,可能是由于编译器不兼容或损坏。尝试重新安装MinGW,并确保选择与系统匹配的版本(32位或64位)。安装后,重复上述步骤。7.**引用[4]中提到的问题**:如果之前运行的程序没有关闭,可能会导致无法重新编译。打开任务管理器,结束与项目相关的进程(例如你的程序名.exe),然后再重新构建。8.**查看错误日志**:根据引用[3],错误信息会记录在`CMakeError.log`中,该文件位于构建目录(如`cmake-build-debug/CMakeFiles/CMakeError.log`)。打开该文件,查看具体的错误原因,例如编译测试程序失败的原因。常见错误原因及解决:-编译器路径错误:重新指定正确的路径。-编译器损坏:重新安装。-权限问题:以管理员身份运行CLion,或者关闭占用文件的进程(引用[4])。-环境变量问题:确保MinGW的bin目录已添加到系统PATH环境变量中。下面是一个具体的步骤示例:**步骤1:检查编译器路径**打开文件资源管理器,导航到`D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin`,确认`gcc.exe`存在。**步骤2:在CLion中设置工具链**-打开CLion,进入设置(File->Settings)-选择:Build,Execution,Deployment->Toolchains-点击“+”添加一个MinGW工具链-在Environment中选择MinGW-在“Make,CCompiler,C++Compiler”中,分别指定:Make:自动检测或手动指定为`D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/mingw32-make.exe`CCompiler:`D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/gcc.exe`C++Compiler:`D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/g++.exe`**步骤3:重新加载CMake项目**-删除项目下的cmake-build-*目录-CLion中,Tools->CMake->ResetCacheandReloadProject如果按照以上步骤操作后问题仍然存在,请检查MinGW版本是否与系统兼容(例如64位系统需要64位MinGW)以及是否安装了必要的组件(gcc-core,gcc-g++,binutils等)。希望这些步骤能帮助您解决问题。§§相关问题§§1.如何在CLion中配置多个构建工具链?2.如何解决CMake项目中的链接错误?3.如何优化CLion的构建速度?4.如何为CMake项目添加外部库依赖?5.如何调试CMake脚本?</think>以下是解决 CLion 中 CMake C 编译器错误的完整指南,基于您提供的错误信息和引用内容: ### 一、问题诊断 根据引用[2]和引用[3],错误核心是: ```cmake The CMAKE_C_COMPILER: D:/.../gcc.exe is not a full path and was not found in the PATH ``` 这表示 CMake 无法找到有效的 C 编译器路径,可能由以下原因导致: 1. **路径格式错误**(引用[2]) 2. **编译器文件损坏**(引用[4]) 3. **进程占用导致权限问题**(引用[4]) ### 二、解决方案步骤 #### 步骤 1:验证编译器路径 1. 打开文件资源管理器,导航到: ``` D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/ ``` 2. 检查是否存在以下文件: - `gcc.exe`(C编译器) - `g++.exe`(C++编译器) - `mingw32-make.exe`(构建工具) #### 步骤 2:在 CLion 中配置工具链 1. 打开 CLion → `File` → `Settings` → `Build, Execution, Deployment` → `Toolchains` 2. 删除现有配置,点击 `+` 添加新配置 3. 按以下示例设置: ```plaintext Name: MinGW-18.0 Environment: MinGW Make: D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/mingw32-make.exe C Compiler: D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/gcc.exe C++ Compiler: D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/g++.exe ``` 4. 点击 `Apply` 保存 #### 步骤 3:解决进程占用问题(引用[4]) 1. 按 `Ctrl+Shift+Esc` 打开任务管理器 2. 查找并结束以下进程: - 您的程序名.exe - mingw32-make.exe - cmake.exe 3. 如果无法结束,使用强制删除: - 打开腾讯电脑管家 → 工具箱 → 文件粉碎 - 添加路径: ``` D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/ ``` #### 步骤 4:修改 CMakeLists.txt 在项目根目录的 `CMakeLists.txt` 中添加编译器路径强制指定: ```cmake cmake_minimum_required(VERSION 3.10) project(YourProjectName) # 强制指定编译器路径 [^2] set(CMAKE_C_COMPILER "D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/gcc.exe") set(CMAKE_CXX_COMPILER "D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW/bin/g++.exe") # 添加可执行文件 add_executable(YourProjectName main.cpp) ``` #### 步骤 5:清理并重建项目 1. 在 CLion 中: - `File` → `Invalidate Caches` → 选择 `Invalidate and Restart` 2. 重启后: - 删除项目中的 `cmake-build-*` 目录 - 点击 `Reload CMake Project` 按钮(工具栏右侧) ### 三、验证解决方案 1. 创建测试文件 `main.cpp`: ```cpp #include <iostream> int main() { std::cout << "Compiler test successful!" << std::endl; return 0; } ``` 2. 运行程序,如果输出成功则表示配置正确 ### 四、预防措施 1. **路径管理最佳实践**: ```cmake # 使用CMake变量避免硬编码路径 set(MINGW_PATH "D:/Sketchpad5.06/Sketchpad5/Evoker12345/Creation/c-c++/MinGW/mingw-18.0/MinGW") set(CMAKE_C_COMPILER "${MINGW_PATH}/bin/gcc.exe") ``` 2. **环境变量配置**: - 添加系统环境变量: ``` Path += D:\Sketchpad5.06\Sketchpad5\Evoker12345\Creation\c-c++\MinGW\mingw-18.0\MinGW\bin ``` ### 五、常见错误处理表 | 错误现象 | 解决方案 | 引用来源 | |---------|---------|---------| | "is not a full path" | 检查路径斜杠方向(用`/`代替`\`) | [^2] | | "permission denied" | 结束占用进程或强制删除 | [^4] | | 编译器测试失败 | 重装MinGW或验证编译器版本 | [^3] | | 缓存冲突 | 执行`Invalidate Caches` | [^1] | > **重要提示**:如果使用 Qt 项目,确保在 `CMakeLists.txt` 中添加 `find_package(Qt5 REQUIRED COMPONENTS Core)` 并正确配置 Qt 路径(引用[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值