软件破解实战篇

isnull   ·   发表于 2019-06-10 11:24:53   ·   漏洞文章

引言

破解软件主要可以通过以下方法进行

  • 字符串定位方法
  • 相关API定位
  • 逆向算法
  • 等等
  • 本片文章主要通过一个例子进行软件破解技术中API定位的学习和相关工具的使用

    破解实例

    下面是一个未破解版的打开情形,那我们就此可以合理联想到,为了广告展示它这里可能调用了CreateWindow、CreateDialog、DialogBox还有第三方库的创建窗体的API,下面我们根据这个思路正式开始



    排除第三方库

    通过导入表查看工具,可以看出没有MFC和QT的导入表



    定位API

    排除掉第三方库的api,那么我们标准库的API就没多少了,我们收集一下,CreateWindowExA、CreateWindowExW、CreateDialogA、CreateDialogW、DialogBoxA、DialogBoxW。

    然后我们可以用两种方法来再次排除一些没有用到的API,精确定位具体用到的API

  • 1.通过导入表或者x64dbg调试器的符号窗口查看具体API


  • 2.通过调试器在符号地址下断点,查看调试器返回的信息



    这样我们最后只剩下了CreateWindowExWAPI

    逆向过程

    使用工具

  • x64dbg

  • 64位Winrar

  • 步骤

    1、给CreateWindowExW下上断点

    2、F9运行到断点位置,跳过第一个停在入口点位置的断点,我们就停到了CreateWindowExW代码实现的位置



    这里我们用栈回溯方法看是哪个位置调用的当前API,这里可以从红框看出都是系统模块调用的,继续F9忽略系统模块的调用(可以从符号窗口看具体哪些是用户模块)

    [^堆栈调用]: 最上面一层是正在执行的调用,下面是外层。例如函数a调用b,b调用c,这里我们正在执行函数c的代码逻辑,c的代码逻辑就是最上层,b是第二层、a是第三层



    3、 查看到用户模块调用了CreateWindowExW,我们F9继续执行,因为广告窗体是第二个打开的,我们需要等待winrar程序窗体打开后再关注广告窗体的创建



    4、 下面可以看到winrar自己的窗体成功创建,我们双击这一行就跟随到了000000000029B7F0地址处,也就是CreateWindowExW执行完成后继续执行的下一条语句



    5, 进入CPU视图,我们看见了调用CreateWindowExW的具体位置



    6、 首先我们先我们将这句调用API的16进制指令复制保存下来(方便我们错误定位后,下载可以快速跳转到这个位置继续我们的流程)

    接着我们在这个API调用的地方F2下断点,在断点窗口中删除CreateWindowExW处的断点

    ctrl+F2配合F9重新运行到我们刚才下断点的位置,使用NOP填充掉我们选中的行,然后F9继续运行,检测是否我们正确填充掉了广告窗体创建的代码





    7、 广告窗体未再出现,接着我们将修改后的文件dump下来替换掉原来的exe文件,彻底实现去除广告的功能。具体操作:右键->补丁->修补文件 然后选择个位置dump处修改后的文件,接着替换掉原来的文件。

    双击打开exe文件,广告已移除



    编辑个人Log

    使用Resource Hacker通过字符串搜索到你要修改的字符串,手动修改后编译保存即可完成个人log的植入



    小结

    本片文章主要学习到:

  • 栈回溯方法
  • 调试工具的使用
  • 普通软件破解思路
  • 不足

  • 相关API不熟悉:我在分析的过程中主要是对C++程序开发这边没什么基础,导致我浪费大量时间手动跟踪CreateWindowExA、CreateWindowExW这两个API,观察具体在哪个位置执行API后会立刻出现窗体。
  • 改进

  • 尝试编写程序来帮助熟悉API以及程序执行调用流程

  • 转自先知社区

    打赏我,让我更有动力~

    0 条回复   |  直到 2019-6-10 | 1179 次浏览
    登录后才可发表内容
    返回顶部 投诉反馈

    © 2016 - 2024 掌控者 All Rights Reserved.