某论文翻译软件的破解

肥肠抱歉

最近太咸鱼了,觉得自己再不看论文就要凉了。时隔多日打开了之前没看完的论文,又打开的有道翻译准备慢慢啃。刚看了一句,就想起来很久没用的一个论文翻译软件,但是这个软件不仅要登录,还有一个积分制度,积分不够只能选百度翻译,随着积分的提升就可以使用谷歌等翻译工具了。但是积分的获取只有充值或微信朋友圈拉新用户,像我这种人怎么可能这样做,就一直用着百度。百度也不是不行,但和谷歌等工具比起来还是差点意思,今天就依靠着我辣鸡的逆向水平把他给破解了。

0x01 dnSpy

dnSpy is a debugger and .NET assembly editor. You can use it to edit and debug assemblies even if you don’t have any source code available. Main features:

  • Debug .NET and Unity assemblies
  • Edit .NET and Unity assemblies
  • Light and dark themes

https://github.com/0xd4d/dnSpy

这个软件很久以前就考虑过动手破解掉它,但是一直没做。

Windows版的程序是用C#编写的,既然是C#就简单了,拿出dnSpy一把梭。

dnspy.png

可以看到,入口点是pdf.Program.Main,但是问题来了,关键代码全加密了。

加密1.png

加密2.png

加密3.png

看着就头大,虽然很早就考虑破解了,但一直没做,就是因为这个。一直拖到了今天,把它给搞定了。

0x02 de4dot

de4dot is an open source (GPLv3) .NET deobfuscator and unpacker written in C#. It will try its best to restore a packed and obfuscated assembly to almost the original assembly. Most of the obfuscation can be completely restored (eg. string encryption), but symbol renaming is impossible to restore since the original names aren’t (usually) part of the obfuscated assembly.

https://github.com/0xd4d/de4dot

de4dot是一个很优秀的C#反混淆工具,和dnSpy是同一个作者。针对这个软件的反混淆成功了~

deobfuscator.png

0x03 crack

pdfForm1中,我发现了几个有意思的函数

funs.png

除了百度外,各个翻译引擎代码差不多,以谷歌智能云翻译为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// pdf.Form1
// Token: 0x0600002F RID: 47 RVA: 0x00005B14 File Offset: 0x00003D14
private void 谷歌智能云翻译ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.isLogin();
if (!ClassMain.isLogin)
{
MessageBox.Show("请扫码登陆", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else if (ClassMain.jifenNum < 100)
{
MessageBox.Show("谷歌智能云翻译需要积分100以上", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.None);
}
else
{
this.百度AI翻译ToolStripMenuItem.Text = "百度AI翻译(英译中)";
this.谷歌智能云翻译ToolStripMenuItem.Text = "谷歌智能云翻译(英译中)√";
this.谷歌生物医学专用翻译ToolStripMenuItem.Text = "谷歌生物医学专用翻译(英译中)";
this.有道翻译英译中ToolStripMenuItem.Text = "有道翻译(英译中)";
this.toolStripMenuItem8.Text = "搜狗翻译(英译中)";
this.toolStripMenuItem9.Text = "搜狗翻译(中译英)";
this.toolStripMenuItem4.Text = "百度AI翻译(中译英)";
this.toolStripMenuItem5.Text = "谷歌智能云翻译(中译英)";
this.toolStripMenuItem6.Text = "谷歌生物医学专用翻译(中译英)";
this.有道翻译中译英ToolStripMenuItem.Text = "有道翻译(中译英)";
ClassMain.isjiekounum = 2;
ClassMain.writeJiekou(string.Concat(ClassMain.isjiekounum));
MessageBox.Show("接口切换成功", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.None);
}
}

我们再看一下百度的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// pdf.Form1
// Token: 0x0600002E RID: 46 RVA: 0x00005A38 File Offset: 0x00003C38
private void 百度AI翻译ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.百度AI翻译ToolStripMenuItem.Text = "百度AI翻译(英译中)√";
this.谷歌智能云翻译ToolStripMenuItem.Text = "谷歌智能云翻译(英译中)";
this.谷歌生物医学专用翻译ToolStripMenuItem.Text = "谷歌生物医学专用翻译(英译中)";
this.toolStripMenuItem4.Text = "百度AI翻译(中译英)";
this.toolStripMenuItem5.Text = "谷歌智能云翻译(中译英)";
this.toolStripMenuItem6.Text = "谷歌生物医学专用翻译(中译英)";
this.有道翻译英译中ToolStripMenuItem.Text = "有道翻译(英译中)";
this.有道翻译中译英ToolStripMenuItem.Text = "有道翻译(中译英)";
this.toolStripMenuItem8.Text = "搜狗翻译(英译中)";
this.toolStripMenuItem9.Text = "搜狗翻译(中译英)";
ClassMain.isjiekounum = 1;
ClassMain.writeJiekou(string.Concat(ClassMain.isjiekounum));
MessageBox.Show("接口切换成功", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.None);
}

可见,除百度外,其它的引擎多了判断登录和积分的两个if,我们直接删掉,只保留else代码就可以了。

但是修改完成后,测试还是不行,出了一些奇怪的Bug,感觉还有东西要改。于是我的注意力转向了判断积分函数。

jifen.png

这个函数特别恶心,一个函数有300多行的if-else。我也是第一次见这种代码。

修改也简单,把所有的判断积分的代码段全部删除,只保留else部分里的东西。修改完成后还有150行的if语句,大概是这样

jifen2.png

这次保存后程序就没有之前的bug了。

至此破解就结束了。还是比较简单的破解。感觉应该是可以了,以后遇到bug再说。

0%