`

软件破解小记【转】

 
阅读更多

最近突然对软件破解起了兴趣,主要是想在软件加密上能够有所提升。刚好舅舅最近追紧我要一个软件的破解版本,我苦苦的在网上找到唯一的一个破解,还是有三十次的限制。(现在人,居然也可以以破解软件为生了:)看来我研究这个还是有前途的:))

在万般无赖下,决定自己来进行破解。这个决定其实对于最近的我来说,真可是一个大的挑战--我已经很长时间没有激情做新东西了。因此虽然满怀喜欢,却又有点怀疑能否完成。

破解的对象是一个财务软件,名字叫XXXXX(我故意隐藏了产品的名称)。其软件是一个C/S结构的网络版软件。软件需要加密锁的支持。如果加密锁通过了,则显示正版,否则是试用版。从演示看,软件只有在启动的时候检测加密锁(这告诉我们,加密点应该多点)。

有一个额外的条件在于,网上找来的破解是程序中一个动态链接库(XXXXX.dll)的破解。这给我一个提示:我只要破解这个XXXXX.dll就可以了。网上的破解版由于加过壳,而我现在对于加壳的软件如何破解更是不了解,因此目标转向了原有的XXXXX.dll。使用W32DAsm打开,发现各个输出函数的定义及实现都可以发现,应此证明此Dll没有被加密。

调试二进制程序,一般分静态分析和动态调试。静态分析一般都使用W32Dasm来进行。通过W32Dasm可以很方便地定位到其输出函数的起始位置。通过粗读这些代码,发现几个情况:

FindNetRockey

FindRockey

CheckNetRockey

CheckRockey

HaspLogin

HaspLogout

根据我的知识(我们公司也是用这些加密锁),这些程序都是读取加密锁的函数。可是静态分析之后,发现自己的能力有限,不能完全理解代码。不过这个过程中,复习了一下Win32汇编代码的知识,包括堆栈平衡和通过EAX返回值的方式。

经过同事推荐,我采用了OllyDbg来进行动态调试(这是一个很正确的决定)。

一开始,我想直接调试XXXXX.dll,我用OllyDbg直接打开XXXXX.dll文件,发现OllyDbg会自动使用LoadDll.exe来装载此Dll。使用这个程序可以在没有宿主程序的情况下,进行动态调试,猜测函数的参数及返回值。不过我后来并没有直接使用这个方法。

由于对OllyDbg动态调试不是很了解,我想,除了破解XXXXX.dll,我如果破解了XXXXXClient.exe程序应该也可以的。不过XXXXXClient.exe是使用VB编写的,汇编码中有大量的VB的影子。

我第一要做的就是,定位到读取加密锁的函数入口。一开始,我采用单步跟踪,发现太慢,而且也失去了耐心。后来想起,既然是Dll,那么必然会调用LoadLibrary及GetProcAdress。那么只要知道这个函数地址,说不定可以能快一点找到。

如何得到GetProcAdress的地址?我采用了Dependency,用Dependency打开Ac990Client.dll,选择Walk按钮,可以在输出Log中发现,在什么时候调用了XXXXX.dll

我得到了函数地址A,在OllyDbg中,定位到A,确实定位到了LoadLibrary函数的调用处,另外,我发现在OllyDbg中,可以跟踪进入其调用的Dll中。那么如果我直接进入XXXXX.dll中设置断点,是否可以进去呢?事实证明我的猜想是对的,这为我更快地得到结果奠定了基础。应该说前面走了很多弯路。

通过一番地跟踪,几乎是在最后失望的情况下,我发现函数HaspLogin被调用的时候,函数本身只有两个出口。其中一个返回前,做了Xor EAX, EAX(设置EAX为0),而另一个设置EAX为1。通过调试发现,在没有加密锁的情况下,走了第一条路线,那么如果是第二呢?我动态地设置了EAX为1,结果发现XXXXXClient.exe显示正版的字样!Great!

那么下面就是如何修改程序了,很遗憾,我没有发现OllyDbg怎么修改编辑。想起同时推荐的HiView这个程序,在刚才发现的位置前,修改了几个跳转的地址(这段代码前必然有jne A0000753等字样,只要跳转到xor EAX,EAX处就可以了),另外我还将一处本来特耗时间的call改成了几个nop的组合。保存,测试!好了,总于成功了。

这是我第一次破解程序。本身没什么特别的大,只是让我熟悉了很多相关软件的使用,并较为完整地理解了破解的过程。以后还要继续破解!

分享到:
评论

相关推荐

    H3C MIB转py小记.txt

    H3C MIB转py小记.txt

    android开发小记

    在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...

    Linux boost库安装、编译问题小记

    环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。  boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。  全部编译是很痛苦的过程

    C++编程小记,经典收藏

    ### C++11 新特性详解 #### 一、Auto 关键字的新用途 - **旧用途**:在C++11之前,`auto`关键字主要用于指定变量的存储期。 - **新用途**:C++11引入了类型推断的概念,`auto`变成了一个类型占位符,用于告诉...

    随笔小记.doc

    随笔小记.doc

    GeoStudio学习小记.pdf

    GeoStudio学习小记

    火眼金睛辨真假 小记CPU-Z软件.pdf

    【CPU-Z软件详解:识别真假处理器的利器】 CPU-Z是一款由Frank Delattre编写的免费且小巧的系统信息检测工具,特别适用于鉴别CPU的真实身份,防止购买到假冒伪劣产品。这款软件支持从古老的486到最新的P4 Athlon 64...

    【咬人草小记,阅读附答案】 咬人草小记阅读答案.docx

    这篇文章是关于一种名为“咬人草”的植物的描述和作者对其独特特性的体验与思考。咬人草在新疆地区生长,是一种看似普通的草本植物,却有着不寻常的防御机制——它的叶瓣上有尖锐的小刺,一旦触碰,就会像被毒蜂蜇...

    java小记.rar

    Java Web开发是软件行业中一个广泛讨论的话题,涵盖了诸如Servlet、JSP、JDBC、MVC框架、企业级组件以及各种工具和技术。这份"java小记.rar"压缩包很可能包含了作者多年从事Java Web开发的经验总结,可能包括代码...

    刘重威将军小记.docx

    刘重威将军小记.docx

    每日小记,记录账单和日记

    "每日小记"就是这样一款应用,它结合了记账和日记的功能,为用户提供了一个全面的生活记录平台。 首先,我们要了解记账的重要性。在个人财务管理中,记账是一个基础但至关重要的步骤。通过"每日小记",用户可以轻松...

    随笔小记文档及若干代码

    随笔小记的文档,自己记录的一些文档,仅供参考

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备_rezip.zip

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备_rezip

    当代班主任工作小记.doc

    当代班主任工作小记.doc

    小学语文圣诞节作文圣诞小记

    小学语文圣诞节作文圣诞小记

    C++写的家庭小记账本

    《C++实现的家庭小记账本》 在我们的日常生活中,管理个人财务是必不可少的一环。为了方便家庭财务管理,有人开发了一款基于C++编程语言的“家庭小记账本”程序,它以其小巧、易用的特点,为用户提供了便捷的记账...

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备1_rezip.zip

    STM8S+STVD+COSMIC折腾小记STM8S+STVD+COSMIC折腾小记.专为新手准备1_rezip

    数据字典-小记及用户部分1

    以下是对标题"数据字典-小记及用户部分1"中所提及的数据元素进行的详细说明: 1. 用户数据元素: - **账号**:用户ID,类型为int,长度11,用于唯一标识每个用户。 - **密码**:字符串类型,长度20,存储用户登录...

    御风小记账本

    总的来说,【御风小记账本】是一款基于Delphi技术的个人财务管理软件,它充分利用了Delphi的开发优势,为用户提供了一个便捷、高效的记账平台。对于想要学习Delphi开发或者个人财务管理的用户来说,这款小程序无疑是...

    Sublime Text3 安装到使用个人小记

    Sublime Text3 安装到使用个人小记

Global site tag (gtag.js) - Google Analytics