吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 3081|回复: 41
上一主题 下一主题

[原创] 记录一次还原被加密的js代码的分析过程

[复制链接]
跳转到指定楼层
楼主
15774211127 发表于 2019-8-16 14:55 回帖奖励
本帖最后由 15774211127 于 2019-8-16 15:08 编辑

昨天在网上看到个js加密网站,感觉好玩就尝试分析了一下;
记录下分析过程
(分析了该网站有多种加密方式,有几种太简单(可以说几乎没有加密效果所以就不记录了))
这次分析该网站的所谓‘最牛加密’

1.加密
加密的内容是随便写的不用在乎(奇葩的是我本来没把代码放在自运行函数里,他不让我加密,后来这个自运行函数竟然透露了加密的主体内容,哈哈😄):
[JavaScript] 纯文本查看 复制代码
(function(w, d) { 
alert(123);
var b = 2341234;
function c(c){
console.log(c);
}
c(b);
})(window, document);

加密配置:
加密时,使用的是相对低难度的加密方式(我认为要从简到难,逐步了解设计思路)

加密后的内容:一大段代码,大家可以自己尝试去加密下


2正常运行


打开控制台,发现没有输出,并且自动进入了断点模式(由于加密配置勾选了禁止控制台输出和调试)

3.拿到底代码是一行,打算格式化一下

运行


死循环,导致网页崩溃(猜测是防止格式化在起作用)
于是先打开debug模式再重新加载网页,一段时间后内存溢出

找到代码,发现一旦进入for就是个死循环
_0x4e35ef一直在push数据

于是往前找循环条件_0x4e35ef的来源,找到调用方法的地方,刚好只有一个地方调用来,所以一下就找到了,
发现_0x4e35ef是固定的值:['*'],也就是说一旦进入_0x3f9723['setCookie']方法就是死循环
而是否调用_0x3f9723['setCookie']是由148行的_0x525af1变量决定
所以继续找!_0x525af1的来源
_0x525af1是由147行的updateCookie方法返回的
而updateCookie在145行被赋值为变量_0x43f445的内容
_0x43f445在141行定义,进入查看_0x43f445方法内部
发现new RegExp();正则匹配,正则内容看起来是16位编码的,于是复制拿到控制台输出

还真出来了,解析下匹配规则
大概是:
一个以上非空白字符+n个空格+一对括号+左花括号+一个以上非空白字符+n个空格,加单引号或者双引号+非换行字符+加单引号或者双引号+分号+一个以上非空白字符+右花括号
嗯??? 这不就是函数吗??

143行正则表达式对removeCookie.toString()返回的内容匹配
找到removeCookie定义的地方125行,发现由于我们格式化了代码所以它换行了,而正则表达式要求不能找到换行字符,
所以这里就是它判断我们有没有格式化代码的地方了

我们把它还原成一行

在另外一处还有一个类似的判断,我就越过了,大家自己去找
运行发现栈溢出

找到代码发现是相互调用产生的
入口是_0x1a42e3方法开始
找到_0x1a42e3调用位置
发现382行两个判断
第一个条件值_0x10eca9在390行定义
又是一个正则测解析了下和刚刚的一样,
区别就是不是明文,不知道对谁做了什么操作

控制台输出16进制编码

发现是测试_0x2cb896.toString()
将它还原成一行
判断值_0x3f38e1同上

运行

发现自动debug没法调试
在提示中看到596行调用debugger;加了断点
我们全局搜索注释掉它
到这他的一些调试限制就去掉了
已经可以在debug模式下正常调试
下断点单步运行到我们的代码位置(可以直接下在第一行代码处)
由于立马循环很多,加上我原来的代码有个弹窗,所以我直接大步跳过一直定位到弹窗处

发现弹窗后它指向了520行,也就是说我的代码在520行之前
在519行看到}(window, document));;???????
这不就是之前的自运行函数吗
查看代码
这个自运行函数在250-519行
阅读代码找到除变量、函数声明外的第一行代码

alert???我的第一行不就是alert(123)??
把第二个参数十六进制转出来发现刚好是123;
所以_0x3b581c['bHMmN'](alert, 0x7b);
_0x3b581c是一个处理函数
第一个参数是调用的方法名,第二个参数是属性(不信大家自己去看)
接着看下一行
var _0x2cb05c = 0x23b972;
我原来的代码是var b = 2341234;
把值的十六进制转换出来还真是2341234

继续往下找到

而_0x1feb9定义在刚刚那两个下面
我们有理由相信他就是我原来的
function c(c){
console.log(c);
}
c(b);
这两句代码;
到这我们到代码全出来了;
有人可能会说那没没看到原来的代码内容啊
那是因为变量名被混淆了
由于它还有一些其他代码就不详细说明了
下图中的函数它每次加密都有我认为它是一个解密后的文字
因为他的大多数方法调用都是加密过的,全部都会通过这个函数解密

而如果我们加密了复杂的代码被它加密后
我们可以通过它解密还原
比如:

我们直接看不知道它调用的是什么来对比
我们可以输出它

可以看到它是调用_0x596178的vXjHy属性

其他一些不影响还原的问题自行调试
源文件
test.zip (6.76 KB, 下载次数: 16) 解压密码52pojie


免费评分

参与人数 17吾爱币 +16 热心值 +15 收起 理由
onething + 1 + 1 热心回复!
蓝海悦 + 1 + 1 热心回复!
dns2018 + 1 用心讨论,共获提升!
gaosld + 1 + 1 用心讨论,共获提升!
wnzczh4987 + 1 + 1 我很赞同!
keysking + 1 + 1 用心讨论,共获提升!
测试中…… + 1 + 1 热心回复!
nishishabi111 + 1 + 1 我很赞同!
easy123456 + 1 + 1 用心讨论,共获提升!
thenow + 1 + 1 我很赞同!
qaz007 + 1 + 1 用心讨论,共获提升!
易拉罐儿 + 1 我很赞同!
就是这么帅 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
cnjn + 1 热心回复!
eric9988 + 1 + 1 我很赞同! 热心回复!
Monitor + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
井右寺 发表于 2019-8-26 10:09
15774211127 发表于 2019-8-26 09:58
这。。。。我也不是很清楚呢
可能是一些商业的建站模版需要加密吧,
而且也是可以增加一定安全性吧

因为我感觉,F12随便抓通信,你代码加密再复杂,除了降低自己的性能,其实效果不是特别明显。前端做安全安全性实在太差了,还是把这部分交给后台处理比较好。
我觉得uglyfy一下就好了,勉强可以保护知识产权就ok了。
嗯,就看投资回报比了,可能有的需求就是需要加密,哈哈哈哈,反正我还没遇到这种应用场景
推荐
 楼主| 15774211127 发表于 2019-8-26 09:58 <
本帖最后由 15774211127 于 2019-8-26 09:59 编辑
井右寺 发表于 2019-8-25 22:40
JS加密的意义在那里呢?
保护知识产权吗?

这。。。。我也不是很清楚呢
可能是一些商业的建站模版需要加密吧,
而且也是可以增加一定安全性吧
比如百度网盘的分享密码
他的代码是在前端用js生成的,就出了很多自定义分享密码的插件
我感觉这个本身问题倒是不是很大
但是由于插件都是第三方的,可能包含跨站脚本或者跨站请求这类的,或者监听输入账号密码啥的,安全性就不高了
4#
Monitor 发表于 2019-8-16 15:15
不知道那种变态版的能不能也用这方法来还原
5#
yjkhnwfn 发表于 2019-8-16 15:31
只能佩服了  太牛X
6#
 楼主| 15774211127 发表于 2019-8-16 15:44 <
yjkhnwfn 发表于 2019-8-16 15:31
只能佩服了  太牛X

额小白一个,只是突然灵感来了,挡都挡不住
7#
 楼主| 15774211127 发表于 2019-8-16 15:45 <
Monitor 发表于 2019-8-16 15:15
不知道那种变态版的能不能也用这方法来还原

大多数都能还原的
只是时间或成本的问题
8#
phubing 发表于 2019-8-16 15:55
啊~~~我之前就是用这个网站加密的js,哈哈哈哈
9#
 楼主| 15774211127 发表于 2019-8-16 16:14 <
phubing 发表于 2019-8-16 15:55
啊~~~我之前就是用这个网站加密的js,哈哈哈哈

那你可能得升级加密算法了哦,哈哈
感觉好像不太有效,这个算是这个网站的好的加密方式了,他的其他那些控制台一调试就出来了


10#
a774733519 发表于 2019-8-16 16:21
膜拜一下
11#
悲蝉唱空凉 发表于 2019-8-16 16:37
我之前发了一个这个网站的加密js,没人解决,楼主看一下?
https://www.52pojie.cn/thread-988519-1-1.html
12#
 楼主| 15774211127 发表于 2019-8-16 16:38 <
悲蝉唱空凉 发表于 2019-8-16 16:37
我之前发了一个这个网站的加密js,没人解决,楼主看一下?
https://www.52pojie.cn/thread-988519-1-1.htm ...

稍等,我看下,不一定成功,这个需要灵感
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2019-9-19 02:03

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表