找回密码
 会员注册
查看: 28|回复: 0

某乎X-Zse-96(xzse96)分析

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-12 16:12:00 | 显示全部楼层 |阅读模式
特别声明!本章只单纯为了学习!前言今天通过知乎的一个参数,来学习逆向的新思路,希望大家能有所掌握。一.抓包分析我们进入之后搜索,发现这个数据包比较大,肯定就是这个了包了 然后我们就进去观看请求头 我这里就直接说明了,我们今天要逆向的就是这个值X-Zse-96,这个值其实压根不检测,但是我想通过这个值来教会大家逆向新思路。二.入口定位我们直接搜索,发现有两个X-Zse-96在两个的位置上都打上断点 发现成功断住,发现 x-zse-96=t2+"_"+tO 而t2是固定值,所以我们要找到tO,这里我就不给出截图了,大家一看就知道观察这个可以发现实际上就是要找tT的生成,,其中tT的参数都是不变的大家可以测试下,现在进入ed函数。发现这个signature不就是我们要的值吗,我们在控制台打印一下。确定就是了。三.代码分析 我么上面已经能够确认入口了,那我们就要开始分析了。我们打印参数 可以发现tp是传进来的参数,而 ty()(tp)一直不变而且很像是一个摘要算法,tJ(ti).encrypt(ty()(tp))又一直改变。我们就思考为什么呢?首先来验证y()(是不是摘要算法发现的的确确就是md5,那为什么tJ(ti).encrypt(ty()(tp))会一直变呢,我们猜想一下,可能是时间戳,可能是随机数,还有可能是rsa算法,如果是rsa那就麻烦了,如果是前两个我们给他hook掉,不就好了吗,那我们来验证一下,这里给出hook代码。//hook掉时间戳Date.prototype.getTime=functionname(params){//正常是要在这执行以下的return1700000000000;}//hook掉随机数Math.random=functionname(params){//正常是要在这执行以下的return0;}我么来验证一下hook时间戳发现还是变的hook随机数发现值不变了,那我们是不是只需要扣完的代码再对random进行hook,对11111111进行加密,看看值匹不匹配就知道对不对啦!四.抠代码我们从加密点进去发现是一个webpack,那我们就往前面找 这个函数存在于这个里面,所以我们先把这个扣取,再扣取加载器,然后执行这个模块,导出函数就大工搞成了。 我们全局搜索1514,然后打一个断定,发现这个tr就是调度器,我们进去把这里全扣就好了,于是我们把两处代码进去扣去,先补上常见的环境,再对random进行hook我们运行,发现报错,我们就把self都换成是window  至此,代码扣好,准备补环境五.补环境 先补上我们常见的,然后再放入proxy代理,这里我给出proxy代理和常见的补环境代码functionsetProxy(proxyObjs){for(leti=0;i3){}elseif(property=='webpackChunkheifetz'){}else{console.log("方法:","get","对象:","${proxyObjs[i]}","属性:",property,"属性类型:",typeofproperty,",属性值:",target[property],",属性值类型:",typeoftarget[property]);}}returntarget[property];},//set:function(target,property,value,receiver){//console.log("方法:","set","对象:","${proxyObjs[i]}","属性:",property,"属性类型:",typeofproperty,",属性值:",value,",属性值类型:",typeoftarget[property]);//returnReflect.set(...arguments);//}}`;eval(`try{${proxyObjs[i]};${proxyObjs[i]}=newProxy(${proxyObjs[i]},${handler});}catch(e){${proxyObjs[i]}={};${proxyObjs[i]}=newProxy(${proxyObjs[i]},${handler});}`);}}logger=function(){console.log('\x1B[31m%s\x1B[0m',arguments)}window=global;deleteglobal;deleteBuffer;document={}navigator={}screen={}localStorage={}location={}history={}setProxy(['window','navigator','screen','document','localStorage','location','history',]) 发现值还是不对,代理一看就知道,缺少ua,那我们补上补上这些, 接着运行看到这个,我们一看就知道是toString的检测,下面是浏览器的返回值 那我们补上就好了,接下来几个都是一样的,这里我们只挑重点讲发现这是要补document.createElement方法,那我们就先这样document.createElement=function(arr){logger(arr)} 发现打印的是canvas,那我么就这样补canvas={}document.createElement=function(arr){logger(arr)if(arr='canvas'){returncanvas}}同时把canvas添加到proxy的数字里监听起来  发现又对canvas进行操作,也是按照那个方法,补就行了。这里我就不多说1,主要是教重点。把这些方法补的都差不多的时候,发现这里都是undefined,大家也可以去补补,发现确实都是undefined,那怎么办呢,这个时候就很有可能是,try的问题咯,那我们一搜,发现那么多try,我们就想到,webpack把所有模块都导入了,很有可能用不上几个 我们就在调度器这里加上 发现只加载了两个模块,我们干掉其他的和里面的try,发现就一个,删除之后运行报这个错,我们直接补个空方法就好了 此致,环境补充完成。  总结通过知乎这个,虽然这个没有逆向,大家肯定也能想到,都有随机值了,怎么可能逆向呢?但是我们能学到补环境的很多知识! 补充有不懂的地方可以主页咨询我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 14:05 , Processed in 0.467459 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表