应要求测试了一下Scrivener在Sandboxie里的使用。我是第一次知道这个东西,看样子好像很强大。官网下载试用版有60天的试用期,还是很大方的一个产品。如果感觉产品有帮助,请大家购买正品。
Tag Archives: patch
如何从zcom的zmaker电子杂志中提取图片
需求大概是这么来的:一个毕业照相册用zmaker做成电子的了,看起来很cool,有动画,有同学们的靓照,年轻时也许不知道离别苦,二十年后某天听说某同学不在了,而手头只有这个电子杂志里的有唯一一张其照片,问遍能问的同学,居然都没有其他照片(那个海鸥相机象征身份的年代)。截图当然可行,但说实话分辨率很不理想,尤其原照片还是以前扫描的。所以有了这个需求。
环境:win 10,ZCOM互动杂志 1.0.1.2 (通过查看相册exe文件的属性信息)
方法:
- 打开zmaker的exe程序,不关,到 C:\Sandbox\<你的用户名>\test\user\current\AppData\Local\Temp\{一串数字和横线}\,注意时间戳(最新生成的),慢慢可以找到。
- 里面有很多文件夹,把这些文件夹拷贝出来,这些文件夹下面是一些main.swf,这个是flash动画,对应着电子杂志里的每一页。
- 到百度里搜索 swf extractor 的某个绿色版,打开,将需要的那个main.swf 打开,就可以看到里面的照片,提取出来,保存即可。
Done!
参考 http://blog.sina.com.cn/s/blog_3d8405d50100fplh.html,win10下有所不同。
Snip-It Pro 1.0.1.9
一个比较有意思的保存代码片断的东西。启动后位于桌面的一侧的sidebar,可以作用于任何编辑器。比如你在Visual studio写东西,可以从这里面将常用的一些代码方便的拉入vs中。官方网站在http://www.snipitpro.com/。下载的试用版本有30天试用期。
目前snipit pro工作于dotnet 2.0,除了dotfuscator保护关键代码外,还使用了一个的license保护组件(来自Interactive Studio Inc.)。license组件包括QlmLicenseLib.dll和IsLicense30.dll,后者是一个c++ native PE,前者由于调用后者,ildasm出来的il代码编译后无法通过ilasm使用。
然而问题是,snipit pro是保护十分脆弱,尽管dotfuscator使得reflector反编译后的代码无法编译,比如它将类里的方法名和变量名命名为一样,而c#编译器不允许这样。然后这种情况ilasm是可以编译的。反编译snipitpro.exe,可以看到以下类似代码:
public aa(SnipItConfig A_0)
{
this.a = new QlmLicense();
this.a.DefineProduct(1, "Snip-It Pro", 1, 0, "SkunkyFo78!", "{24EAA3C1-3DD7-40E0-AEA3-D20AA17A6005}");
bool flag = false;
string licenseKey = A_0.LicenseKey;
this.a.ValidateLicense(licenseKey);
int status = (int)this.a.GetStatus();
if ((this.a(status, 8) || this.a(status, 0x10)) || ((this.a(status, 0x20)
|| this.a(status, 0x100)) || this.a(status, 0x80)))
{
flag = false;
this.a(r.d);
}
else if (this.a(status, 4))
{
if (this.a(status, 0x40))
{
this.a(r.b);
flag = false;
}
else
{
this.a(r.a);
flag = true;
}
}
else if (this.a(status, 2))
{
this.a(r.c);
flag = true;
}
this.a(flag);
}
关键在于status的判断,无论license key是如何被保护,只要status被设置为2,保护即被解除。
int status = (int) this.a.GetStatus(); 对应的MSIL代码是,
IL_0045: ldarg.0
IL_0046: ldfld class [QlmLicenseLib/*23000007*/]InteractiveStudios.QlmLicenseLib.QlmLicense/*010000F0*/ aa/*02000022*/::a /* 0400013B */
IL_004b: callvirt instance valuetype [QlmLicenseLib/*23000007*/]InteractiveStudios.QlmLicenseLib.ELicenseStatus/*010000F1*/ [QlmLicenseLib/*23000007*/]InteractiveStudios.QlmLicenseLib.QlmLicense/*010000F0*/::GetStatus() /* 0A000266 */
IL_0050: stloc.2
…
我们注释掉 IL_0045~IL004b,在IL_004f处添加 ldc.i4.2,即达到以上status设置为2的效果。为了保证文件大小一致,0045~004e IL用nop来填充。修改后的MSIL代码如下,
//IL_0045: ldarg.0
//IL_0046: ldfld class [QlmLicenseLib/*23000007*/]InteractiveStudios.QlmLicenseLib.QlmLicense/*010000F0*/ aa/*02000022*/::a /* 0400013B */
//IL_004b: callvirt instance valuetype [QlmLicenseLib/*23000007*/]InteractiveStudios.QlmLicenseLib.ELicenseStatus/*010000F1*/ [QlmLicenseLib/*23000007*/]InteractiveStudios.QlmLicenseLib.QlmLicense/*010000F0*/::GetStatus() /* 0A000266 */
IL_0045: nop
IL_0046: nop
IL_0047: nop
IL_0048: nop
IL_0049: nop
IL_004a: nop
IL_004b: nop
IL_004c: nop
IL_004d: nop
IL_004e: nop
IL_004f: ldc.i4.2
IL_0050: stloc.2
Patch后的snip-it pro 1.0.1.9保护成功解除。在原SnipItpro.exe文件的0x0000d5b1开始的027b3b0100046f6602000a,代替成027b3b0100046f66020018,保存。
VisualSVN 1.3.2
找了几个切入点,都不理想,后来发现更改LicenseConverter.KeyToLicense是个不错的切入点,不管什么情况都产生一个有效的License。
License l = new License();
l.Binding = LicenseBinding.Seat;
l.Capacity = 999;
l.EndTime = DateTime.Now.AddYears(2);
l.LicensedTo = "tong";
l.LicenseId = Guid.NewGuid();
l.PurchaseDate = DateTime.Now.AddDays(-10);
l.PurchaseId = "shareit:1";
l.StartTime = DateTime.Now.AddDays(-2);
l.Type = LicenseType.Corporate;
l.Version = 2;
简单测试了一下可用。
Founder Apabi Reader 图书馆版 1.82
Reader其实是个做的不错的软件,无论从功能上还是外观上,都很出色,而且下载借阅
的速度也很快。
试着下载了一本图书,发现只有3天的借期,到期需要续借,而且无法打印(我其实很
想将其打印成pdf保存)
google了一下,一下子也找不着,个别论坛提示说有解除限制的方法或crk,但论坛限
制太多,或者根本就是骗点击
试着将Reader.exe反汇编了一下,发现很多信息都是明码保存在exe里,作者好象没在
反反汇编上下功夫。
找到几处切入点(比如打印选项无效,比如提示不能打印,比如对pdf虚拟打印机无效
等),简单处理了一下,发现就可以了,只是打印出来的pdf有些大。然后试着写了一
个图形patch界面,附下。(好象有很多别人已经写好的专用于patch的小软件,但懒得
找了,反正用qt写很方便,只是出来的结果文件大些)
仅是学习试验了一下,本人不提供任何具体的crk信息