软件破解技术详解,手把手教你如何破解软件!
软件破解技术详解,手把手教你如何破解软件!
在介绍PE结构后,本文将通过OD(OllyDBG)对示例程序进行逆向分析,绕过登录判定,实现破解登录的效果。本文以简单的程序为示例,其目的是方便我们直观了解破解方法及破解原理,通过由浅到深,逐步递增难度的方式,为下一步深入逆向分析打下坚实的基础。
1.破解示例程序介绍
本程序通过C++编写,当点击“确定”按钮时,会获取用户输入的用户名及密码进行判断,当未输入任何内容点击提交时,系统会显示“用户名与密码不能为空”。当输入用户名和密码与判断数据“test”不符时,系统会提示“用户名或密码错误”,当用户名及密码都为“test”时,则提示“登录成功”。详细代码如下图:
测试示例源代码
当我们运行crackMeText.exe程序时,展现效果如下:
打开效果
当我们输入内容错误(用户名及密码都不是test)时,系统提示“用户名或密码错误”。
登录错误
当我们输入内容正确(用户名及密码都是test)时,系统提示“登录成功”。
登录成功
以上是测试示例的简单介绍。
2.OD程序逆向分析介绍
我们可以打开本地的OD程序,将示例系统拖入至OD即可,效果如下图:
OD主线程模块
左上为反汇编窗口,右上为寄存器窗口,左下为栈窗口,右下为数据窗口。
反汇编窗口:用户显示反汇编代码,调试分析程序主要是就是在这个窗口进行。
寄存器窗口:用户显示各个寄存器内容,包括:通用寄存器、段寄存器、标志寄存器等。
栈窗口:用户显示栈内容,即ESP寄存器指向的地址部分。
数据窗口:多种方式显示内存中的内容,可以使用Hex、文本、短型、长型、反汇编等。
由于内容较多,我们可通过搜索ASCII查看字符串进行快速定位,该操作位于插件->中文搜索引擎->搜索ASCII,具体如下图:
OD搜索ASCLL
搜索完毕会,会显示中文搜索引擎内容,我们双击选择“登录成功”,如下图:
双击 “登录成功”
双击后,便快速定位至“登录成功”反汇编代码段中,如下图:
“登录成功”反汇编
届时,我们可以查看该区域的局部汇编代码。
3.OD程序动态调试分析介绍
通过静态查看反汇编代码,使我们对其内容有一定了解后,我们可以通过设置断点进行逻辑梳理。
点击指定行,“右键”->断点->切换,便可对指定行设置断点。如下图:
断点设置
设置完毕后,我们点击“运行程序”,随后示例程序便会启动,我们可输入test/test123,信息进行断点调试,如下图:
用户名及密码信息录入
点击“确定”按钮后,OD会锁定指定断点设置行,我们可通过“F8”进行单步调试,如下图:
断点调试
上图为JNZ判断(后期我会写一篇关于逆向的基础知识),当等于0时跳转至012318D6位置。
判断不满足后,会跳入到 012318D6位置,如下图:
入栈
继续按“F8”后,会进入PUSH “用户名或密码错误”行。
告警内容入栈
最后执行到call代码后,我们打开测试程序时,发现弹出了“用户名或密码错误”对话框。
登录错误对话框
通过设置断点后逐步调试,我们对程序执行有个更深入的了解,随后我们便可以对汇编内容进行修改。
4.汇编内容修改
我的绕过思路是,将if语句中最后的密码判断直接绕过(strcmp(password,"test")==0),也就是只需要用户名输入正确即可。找到该语句的对应位置后,双击指定行(00851897处),如下图:
00851897原始内容
我们将该处内容修改为 je 000118CD,即若为1时,跳转至000118CD处(为登录正确内容位置)。当我们再次运行程序输入test(用户名)/123(密码)时,系统提示“登录成”。
00851897内容修改
通过以上步骤,我们就可以通过修改汇编内容,绕过示例程序登录判断。该方式只是通过内存形式进行修改,并未实际修改原始示例程序,我们可通过存盘的形式进行修改。选中修改的反汇编代码行,“右键”->复制到可执行文件->选择,如下图:
复制到可执行文件
随后我们会跳转至文件对话框中,如下图:
文件对话框
在该页面我们,“右键”->保存文件,便可将已修改的文件另存为exe,如下图:
程序保存
修改生成后的exe再运行时,便可实现上面我们修改后的效果,只需要输入正确用户名test即可(密码随便输入)。
5.总结
通过以上逐步讲解,相信大家已经清楚了解到如何通过OD进行逆向分析及绕过破解,以简单的示例是让大家更容易有所认识,针对复杂系统,您还需具有相对丰富的编程、汇编、工具等多方面经验。
推荐
-
-
QQ空间
-
新浪微博
-
人人网
-
豆瓣