- 浏览: 1604995 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
这几天,接了一项工作,要把Word文档进行采集并存入数据库,首先想到的是POI之HWPF,但试用之后发现HWPF还是很原始,基本上只能把Word的文本内容提取出来,原来Word文档里的段落层次无法采集,Word文档中的图片也没有找到相应的方法来提取,根本无法满足我的要求,于是只好放弃。
第二个想到的是jacob,但該组件是使用JNI技术来实现的,要使用必须满足两个条件:一是必须是在Windows平台上,二是本机必须安装了MS Office,这样看来,如果是用JAVA做客户端软件,可能还马马虎虎,用在服务器上,局限太大,也只好放弃。
然后继续找,找好久没发现合适的,于是想把Word文档转换为RTF格式,然后使用javax.swing.text.rtf.RTFEditorKit来解析,写了个小程序试了试,还不错,原文档的层次序号都保留并解析了出来,但仔细看了一下解析出来的内容,发现里面有少部分文字成了乱码,而且没有规律。乱码问题没法解决,RTF方案也被枪毙了。
去www.theserversides.com上搜了搜,发现国外有套称为★★★的组件,可以比较好地处理MS Office的各种文档格式,于是就Google到★★★老家,把我需要的★★★.Words for Java下载下来,在下过程中顺便看了看这玩意儿卖多少钱。不看还好,一看吓一跳:单单★★★.Words for Java组件一年期的单用户开发版就要$899,赶上我不吃不喝一个多月工资啊,看来这玩意只能试试,想用正版不是我等穷程序员用得起的。
闲话少说,把★★★.Words for Java下载下来后,写个简单Demo,弄个文件一解析,嘿,显示了Word文档开头一段之后扔给我这么一句:
This document was truncated here because it was created using ★★★.Words in Evaluation Mode.
提醒我用的是试用版,想看看实际解析效果都看不到。看来不弄个License是没办法看到这玩意实际使用效果了。于是咬咬牙,狠狠心,拼上一晚上不睡觉,研究一下它的注册机制。(本人郑重声明,此次研究仅仅限研究范畴,不提供破解版或注册码。)
JAVA做的东西,最常见的防盗版手段无非下面几类:
一、对代码进行混淆,增加反编译难度;
二、对代码进行加密,自定义ClassLoader,在载入类时先解密然后运行;
三、对代码进行加密,用Native语言写解密模块,然后同第二类;
用License来防止非法使用的软件,一般就是开发者自定一个License格式,然后写个Lincese处理类来读取License并判断是否合法用户,而License处理类就会采用上面所列的几种方法中的一种来进行保密处理。
按照帮助文档,给它随便设个License,看看有什么结果。一试之后,抛出一个异常:
java.lang.IllegalStateException: The signature is invalid. at com.★★★.words.da.a(License.java:757) at com.★★★.words.da.a(License.java:617) at com.★★★.words.da.c(License.java:376) at com.★★★.words.da.ar(License.java:345) at com.★★★.words.License.setLicense(License.java:226) ......
,哈哈,正是我想要的东西,于是用XXX工具打开★★★.Words.jdk15.jar文件,看到里面有一大堆的诸如a.class、ab.class、da.class之类的东西,看来真是混淆过的,先不管了,看看License.class再说。
反编译一下License.class,看到里面一堆的代码,有点乱,静下心来理了理,发现真正解析并判断License是否有效的地方是在da.class中。顺藤摸瓜,反编译出da.class,看看里面有啥。里面比License.class里还乱,还引用了一堆的混淆类:(。再看看,里面有个字符串“SHA1withRSA”告诉我,想做个XX机是不太可能的了,如果还想试试,只能改改类的字节码,让它跳过License有效性校验。
再仔细研究一下da.class,让我发现了好多线索,首先是License的结构被我分析出来了,License是个XML文件,文件结构如下(再声明一下,下面的代码只是为了说明License的结构,不是有效的Lincese,大家不用费力去试用了。):
<License> <Data> <Products> <Product>★★★.Total for Java</Product> <Product>★★★.Words for Java</Product> </Products> <EditionType>Enterprise</EditionType> <SubscriptionExpiry>20991231</SubscriptionExpiry> <LicenseExpiry>20991231</LicenseExpiry> <SerialNumber>23dcc79f-44ec-4a23-be3a-03c1632404e9</SerialNumber> </Data> <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature> </License
其中,<Products>节点下的内容是说明此Lincese适用哪些★★★组件,最关键的其实是<Signature>节点,这个节点的内容是用SHA1withRSA算法进行签名的,所以,如果拿不到PrivateKey,就别想做出真正与厂商兼容的山寨License。
再回过头来,我已经知道了License的结构,我就自己写个License,让它去加载。但前面说了,没有PrivateKey,无法伪造签名,怎么办呢?没办法,只有去改类了,可是类又是混淆过的,难改不说,即使改了,可能也无法编译,看来只有改类的字节码一条路了。
打开rej工具,找到da.class类中验证签名的位置,直接把抛出异常的那几句remove掉,再保存,可以了。不信?可以再把da.clsss类反编译一下看看,是不是验证签名后抛出异常的代码没有了?
自己满以为研究工作结束了,可以正常试用該组件了。可以把测试代码一运行,又给我来了个下马威,扔给我这样一个异常:
java.lang.SecurityException: SHA1 digest error for com/★★★/words/da.class at sun.security.util.ManifestEntryVerifier.verify(Unknown Source) at java.util.jar.JarVerifier.processEntry(Unknown Source) at java.util.jar.JarVerifier.update(Unknown Source) at java.util.jar.JarVerifier$VerifierStream.read(Unknown Source) at sun.misc.Resource.getBytes(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at com.★★★.words.License.setLicense(License.java:225) ……
看来厂商早就想到别人会改类这一招了,对重要类进行了数字签名,哪怕改动一个空格都不行。
做到这里,已经凌晨1点多了,没有耐心再去研究哪里校验类的签名信息了。于是就在jar包里找,看看原始类的签名信息放在哪里。天不负我,没多久就被我找到了,放在META-INF目录下。看来老外还是比国人厚道,上次有研究一个国内的程序,作者把加密密钥伪装成jpg文件,放在了一堆图片文件中,不过不幸的是还是被我找到了,呵呵。再说我把那个保存类签名信息的文件找到之后,打开看看,是明文(再次向老外的绅士风度表示一下敬意,如果换了我,怎么着也得把这个文件伪装一下,把文件加密一下,然后伪装成class文件或是图片文件之类的,即使起不到防盗作用,溜达溜达那些研究者也好啊,哈哈。),把这个文件先备份一下,然后找到da.class对应的签名信息项,直接删除,然后重新放回到jar包中。重新启动测试程序,这次反而不如刚才那么自信了,没敢想这次一定能运行成功。
测试程序启动后,稍等了几秒,控制台上出现了一堆堆的文字,是整个Word文档的内容,没有再出现提取内容长度限制或提示是试用版本的问候语。再按照帮助文件的指示,测试了一下其他功能,段落层次OK,表格解析OK,图片提取OK,可以了,这些就满足我的要求了。至此,本次工作算暂告一个段落。
再次声明,本文只研究Java程序的防盗版技术,不鼓励大家去Crack。
评论
求大神指点一二。
我找个时间看看,好久没动这个玩意儿了。
求大神指点一二。
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at com.aspose.pdf.z136.m1(Unknown Source)
at com.aspose.pdf.z136.m1(Unknown Source)
at com.aspose.pdf.z150.m1(Unknown Source)
at com.aspose.pdf.z103.m1(Unknown Source)
at com.aspose.pdf.z103.m1(Unknown Source)
at com.aspose.pdf.z103.m1(Unknown Source)
at com.aspose.pdf.License.m1(Unknown Source)
at com.aspose.pdf.License.setLicense(Unknown Source)
at other.PDFCreate.getLicense(PDFCreate.java:96)
at other.PDFCreate.main(PDFCreate.java:109)
求大神帮忙破解。
异常佩服,拜谢
根据大神的提示可以破解aspose.words for java.
能否给个破解aspose.pdf for java组件的思路呢?
理论上也可以处理 aspose.pdf for java,只要细心加耐心。
aspose.pdf for java 好像比较麻烦,直接反编译,太多错误了。并没有向aspose.words for
java 那么容易。大神可以一试
异常佩服,拜谢
根据大神的提示可以破解aspose.words for java.
能否给个破解aspose.pdf for java组件的思路呢?
理论上也可以处理 aspose.pdf for java,只要细心加耐心。
异常佩服,拜谢
根据大神的提示可以破解aspose.words for java.
能否给个破解aspose.pdf for java组件的思路呢?
异常佩服,拜谢
loadLicense 中
is = this.getClass().getResourceAsStream("/aspose.word.license.xml");
改为
is = this.getClass().getResourceAsStream("/resources/aspose.word.license.xml");
就可以了~~~
作者牛掰,赞一个
还有感谢2楼所提 SF 和 RSA的处理方式
可以直接存成PDF方便多了.
同时补充:
为避免出现修改后类的签名验证失败问题,无需修改manifest,只需将META-INF下的.SF和.RSA删除即可.
同时感叹:
1、reJ真乃神器!
2、Java代码保护真是不容易啊!
我应该如何使用这个jar包提供的api呢?
发表评论
-
SpringBoot Fat Jar解压运行
2018-06-28 21:40 2253SpringBoot已经成为当前最流行的微服务 ... -
一句话实现五星评分显示
2018-06-05 08:31 988Python: rate = 1 #rate 取值 ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 33082Blockly - 来自Google的可 ... -
安卓动态分析工具 Inspeckage
2017-08-07 08:46 0工具介绍 一个基于Xposed 开发的应用动态分析工具 g ... -
Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息
2017-08-07 08:37 0一、猜想数据存放路径 微信现在是老少皆宜,大街小巷都在使用 ... -
破解微信数据库 并查询数据上传服务器
2017-08-07 08:29 0由于工作需求破解了微信的数据库 并获取想要的信息上传服 ... -
安卓黑科技之HOOK详解
2017-08-07 08:21 0本文带大家进入到安卓另一个世界 互联网攻防大战 Xpos ... -
安卓逆向之基于Xposed-ZjDroid脱壳
2017-08-07 08:18 0前言 之前介绍了普通常见的反编译模式 但对于使用了 360 ... -
十步以内完成精细web打印
2017-06-21 11:44 7366注意: 康虎云报表组 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6692注意: 康虎云报表 ... -
疯狂软件对Oracle放弃Java EE的看法
2016-08-14 22:38 517来源:http://javaligang ... -
几个Java相关的思维导图
2016-03-17 13:07 954来源:http://blog.csdn.net/jackf ... -
jasperReport Applet 打印
2016-02-01 16:33 859Applet方式的原理是本地下载Applet以及Jas ... -
为Java说句公道话
2016-01-24 10:59 706为Java说句公道话 有些 ... -
Mybatis Generator配置详解(中文)_转
2015-12-17 16:44 908来自: http://www.jianshu.com/p/e ... -
一个提供大量数据模型的网站
2015-12-17 14:00 969网站地址是:http://www.databaseansw ... -
采用ajp代理模式配置Apache+tomcat实现负载均衡(转)
2015-11-13 10:22 850这一种方法,配置简单,性能也高。附AJP介绍: AJP ... -
MyBatis配置文件修改侦测及重载的实现
2015-07-31 13:53 2322MyBatis配置文件修改侦测及重载的实现: /** ... -
Spring optional @PathVariable?
2015-07-09 13:13 900Q: Is it possible to somehow ... -
The forked VM terminated without saying properly goodbye. VM crash or System.exi
2015-07-07 18:22 4264The forked VM terminated witho ...
相关推荐
在IT行业中,Aspose.Words是一款非常强大的文档处理组件,它允许开发者在不依赖Microsoft Office的情况下,进行Word文档的创建、阅读、修改和转换。这个资源聚焦于利用Aspose.Words进行一系列的关键操作,包括插入...
Aspose.Words for Java 是一个强大的文档处理库,专门用于在Java环境中创建、编辑和操作Microsoft Word文档。这个工具允许开发者无需使用Microsoft Word本身就能处理DOCX格式的文件,极大地提高了自动化文档处理的...
下面是一段简单的Java代码示例,展示如何使用Aspose.Words for Java将Word文档转换为PDF: ```java import com.aspose.words.*; public class DocumentConverter { public static void main(String[] args) { ...
Aspose.Words for Java是Aspose公司专门为Java开发者设计的一个强大的文档处理组件,它允许开发者在Java应用中创建、编辑、转换和显示各种文档格式。在这个特定的场景中,我们将关注PDF转Word的功能,以及处理PDF中...
在IT行业中,Aspose.Words是一款著名的文档处理库,它为开发者提供了强大的API,用于创建、编辑、转换和呈现各种Microsoft Word文档格式。这个“aspose-words去水印jar包”显然是一款针对Aspose.Words功能的扩展,...
标题 "aspose-words-20.2-android.via.java.zip" 暗示这是一个针对Android平台的Java库,用于处理Microsoft Word文档并将其转换为PDF格式。Aspose.Words是Aspose公司提供的一个强大的文档处理组件,它允许开发者在...
Aspose.Words是一款强大的文档处理组件,主要用于在.NET和Java应用程序中操作Microsoft Word文档。它提供了丰富的API,允许开发者执行各种任务,如创建、编辑、转换、格式化和打印Word文档,无需安装Microsoft ...
Aspose.Words是一款著名的第三方库,专为程序员和开发者设计,用于在.NET、Java以及其他支持的平台上处理Microsoft Word文档。这个库提供了丰富的功能,允许用户无需安装Microsoft Word就能创建、编辑、转换和显示...
Aspose.Words for Java是Aspose公司开发的一款强大的文档处理组件,主要针对Java开发者设计,用于在Java应用程序中创建、编辑、转换和呈现各种Microsoft Word文档格式。版本18.4是该组件的一个特定更新,提供了对新...
在IT行业中,Aspose.Words是一款著名的文档处理库,它提供了强大的API,使得开发者能够方便地在各种应用程序中处理Microsoft Word文档。在这个“使用Aspose.Words 18.6实现Word文档转换为图片demo”中,我们将深入...
Aspose.Words for Java是Aspose公司开发的一款强大的文档处理组件,主要针对Java开发者设计,用于在Java应用程序中创建、编辑、转换和呈现各种文档格式。版本17.4.0是一个更新版本,可能包含了对先前版本的改进、新...
在Java开发中,有时我们需要处理文档模板,将动态数据填入到Word模板中,并且可能还需要将处理后的Word文档转换为PDF格式,同时在PDF上添加水印。在这个场景下,`Apache POI`和`Aspose.Words for Java`是两个常用的...
Aspose.Words是一款强大的文档处理库,主要用于在Java、.NET、Android等平台上进行Microsoft Word文档的操作。这个压缩包文件包含的"aspose-words"是该库的相关组件,主要功能在于无须安装Microsoft Office环境就能...
Jacob允许Java程序调用COM组件,例如Microsoft Office应用程序,从而实现Word文档的读取和转换。 Jacob-1.18-x64.dll和Jacob-1.18-x86.dll是Jacob库的对应32位和64位版本的动态链接库,它们在运行时提供对COM组件的...
Aspose.Words是一款强大的文档处理组件,主要用于在.NET和Java应用程序中创建、操作和转换Microsoft Word文档。这个组件以其高效能、稳定性和丰富的功能而受到广大开发者青睐。Aspose.Words 18.4版本提供了许多特性...
Apose.Word是一款强大的Java库,专门用于处理Microsoft Word文档,包括读取、写入、转换和操作Word文档。在这个特定的场景中,我们关注的是它将Word文档转换为PDF或JPEG图片的功能。以下是对这个主题的详细解释: 1...
在IT行业中,Aspose.Words是一款著名的文档处理库,它提供了强大的API,使得开发者能够方便地在各种应用程序中创建、编辑和操作Microsoft Word文档。在这个特定的案例中,"aspose-words word添加水印的jar和licence...
Aspose.words是这个系列中的一个组件,专注于处理Microsoft Word文档。它提供了丰富的API,允许开发者在不依赖Microsoft Office的情况下,对Word文档进行创建、读取、编辑和转换。 Aspose.words的功能非常广泛,...
它提供了一个强大的API,使得程序员无需依赖Microsoft Office组件就能在.NET、Java、Android、iOS和更多平台上操作Word文档。 Aspose.Words的核心功能包括: 1. **文档创建**:从头开始创建新的Word文档,可以...
Aspose.Words是一款强大的文档处理库,主要用于在.NET环境...总的来说,Aspose.Words是一个强大的工具,它简化了.NET开发者在处理Word文档时的工作,极大地提高了工作效率,是企业级应用和自动化解决方案中的常用组件。