记录一次反混淆的过程

目标:http://laji.shadiao.co/
这次的事情还是很有意思的,首先团队内部讨论到垃圾分类智能识别,然后说道,这东西已经有轮子了。结果就看到网上很多api,阿里云的api市场就有。于是就有成员搞到了一个案例网址。

最初我也没想到,只是摁了一下F12,就打开了新世界。
没错,网页会被暂停。接下来,就是重头戏了,他的main.js完全被压缩和混淆,根本无法阅读
我们开始了格式化整个main.js的过程,经过我一上午的格式化,main.js有约千行js代码,多的令人头晕目眩。

首先是关闭防debug,方便调试,在代码中搜索,debug,然后在

...{debugger;}else{debugger;}...

的位置

改成

...{true;}else{true;}...

因为他的代码压缩的只有一行,因此咱们也要搜索的慢慢修改着来

这样一来console就能打开了,然后试试看请求一下,搜索垃圾袋,出来的url 是get方法,提交了三个字段,appkey ,sign,name

通过简单的URL解码,我们知道name就是你输入的垃圾袋,appkey就应该对应的上游api鉴权和统计
那么sign是什么?

我们看到他用了jq,因此一定有 g e t 来 请 求 a p i , 但 是 全 j s 中 get来请求api,但是全js中 getapijs非常多,于是开始一行行解析。
首先是rc4,,我们注意到有一个_0x4c3d的东西。里面构建了rc4加密的算法。_0x4c3d()这个方法可以传递两个参数,前面是秘钥,后面是密文,(不过这个密文其实还和__0x45fdb这个大字典有关系,因为真正的密文在大字典里面)于是,所有调用_0x4c3d()这个函数的方法其实都可以得到静态的字符串了

那么,这个加密的究竟是什么呢?搜索 $[ 可以得到5个结果 :
比如这个$[_0x4c3d(‘0x4f’,‘gTNq’)]

在浏览器的console中输入:_0x4c3d(‘0x4f’,‘gTNq’)

看来这个是 e a c h , 那 么 我 们 需 要 解 析 的 是 each,那么我们需要解析的是 each,get中拼接的sign,
接着查$[_0x4c3d(‘0xed’,‘Ex[C’)] = $md5,
$[_0x4c3d(‘0xf8’,‘VsUo’)] = $get !find !

接着再往后就是无脑的繁琐的拼接过程,函数内部有个小的对象_0x2d6833来处理常量和自定义函数
比如这个解析出来的时间戳函数
_0x2d6833[_0x4c3d(‘0xeb’,‘FLe5’)](String,Date[_0x4c3d(‘0xec’,‘S1jb’)](new Date()))
浏览器执行 _0x4c3d(‘0xeb’,‘FLe5’) = ‘KbDDL’
‘KbDDL’:function _0x1d47eb(_0x167400,_0x3c9fe9){return _0x167400(_0x3c9fe9);}
因此翻译一下就是这个函数
String(Date[“parse”](new Date())).substring(0x0, 0x8)

时间戳函数破译出来之后基本上sign也就破译出来了
sign的构成是
md5(appkey + String(Date[“parse”](new Date())).substring(0x0, 0x8) + ‘senluodata’ +$input().val +appkey)
中间sojson的字典让我们走了很多弯路,但是清楚了sojson混淆的逻辑之后,反混淆就简单许多。人生第一次认认真真反混淆成功
本次参与反混淆的人员:叶神,纵欲 <-警察叔叔就是这两个人

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值