基于python的js逆向(Chat-GPT快速实现)

admin 2024年11月11日23:29:48评论9 views字数 1646阅读5分29秒阅读模式

闲来无事想复习一下js逆向,就以一个在线翻译页面为例。

基于python的js逆向(Chat-GPT快速实现)

这个工具是提供翻译API的,但是要收费,想要自己搞API,不去付费使用。

具体思路就是两步:

1、模拟浏览器去向服务端发起请求,并接收返回来的数据。

2、解密返回来的数据

------------------------------------------------------------------------

  • 模拟浏览器去向服务端发起请求,并接收返回来的数据

基于python的js逆向(Chat-GPT快速实现)这里的三个键是动态的值,如果直接写死发送会返回error,所以需要看如何构造。

首先:进入开发者模式(F12),并刷新浏览器抓包,一共发了两个请求:

第一个请求返回了数据

基于python的js逆向(Chat-GPT快速实现)

第二个请求返回的状态

基于python的js逆向(Chat-GPT快速实现)

所以肯定是第一个请求,分析第一个请求,并查看载荷(请求体)。基于python的js逆向(Chat-GPT快速实现)

  • i为我输入的内容,

  • sign是js文件生成的,看着像是MD5(需要知道对谁做了MD5?)

  • mysticTime应该是时间戳

基于python的js逆向(Chat-GPT快速实现)

返回的数据应该就是翻译过来的'苹果',看着像是被魔改的base64。

基于python的js逆向(Chat-GPT快速实现)

也就是说要想正确请求并能够拿到返回来的数据,需要知道sign和mysticTime这两个字段是如何生成的。

第二步:开始js逆向

找发起'http://xx/webtranslate'请求的函数,ctrl+shift+f,全局搜索'webtranslate'字段去定位,找到后加断点分析

基于python的js逆向(Chat-GPT快速实现)

这里可以看到对js函数名做了混淆,其实也无所谓,知道函数的功能就可以了。

先查看一下a['d']函数源代码,分析函数作用。

  • tip1:可以通过控制台打印函数,并点击定位

  • tip2:另一种方法是断点悬浮去定位

基于python的js逆向(Chat-GPT快速实现)

看到Promise(常见的发送请求的对象),可以确定定位正确。

结合上面的图片,可以知道a['d']接收三个参数e,t,o分别对应以下三个部分

基于python的js逆向(Chat-GPT快速实现)

e显而易见是请求,,o是定义了一个固定的头,现在是分析t对应的参数,(记住目标是要找生成sign和mysticTime的函数)

控制台打印'Object(n["a"])(Object(n["a"])({}, e), O(t))',找到了我们想要的这两个值,确定就是这个函数,接下来就是拆开一个一个的去分析了

基于python的js逆向(Chat-GPT快速实现)

同之前的定位方法(通过控制台打印函数,并点击定位):

基于python的js逆向(Chat-GPT快速实现)

可以确定答案就是O(t)这个函数,下一步就是定位O()函数的源码做解析,同样方法定位,走你...

基于python的js逆向(Chat-GPT快速实现)

发现了mysticTime的值,并找到了函数源码确定为时间戳。

sign值为h(t,e)函数生成,继续找...走你...

基于python的js逆向(Chat-GPT快速实现)

到这就已经清晰明了了,和猜想的一样:

    • sign是MD5,并做了16进制的转换

    • mysticTime是时间戳

第三步:上chat-GPT进行python重写

基于python的js逆向(Chat-GPT快速实现)

基于python的js逆向(Chat-GPT快速实现)

(chat-gpt生成的代码并不准确,要经过自己的真实情况去修改)

第四步:完整请求代码

基于python的js逆向(Chat-GPT快速实现)

  • 对返回的数据的进行解密

以上就是请求的分析完成了,接下来对返回的数据的进行解密

利用调用堆栈功能去看谁调用的这个请求对象

基于python的js逆向(Chat-GPT快速实现)

then这里看起来就是解析返回来的数据的,加断点执行...走起...

基于python的js逆向(Chat-GPT快速实现)

可以看到o就是返回来的数据,a是对返回来的数据进行解密之后的结果。

基于python的js逆向(Chat-GPT快速实现)

具体就是这行代码做的,o作为参数传给an["a"].decode(),解密后的结果给n,n做反序列化赋值给a。

之后就是查看an["a"].decode()的源码了,(同之前的定位方法,查找)

基于python的js逆向(Chat-GPT快速实现)

显而易见的是AES-128-cbc加密,cbc模式下需要key和iv,这两个值,也就对应着这里的a和c

基于python的js逆向(Chat-GPT快速实现)

要想拿到a和c的值(也就是看a和c是怎么构造的出来的)需要解析g(o),g(n),打印o和n的值,发现是一个固定值

基于python的js逆向(Chat-GPT快速实现)

那就是不需要看o和n怎么来的了,直接去看g()函数的源码。

基于python的js逆向(Chat-GPT快速实现)

上chat-GPT进行python重写

基于python的js逆向(Chat-GPT快速实现)

这样就可以拿到a,c的值了。然后就是把第一部分返回来的值先还原为正常的base64格式。

基于python的js逆向(Chat-GPT快速实现)

然后先base64解码,再AES解密就可以了(累了,不想写了)

到此结束,完整代码也就不贴了,安全第一。

原文始发于微信公众号(零威胁):基于python的js逆向(Chat-GPT快速实现)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月11日23:29:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于python的js逆向(Chat-GPT快速实现)https://cn-sec.com/archives/1996740.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息