JS逆向
📙JS逆向-手撸ob混淆解密
00 分钟
2025-2-20
2025-2-20
type
status
date
slug
summary
tags
category
icon
password
😀
今天主要是处理混淆代码进行解密操作,从而实现数据的获取。

📝 主旨内容

确定位置

通过各种手段确定解密的位置。
notion image
点击切换年份,就会触发他的发包请求,我们通过网络控制面板可以看到抓包的详情。
点开第一个包,然后我们简单的看一下
notion image
这里其实我们可以看到这里的year就是我们对应切换的年份,所以这个包很值得怀疑。我们看一下响应内容。
notion image
可以看到返回内容都是加密的,这就很容易让别人怀疑。然后为了进一步的确定,我们翻看了后面的所有请求,都没找到符合我们心中的请求包,都是一些图片,所以这里我们可以很大概率确定就是这个包所请求的数据,然后网站中在进行解密从而实现数据的交互。
老规矩找到切入点。我们看一下请求的堆栈。
notion image
堆栈他并不是很多。我们重点怀疑PostAPI这个函数,因为看名字就知道这是一个网络请求器。我们跟去看一下。
notion image
我们重点是要看这个success函数,因为这里的意思是,如果请求成功就会回调到这个函数去。这里我们就找到对应的解密入口位置。

分析解密函数

我们找到相对应的解密函数,接下来我们就要分析他是如何一步一步解密的。
我们找到这里打个断点,切换到别的年份。
notion image
我们可以看到这里其实他已经停在这里,并且请求返回的加密响应内容,也在这里显示出来了。我们跟上去看一下。
notion image
这次我们一看就是字符串等各项名称超级乱,其实这个是OB混淆了,使其变量名不太容易阅读。
我这里简单介绍一下这个混淆的作用。
这个混淆的代码中,主要使用了将变量名替换为无意义的字符串(例如 OB, OC, OD等),并且通过复杂的字符串拼接或转换来隐藏实际的逻辑。具体来看,它通过以下几种常见技术进行混淆:
  1. 变量名重命名:变量名被替换为短且没有意义的字符串(如 OB, OC, OD),这样使得代码阅读起来更难理解。
  1. 字符串和数字编码:代码中的常量、字符串或数字可能通过一些特殊的编码方式表示,例如 String.fromCharCode 等,这种方式使得开发者无法直接从源码中识别出原本的内容。
  1. 复杂的控制流:通过添加多余的控制流结构(如大量的条件判断和函数调用),让原本简单的逻辑变得复杂难懂。
  1. 隐藏函数和表达式:通过函数调用和字符串拼接隐藏真实的代码逻辑,通常这些函数的命名也会被混淆,使得代码更难推理。
然后我们继续调试,其实就是定义了一个object对象,然后接着就是分割一个列表,后续跟着这个列表去执行对应的switch的流程。
notion image
notion image
我们跟着一直走即可。来到最终的解密位置。
notion image
最后就是在这个地方进行了解密的。其实就是DES解密的函数,然后得到最后的一个结果。

Python还原

代码还原如下。
效果如下
notion image

🤗 总结归纳

OB混淆我们看到先不要怕,仔细观察每一个流程,想办法复原,很多细节其实就是在你不断的调试中去发现的。
上一篇
js逆向-某证信Accept-Enckey参数加密解析
下一篇
如何处理无限debugger模式

评论
Loading...