李恒道 发表于 2021-1-30 00:30:19

[大兴土木]CFW的asar文件逆向工程(一)

# 简介

由于最近比较无聊,发现了cfw小猫咪,因为不放心别人汉化的文件因为asar里存在bat文件然而百度了一下,0.39.2版本之后的asar文件是加密的,所以我决定以0.42.1版本开始试图反推js并拿到正确的翻译内容,最后还原部分解密部分的代码,目前能做到哪里尚未可知。总体来说重在参与吧

至于为什么叫大兴土木系列呢,因为这种事情吃力不讨好,并且没钱没意义

首先参考https://bbs.tampermonkey.net.cn/thread-241-1-1.html

我们创建一个bat执行asar extract app.asar ./

自动解压

再创建一个bat执行asar pack app apptest.asar

# 逆向工程

根据互联网资料找到了renderer.js

![图片.png](data/attachment/forum/202101/30/002646g14n1szvxlp3ns11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

观察代码发现所有的函数都在赋值 `a0_0x1b2f`

说明 `a0_0x1b2f`可能是解密函数

![图片.png](data/attachment/forum/202101/30/002732alayfgj0gkg1jkaf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

我们对其进行一个大致的整理

![图片.png](data/attachment/forum/202101/30/002747j37y7pzqqd7z7zkg.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

目前可以猜测是对上方的 `a0_0x5a56`进行某种操作

获取字符串组后判断解密程序是否进行初始化

如果解密初始化后就进行处理

然后返回内容

我们测试的方法很简单

在a0的返回处

```

return (
    _0x216b60 === undefined
      ? (a0_0x1b2f["JbUzuS"] === undefined && (a0_0x1b2f["JbUzuS"] = !![]),
      (_0x5a567b = a0_0x1b2f["wovbXq"](_0x5a567b, _0x332a52)),
      (a0_0x1b2f["MchjJm"] = _0x5a567b))
      : (_0x5a567b = _0x216b60),
    _0x5a567b
);
```

把这段代码改为

```
let rettext= (
    _0x216b60 === undefined
      ? (a0_0x1b2f["JbUzuS"] === undefined && (a0_0x1b2f["JbUzuS"] = !![]),
      (_0x5a567b = a0_0x1b2f["wovbXq"](_0x5a567b, _0x332a52)),
      (a0_0x1b2f["MchjJm"] = _0x5a567b))
      : (_0x5a567b = _0x216b60),
    _0x5a567b
);
console.log('rettext',rettext,_0x231e56,_0x332a52)
return rettext
```

然后打包回asar放进cfw进行测试

//Continue....
页: [1]
查看完整版本: [大兴土木]CFW的asar文件逆向工程(一)