注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

《电脑之家》

请点击:“日志”浏览电脑知识

 
 
 

日志

 
 

软件破解  

2010-08-15 17:50:47|  分类: 软件破解 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

亚洲制造【模特小姐】 - 自然醒 - FLASH 教 学 空 间

精 华 贴 图 篇 章
 
 


 

 

1:精华贴图【未成年不宜点击】

2:丰满韩国妹

3: 《再别康桥》

4:守望【原创音画】

5:亚洲制造 【模特小姐】

 

 

 
        曾经看过一篇文章,说学习破解有三个阶段:初级是静态反编译软件找出关键跳转修改来达到目的,一般叫做暴力破解,简称爆破;中级是动态分析软件,追出注册码;高级则是通过分析代码算法流程,写出软件注册机。下面我和大家一起通过分析某软件来进行这三个阶段的学习。

初级阶段
        所谓爆破,就是指通过修改可执行文件来达到相应的目的。比如说某软件,它比较用户输入的注册码,如果跟正确的注册码相等的话,那么它就会跳到注册成功的地方去,否则就跳到出错的地方。
首先用PEiD打开要分析的软件查看相关信息,显示软件是否加壳。常見的压缩壳包括FSG、ASPack、UPX、北斗等。
下载请点击:我要下载
        用Borland Delphi 6.0-7.0编写。直接运行软件,点击“注册”,随便输入一个注册码,弹出错误对话框“注册码错误,请与作者联系”,这个错误提示在爆破软件时特别有用,因为显示这句语句的附近肯定有针对注册码正确与否的判断语句。
往往
      接下来拿出静态反编译的利器W32Dasm,载入软件后,我们点击工具栏上的“参考->串式数据参考”,在弹出的窗口中搜索错误提示语句,很可惜,上下翻了几遍都没有找到.一般Delphi和VB编写的程序由于编码问题,我们很难找到提示错误字符串,那怎么办呢?既然知道是Delphi编写,那么我们就对症下药,用专门反编译Delphi程序的工具DeDe吧。
        用DeDe打开可执行文件,点击“开始处理”,处理完毕后会出现两次对话框,我们选“YES”,处理完点“DONE”,经过一段时间的等待,终于分析完毕。一般我们先选择“窗体”看看,如图1所示。因为有许多窗体,这里需要我们慢慢查看,在TForm31里发现了跟注册相关的字样;接下来我们点过程,跟TForm31相关的过程是Unit31,如图2所示。

软件破解 - 自然醒 - FLASH 教 学 空 间


                                图1

软件破解 - 自然醒 - FLASH 教 学 空 间


                                图2
在事件窗口那里显示了一些名称和地址,其中Button1Click就是输入注册码后点击的“注册”按钮事件,这可以在窗体TForm31内容中查看到。对应Button1Click函数在程序中的地址为004EC030,正是我们需要的,先把这个地址记下来。注意,我的系统是Windows XP SP2,不同系统可能这个地址会有所差别)。接着我们双击Button1Click反编译看看,如图3所示。在弹出的反编译窗口中看我们找到了什么?一个敏感字眼“CODE”,往上看是从004EC2DE处跳到这里的,而004EC2DE处上面的经典语句“mov eax,xxx,mov edx,xxx,call xxx”告诉我们这里为关键跳转的可能性起码有90%。既然我们是爆破,那么把相等则跳的JE改成无条件跳JMP,让它不管怎样都跳到004EC307处。点击004EC2DE行,看DeDe下面显示的Phys Offset为000EB6DE,这是物理偏移地址,记下来等下要用。关闭DeDe,用WinHex打开软件,ALT+G打开地址转移窗口,输入000EB6DE确定跳转,这时内存编辑页面光标停留处的数据为“74 27”,这是“je xxx”的十六进制编码,我们要把74(JE)改成EB(JMP),然后文件另存为1.EXE,这里的名称随意。执行1.EXE,注册那里随便输入数字,确定后提示注册成功,进入软件,未注册时的限制已经解除,爆破成功!
  

软件破解 - 自然醒 - FLASH 教 学 空 间


                                图3
中级阶段
        接下来我们进行动态跟踪,这就要用到动态分析利器OllyDbg了。载入软件后CTRL+G,输入我们前面找到的Button1Click的偏移地址,确定后来到004EC030处,F2下断点,F9运行程序,还是输入假注册码,点“注册”按钮,哐的一声中断在004EC030处,我们一路按F8来到004EC2D0处,代码如下。

004EC2D0  |.  8B95 B8FEFFFF  mov edx,dword ptr ss:[ebp-148]
;假注册码
004EC2D6  |.  8B45 FC  mov eax,dword ptr ss:[ebp-4]
;真注册码
004EC2D9 >|. E8 0A88F1FF  call BoYing.00404AE8
;真假注册码比较
004EC2DE 74 27  je short BoYing.004EC307
;关键跳

呵呵,这里眼熟吧,跟上面图3一样嘛,但是动态分析的好处就是可以知道这时程序在做什么,比爆破瞎猜好多了,因为这个软件是明码比较,所以动态跟踪的难度比较小,我们把004EC2D6处显示的真注册码记下来,输入,验证成功!怎么样,容易吧。休息一下,我们进入最难的阶段。

高级阶段
        高手都说破解需要耐心、恒心,指的就是算法分析了,有些变态程序会让你发疯的。不过我们初学者嘛,最好先找些CrackMe练习练习,再多看一些文章(黑客防线的就很不错),自己跟一遍,久而久之你就成高手了。
        开始分析前,我们最好得到程序的一些信息,这样分析起来就容易些。如上面用DeDe分析完程序后,我们可以导出MAP文件给IDA、SoftIce以及OD使用,如图4所示。输入map文件名,点击“创建导出文件”就OK了。假设我们导出的文件名称为1.map,下面开工。
  

软件破解 - 自然醒 - FLASH 教 学 空 间


                                图4
        OD载入程序,然后选工具栏上的“插件”,我们就用LoadMap插件导入1.map文件,还是在004EC030处下断,F9运行,输入假码,中断下来。注意这时注释栏原本空白的地方出现了一些函数名称,这就是map文件的作用了,能让你对流程有个清晰地了解。一路F8走到004EC11B处,代码如下。

004EC11B  |.  33C0        xor eax,eax
;EAX清零
004EC11D  |.  8A45 F0        mov al,byte ptr ss:[ebp-10]
;读取辅助码第1位的16进制值到al
004EC120  |.  40        inc eax ;加1
004EC121  |.  BA 02000000        mov edx,2
004EC126 >|.  E8 69D2F1FF        call BoYing.00409394
;把十六进制数值转换成字符
004EC12B  |.  8D8D DCFEFFFF         lea ecx,dword ptr ss:[ebp-124]
004EC131  |.  33C0        xor eax,eax
004EC133  |.  8A45 F1        mov al,byte ptr ss:[ebp-F]
;第2位
004EC136  |.  83C0 02        add eax,2         ;加2
004EC139  |.  BA 02000000        mov edx,2
004EC13E >|.  E8 51D2F1FF         call BoYing.00409394
;把十六进制数值转换成字符
004EC143  |.  8B95 DCFEFFFF        mov edx,dword ptr ss:[ebp-124]
004EC149  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC14C >|.  E8 5388F1FF        call BoYing.004049A4
;连接第一和第二串字符,下面类似
004EC151  |.  8D8D D8FEFFFF        lea ecx,dword ptr ss:[ebp-128]
004EC157  |.  33C0        xor eax,eax
004EC159  |.  8A45 F2        mov al,byte ptr ss:[ebp-E]
;第3位
004EC15C  |.  83C0 03        add eax,3 ;加3
004EC15F  |.  03C6        add eax,esi
;加ESI里的值,ESI=7D6H
004EC161  |.  2D D6070000        sub eax,7D6
;减7D6H
004EC166  |.  BA 02000000        mov edx,2
004EC16B >|.  E8 24D2F1FF        call BoYing.00409394
004EC170  |.  8B95 D8FEFFFF        mov edx,dword ptr ss:[ebp-128]
004EC176  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC179 >|.  E8 2688F1FF        call BoYing.004049A4
004EC17E  |.  8D8D D4FEFFFF        lea ecx,dword ptr ss:[ebp-12C]
004EC184  |.  33C0        xor eax,eax
004EC186  |.  8A45 F3        mov al,byte ptr ss:[ebp-D]
;第4位
004EC189  |.  83C0 04        add eax,4         ;加4
004EC18C  |.  2BC6        sub eax,esi ;减7D6H
004EC18E  |.  2D D6070000        sub eax,7D6 ;减7D6H
004EC193  |.  BA 02000000        mov edx,2
004EC198 >|.  E8 F7D1F1FF        call BoYing.00409394
004EC19D  |.  8B95 D4FEFFFF        mov edx,dword ptr ss:[ebp-12C]
004EC1A3  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC1A6 >|.  E8 F987F1FF        call BoYing.004049A4
004EC1AB  |.  8D8D D0FEFFFF        lea ecx,dword ptr ss:[ebp-130]
004EC1B1  |.  33C0        xor eax,eax
004EC1B3  |.  8A45 F4        mov al,byte ptr ss:[ebp-C] ;第5位
004EC1B6  |.  83C0 05        add eax,5         ;加5
004EC1B9  |.  03C6        add eax,esi
004EC1BB  |.  2D D6070000        sub eax,7D6
004EC1C0  |.  BA 02000000        mov edx,2
004EC1C5 >|.  E8 CAD1F1FF        call BoYing.00409394
004EC1CA  |.  8B95 D0FEFFFF        mov edx,dword ptr ss:[ebp-130]
004EC1D0  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC1D3 >|.  E8 CC87F1FF        call BoYing.004049A4
004EC1D8  |.  8D8D CCFEFFFF        lea ecx,dword ptr ss:[ebp-134]
004EC1DE  |.  33C0        xor eax,eax
004EC1E0  |.  8A45 F5        mov al,byte ptr ss:[ebp-B] ;第6位
004EC1E3  |.  83C0 06        add eax,6 ;加6
004EC1E6  |.  BA 02000000        mov edx,2
004EC1EB >|.  E8 A4D1F1FF        call BoYing.00409394
004EC1F0  |.  8B95 CCFEFFFF                mov edx,dword ptr ss:[ebp-134]
004EC1F6  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC1F9 >|.  E8 A687F1FF        call BoYing.004049A4
004EC1FE  |.  8D8D C8FEFFFF        lea ecx,dword ptr ss:[ebp-138]
004EC204  |.  33C0        xor eax,eax
004EC206  |.  8A45 F6        mov al,byte ptr ss:[ebp-A]
;第7位
004EC209  |.  83C0 07        add eax,7         ;加7
004EC20C  |.  BA 02000000        mov edx,2
004EC211 >|.  E8 7ED1F1FF        call BoYing.00409394
004EC216  |.  8B95 C8FEFFFF        mov edx,dword ptr ss:[ebp-138]
004EC21C  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC21F >|.  E8 8087F1FF        call BoYing.004049A4
004EC224  |.  8D8D C4FEFFFF        lea ecx,dword ptr ss:[ebp-13C]
004EC22A  |.  33C0        xor eax,eax
004EC22C  |.  8A45 F7        mov al,byte ptr ss:[ebp-9] ;第8位
004EC22F  |.  83C0 08        add eax,8         ;加8
004EC232  |.  BA 02000000        mov edx,2
004EC237 >|.  E8 58D1F1FF        call BoYing.00409394
004EC23C  |.  8B95 C4FEFFFF        mov edx,dword ptr ss:[ebp-13C]
004EC242  |.  8D45 F8        lea eax,dword ptr ss:[ebp-8]
004EC245 >|.  E8 5A87F1FF        call BoYing.004049A4
;最终连接的字符串

至此,我们已经完成了整个算法分析流程,需要注意的是因为辅助码长度跟硬件有关,所以大家看到的上面的过程可能不太一样,不过我们知道了原理,就可以根据算法写出注册机了,万变不离其宗嘛。鉴于这个计算注册码过程比较简单,我们就用C语言来编写注册机,源代码如下。

//keygen.c
#include <stdio.h>
main()
{
char fzm[20];
int count=0,m=0,n=0,b=0;
unsigned long int a=0;
printf("博客软件破解 - 自然醒 - FLASH 教 学 空 间http://aaa627903563.blog.163.com\n");
printf("CODE BY 落叶树 2007-06-27\n\n");
printf("请输入辅助注册码:");
gets(fzm);
count=strlen(fzm);
printf("\n注册码为:");
while(count)
{
n=m+1;
if(m==3)
{
a=fzm[m]+n-0x7D6-0x7D6;
printf("%X",a);
}
else
{
b=fzm[m]+n;
printf("%X",b);
}
m++;
count--;
}
printf("\n\n");
}

可能有些新手朋友会说写注册机比较困难,不要紧的,明码比较类型的软件我们还可以用KeyMake软件来生成注册机。运行KeyMake,选择“其它->另类注册机”,在出现的窗口里“浏览”选择我们要破解的程序,然后点“添加”,出现如图5所示的窗口。
  

软件破解 - 自然醒 - FLASH 教 学 空 间


图5
这里要详细说一下,中断地址我们填入的是4EC2D9,因为程序运行到这里时才能从EAX对应的内存地址中获取注册码,第一字节填写中断地址处第一个用十六进制表示的指令字节,这里我们填入E8,指令长度为5个字节,两个十六进制数字为1字节。由于EAX的内容是内存地址,所以我们选内存方式,寄存器选EAX,然后添加就可以了,其它功能可以自己参考帮助文档。添加完毕后可以设置一些“用户信息”和注册机说明,最后点击“生成”,把注册机保存到要破解的程序目录下就可以了。需要指出的是,由于KeyMake本身的问题,在生成注册码时后面会多一些数据,大家留意一下。此问题在KeyMake1.73版本中通过在注册码后增加自定义符号分割字符串解决,不过由于卡巴斯基会把1.73版生成的注册机报成病毒,所以上面举例用的是1.65版,大家可以根据需要自己下载新版本。
        到这里,初中高三个阶段我们都学习完了,希望本文能给广大爱好破解想学习破解的朋友们一些帮助,文章难免有错漏,欢迎读者批评指正。秉着杂志“在攻与防的对立统一中寻求突破”的核心思想,最后补充一下个人对软件注册验证的一些看法。首先当然是不要进行明码比较;其次使用一些破解难度较大的加密壳加密软件;最后是尽量在代码里使用非对称加密算法,如RSA、ECC等,作者用私钥生成注册码,在软件中检查注册码时用公钥,这样即使破解者能跟踪软件找到公钥,也会因为不知道私钥而不能写出注册机来破解软件。

-----返回----亚洲制造【模特小姐】 -----

 

  评论这张
 
阅读(490)| 评论(5)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017