echo094 / decode-js

JS混淆代码的AST分析工具 AST analysis tool for obfuscated JS code
MIT License
570 stars 301 forks source link

没看懂怎么使用 #4

Closed getr00t closed 1 year ago

getr00t commented 1 year ago

image 这是什么情况啊?没看懂怎么使用的,我就试了下,发现会报错啊,npm run 这个又是怎么使用的,能否详细点,感谢,你这个是可以把加密的全部解出来吗?

echo094 commented 1 year ago

你把这个原文件发一下吧,指令是没有问题的。

getr00t commented 1 year ago

你把这个原文件发一下吧,指令是没有问题的。

我怎么发给你尼?

echo094 commented 1 year ago

@getr00t 直接把文件拖到评论框就行

echo094 commented 1 year ago

你把下面两行代码之间的内容(包括这两行)单独拿出来就可以了:

// 开始行
var version_ = 'jsjiami.com.v7';

// 混淆后的代码

// 结束行
var version_ = 'jsjiami.com.v7';

上面和下面的内容要去掉,不然会产生干扰。

getr00t commented 1 year ago

不行啊,我注释掉或者删除都不行啊,还是一样的报错信息 处理全局加密... Error: cannot find decrypt variable

echo094 commented 1 year ago

不行啊,我注释掉或者删除都不行啊,还是一样的报错信息 处理全局加密... Error: cannot find decrypt variable

那你把放进去解密的文件发一下吧

getr00t commented 1 year ago

不行啊,我注释掉或者删除都不行啊,还是一样的报错信息 处理全局加密... Error: cannot find decrypt variable

那你把放进去解密的文件发一下吧

我楼上不是发了吗???应该看的到啊😯

echo094 commented 1 year ago

不行啊,我注释掉或者删除都不行啊,还是一样的报错信息 处理全局加密... Error: cannot find decrypt variable

那你把放进去解密的文件发一下吧

我楼上不是发了吗???应该看的到啊😯

我的意思是,发一下你注释掉或者删除过的。我这边处理后是可以正常解混淆的,所以得看一下你是怎么处理的。

getr00t commented 1 year ago

你把下面两行代码之间的内容(包括这两行)单独拿出来就可以了:

// 开始行
var version_ = 'jsjiami.com.v7';

// 混淆后的代码

// 结束行
var version_ = 'jsjiami.com.v7';

上面和下面的内容要去掉,不然会产生干扰。

就是把你说的这两个声明注释掉了的啊,是不是不应该注释掉?

echo094 commented 1 year ago

你把下面两行代码之间的内容(包括这两行)单独拿出来就可以了:

// 开始行
var version_ = 'jsjiami.com.v7';

// 混淆后的代码

// 结束行
var version_ = 'jsjiami.com.v7';

上面和下面的内容要去掉,不然会产生干扰。

就是把你说的这两个声明注释掉了的啊,是不是不应该注释掉?

我的意思是:

  1. 在文件里找到这两行,分别在第17和814行;
  2. 删除1-16行,815-末尾,只留下17-814行的内容;
  3. 把这798行拿去解混淆。
echo094 commented 1 year ago

@getr00t

17-814一共不就是798行吗 (814-16=798)

getr00t commented 1 year ago

@getr00t

17-814一共不就是798行吗 (814-16=798)

照你说的是解开了,但是我发现不对啊,在vscode打开都是满篇红,看起来像是格式错误,还有就是你这个工具解开不一定百分百正确的是吗?我发现解开后有的变量还是十六进制的码,并没用成功的转化解开,还发现每一行代码结尾都加上了分开;貌似不需要分号,我试着去掉分号就不然会报错,感觉解出来,给我认识了解到的js差别还是大 image

echo094 commented 1 year ago

@getr00t 17-814一共不就是798行吗 (814-16=798)

照你说的是解开了,但是我发现不对啊,在vscode打开都是满篇红,看起来像是格式错误,还有就是你这个工具解开不一定百分百正确的是吗?我发现解开后有的变量还是十六进制的码,并没用成功的转化解开,还发现每一行代码结尾都加上了分开;貌似不需要分号,我试着去掉分号就不然会报错,感觉解出来,给我认识了解到的js差别还是大 image

  1. 飘红是因为和你配置的格式不一致,你需要额外格式化一下。
  2. 你可能是较少接触加密脚本的还原。这类脚本能够将被复杂化的脚本简化,但变量名是不可逆地被替换为了随机的可读性非常差的名称,无法被还原回来。
  3. JS语言本来就可以以分号结尾,也可以省略分号(意味着必须换行,增加了代码的长度)。
  4. 你在运行时需要将得到的代码放回原文件并替换解密前的代码,或者将删掉的代码加回来。
  5. 整个解谜过程有多个步骤,第一个步骤“处理全局加密”(也是最主要的步骤)基本不会破坏代码,但后续的步骤有较小的概率破坏代码的逻辑(如果代码经过精心设计)。如果代码无法运行,你可以只做第一个步骤。
getr00t commented 1 year ago

@getr00t 17-814一共不就是798行吗 (814-16=798)

照你说的是解开了,但是我发现不对啊,在vscode打开都是满篇红,看起来像是格式错误,还有就是你这个工具解开不一定百分百正确的是吗?我发现解开后有的变量还是十六进制的码,并没用成功的转化解开,还发现每一行代码结尾都加上了分开;貌似不需要分号,我试着去掉分号就不然会报错,感觉解出来,给我认识了解到的js差别还是大 image

  1. 飘红是因为和你配置的格式不一致,你需要额外格式化一下。
  2. 你可能是较少接触加密脚本的还原。这类脚本能够将被复杂化的脚本简化,但变量名是不可逆地被替换为了随机的可读性非常差的名称,无法被还原回来。
  3. JS语言本来就可以以分号结尾,也可以省略分号(意味着必须换行,增加了代码的长度)。
  4. 你在运行时需要将得到的代码放回原文件并替换解密前的代码,或者将删掉的代码加回来。
  5. 整个解谜过程有多个步骤,第一个步骤“处理全局加密”(也是最主要的步骤)基本不会破坏代码,但后续的步骤有较小的概率破坏代码的逻辑(如果代码经过精心设计)。如果代码无法运行,你可以只做第一个步骤。

那么晚还没有休息吗?辛苦了, 1:我发现你这个项目里面使用了eslint和Prettier对吗?所以导致我使用vscode打开爆红是这个原因吗?因为我没使用有关eslint的任何配置,所以这个必须我也要配置eslint和Prettier才可以解决不爆红对吧?应该怎么正确配置尼,之前我尝试过配置eslint和Prettier来格式化,但是都失败告终,也就没用在研究了,慢慢的就习惯了无eslint和Prettier的环境 2:确实之前没又接触到,第一次接触到js解密加密,也是无意间搜到你的项目,正好研究折腾下, 3:js确实可以使用分号,但是我都没使用,貌似不使用分号打包混淆可以节约点空间大小(哈哈哈) 4:是什么意思我没用懂尼, 5:原理是这样啊,我都不清楚这个,那么是否可以判断代码解密是完整还原出来的而没有被破坏的尼?

echo094 commented 1 year ago
  1. eslint和Prettier只是针对项目里的代码,当然你也可以用来格式化生成的代码。你可以看到项目里有几个以.开头的文件,这些一般就是配置文件(这种格式的文件在linux里会被当成隐藏文件),其中.eslintrc.json.prettierrc.json分别是eslint和Prettier的配置文件。
  2. 最后生产环境的代码一般会压缩成一行,是不可避免要使用分号的。
  3. 一般来说,一个脚本只会把重要的内容给混淆了,但并不代表其它内容就没用。比如说这个脚本最后的Env函数就是这类脚本通用的初始化函数,你要是不加回去,当然是用不了的。
  4. 这个没法判断,但一般只要能运行就没问题。

混淆相关的问题已经解决了,我把issue关了。

这个脚本还用到了类和变量式函数名,这些都是比较新的东西了。

getr00t commented 1 year ago

恩我貌似找到了Env这个文件和这个脚本的整套模板,分享一份你的.eslintrc.json和.prettierrc.json文件吧,谢谢