- 浏览: 1581176 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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 2190SpringBoot已经成为当前最流行的微服务 ... -
一句话实现五星评分显示
2018-06-05 08:31 951Python: rate = 1 #rate 取值 ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 32772Blockly - 来自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 7296注意: 康虎云报表组 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6645注意: 康虎云报表 ... -
疯狂软件对Oracle放弃Java EE的看法
2016-08-14 22:38 483来源:http://javaligang ... -
几个Java相关的思维导图
2016-03-17 13:07 917来源:http://blog.csdn.net/jackf ... -
jasperReport Applet 打印
2016-02-01 16:33 832Applet方式的原理是本地下载Applet以及Jas ... -
为Java说句公道话
2016-01-24 10:59 675为Java说句公道话 有些 ... -
Mybatis Generator配置详解(中文)_转
2015-12-17 16:44 873来自: http://www.jianshu.com/p/e ... -
一个提供大量数据模型的网站
2015-12-17 14:00 897网站地址是:http://www.databaseansw ... -
采用ajp代理模式配置Apache+tomcat实现负载均衡(转)
2015-11-13 10:22 818这一种方法,配置简单,性能也高。附AJP介绍: AJP ... -
MyBatis配置文件修改侦测及重载的实现
2015-07-31 13:53 2283MyBatis配置文件修改侦测及重载的实现: /** ... -
Spring optional @PathVariable?
2015-07-09 13:13 871Q: Is it possible to somehow ... -
The forked VM terminated without saying properly goodbye. VM crash or System.exi
2015-07-07 18:22 4033The forked VM terminated witho ...
相关推荐
使用Aspose.Words for Java完成复杂Word与PDF的导出Demo使用Aspose.Words for Java完成复杂Word与PDF的导出Demo使用Aspose.Words for Java完成复杂Word与PDF的导出Demo
aspose包已破解 无水印,无行数限制!需在代码中加载证书使用,压缩包中已含有加载代码,加载代码建议写在构造器中!请勿用于商业用途,如有版权纠纷,概不负责!
使用破解后的aspose.words for java,实现.doc文档转为.docx问题,不丢失任何文档内容
NULL 博文链接:https://183615215-qq-com.iteye.com/blog/1858216
Aspose.Words for Java 是一个强大的Java库,专门用于处理和操作Microsoft Word文档。这个库允许开发者在Java应用程序中创建、修改、提取内容和属性、插入图片、图表等,而不需要在服务器上安装Microsoft Office。...
Aspose.Words-for-Java, 用于Java示例的Aspose.Words,插件和展示 面向Java的Java Aspose.Words 是一个高级的Java字处理 API,可以让你在Java应用程序中直接执行大量文档处理任务。 Java API的Aspose.Words 支持处理...
Aspose.Words for Net破解版的类库,生成的word文档没有水印和广告等字样,附有API开发文档,在此贡献给开发者们。
Aspose.Words for Java是一种高级Java Word处理API,使您可以直接在Java应用程序中执行各种文档处理任务。 Aspose.Words for Java API支持处理word(DOC,DOCX,OOXML,RTF)HTML,OpenDocument,PDF,EPUB,XPS和...
aspose.word java,word操作转html等,方便节省代码版本为1.6亲测可用内附word转html代码
aspose-words-23.2 Java版本,可直接使用,包含jar包和license。仅供学习使用,请勿使用商业用途。
aspose words for java 16.1.0最新完美破解版,无水印无文件大小限制,无使用时间限制。由于aspose比较吃内存,操作大一点的文件就会堆溢出,所以请先设置好java虚拟机参数:-Xms512m -Xmx512m(参考值)。如果亲们在...
Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。使用Aspose.Words可以在不使用Microsoft.Word的情况下生成、修改、转换和打印文档,本文档对Aspose.Words的一些操作进行了说明
aspose,通过模板导出漂亮的word格式,并且可以直接转成pdf等其他格式。
在网上找了很久word转pdf等格式的工具包,发现没有一个好用的,于是自己制作了一个,去除水印的版本。将Word文件另存为 固定版面: XPS,OpenXPS,PostScript(PS) 图像: TIFF,JPEG,PNG,BMP,SVG,EMF,GIF ...
Word处理控件Aspose.Words for Java 最新版更新 ;word转pdf在实际工作中经常需要遇到,我在工作中最常见遇到的需求就是,不仅要导出word文档,还要可以预览word文档。对于这种需求最简单的方式,就是讲word转成pdf
aspose-words-14.7.0
aspose words for java 16.4.0最新完美破解版,无水印无文件大小限制,无使用时间限制。由于aspose比较吃内存,操作大一点的文件就会堆溢出,所以请先设置好java虚拟机参数:-Xms512m -Xmx512m(参考值)。如果亲们在...
源码包是三篇Aspose.Words根据模板文件创建新的word文档的demo。
使用aspose-words.jar 实现word文件合并。开源版,下载后可一直使用 1、支持word文档内容部分替换 2、支持word内容合并,包含页眉、页脚、批注等信息 3、doc、docx文件均可支持 4、轻量级,引入jar 包即可引用
aspose words for java(springmvc) 16.8.0 最新完美破解版,无水印,无使用时间限制aspose words for java(springmvc) 16.8.0 最新完美破解版,无水印,无使用时间限制aspose words for java(springmvc) 16.8.0 ...