[初入逆向]- 午安农场的一次逆向学习记录

背景说明

源于农场脚本泛滥,终于歪呦哎的大版本更新,因为一帮吊毛们使用脚本疯狂种菜,导致午安的nc被鱼油们疯狂播种,yui和午安于是一拍即合,上周末憋了一坨大的,把午安nc的请求进行了一波加密,并且js还进行了恶心的混淆,此时脚本档哭天喊地,对yui和午安进行了惨无人道的精神攻击。脚本党暂时性歇菜了……甚至我的一台小破服务器也被yui加到黑名单了。(把47的那个服务器放出来啊……呜呜呜)

需求说明

在当前背景下,各路脚本党开始了对yui加密方式的破解,我也加入了这个大队伍,然而,一帮子吊毛都是三分钟热度,看了一眼js说被混淆了,看不懂,就不研究了,剩下我和达不溜还在跟yui战斗到底(还好有达不溜陪我),各路吊毛退出队伍后将这个对大佬来说易如反掌,对我来说难如登天的任务留给了我。

逆向过程

1、首先要看各个接口的入参,n次请求后发现,入参有三个,pem和key是固定值,只有data字段在变化,所以我将逆向重点放在data字段上

2、查找入参加密的js文件,在控制台源代码那里找到对应的js文件,然后搜索关键字,如果搜到关键字说明就是这个js文件里的某个方法对参数进行了加密(或者使用fiddler抓包程序,抓取对应js文件)

ps:这里如果你直接搜data的话肯定有很多结果,所以你可以在源代码里搜pem这种不常见的字段

3、分析找到的js文件,可以看出来js文件是进行了各种处理,导致代码可读性几乎没有(我不是前端,我是真读不懂,可能前端大佬能读懂吧),那我们只能拿出来这个方法,进行分析

4、从代码看,虽然没读懂data的直接生成方式,但是可以看出来data生成的时候跟e有密不可分的关系,往上追溯e的来源,发现e是加密方法的入参转换成字符串,然后进行URI编码,然后进行base64加密生成的密文,这个比较简单,自己写一个方法,执行一下就可以看到结果。

5、验证上面的逻辑是否正确,把这个js文件的代码复制下来,保存到本地,打开fildder(妈了个头的,这个破东西老早之前安装的,一段时间没用发现打不开了,不知道发生了什么,我重新安装了一个才行),添加规则把请求的js资源替换成本地文件,修改本地文件的内容,添加console.log(),从控制台查看输出内容与自己写的那点代码输出的内容是否一致即可。

吊毛yui重写了console函数,导致输出无效了,好气~

6、发现结果一样,接下来就是分析e又去干啥了,看起来e好像还调用了一次B7,然后调用了K7,看了B7的代码发现实际上就是返回了一个固定的字符串。那么主要的加密方式就是在K7了

7、找到K7的方法,发现有个switch,并且外面进行了for循环,找到for循环的条件发现for和switch其实就是对代码执行顺序进行了调整,对数组内容分析发现执行顺序是0、4、3、5、1、2

8、第一步直接就拿着K7的入参f调用了T7(我尼玛,老母猪带胸罩,一套又一套,我都调了好几层啦!!!),我有点烦躁,选择不管T7,先研究43512,然后发现43512其实就是做了点计算。

9、接下来研究T7,T7的两个入参分别是B7返回的固定字符串和一开始生成的密文,判断了两个参数的长度,并对入参进行处理,直到B7的字符串长度大于等于密文,最后对数据进行一次substring并返回。

10、然后我将整个代码逻辑梳理一遍,把K7和T7方法用可读性代码重写,然后随便找个页面,打开控制台(别问我为什么不在大冰的页面执行)将{"url":"/store","method":"GET"}作为入参,调用一下重写的K7方法,看看最后输出的密文跟请求中data字段的密文是否一致。

加密代码

此处当然是放在打赏区咯

打赏区的代码中jsonParam是商店接口请求的明文参数,encodeParam_1是第一次对参数进行uri编码和base64加密,K7和T7是对密文进行自定义加密处理(已重写为可读代码),代码最后输出的内容应该是请求商店接口的入参里data字段,可以通过控制台查看是否一致。

结果验证

第一张图片是请求体的内容:

image.png

data: G6sgLmb8mznNwJl7/gq2=QUNnVc/L=t/x/K2hM92/MJx21LZst14SjDbpR=Lpw7iYynJkomuo14=DMlB

第二张图片是我在别的页面控制台执行的代码结果:

image.png

最终结果 G6sgLmb8mznNwJl7/gq2=QUNnVc/L=t/x/K2hM92/MJx21LZst14SjDbpR=Lpw7iYynJkomuo14=DMlB

两个结果一致,打完收工!

顺便说,js代码可读了的话,其他语言是不是也都可以开展了?给我狠狠的种!!!

16 打赏
打赏 20 积分后可见