Ishisashi 发表于 2022-3-14 19:51

某课本阅读器内课本档案解密

本帖最后由 Ishisashi 于 2022-9-7 17:15 编辑

虽说破译加密方式的工作是本人在 2021 年 12 月 20 日完成的,但因昨日开放注册时才注册账号,所以今日姑且在本坛炒炒冷饭。
这个阅读器本身是从某 Android 平板提取出来的,自然会因调用非通用的组件而无法在其它设备正常使用。而我并没有持有该平板,这样就无法调试实机来得知加密方法。
但也不能轻易放弃,总还是要反编译看看的。
课本档案本身的副档名是 hmh,那么就搜一下提到 hmh 的代码。

……很遗憾,并没有看到加密代码,似乎调用的是系统组件。但也没关系,至少知道是 PDF 了。
现在就只能观察加密后的档案了。

扑面而来的大量 7D 似乎表明很可能是逐位元组使用相同的方法加密。运气不错。

另一个档案就显得没那么整齐了,但是开头是一样的。也许不会随档案变化。
考虑到 PDF 的魔数是「%PDF-[版本号]」,盲猜 B5 7B BB 9B B4 75 9C 是 25 50 44 46 2D 31 2E(%PDF-1.)。

25 50 44 46 2D 31 2E
B5 7B BB 9B B4 75 9C

看一下二进制形式。

00100101 01010000 01000100 01000110 00101101 00110001 00101110
10110101 01111011 10111011 10011011 10110100 01110101 10011100

看不出甚么关联,至少不是反位。
不过,原文有 35 个 0、21 个 1,而密文有 21 个 0、35 个 1。进一步发现每个位元组内部也有这样的规律,恐怕是反位后打乱了顺序罢。

11011010 10101111 10111011 10111001 11010010 11001110 11010001
10110101 01111011 10111011 10011011 10110100 01110101 10011100

得到这个之后,就有位群友猜出顺序是 46718235 了。如果观察力(或运气)不是那么强,倒可以用一种比较笨的方法:

(少女列表中……)
「列出可能的位置然后取交集就好了呢,是不是很简单呢?」
……还是别人工列了,交给机器算了。
'use strict';

const samples = [['00100101', '10110101'], ['01010000', '01111011'], ['01000100', '10111011'], ['01000110', '10011011'], ['00101101', '10110100'], ['00110001', '01110101'], ['00101110', '10011100']];
let map = new Map();

let offset = 0;
while (offset < 8) {
    map.set(offset, );
    offset += 1;
};

for (let of samples) {
    let offset = 0;
    while (offset < 8) {
      let num = parseInt(source);
      let pos = encrypted.indexOf(num);
      while (pos !== -1) {
            map.get(offset) = false;
            pos = encrypted.indexOf(num, pos + 1);
      };
      offset += 1;
    };
};
console.log(map);

这样一看,仅凭藉开头七个位元组还真的足以确定是 46718235。而且考虑到该置换的逆置换为其本身,以及反位与置换交换复合顺序不改变结果的事实,加密算法即解密算法本身。
'use strict';

const fs = require('fs');

const byt = ;

let files = ['物理 - 第1中學校 5'];

for (let file of files) {
    let buf = fs.readFileSync(`${file}.hmh`);
    let offset = 0;
    while (offset < buf.length) {
      buf = byt];
      offset += 1;
    };
    fs.writeFileSync(`${file}.pdf`, buf);
};

It works well.
只是这课本居然是用 Word 排的,真是太不可思议了(

Ishisashi 发表于 2022-3-16 18:10

iceabs 发表于 2022-3-16 02:43
目测像q华w泉电子书。

当然不是,某学堂不都是图片吗(
另外这是个离线阅读器。

zhoushengzhi 发表于 2022-3-15 20:35

膜拜大佬,欢迎到吾爱安家!

dookp 发表于 2022-3-15 20:38

谢谢大佬分享!

deep1ndreams 发表于 2022-3-15 21:59

学到了,感谢!

rgtest 发表于 2022-3-16 00:05

谢谢分享,好好消化

woshiyishunj 发表于 2022-3-16 00:45

非常感谢,学习了。学习

iceabs 发表于 2022-3-16 02:43

目测像q{:1_905:}华w泉电子书。

yb66vs 发表于 2022-3-16 07:26

感谢,大神分享~~

怜渠客 发表于 2022-3-16 08:40

讲得真好{:301_1003:}

kinful 发表于 2022-3-16 10:34

感谢楼主分享!!!
页: [1] 2
查看完整版本: 某课本阅读器内课本档案解密