本期实战让我来分享一下最新的网易云更新的加密逻辑。首先,我们右键检查,等待一下抓包。好的,我们可以看到传过来了三个数据包,其中一个是T荷载,显然不是我们要找的。然后中间有一个web translate,这个数据包看起来很像我们需要的。现在我们可以看到数据已经被加密了。
接下来我们再试一个,可以看到又来了同样的good auto。这里自动... 等等,我们可以看到这个sign签名,这些都是不变的。然后看一下这个my static time,看一看这个time是动态的还是静态的。接下来,我们就先把核载给搞定。我们来看一看这个sign发起的程序,我们通过路径来搜索一下,看到只有一个结尾词文件,我们打开进去,然后搜索一下S,可以看到这里就有一个SN,还有一个t my static time t,这个T应该就是一个时间戳了。然后就是SN,让我们再在sin这里打一个断点,然后换一个,比如说... 嗯,好像有点问题,让我检查一下。
然后我们来定义一个函数,叫做sin。首先,我们需要获取时间戳,还有重要的时间。我们可以直接从时间模块中导入time,然后调用time.time()就可以了。这是获取sign的值,通过参数传入的sin值。我们要创建一个 MD5 加密的对象,首先我们得有 obj 等于 NMD5,然后 obj.update,我们要把 TX 密文传过来,然后我们要密文的什么格式呢?要用 UTF-8 的格式,包括 utf8。然后我们就把它加密就可以了,就等于 obj 点变成16进制 hexdigest。然后直接 return sign。
我们把这个时间戳给替换一下当前世界,然后乘以1000。然后我们来实现一下吧,已经拿到了。然后我们来试一试发送请求吧,把这个断点给释放了,找到这个包,复制四加成50,然后打开一个在线转换的一个小小网站,你把这个给复制一下。这里就写一个函数,就这样把 post 请求吧,把这个 request 记得给改一下。然后我们可以试一下,就是这个 cookie 带哪些不带哪些,它会返回 cookie,就检测了一下这个 IP。
这个 IP 只要是个活跃的 IP 就可以算了,随便输一个 IP,只要是存活的 IP,它就可以生效。然后这里这个要改变,这个就叫我们要传过来的,换一个 key。有注释这个行吗?发送 post 请求过去毕文 Leaders run,什么 PIDSN,这里 sin 这个函数。然后这里找到这个,不用哦,那有什么要改的吗?没有了,我直接返回就返回 response test 看一看吧。返回有问 Response ext 写个论再说,word 等于 input,你把这个单词就直接发送。
执行一下,看我们能不能拿到密文数据,比如说,那就等一个 key 好。可以看到拿到了一堆密文数据,一个等号。其实很有可能是非对称密钥加密。这里加一个板块好。现在我们就继续看我们能不能拿到他的简历的方法,然后我们来看一看路径 Bb class late,同样是路径搜索。
在这里,现在没有什么参数可以搜索,我们就用 XH2 断开连接,按需暂停,然后再跟一下站,点击翻译。网络有一点慢,然后呢我们跟一下这,还是 UI,我们看看他什么时候传传那个返回对象吧,看清楚这里什么时候有 response。不是,不是,不是,也不是,也不是,这是 request。现在已经发请求了,这里慢一点,可以看到 B 问题的密文数据已经出来了。
It is... 这时候我们就慢一点,那你看在哪儿解密呢?嗯,不是这个是什么东西,这个应该也是继续看看在哪解密。跳过,跳过,网络异常。这个浪漫的,这里有什么东西吗?好像刚刚有个什么东西一闪而过。二五,任意向战,Secret key,Ecode key,Code iv,现在又出来一个 t code iv 了,在这个地方出来了,我们要的明文数据,我们看看这个是什么。
这是 O 是在这里,你看 decode date,decode key 说明什么,这个就是我们要的解密的方法。好了,再来一次,方法找到了你诶,他怎么直接放开,应该是不是要进行下一步哦?对,也就是说可能是因为网络原因。我们来看一看这里 t code date 一个方法。N 是我们的秘闻,我们先把 N 复制过来,那是这种东西,可以把这些给注释了。一会儿我们再来给你一个啊。EVEN C 等于被串,我看看这里还有一些什么东西,背对什么 geecode key,这个是不是不变的,我们来看一看前面的 key 是不是不变,多数几遍哦。
Bl 应有两种姿态,一直都没变,大概率不变,我们直接把这个就叫 decode key,我们就来 keep,有 keep 或之后会不会还有 iv,果然 decode iv p 不变,这个 iv 估计也是不变,一般这种 T 和 V 在单次加密或者某些情况都不会变。保险起见,我们输一下吧,其实也可以进去看一看,object 可以看到 secret key,这都是这个对象里边实例化的东西,这肯定是一个静态的。然后现在就是这个方法,我们看一看这个方法是什么,看看 T,我们先进这个方法,直接走到这里,怎么不走哦?
应该是已经解密完了,说明这里关不住,我们在 return 这里断,都给他带上,在这边来了。我们来看一看通过这个方法,其实这里看 mod AES CBC a 这个是什么,一个一个 unit8array,这个就是一个 16 字节的一个字符,字符举证 RR 还没定义,R 在这儿呢。我们再让它运行,不 R 定义了吗?R 是什么?R 也是一个,我们看一看,一个 REBUFFER 这里,然后还有一个是啥,还有一个是 I 哦,不对,还有一个是 A。看看 A 是不是也是一个 BULI,这个是 A 这个是 R 是一个字符集阵,然后他们两个传进来,形成了一个模式,然后这个模式用把这一串变成 base64,然后 UTF8,然后返回这个。CBCAES Input 这个就不管了,这个估计就是用 I 这个这个加密模式,我们要先先声明用什么模式来加密。
然后把他的 key 和 iv 传进来。传进来之后,然后把它更新,更新这个 T 的值。这里应该就是明文对,然后再把这个 T 的值转化成 UTF-8 哦。两个 UT 封了吧。大致的思路我们已经拿到了,它就是一个非对称密啊,哦非对称加密。然后非对称加密呢也可以直接用 Python 来写,就不扣代码了吧。他这个逻辑感觉还是挺简单的,先试一试看能不能解密。如果能解密就不用扣代码,如果不能解密再说。直接 from sapp 点 cf2 import。然后我们在这里写一个函数 1V1S,ENCRYEE 我们要传什么进来,传加密的东西进来。然后 KEIV 它已经帮我们转化成字节了,我们直接直接就可以来了。直接把 TD 就等于贝塔的爱感,哪个是 key 来着?AA 是 key,A 是 KEA 是哪个来着?忘了这里 A。哦这个是 A,那么 key 就是 A。对 08149D 这个直接把这一块写进来。杠 X 平方杠 X 我们用 A1S 创建一个对象,叫 A1EX 点连对象只有一个把 T 传过来,然后模式 CBC,然后转 id。
明文等于解密。然后我们要把这个先用 base64 的方法来加密一次为 B 十六四点这个 Rilc base 60 加密以后要用这个来用贝斯路斯方法来解密这个 ENC 完了之后我们直接返回一下,把它变成 UTF-8 的模式来返回字符串。然后把一些不必要的换行给干掉,然后用 key 和 LV,不用直接把这个 DNC 调一下这个方法。B e s EMC 直接 root。
我们拿到了,现在直接把这个方法放回去,就是这个方法将解密密文解密密文,然后获取 SI,然后把 boss 请求好了。现在我们的 MC 等于的就是 ost word,然后 CTX 等于这个叫什么 MC,然后 bring cctx 就可以了。写个 while true Data must be padded to cbc bo 有什么问题来了,有可能是请求的原因,现在可以看到我们已经成功拿到了,刚刚那个可能是因为有些请求的问题,我可能是个监测那个 IP 啊之类的。Hello,然后让我们来试试中文吧,中文也可以。然后再来说一个 today 意思。现在呢这个逆向到这里就结束了。
标题:针对网易有道翻译的JS逆向分析
链接:https://www.7kxz.com/news/xydt/34858.html
版权:文章转载自网络,如有侵权,请联系删除!