软件:Shape Collage
Shape Collage是一款免费的图片拼贴制作工具,可以轻松制作任意形状的图片拼图,如矩形、心形、圆形、字母形状,甚至绘制自定义形状。
但是免费版会有水印。而pro版本则没有,而且可能保存工程为PSD格式文件,并且开放了许多功能。
首先使用 jd-gui 进行反编译,通过观察可以发现这个jar被ProGuard保护过了,典型的就是超过了26个class,然后文件通过改变文件名大小写的方式存在。所以在Windows上是不能直接解压出来的,出动虚拟机,开上ubuntu进行打包。
因为pro版本会在标题显示一个pro,所以直接搜索即可。
在ca\vincentcheung\shapecollage\ShapeCollageGUI.class文件中将能找到这么一段。
代码:
private void H() { if (this.jdField_f_of_type_Boolean) { setTitle("Shape Collage Pro 2.5.3"); this.jdField_p_of_type_JavaxSwingJMenuItem.setText(jdField_a_of_type_JavaUtilResourceBundle.getString("Open_Project")); this.jdField_x_of_type_JavaxSwingJMenuItem.setText(jdField_a_of_type_JavaUtilResourceBundle.getString("Save_Project")); this.jdField_a_of_type_JavaUtilHashtable.put(this.jdField_p_of_type_JavaxSwingJMenuItem, jdField_a_of_type_JavaUtilResourceBundle.getString("Status_menu_open_project")); this.jdField_a_of_type_JavaUtilHashtable.put(this.jdField_x_of_type_JavaxSwingJMenuItem, jdField_a_of_type_JavaUtilResourceBundle.getString("Status_menu_save_project")); this.jdField_p_of_type_JavaxSwingJMenuItem.setEnabled(true); this.jdField_x_of_type_JavaxSwingJMenuItem.setEnabled(true); this.jdField_z_of_type_JavaxSwingJMenuItem.setText(jdField_a_of_type_JavaUtilResourceBundle.getString("Registration_Info")); this.jdField_a_of_type_JavaUtilHashtable.put(this.jdField_z_of_type_JavaxSwingJMenuItem, this.jdField_z_of_type_JavaxSwingJMenuItem.getText()); this.jdField_b_of_type_JavaxSwingJDialog.setTitle(jdField_a_of_type_JavaUtilResourceBundle.getString("Shape_Collage_Pro_Registration_Info")); return; } setTitle("Shape Collage 2.5.3"); this.jdField_p_of_type_JavaxSwingJMenuItem.setText("(Pro) " + jdField_a_of_type_JavaUtilResourceBundle.getString("Open_Project")); this.jdField_x_of_type_JavaxSwingJMenuItem.setText("(Pro) " + jdField_a_of_type_JavaUtilResourceBundle.getString("Save_Project")); this.jdField_a_of_type_JavaUtilHashtable.put(this.jdField_p_of_type_JavaxSwingJMenuItem, jdField_a_of_type_JavaUtilResourceBundle.getString("Status_menu_open_project") + " (" + jdField_a_of_type_JavaUtilResourceBundle.getString("Upgrade_To_Pro") + ")"); this.jdField_a_of_type_JavaUtilHashtable.put(this.jdField_x_of_type_JavaxSwingJMenuItem, jdField_a_of_type_JavaUtilResourceBundle.getString("Status_menu_save_project") + " (" + jdField_a_of_type_JavaUtilResourceBundle.getString("Upgrade_To_Pro") + ")"); this.jdField_p_of_type_JavaxSwingJMenuItem.setEnabled(false); this.jdField_x_of_type_JavaxSwingJMenuItem.setEnabled(false); this.jdField_z_of_type_JavaxSwingJMenuItem.setText(jdField_a_of_type_JavaUtilResourceBundle.getString("Upgrade_To_Pro")); this.jdField_a_of_type_JavaUtilHashtable.put(this.jdField_z_of_type_JavaxSwingJMenuItem, this.jdField_z_of_type_JavaxSwingJMenuItem.getText()); this.jdField_b_of_type_JavaxSwingJDialog.setTitle(jdField_a_of_type_JavaUtilResourceBundle.getString("Upgrade_To_Pro")); this.jdField_h_of_type_JavaxSwingJTextField.setText(jdField_a_of_type_JavaUtilResourceBundle.getString("Unregistered")); }
代码:
localObject5 = ch.a("SC25", (String)localObject5);//这行贴出来是为了方便搜索 ((ShapeCollageGUI)localObject2).jdField_f_of_type_Boolean = (localObject5 != null); ((ShapeCollageGUI)localObject2).H();//这行代码无视 this.jdField_f_of_type_Boolean = ((ShapeCollageGUI)localObject2).jdField_f_of_type_Boolean;
那么把!=的结果始终修改为true就行了。使用 JBE 打开这个class文件,选择init函数。搜索SC25,于是发现:
代码:
2581 ldc_w "SC25" 2582 aload_3 2583 invokestatic ch/a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 2584 astore_3 2585 aload_2 2586 aload_3 2587 ifnull 2590 2588 iconst_1 2589 goto 2591 2590 iconst_0 2591 putfield ca/vincentcheung/shapecollage/ShapeCollageGUI/f Z
保存class,切换至虚拟机,把修改好的所有文件打包成zip,再改名为jar,双击运行,pro版本啦
本文需要的一些工具
jd-gui:http://u.115.com/file/f0fea0394c
jbe:http://u.115.com/file/f06aac67f0