软件破解简单示例演示

通过破解一个简单的密码验证程序来让大家更加通俗易懂的理解破解的原理,以及熟悉对多个工具的使用,我这儿使用的是 吾爱破解的一个工具库,我这儿的环境 win10+vs2010,程序为release。好了, 废话不多说,先上密码验证程序的代码:

#include "stdafx.h"
#include <windows.h>
#define password "123456"
int verify_password(char* pwd)
{
	int iver;
	iver = strcmp(password, pwd);
	return iver;
}
int main()
{
	int ivail = 0;
	char szpwd[100] = { 0 };
	while (true)
	{
		printf("Please Entry Your Password: ");
		scanf("%s", szpwd);
		ivail = verify_password(szpwd);
		if (ivail)
		{
			printf("Password Error, Please Entry Again. \n");
		}
		else
		{
			printf("Password Success \n");
			break;
		}
	
	}
    return 0;
}

只要有一点C知识的人,都能看得懂这写的什么意思,不停的循环,直到输入正确的密码。这完全取决于if的判断,如果我们修改它,不就达到了破解的目的嘛。

接下来就是破解的流程了,首先将编译好的exe文件拖入到IDA,IDA会以流程图展示

然后按空格键进入反汇编界面,通过观察可以找到if判断语句的代码位置,
这里就是输入密码正确跳转的地方
通过loc_4010CD,定位到if的位置
就这样就找到了if语句的代码位置为:0x00401077,先把这个地址记下来,关闭IDA,然后打开OllyDbg,同样打开我们的文件。马上就可以看到程序入口(main)的位置。

注意前面地址0x00F21386,而我们刚才记录的地址为0x00401077,看到这里可能有人就会有很大的疑问,这地址完全不同嘛,这就要大家有虚拟地址的概念。我后面会更新一篇来讲解PE文件和虚拟内存的映射关系。
先简单来说就是进程加载的基地址不一样,之前的基地址是0x00400000,if语句相对于基地址的偏移为 0x1077 , 现在的基地址为0x00f20000,所以在OllyDbg调试程序里 if语句的地址为 0x00f20000 + 0x1077 = 0x00F21077.,按Ctrl+G , 输入要跳转的地址,


可以看见当前的语句为JE,我们将它改为JNE(非0跳转),整个程序的逻辑就会反过来, 输入正确的密码则会提示密码错误,输入错误的密码这验证通过。
双击这段代码 ,将JE 改成 JNE,


可以看见将JE(74)修改为JNZ(75).OllyDbg只是在内存中修改了代码,并未保存文件。接下来我们就去修改文件中的代码, 将该位置的74修改为75就可以了。
关闭OllyDbg,打开LordPE,可以看到.text字节的信息, 所有的代码放在.text字节中。

先解释下几个概念:
VOffset 0x0001000:表示.text在虚拟内存中的偏移,
ROffset 0x0000400:表示.text在文件中的偏移。
那又如何计算出某个代码在文件中的偏移呢,只需要先记住一个计算公式:
在文件中的偏移 = 在内存中的偏移(0x1077) - ( VOffset - ROffset)
计算得出 JE 存放在文件偏移为0x477的地方。我们用WinHex打开文件,按快捷键 alt+G,定位到0x477的地方。


直接输入75,修改后保存文件,赶紧运行程序看看效果吧。

最后总结下,先用IDA找到if判断语句的地址,然后用OllyDbg修改该地址的语句,看看效果,这个时候只是在内存中修改了, 关闭了OllyDbg,运行程序还是正常的。然后再用LordPE,来查看代码段的信息,计算出if语句在文件中的位置,最后用winhex修改文件中对应位置的代码。

其实在第二步,在OllyDbg中修改了语句,可以直接在OllyDBg中运行起来看看效果。

讲的不好,大家多多包涵,最主要的是讲这个流程说清楚,让大家一说破解,就觉得很高深一样。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值