破解UltraEdit64 Version 28.20.0.92 技术分享。
本文为原创作品,转载请注明出处,作者:Chris.xisaer E-mail:69920579@qq.com
QQ群3244694
补丁程序下载地址:https://download.csdn.net/download/xsdn123/71939906
https://github.com/hansiyuan1983/UltraEdit/tree/%E7%A0%B4%E8%A7%A3%E8%A1%A5%E4%B8%81
1.本文所设计的相关技术只限于交流和学习使用,请勿将其用于商业活动。对此产生的一切后果本人概不负责。
2.如果本文涉及到侵犯著作权的问题,请及时联系,我将下架文章。
3.在此鄙视垃圾CODER诞生地CSDN。竟然不允许发破解技术相关的文章。技术本无罪,人性是贪婪。(还有假冒破解技术,搞收费的某论坛)。
现在我准备为大家带来UltraEdit64破解的一些技术分享。目前的最新版本 Version 28.20.0.92,这是一个64位的文本处理软件。可能老家伙们都知道这个编辑软件。非常的NICE,尤其是他的二进制查看功能。对于程序员来说很好很强大。但是不知道从什么时候开始这个软件收费了。。希望大家都自觉购买正版软件。本文的目的不是提供给大家使用破解版。而是分享一些软件的漏洞,以促使软件开发者更注意软件的安全使用。
首先我们来看一下试用期到期时候的情况!

这里还是提醒大家请购买正版软件,以鼓励软件行业的良性发展。
先说明几点情况:1 此软件没有加壳,这个结论是经过验证的。
2 此软件是用MFC编写。请大家先补习一下MFC的基本只是。
我们打开反编译神器:idapro64,为什么用64??因为我们要破解的UE64是64位的软件,SO...
来一张图吧

对于新手可能有点懵逼,老手掠过,我先讲解一下IDA的基本情况。左边的窗口是函数窗口,右边的窗口是程序代码窗口。下面的窗口是输出窗口,上面还有很多标签页。我们关注是import ,struct,还有pseudocodeXXX窗口。
IDA的用法如果详细些会成为一本书,应为确实有一本IDA使用说明的书。目前已经除了第二版了。我这里就不赘述了,有兴趣的同学可以去看看。非常不错。不光将IDA的使用,还有一些反编译的知识。
可能看到这篇文章的各位水平不一样。我这里只给新手讲解,大牛可以绕道。刚刚接触破解的同学可能拿到一个程序不知道从何下手。我们该怎么找到程序的漏洞?(这里我用漏洞其实不合适,但是没办法。等你们写文章的时候就知道我为什么用漏洞,而不是线索了。)。
开头的图片大家都看了,是是用到期后弹出模态对话框。阻止任何操作,关闭对话框后程序关闭。那么我们首先判断一下程序虽然是试用版,但是其实功能和正式版是一样的,唯一区别就是多了试用倒计时。那么我们的思路就有了。1.干掉这个对话框。2点击输入许可证密钥。通过模拟验证程序完成注册。3,通过修改验证程序逻辑达到欺骗源程序验证机制的方式关闭对话框。当然还有其他的一些方法我这里就不一一说明了。
不过我可以告诉大家干掉这个对话框,虽然可以但是实现起来非常麻烦,比第3步还要麻烦。因为开头我说过这个程序是MFC写的。作者创建的对话框时封装在自己类中的由自己的类实现了个对话框初始化函数。所以你如果想只干掉对话框会有一些数据无法传递给源程序,这样程序会访问非法内存地址,导致无法正常运行。
如果你选择第二种方法我只能说你有以一颗强大的心,而且是真心想学习反汇编技术,这个程序的许可证是通过哈希算法得到的 无非就是机器码。磁盘编号 ,电子邮件等等信息混合成一个哈希值。然后验证。而且破解者个程序的也肯定不是我一个人。可能有大牛已经写出来了。我这里就不过多赘述(因为真的很复杂)
我们试试第三种方法。修改程序验证逻辑。首先我们找到切入点,对搜索一下字符串吧!不是试用版吗 还是根据地区自动选择语言的。想变成英文版只能改系统区域。麻烦。我就猜测一下吧。英文的试用 应该是trial. 先打开另一个工具X64DBG!!!
搜索所有模块字符串。我们先找一下包含trial的相关信息!可能要等一会,程序代码量还是挺大的!
并没有搜到想要的信息。明显和提示的对不上。想从这里找对话框的一些地址是没戏了。回到IDApro,我们点击import选项卡:搜索CreateDialog关键字。我们能够发现

找到了一个创建对话框的函数。但是别高兴,这个并不是我们需要的函数。因为开头说过这是个MFC程序。所以我们应该能想到,作者写程序的时候不是用SDK中的函数写程序,而是用C++封装类后写程序。再结合MFC的相关知识。我们知道MFC中是有个对话框类的 CDialog.所以我们现在应该等待IDAPRO 这个强大的软件。然后再函数窗口搜索我们猜测的MFC类CDialog:

不出所料,我们找到了我们的线索。那不用说了只要是创建对话框。就一定会用到CDialog的构造函数。所以我们选择我们搜到的CDialog::CDialog(uint,CWnd*),这函数作为切入点。开始我们的找CALL之旅!
我们双击函数进入查看:

我们在函数名字上面右键查看交叉引用 看看一共有多少处调用了此函数,然后回溯出只有在关于我们需要的这个创建对话框函数。这里可能大家有些不明白。因为程序里面创建的对话框很多。当你点开交叉引用的时候你会发现可能成百上千的地方都调用了这个函数。而我们需要断下来的地方只有一个。而且通过上面函数的this指针我们能知道这是CDialog的成员函数。开头我还说过,作者写MFC程序肯定是以C++的习惯将其他类封装到自己的类中。所以我们要找的并不是MFC中的CDialog类中的构造函数。我们要找的是封装了这个函数的未命名函数。因为IDA是不能识别作者自己的类名和函数名的。所以这里我们只能通过回溯CALL 找出到底是哪个函数调用。
通过函数回溯我们最终确定调用这个CALL的地址是
.text:00000001403E5F90 call sub_140458A60
这个函数的主调函数非常的长 我决定只把名字给大家截图看一下,具体的还是大家自己浏览IDA吧因为 太长了。。。。

讲过漫长的初始化工作。。我们最终看到了这条汇编语句:

这个调用就是后续启动对话框的调用。我们想要干掉对话框就要做些动作不让这条语句执行。这里我就不详细写怎么写这些基础指令了。。很简单。但是我要告诉大家。如果你只是修改此处代码的话。那么程序将启动即崩溃。因为作者这里通过自己的函数传递了一些数据给后面的程序。如果得不到这些数据的初始化。那么程序将访问未知的内存空间。好,那我们就进去修改一下再出来。我们进入函数一直步进。直到来到这个地址:

这里有相当多的CALL ,而且每个CALL 之前都是比较后才调用的。在这里我先透露一点反汇编的结果。这些CALL 都是验证软件的各种状态的,有剩余日期,有激活状态,有版本信息。
我们在这里不要管先单步走一下程序。发现在进入call sub_14044B790这个CALL后会弹出对话框,实际上是函数经过对比版本后发现版本是试用版,然后对比激活信息发现并未激活。然后程序会通过调用自己封装的sub_140458A60 函数调用CDialog类的初始化函数生成对话框。流程就是这样的。
这里需要看动态调试的结果。当指令指针运行到00000001403E6B6E这条指令的时候 也就是test al,al. 我们观察寄存器窗口标志位ZF的值是1:
也就是说这条语句之后我们的 标志位不为0,跳转不会发生。会继续下面的验证工作,也就是剩余天数是否还有,当然TEST EAX,EAX 之后显然跳转也为发生就是我们要进入正常逻辑开启对话框了。好了至于应该修改哪里还是留给各位大神来完成吧。这里我就不说出答案了。(已经显而易见了)
我们来看一下破解后的程序:


如果你还有不明白的地方可以来群里找我交流一下技术。随时欢迎!!
破解UltraEdit64 Version 28.20.0.92 技术分享。的更多相关文章
- Could not update Activiti database schema: unknown version from database: '5.20.0.1'
转: Could not update Activiti database schema: unknown version from database: '5.20.0.1' 2017年11月22日 ...
- This Android SDK requires Android Developer Toolkit version 20.0.0 or above
本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时.但是,我现在只是想恢复到原先的开发环境.于是找到本文,方法有效!!! windows 下面安装Android ...
- 【转】This Android SDK requires Android Developer Toolkit version 20.0.0 or above
本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时.但是,我现在只是想恢复到原先的开发环境.于是找到本文,方法有效!!! windows 下面安装Android ...
- flutter doctor出现问题 [!] Android toolchain - develop for Android devices (Android SDK version 28.0.3) X Android license status unknown. Try re-installing or updating your Android SDK Manager. 的解决方案
首先,问题描述: flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Cha ...
- 一定要记住这20种PS技术,让你的照片美的不行! - imsoft.cnblogs
照片名称:调出照片柔和的蓝黄色-简单方法, 1.打开原图素材,按Ctrl + J把背景图层复制一层,点通道面板,选择蓝色通道,图像 > 应用图像,图层为背景,混合为正片叠底,不透明度50%,反相 ...
- Hadoop 3.0 EC技术
Hadoop 3.0 EC技术 EC的设计目标 Hadoop默认的3副本方案需要额外的200%的存储空间.和网络IO开销 而一些较低I/O的warn和cold数据,副本数据的访问是比较少的(hot数据 ...
- 技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. M ...
- hadoop2.20.0集群安装教程
一.安装的需要软件及集群描述 1.软件: Vmware9.0:虚拟机 Hadoop2.2.0:Apache官网原版稳定版本 JDK1.7.0_07:Oracle官网版本 Ubuntu12.04LTS: ...
- 【3D动画建模设计工具】Maxon Cinema 4D Studio for Mac 20.0
图标 Icon 软件介绍 Description Maxon Cinema 4D Studio R20 ,是由德国公司Maxon Computer一款适用于macOS系统的3D动画建模设计工具,是 ...
随机推荐
- 学习java 7.24
学习内容: Swing编程 由于Swing的所有组件完全采用Java 实现,不再调用本地平台的GUl,所以导致Swing图形界面的显示速度要比AWT图形界面的显示速度慢一些,但相对于快速发展的硬件设施 ...
- EDA简介
Electronic design automation (EDA), also referred to as electronic computer-aided design (ECAD),[1] ...
- 一起手写吧!sleep函数!
Async/Await 版本 function sleep(delay) { return new Promise(reslove => { setTimeout(reslove, delay) ...
- ssh : connect to host XXX.XXX.XXX.XXX port : 22 connect refused
初学者 写博客 如有不对之处请多多指教 我是要在俩个主机的俩个虚拟机上 用scp (security copy)进行文件远程复制. 但是 终端 提示 ssh : connect to host XXX ...
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
遇到这个一场折腾了1个小时, 这是系统在解析XML的时候出错, 最后费了好大的劲才发现 XML文件中,<View> 写成小写的 <view> 了. 崩溃啊.......... ...
- JPA和事务管理
JPA和事务管理 很重要的一点是JPA本身并不提供任何类型的声明式事务管理.如果在依赖注入容器之外使用JPA,事务处理必须由开发人员编程实现. 123456789101112UserTransacti ...
- 【Linux】【Shell】【text】awk
基本用法:gawk [options] 'program' FILE ... program: PATTERN{ACTION STATEMENTS} ...
- 【Java 8】Stream API
转自 Java 8 Stream Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式.Stream 是Java8中处理集合的关键抽象概念,它可以对集合进 ...
- 端口占用,windows下通过命令行查看和关闭端口占用的进程
1.查找所有端口号对应的PID 端口号:8080 命令:netstat -ano|findstr "8080" 2.找到端口的PID并关闭 PID:1016 命令:taskkill ...
- 2.ElasticSearch集群的搭建
1.创建elasticsearch-cluster文件夹,在内部复制三个elasticsearch服务 2.修改elasticsearch-cluster\node*\config\elasticse ...