1 逆向分析技术有什么用
软件安全是信息安全领域的重要内容,设计到软件相关的加密、解密、逆向分析、漏洞分析、安全编程以及病毒分析等。
哈喽,大家好,我是《有勇气的牛排》(全网同名)🐮🐮🐮
有问题的小伙伴欢迎在文末/评论,点赞、收藏/是对我最大的支持!!!。
1.1 加壳
- 加壳(可执行程序资源压缩):压缩后的程序可以直接运行。
- 加壳的另一种方式是在二进制程序中植入一段代码,在运行的时候优先取得程序的控制权,之后在把控制权交还给原始代码,这样做得目的是隐藏程序真正的OEP(入口点,防止被破解,查壳就是为了找它)。
- 加壳可以绕过一些杀毒软件的扫描(免杀)
加壳分类:
- 压缩壳:特点是减小软件体积大小,加密保护不是重点。
- 加密壳:此种类型比较多,不同壳侧重点不同,如单纯保护程序、提供注册机制、使用次数、使用限制等。
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
<h2><a id="1__0"></a>1 逆向分析技术有什么用</h2>
<p>软件安全是信息安全领域的重要内容,设计到软件相关的加密、解密、逆向分析、漏洞分析、安全编程以及病毒分析等。</p>
<p><font face="楷体,华文行楷,隶书,黑体" color="red" size="4"><strong>哈喽,大家好,我是《有勇气的牛排》(全网同名)🐮🐮🐮</strong></font></p>
<p><font face="楷体,华文行楷,隶书,黑体" color="blue" size="4"><strong>有问题的小伙伴欢迎在文末/评论,点赞、收藏/是对我最大的支持!!!。</strong></font></p>
<h3><a id="11__7"></a>1.1 加壳</h3>
<ol>
<li>加壳(可执行程序资源压缩):压缩后的程序可以直接运行。</li>
<li>加壳的另一种方式是在二进制程序中植入一段代码,在运行的时候优先取得程序的控制权,之后在把控制权交还给原始代码,这样做得目的是隐藏程序真正的OEP(入口点,防止被破解,查壳就是为了找它)。</li>
<li>加壳可以绕过一些杀毒软件的扫描(免杀)</li>
</ol>
<p>加壳分类:</p>
<ul>
<li>压缩壳:特点是减小软件体积大小,加密保护不是重点。</li>
<li>加密壳:此种类型比较多,不同壳侧重点不同,如单纯保护程序、提供注册机制、使用次数、使用限制等。</li>
</ul>
<h2><a id="2__17"></a>2 常用工具</h2>
<h3><a id="21__18"></a>2.1 查壳</h3>
<p>查询可执行文件是否加壳或加密</p>
<h4><a id="211_PEID_20"></a>2.1.1 PEID</h4>
<p>可以将执行软件拖入如下界面(非快捷方式)。<br />
也可以使用该工具脱壳</p>
<p><img src="https://static.couragesteak.com/article/745730b4abd1794639cf3265cc0f5871.png" alt="image.png" /></p>
<h4><a id="212_EXEINFO_26"></a>2.1.2 EXEINFO</h4>
<p>ExeInfo PE 是一款免费可执行程序信息检查工具,它具有可以帮助开发人员对程序进行编译的功能。可以查看EXE/dll文件的编译器信息、是否加壳、入口点地址、输出表/输入表等等Pe信息,帮助开发人员对程序进行分析和逆向。</p>
<p><img src="https://static.couragesteak.com/article/86c70be2b633e523a7a8ce53cb035715.png" alt="image.png" /></p>
<h4><a id="213_Detect_It_Easy_32"></a>2.1.3 Detect It Easy</h4>
<p>Detect It Easy简称Die,是一款专业查壳工具,比PEID强大得多,能查一次查到底。并支持超大文件读取,其他查壳工具无法打开的程序,这个都能读取。虽然没有PEID出名,但是相当的强大,完全可以替代PEID。</p>
<p><img src="https://static.couragesteak.com/article/6f92d8a2e1fe396ccd3295b8c65dafee.png" alt="image.png" /></p>
<h3><a id="22__39"></a>2.2 查询可执行文件信息</h3>
<p>exe、com、bat、dll<br />
查看动态链接库、进程、汇编代码等</p>
<h4><a id="221_loadpe_43"></a>2.2.1 loadpe</h4>
<p>LordPE,是一款功能强大的PE文件分析、修改、脱壳软件。LordPE是查看PE格式文件信息的首选工具,并且可以修改相关信息。</p>
<p><img src="https://static.couragesteak.com/article/d4fdd2dd3043117967c98e43690fe96c.png" alt="image.png" /></p>
<h4><a id="222_PE_Tools_49"></a>2.2.2 PE Tools</h4>
<p>PE 工具可让您积极研究PE 文件和流程。 Process Viewer和 PE 文件Editor, Dumper, Rebuilder, Comparator,Analyzer包括在内。 PE Tools是一个老派的逆向工程工具,从2002. PE Tools 最初是受到 LordPE (yoda) 的启发。</p>
<p><a href="https://github.com/petoolse/petools/releases/tag/v1.9.762" target="_blank">https://github.com/petoolse/petools/releases/tag/v1.9.762</a></p>
<p><img src="https://static.couragesteak.com/article/634fd814715c08040d0fa73b79205ad7.png" alt="image.png" /></p>
<h4><a id="223_StudyPE_57"></a>2.2.3 StudyPE</h4>
<p><img src="https://static.couragesteak.com/article/80bf2380c219d4cecb1012746372341c.png" alt="image.png" /></p>
<h3><a id="23__61"></a>2.3 调试工具</h3>
<h4><a id="231_Ollydbg_62"></a>2.3.1 Ollydbg</h4>
<p>1 、<strong>导航条介绍</strong></p>
<p><img src="https://static.couragesteak.com/article/1cd6ebd105295b2a32c3eee6d60b861f.png" alt="image.png" /></p>
<p>步进:(F7)<br />
步过:(F8)</p>
<p><img src="https://static.couragesteak.com/article/42859a09294e0d7460393dbb835ea3f4.png" alt="image.png" /></p>
<p><code>l</code>:log data,扫描导入库<br />
<code>e</code>:Executable modules,程序运行加载的动态库<br />
<code>t</code>:Theeads,当前线程</p>
<ul>
<li>当附加的进程点击运行后若无法运行,可能是被挂起,此时点击t,对挂起的地方,resume all threads</li>
</ul>
<p><code>w</code>:Windows,窗口<br />
<code>h</code>:Handles,句柄<br />
<code>c</code>:主线程模块,当前可运行的汇编代码<br />
<code>p</code>:Patches,显示已修改的代码<br />
<code>k</code>:调用堆栈(哪里进去、哪里出来)<br />
<code>b</code>:Breakpoints,显示断点。<br />
<code>r</code>:References</p>
<p>2 、<strong>窗口介绍</strong></p>
<p><img src="https://static.couragesteak.com/article/0d805cc5c6b3942eabe265e829bde308.png" alt="image.png" /></p>
<p>数据窗口快捷方式:<br />
<code>dd 地址</code>:仅找地址<br />
<code>dc 地址</code>:找地址+内容</p>
<p>3 、<strong>快捷键</strong></p>
<p><code>Ctrl+B</code>:查找二进制字符串<br />
易语言按钮定位:FF 55 FC 5F 5E</p>
<p><code>Ctrl+G</code>:跟随地址表达式(找地址)</p>
<ul>
<li>双击 加断点</li>
</ul>
<p><strong>4、指定程序运行位置起点</strong></p>
<p><img src="https://static.couragesteak.com/article/d2d16f18986e17b4b99eecd4d73c0584.png" alt="image.png" /></p>
<p><strong>5、手动注入dll</strong><br />
<code>StrongOD->InjectDLL->Remote Thread</code></p>
<p><img src="https://static.couragesteak.com/article/67dacd28aafa09cc14d3d1903d94eff7.png" alt="image.png" /></p>
<h4><a id="232_X64dbg_111"></a>2.3.2 X64dbg</h4>
<p>x64dbg,程序逆向反汇编修改神器,免费开源x64/x32位动态调试器,适用Windows的专业程序调试器,软件支持中文界面和插件,界面及操作方法与OllyDbg调试工具类似,支持类似C表达式解析器、DLL和EXE文件调试、IDA式的跳跃箭头与侧边栏、动态识别模块指令、反汇编、自动化可调试的脚本语言等诸多实用逆向分析功能。x64dbg调试器主要分为三部分载体:DBG是调试器的调试功能部分,它处理调试技术(使用的 TitanEngine),并为GUI提供数据。GUI是调试器的图形部分,它采用的Qt编程语言,提供用户交互界面。Bridge是DBG和GUI部分的通信库,它可以用在新建功能上工作,而无需更新汇编代码的其它部分。<br />
官网:<a href="https://x64dbg.com/" target="_blank">https://x64dbg.com/</a></p>
<p><img src="https://static.couragesteak.com/article/9ec8736b86567ecb66ede64f6e69afe9.png" alt="image.png" /></p>
<h3><a id="24__118"></a>2.4 修改文件内容</h3>
<h4><a id="241_C32asm_119"></a>2.4.1 C32asm</h4>
<p>C32asm是一款非常好用的反汇编软件,其功能已强于winhex 16、W32Dasm。该款的反汇编软件C32asm具有反汇编模式和十六进制编辑模式,能跟踪exe文件的断点,也可直接修改软件内部代码。</p>
<p>优点:</p>
<ul>
<li>快速静态反编译PE格式文件(Exe、Dll等)</li>
<li>c32asm反汇编软件提供hex文件编辑功能,功能强大</li>
<li>提供内存Dump、内存编辑、PE文件Dump、PE内存ImageSize修正等多种实用功能</li>
<li>提供内存反汇编功能,提供汇编语句直接修改功能,免去OPCode的直接操作的繁琐</li>
<li>c32asm反汇编软件提供反编译语句彩色语法功能,方便阅读分析,能方便自定义语法色彩</li>
<li>提供输入表、输出表、参考字符、跳转、调用、PE文件分析结果等显示</li>
<li>c32asm反汇编软件提供方便的跳转、调用目标地址的代码显示</li>
<li>提供汇编语句逐字节分析功能,有助于分析花指令等干扰代码。</li>
</ul>
<p><img src="https://static.couragesteak.com/article/5a3dcaab6871a129a79f8b8faec37443.png" alt="image.png" /></p>
<h3><a id="25__136"></a>2.5 资源文件</h3>
<p>资源编辑、查看</p>
<h4><a id="251_Restorator_138"></a>2.5.1 Restorator</h4>
<p>Restorator 是一个简单易用的的软件资源及用户界面编辑软件,它对 DELPHI 和 C 程序的支持尤佳,是对软件进行本地化处理的理想工具。Restorator 软件功能强大除了一般的编辑操作外,还可以对资源进行导入导出、批量修改语言设置等操作,甚至可以利用“资源补丁”创建不受版权限制的补丁程序!</p>
<h3><a id="26_Cheat_Engine_141"></a>2.6 Cheat Engine</h3>
<p>可以使用此工具搜索软件进程中的用户名等信息,以及值变化等。</p>
<p><img src="https://static.couragesteak.com/article/b875f0c60bdf172768b970efaf7ccbe9.png" alt="image.png" /></p>
<p>查看内存时,可用<code>Ctril+G</code>进行搜索地址</p>
<h4><a id="261_dll_147"></a>2.6.1 查找dll文件基址</h4>
<p><img src="https://static.couragesteak.com/article/dcbb9d9826e017f6bd2095ceb308dca0.png" alt="image.png" /></p>
<p><img src="https://static.couragesteak.com/article/ff76867f914f88f0b399e377cd7b0f32.png" alt="image.png" /></p>
<h2><a id="3__155"></a>3 软件安全防护</h2>
<h3><a id="31__156"></a>3.1 试用版</h3>
<p>即删减功能</p>
<h3><a id="32__158"></a>3.2 暗装</h3>
<p>使用多种算法不定时验证</p>
<h3><a id="33_VMProtect_160"></a>3.3 VMProtect</h3>
<p>vmp会在原有程序基础上加上很多混淆代码,导致破解者在很长时间内调试无果而放弃。</p>
<p>易语言</p>
<pre><div class="hljs"><code class="lang-shell">' 开始标志
置入代码 ({ 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 })
</code></div></pre>
<h3><a id="34_MD5_174"></a>3.4 检测MD5</h3>
<p>检测主程序的MD5、大小、创建时间等,还有程序防止别人下断点调试(CRC检测),下断点就内存报错。</p>
<h3><a id="35__177"></a>3.5 网络验证</h3>
<ul>
<li>通过请求返回字段的方式比较鸡肋</li>
<li>另一种方式通过“补码”,相对安全</li>
</ul>
<h3><a id="36__181"></a>3.6 保护字符串</h3>
<p>字符串在注册模块中非常重要,当一个富有经验的Cracker破解软件时,首先做得就是窃取字符串,比如输入错误的字符串,然后可以通过提示的字符串用OllyDbg进行断点调试,或者用你WinDASM、IDA Pro等静态分析工具在被它脱壳后的程序中查找那个字符串,找到后在分析,因此,一定要加密字符串,使用时临时解密出来,并且尽量少使用消息提示框,避免出现被发现漏洞,加密字符串无需过复杂,随便一个快速的对称算法即可。</p>
<p>参考地址:<br />
[1] https://www.bilibili.com/video/BV135411u7HR</p>
留言