逆向入门(1)工具使用篇-dbg插件Scylla使用

发布于:2025-07-07 ⋅ 阅读:(23) ⋅ 点赞:(0)

0x00 dbg介绍

最早接触逆向是因为给一个x32游戏写插件,所以跟着教学一直用的是OD,直到学找特征码定位时,木青教我了一个无敌好用的方法,才开始用了dbg,感谢青佬。
在这里插入图片描述
总体来说确实比od好用一些,而且还能支持x64,不过一直只是简单用他,最近又在学习一些小玩具,逐渐需要使用一些插件,开个新篇记录一下工具的使用方法的学习,持续更新

0x01 Scylla

dbg 中的 Scylla 插件 是一个功能强大的工具,主要专注于逆向工程、恶意软件分析和软件脱壳领域。它得名于希腊神话中能将水手拉入深渊的海妖Scylla,寓意它能“拉出”隐藏在程序内部的原始代码OEP和导入表IAT

Scylla 插件的核心功能介绍
  1. 查找原始入口点:
    这是 Scylla 最基础也是最重要的功能之一。
    当程序被加壳器保护后,真正的程序入口点会被隐藏。加壳器会在自己的代码中设置一个入口点,负责在运行时解密或解压缩原始程序代码(通常称为 OEP - Original Entry Point),然后再跳转到那里执行。
    Scylla 提供了多种启发式算法(例如 Find OEP by Section Hop (Trace over))来尝试自动识别和定位被加壳程序真正的 OEP
  2. 转储内存映像:
    一旦找到了 OEP(或手动定位到内存中原始程序代码被完全解压/解密的位置),Scylla 可以将该进程内存区域的内容转储保存到一个新的 .exe 文件中。这个转储文件包含了当前内存中解密后的程序代码和数据,是脱壳过程的关键一步。
  3. 重建导入地址表:
    这是 Scylla 最核心、最强大的功能。
    加壳器通常会破坏或加密程序的原始导入地址表。IAT 是程序用来查找和调用 Windows API 函数(如 MessageBoxA, CreateFile, VirtualAlloc 等)的关键数据结构。没有正确的 IAT,转储出来的程序无法运行,因为它不知道如何调用系统功能。
    Scylla 提供了极其高效的方法来重建 IAT
    • 自动分析: 它能扫描进程内存,查找对 API 函数的调用指令(如 call [0x12345678]jmp dword ptr [0x12345678])以及这些指令引用的内存地址(即 IAT 条目)。
    • 高级IAT搜索: 提供多种搜索模式(如 Search IAT),即使 IAT 被严重破坏或分散,也能尝试识别出有效的 API 函数指针。
    • 获取导入信息: 在识别出 IAT 条目后,Scylla 能解析这些指针,确定它们指向的是哪个 DLL 中的哪个函数。
    • 重建 IAT 结构: 基于收集到的信息,Scylla 会在转储文件内部创建一个新的、功能完整的 IAT 结构,并修复代码中对这些 API 函数的调用,使其指向新 IAT 中的正确位置。
  4. 导入表编辑器:
    允许用户手动查看、编辑、添加或删除重建的导入表条目。这在自动重建不完美或需要处理混淆/反调试技术时非常有用。
  5. API 断点设置:
    可以方便地在特定的 API 函数上设置断点(硬件断点或内存写入断点)。这在脱壳和恶意软件分析中非常常用,例如在 VirtualAlloc, VirtualProtect, LoadLibrary, GetProcAddress 等关键 API 上下断点,以跟踪壳的解密或注入行为。
  6. 内存补丁:
    提供直接在进程内存中修改指令或数据的功能(打补丁)。这对于修改程序行为、绕过反调试或激活某些功能很有用。
  7. 反反调试:
    虽然主要功能是脱壳和重建 IAT,但 Scylla 内置的一些功能(如隐藏调试器痕迹)也能用于对抗简单的反调试技术。

好了,客套话完了,进入正题吧。

0x02 upx加壳

先写个简单程序

#include <iostream>
#include <string>


int main() {
    std::string username;
    printf("input: ");
    std::getline(std::cin, username);

    if (username == "baynk") {
        printf("flag: %s\n", "flag{abcdefg}");
    }
    else {
        printf("wrong user!\n");
    }
    system("pause");

    return 0;
}

编译后可以正常运行
在这里插入图片描述
接着使用upx加壳
在这里插入图片描述
此时用ida打开看函数,看不到什么内容
在这里插入图片描述
die查一下
在这里插入图片描述

0x03 手动脱壳不完美版

在这里插入图片描述
F9过几个系统断点到入口点
在这里插入图片描述
F8过到ESP定律
在这里插入图片描述
右键dump区显示
在这里插入图片描述
右键下断
在这里插入图片描述
F9到断下的地方
在这里插入图片描述
F4运行到这,然后F8OEP
在这里插入图片描述
调出Scylla插件,直接dump出程序
在这里插入图片描述
此时这个dump后的exe,在ida里面就可以正常分析了
在这里插入图片描述
其实这里我是想能正常运行这个程序的,但是用插件自带的IAT修复后还是无法正常运行
在这里插入图片描述
接上图顺序点击后,选择之前dump后的文件,会再生成一个新文件,按之前脱别人的程序这个文件应该是只可以正常运行的,但是不知道为什么自己写的程序不行,知识盲区啊,折腾一下午也没研究个所以然来,也没个大哥能教一下,难受,再插个眼,以后再来解决吧