草庐IT

逆向分析 工具、加壳、安全防护篇

有勇气的牛排 2023-04-09 原文

文章目录

1 逆向分析技术有什么用

软件安全是信息安全领域的重要内容,设计到软件相关的加密、解密、逆向分析、漏洞分析、安全编程以及病毒分析等。

哈喽,大家好,我是《有勇气的牛排》(全网同名)🐮🐮🐮

有问题的小伙伴欢迎在文末/评论,点赞、收藏/是对我最大的支持!!!。

1.1 加壳

  1. 加壳(可执行程序资源压缩):压缩后的程序可以直接运行。
  2. 加壳的另一种方式是在二进制程序中植入一段代码,在运行的时候优先取得程序的控制权,之后在把控制权交还给原始代码,这样做得目的是隐藏程序真正的OEP(入口点,防止被破解,查壳就是为了找它)。
  3. 加壳可以绕过一些杀毒软件的扫描(免杀)

加壳分类:

  • 压缩壳:特点是减小软件体积大小,加密保护不是重点。
  • 加密壳:此种类型比较多,不同壳侧重点不同,如单纯保护程序、提供注册机制、使用次数、使用限制等。

2 常用工具

2.1 查壳

查询可执行文件是否加壳或加密

2.1.1 PEID

可以将执行软件拖入如下界面(非快捷方式)。
也可以使用该工具脱壳

2.1.2 EXEINFO

ExeInfo PE 是一款免费可执行程序信息检查工具,它具有可以帮助开发人员对程序进行编译的功能。可以查看EXE/dll文件的编译器信息、是否加壳、入口点地址、输出表/输入表等等Pe信息,帮助开发人员对程序进行分析和逆向。

2.1.3 Detect It Easy

Detect It Easy简称Die,是一款专业查壳工具,比PEID强大得多,能查一次查到底。并支持超大文件读取,其他查壳工具无法打开的程序,这个都能读取。虽然没有PEID出名,但是相当的强大,完全可以替代PEID。

2.2 查询可执行文件信息

exe、com、bat、dll
查看动态链接库、进程、汇编代码等

2.2.1 loadpe

LordPE,是一款功能强大的PE文件分析、修改、脱壳软件。LordPE是查看PE格式文件信息的首选工具,并且可以修改相关信息。

2.2.2 PE Tools

PE 工具可让您积极研究PE 文件和流程。 Process Viewer和 PE 文件Editor, Dumper, Rebuilder, Comparator,Analyzer包括在内。 PE Tools是一个老派的逆向工程工具,从2002. PE Tools 最初是受到 LordPE (yoda) 的启发。

https://github.com/petoolse/petools/releases/tag/v1.9.762

2.2.3 StudyPE

2.3 调试工具

2.3.1 Ollydbg

1 、导航条介绍

步进:(F7)
步过:(F8)

l:log data,扫描导入库
e:Executable modules,程序运行加载的动态库
t:Theeads,当前线程

  • 当附加的进程点击运行后若无法运行,可能是被挂起,此时点击t,对挂起的地方,resume all threads

w:Windows,窗口
h:Handles,句柄
c:主线程模块,当前可运行的汇编代码
p:Patches,显示已修改的代码
k:调用堆栈(哪里进去、哪里出来)
b:Breakpoints,显示断点。
r:References

2 、窗口介绍

数据窗口快捷方式:
dd 地址:仅找地址
dc 地址:找地址+内容

3 、快捷键

Ctrl+B:查找二进制字符串
易语言按钮定位:FF 55 FC 5F 5E

Ctrl+G:跟随地址表达式(找地址)

  • 双击 加断点

4、指定程序运行位置起点

5、手动注入dll
StrongOD->InjectDLL->Remote Thread

2.3.2 X64dbg

x64dbg,程序逆向反汇编修改神器,免费开源x64/x32位动态调试器,适用Windows的专业程序调试器,软件支持中文界面和插件,界面及操作方法与OllyDbg调试工具类似,支持类似C表达式解析器、DLL和EXE文件调试、IDA式的跳跃箭头与侧边栏、动态识别模块指令、反汇编、自动化可调试的脚本语言等诸多实用逆向分析功能。x64dbg调试器主要分为三部分载体:DBG是调试器的调试功能部分,它处理调试技术(使用的 TitanEngine),并为GUI提供数据。GUI是调试器的图形部分,它采用的Qt编程语言,提供用户交互界面。Bridge是DBG和GUI部分的通信库,它可以用在新建功能上工作,而无需更新汇编代码的其它部分。
官网:https://x64dbg.com/

2.4 修改文件内容

2.4.1 C32asm

C32asm是一款非常好用的反汇编软件,其功能已强于winhex 16、W32Dasm。该款的反汇编软件C32asm具有反汇编模式和十六进制编辑模式,能跟踪exe文件的断点,也可直接修改软件内部代码。

优点:

  • 快速静态反编译PE格式文件(Exe、Dll等)
  • c32asm反汇编软件提供hex文件编辑功能,功能强大
  • 提供内存Dump、内存编辑、PE文件Dump、PE内存ImageSize修正等多种实用功能
  • 提供内存反汇编功能,提供汇编语句直接修改功能,免去OPCode的直接操作的繁琐
  • c32asm反汇编软件提供反编译语句彩色语法功能,方便阅读分析,能方便自定义语法色彩
  • 提供输入表、输出表、参考字符、跳转、调用、PE文件分析结果等显示
  • c32asm反汇编软件提供方便的跳转、调用目标地址的代码显示
  • 提供汇编语句逐字节分析功能,有助于分析花指令等干扰代码。

2.5 资源文件

资源编辑、查看

2.5.1 Restorator

Restorator 是一个简单易用的的软件资源及用户界面编辑软件,它对 DELPHI 和 C 程序的支持尤佳,是对软件进行本地化处理的理想工具。Restorator 软件功能强大除了一般的编辑操作外,还可以对资源进行导入导出、批量修改语言设置等操作,甚至可以利用“资源补丁”创建不受版权限制的补丁程序!

2.6 Cheat Engine

可以使用此工具搜索软件进程中的用户名等信息,以及值变化等。

查看内存时,可用Ctril+G进行搜索地址

2.6.1 查找dll文件基址

3 软件安全防护

3.1 试用版

即删减功能

3.2 暗装

使用多种算法不定时验证

3.3 VMProtect

vmp会在原有程序基础上加上很多混淆代码,导致破解者在很长时间内调试无果而放弃。

易语言

' 开始标志
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 })

要保护的代码

' 结束标志
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) 

3.4 检测MD5

检测主程序的MD5、大小、创建时间等,还有程序防止别人下断点调试(CRC检测),下断点就内存报错。

3.5 网络验证

  • 通过请求返回字段的方式比较鸡肋
  • 另一种方式通过“补码”,相对安全

3.6 保护字符串

字符串在注册模块中非常重要,当一个富有经验的Cracker破解软件时,首先做得就是窃取字符串,比如输入错误的字符串,然后可以通过提示的字符串用OllyDbg进行断点调试,或者用你WinDASM、IDA Pro等静态分析工具在被它脱壳后的程序中查找那个字符串,找到后在分析,因此,一定要加密字符串,使用时临时解密出来,并且尽量少使用消息提示框,避免出现被发现漏洞,加密字符串无需过复杂,随便一个快速的对称算法即可。

参考地址:
[1] https://www.bilibili.com/video/BV135411u7HR

https://www.couragesteak.com/article/311

有关逆向分析 工具、加壳、安全防护篇的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  5. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  6. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  7. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  8. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  9. ruby - 使用 Ruby 开发工具包将文件上传到 Amazon S3 - 2

    我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc

  10. ruby - 使写入文件线程安全 - 2

    我在一个ruby​​文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}

随机推荐