首页
关于
案例站
tools
记录
推荐
我的B站
Search
1
安卓逆向-unidbg辅助算法还原
34 阅读
2
安卓逆向-Bilibili播放量接口
28 阅读
3
JS逆向-知网滑块
21 阅读
4
安卓逆向-五菱白盒AES
16 阅读
5
安卓逆向-瑞幸咖啡白盒AES
13 阅读
JS逆向
安卓逆向
小程序逆向
登录
Search
标签搜索
安卓逆向
JS逆向
密码学
unidbg
sana
累计撰写
12
篇文章
累计收到
6
条评论
首页
栏目
JS逆向
安卓逆向
小程序逆向
页面
关于
案例站
tools
记录
推荐
我的B站
搜索到
3
篇与
的结果
2024-07-17
JS逆向-产业大数据平台
一、产业政策大数据平台1.前置网址:aHR0cDovL3d3dy5zcG9saWN5LmNvbS90eXBlUG9saWN5P2lkPTYmbmFtZT0lRTUlODUlQUMlRTclQTQlQkElRTUlODUlQUMlRTUlOTElOEE=目标:表单参数2.逆向思路首先打开抓包页面就可以看到一个无限debugger,在这里我们使用hook的方式来过;hook代码如下:// 变量 构造器 AAA = Function.prototype.constructor; Function.prototype.constructor = function (a) { if (a == 'debugger'){ return function (){}; } return AAA(a); };或者去李玺老师博客找更好的hook代码:http://cnlans.com/lx/tools/jshook将这段代码复制到控制台运行或者新建代码段执行,我推荐第二种;执行后即可过掉debuuger;我们向下翻页,可以发现一个没有见过的加密参数;有一点像乱码,那么我们就要去找到它的生成位置;在以往来说,这种表单参数没有关键词的时候,且是异步加载时,我们可以去找他的拦截器关键词,但在这里没有办法直接搜索,因为它是经过混淆的,但这个思想在其他地方适用;在这里我们就可以去下xhr断点,之后进行分页,此时断住;点击异步栈的第一栈,也就是箭头的指向;进入之后打上断点,并将xhr断点放掉;此时观察s,它里面会有拦截器,进入内部看,可以看出是经过混淆的;我们需要的是请求拦截器,所以我们就需要看当前是否是我们需要的位置;很明显这就是请求拦截器,也可以去其他几个方法看看,因为它有时候不止一个拦截器,我们就不去看了,把外面的断点放掉,然后进入这个断点;可以看到此时我们的参数还是明文,那我们就需要点击跳出函数来看它在哪里变成的密文;点击跳出一次后参数任然是明文,所以继续跳出;此时作用域没有值了,我们再跳一次;再跳一次就可以发现我们的参数生成了,那我们就需要去前面找加密方法;那么有没有可能是明文消失的前一栈呢,很有可能,我们找拦截器的原因就是生成参数的位置大多都会在那里,既然明文消失的最后一次出现是在拦截器,那我们理应去那里找,再次触发请求;来到上一个位置就可以发现参数就是在这里加的密,那我们依次在控制台还原里面的混淆;将改写后的代码都拿下来;这即是我们的加密方法,那么此时我们需要做的是就是找到这三个方法是吧,首先去找这个encode方法,点击进去;进入一个虚拟文件,那么我们的方法就是这个policy,将它拿下来,注意此时不要拿return,只拿方法;我们观察这个方法,传进去两个参数,将断点打进去,可以看到m是我们的参数,w不知道,那我们可以看到它说如果w不存在,就创建,那我们直接不传,让它生成就好了;但这里会报错创建方法不存在,那我们也需要进去看看;进入之后可以看到一个很熟悉的东西,webpack,那在这里我们的思路其实就是将它导出再调用;我们就需要去找到他所在的大方法里,也就是顶格的方法;在这里我的方法是将整段复制到pad++里,然后比较方便找,语言选择js,然后折叠所有层次;再搜索我们的方法;这样就比较好拿我们的方法,我们拿下来后进行改写;此时运行一下会报错commonjsGlobal,我们在控制台输出它,发现他就是一个window对象,那我们直接全改成window,然后再定义一个window对象;此时我们先注释掉其他的代码,只留下这个webpack看看能否运行,发现是没有报错的,那我们就可以导出函数了,在顶部顶一个zt变量,用来接受加载器;此时我们就可以试着打印一下zt,看看有没有接收到方法;可以看到成功的拿到了方法,所以create函数就可以改写为zt..Writer.create()了,此时直接打印一下看能否出值;可以看到出值了,那么后面两个方法应该就在上面的webpack里,当然这里还会有一个报错,会说参数类型错误,经过调试其实就是参数中的 "policyType": '6',这个6必须是字符串形式;和网页上进行对比看看是否是正确的;可以看到结果是一致的,那么参数逆向也就完成了;使用python进行请求,可以成功拿到数据;
2024年07月17日
13 阅读
0 评论
0 点赞
2024-07-17
JS逆向-马蜂窝加速乐ck
一、马蜂窝1.前置:网址:aHR0cHM6Ly93d3cubWFmZW5nd28uY24v需要逆向的参数:cookie/加速乐;2.逆向流程:首先我们需要理解加速乐的过程,整体逻辑如下:首先进行第一次页面请求,它会返回一个响应的cookie,以及一段简单的js代码,那么第一次请求就会得到两个cookie,分别为 __jsluid_s和__jsl_clearance_s,第一次请求结束之后,带着这两个cookie去进行第二次请求,会得到一个js代码。它会生成一个新的cookie值,将它赋给__jsl_clearance_s,然后再带着这两个cookie进行第三次请求,就能够得到最终的响应;理解了整体的逻辑我们就可以进行第一步了;首先查看第一次请求;可以看到返回了一小段js代码,这段代码可以直接在控制台执行得到结果的,我们肯定需要进行第一次请求拿到这个结果,以及服务器为我们响应的cookie;其次再进行第二次的请求,带着第一次请求得到的两个cookie去请求,会得到另一段比较长的js代码;可以看到是经过混淆的代码,那么我们就需要去看这段js代码了,我们在这里打上一个事件断点;然后将cookie清空进行刷新,此时就可以断住,来到我们的第二段js代码;我们将代码折叠,来进行相应的分析;其实它是经过了ob混淆的,第一行是一个大数组,第二行一个自执行,第三行解密函数,用来解混淆,那么重要的也就是后面的东西,结尾可以看到它调用了go函数,往里面传了参数,那么我们就来看看go函数;搜索document,打上断点,因为cookie就是与document相关的,我们让程序执行过来;里面其实就是cookie,那么后面的就是我们的值;那么我们就可以去找值的生成位置了,对于加速乐来说,直接全部拿下来就可以了,进行简单的补环境即可;需要注意的是,这里的参数里的hs也就是里面的hash算法,他一共有三种,我们需要进行一个判断,然后写三种加密,分别为md5、sha1、sha256,然后进行一个简单的判断;我们就可以得到第二次请求需要携带的cookie,然后我们进行相应的请求进行测试;请求成功的结果如下:py代码如下:# coding: utf-8 # File: 马蜂窝加速乐.py # Author: 下雨天 # Date: 2024/01/20 16:50 from calendar import c import re from urllib import response import execjs import requests url = "https://www.mafengwo.cn/" headers = { ··· } def first_req(): response = requests.get(url, headers=headers) cookie1 = re.findall('document.cookie=(.*?);location', response.text)[0] __jsl_clearance_s = execjs.eval(cookie1).split('clearance_s=')[-1] __jsluid_s = response.cookies.get_dict()['__jsluid_s'] return __jsluid_s,__jsl_clearance_s def sec_req(): __jsluid_s,__jsl_clearance_s = first_req() cookies = { "__jsluid_s": __jsluid_s, "__jsl_clearance_s": __jsl_clearance_s } response = requests.get(url, headers=headers, cookies=cookies).text res = execjs.eval(re.findall('};go\((.*?)\)</scri',response)[0]) # 通过正则匹配到js代码,然后用execjs.eval()将得到的值变成字典 print(res) cook3 = execjs.compile(open('马蜂窝加速乐.js', 'r', encoding='utf-8').read()).call('go', res) cookies = { "__jsluid_s": __jsluid_s, "__jsl_clearance_s": cook3.split('ce_s=')[-1], } return cookies def third_req(): cookies = sec_req() response = requests.get(url, headers=headers, cookies=cookies) print(response.text) if __name__ == '__main__': third_req()
2024年07月17日
5 阅读
0 评论
0 点赞
2024-07-09
JS逆向-知网滑块
一、知网滑块1. 前置网址:https://bar.cnki.net/bar/dist/index.html?platform=NZKPT&returnUrl=https://kns.cnki.net/kcms2/article/abstract?v=tJ8vF22QX-q7kidyidVkTi-15296WO2bIZkecNQnvATomVsZzFd4vsj-3nwGsNPXaBqCOjgkuJE-Ik7jGSynrXwWxD4eTmqK7wwk-xox4OLeV639rCKCz8NKDn3bxBwoROTns2CYDbk=&uniplatform=NZKPT&language=CHS需要逆向的参数:表单参数 pointJson2. 逆向流程链接后续为随意一个论文或期刊的详情页链接;首先我们的思路就是先拿到验证码的图片,我们进行抓包分析;点击刷新验证码按钮发起请求,可以看到相应的请求信息,我们查看他的返回;可以看到这两组值应该就是图片的base64格式,那么我们验证一下;可以看到是没有问题的,那么我们的思路就是将他们拿下来,然后进行距离的识别即可;所以我们第一件事情就是请求验证码,我们看看它的请求需要哪一些东西;可以看到对于验证码的请求并没有其他的参数,所以我们可以去发起请求;在这里我们拿到了大小图的二进制数据,此时我们去进行滑动,触发一下校验请求;观察参数,发现token是请求验证码返回的,代表着这张验证码给谁了,所以我们校验的时候带着这个token,那么就代表cookie应该是不被需要的,但是同时也可以看到有一个pointjson参数,那么大概率会是验证码相关的东西;所以我们搜索它看看能否找到加密位置;很容易就找到加密位置,所以我们就需要对它进行分析;可以看到,这里执行的就是:左边的代码,所以我们这里需要找的就是i,在上方就有它的生成;选中的其实就是我们滑动的距离,所以我们对它进行处理;所以我们这里需要拿的就是u方法,其实就是AES;那么这个加密就比较简单了,所以我们需要的就是滑动距离;使用ddddocr进行识别,然后得到需要的pointJson参数,然后就可以去进行验证了;结果如下,在这里需要注意的是这里的参数是字符串,并且json转的时候是会有空格的,所以我们进行了替换;
2024年07月09日
21 阅读
0 评论
0 点赞