破解网络最好的软件 软件破解工具怎么用


破解网络最好的软件 软件破解工具怎么用


有一天在网上下载了一个上个世纪DOS年代的光盘ISO , 里面有一个README.EXE的DOS可执行文件 , 在过去 , 这一般是光盘里面的软件说明 。
好奇想知道这光盘里面有一些什么软件 , 于是执行README.EXE , 由于是虚拟机里面执行所以也不担心有病毒 。执行的结果有点意外 , 文件竟然设置了访问密码 。
设置了访问密码的README.EXE
这反而更好奇这个文件里面的内容了 。
疫情在家游戏玩多了 , 不妨把破解密码的过程当作是一次解迷游戏 , 于是决定花点时间尝试对这个程序的访问密码进行破解 。
为什么这些光盘说明不放在一个文本文件里呢?因为这是要方便没有中文DOS环境的用户查看 , 因此有人会用工具生成一个可以显示这些中文说明的DOS的EXE文件 。
在动手破解之前 , 要先介绍一些背景和破解思路 。
先说背景知识:
小型的DOS程序一般都是汇编语言开发 , 生成机器码比较精简相对容易用debug工具跟踪 , 而对于所谓密码的处理一般不会像现在这样用DES、AES、RC4对密码进行加密 , 通常就是设一个字符串然后和用户输入的字符进行比较 , 如果字符串匹配上就继续执行 , 匹配不上就退出程序 。
如果是用BASIC或者其他高级语言开发编译的程序生成的机器代码就相对复杂 。
有一些防破解的DOS软件会对自身进行加密 , 加载到内存后先做解密再去执行 , 对于这类程序要先经过一种叫“脱壳”过程后才可以跟踪 , 破解也就不那么容易 。
说完背景知识就说破解思路:
先在Linux用 strings 查看程序里面字符 , 看看有没疑似密码的字符串 , 经过尝试没发现找到像明文的密码字符串 , 看来密码不是以明文方式存放在程序里面的 。
既然密码不是以明文方式存放的 , 那么怎么找到密码呢?
我想起我朋友和我说过他开发的软件是怎么被一个外国人破解的过程 , 朋友的软件需要用户输入注册码 , 因为在用户输入注册码之后 , 程序就要对注册码进行校验并根据校验的结果进行分支跳转 , 因此只要追踪程序弹出注册码的对话框或者是提示注册码成功/失败的信息的机器代码就能非常接近破解的目标 , 这时可以分析存放在内存中密码 , 如果破解密码很麻烦也可以用汇编语言修改内存中的机器指令 , 即使注册码校验不过也强制跳转到注册码校验成功的程序分支 。
于是这里有了两个方案 ,
方案一:
跟踪程序显示 “Please input password:” 或 “Invalied password!” 的代码 , 找到对比密码字符串的代码这样就有可能找到存放密码的内存地址从而把密码找出来 。
方案二:
如果程序对密码的处理过程比较复杂 , 例如用了一些加密算法 , 即使找到存放密码的内存地址也不太容易分析出密码 , 那么还可以跟踪跳转到显示 “Invalied password!” 的分支代码 , 修改跳转的指令使得即使密码校验不正确也跳转到密码校验成功的代码分支上去 。
用到的调试工具是DOS下的 debug , 里面有内存搜索的指令可以搜出程序中调用显示字符串的汇编代码 。
在DOS的字符界面上显示字符串有三种方式
1、直接写显卡内存B800
2、调用BIOS 中断 int 10H
3、调用DOS 中断 int 21H
从程序滚动输出这些字符串来看 , 一般不会是用直接写显存的方式去实现 , 如果要这样做就要实现拷贝内存和操作显卡寄存器一整套功能 , 而这里仅是简单显示一些字符串 , 因此先排除直接写显卡内存 。
经过搜索跟踪 , 排除了调用BIOS 中断 INT 10H , 这个过程略过细节 , 大约过程就是去找 , 但没找到 。

推荐阅读