传奇私服发布网_新开传奇网站发布_最全优秀单职业传奇私服发布平台_www.sf999.Com
新开传奇私服网站专注于服务广大新开传奇首区和复古传奇私服玩家,我们承诺全年无休,每天为您提供最新的新开传奇网站和传奇sf999信息。...
2025-01-03
解开微信进行debug获取加密逻辑和还原js后硬逆,两种思路各有利弊
小程序sign逆向和渗透两种思路,总有一款适合你
0x01 sign发现和排查思路
起因是在做小程序渗透的过程中,改了数据重新发包显示系统异常,数据包如下图所示,猜测可能是这行是sign校验,所以才会出现异常
然后因为正常请求是显示的是code无效,且请求头中存在大量参数,于是为了排除干扰就开始依次修改请求头中的每一组值再发包,如果修改后发包显示系统异常,那就证明这个sign值校验跟这个请求头也有关,最后如下图所示,初步判断请求头中有四处busi-、busi-、busi-appid、json请求体、这四处变一下响应就变成了系统异常,所以盲猜busi-就是根据他们四个的值进行计算得来的
0x02 解开微信进行debug获取加密逻辑
接下来使用之一种方式进行破译sign校验,虽然这个方法非常简单,但是其实这个方式我并不推荐,因为它是需要解开微信小程序,存在封号风险,所以如果要尝试一定要使用自己的微信小号、同时注意一定不要使用虚拟机!!!
我这里远控我另一台电脑登录我的微信小号,工具地址:
打开微信后执行
-.exe -x
成功打开
上图代码分析,首先要知道busi-appID是写死的后续不会改变,然后可以看到busi-的值是a,而a又是一个函数计算得到的,我们直接跟进这个函数,如下,可以看到它先创建个HMAC对象秘钥是t,然后对e进行了计算,这里直接debug
debug后,我们将秘钥拿出来,这里秘钥我们直接获取到了,是(其实我们可以看之前调用该函数那张图片,上方有个变量r,它其实就是秘钥,它的值是一堆值的想加之和,那个我之前也简单看了一眼都是字符串加在一块)
然后开始查看变量e,看着乱七八糟但实际上也很简单,分成四部分,之一部分就是请求体的json参数,第二部分就是请求头中的时间戳,第三部分就是请求头中的,第四部分就是请求地址了,然后字符串中间用\n拼接起来,就是最终的值e了
0x03 还原js后硬逆
接下来的方式就比较头铁了,它不能debug,而是利用还原出js然后硬逆,这种方式有一点好处就是不用担心封号风险,还原的方式有很多,之前我都是手动找然后手动还原的,现在也是有师傅写了工具,非常简单:
这个程序有一点就是它寻找微信的路径是默认路径,由于我的电脑微信的路径非默认路径,所以我改了下代码重新编译了下
.exe scan
直接扫描,选择后回车直接解密
同理我这里也是从0开始,用vs code(当然你也可以用小程序开发者工具,看个人习惯)打开后全局搜busi-:,它在一个函数里面
把这个函数拿出来整理一下,如下,接下来我们挨个去分析,首先busi-appId这个是一个固定得值所以没什么好说的,然后busi-就是时间戳这个也没什么好说的
其次就是busi-,其实有经验的就知道它是个随机字符串,busi-的计算依赖于,但是是什么其实没多大关系,接下来我们可以简单看一眼,busi-怎么来的,代码在前面,我这里直接粘过来
最重要的还是busi-,而它是根据函数计算出来的,这个函数有两个参数,我们先来看简单的r,也就是秘钥,r的赋值就在上方的语句中
归根结底也是一堆字符串的拼接,但是有个问题就是我们分别得找这些对象c、l、f.k3我们不知道这些对象是谁
r = “”.(c.k1).(l.k2).(f.k3.slice(2)).(c.k4),
其实找他们也很简单,有一个便捷方法, 但是讲解便捷方法之前,我先硬扣一下k1和k4,而他们属于对象c,那么对象c在哪里呢,我们根据这个代码往前回溯,如下图之前分析的所有代码其实都隶属于38,而看到如下图所示的代码后,其实一眼看出这就是构建工具生成的代码,38代表38这个模块,而C的值其实也能看到是n(39),所以可以知道n大概就是模块加载器,而我们想知道的c对象其实就是39这个模块
所以我们直接搜索39:,至此k1和k4拿到
然后回想我们刚才的代码如下图,现在还剩下标红的两部分,那么这块我们就用我们上文中提到的简便思路,其实非常简单,直接搜索k2 =和k3 =
k2如下
k3如下
所以最后拼接得到秘钥(要注意k3用了slice(2)函数,取得是从索引为2位置开始的字符串)
^lC@I!$&@
秘钥得到了,接下来就该研究,另一个参数n了,其实也很简单,把之前的图拿来,我们重点看红框部分
为了更加直观,我把代码粘贴出来并修改了下格式,下方代码判断t.是否是get,如果是get就按照之一行计算,如果不是就按照第二行计算,
//这里判断如果t.是get,这里t不能猜出就是当前http对象,n就等于后续的字符串相加,s通过上图可以看出是get请求中url的参数部分,d通过上上张图片可以得出是busi-的值,y则是busi-,后续又加上了请求中的去除参数的url部分
if (n = “get” == t. ? (s || “”) + “\n” + d + “\n” + y + “\\n” + (t.url.(“?”) ? t.url.split(“?”)[0] : t.url) + “\n”
//这里类似,非get请求走的是下面的代码, 跟上面类似,唯一一个区别就是最开始的字符串是t.data,也就是post请求中的请求参数
: ( *** ON.(t.data) || “”) + “\n” + d + “\n” + y + “\\n” + (t.url.(“?”) ? t.url.split(“?”)[0] : t.url) + “\n”,
这里我们将参数n和r都拿到了,就剩函数还不知道,直接一搜就明了了,如下图
至此,我们把整体的逻辑通过js代码还原了出来
0x04 利用
这里提到利用的话,通常按照之前的习惯我肯定是用,代码如下,已经写好注释了
代码(.py)
time
#截获请求加密data,以及更新sign
def (flow):
if flow.. == “POST”:
# 加载js文件
with open(‘exec.js’, ‘r’, =‘utf-8’) as f:
= f.read()
# 加载执行环境
= pile()
#获取json数据,不为空直接赋值,为空的话会抛异常那就手动赋值为空字符串
try:
json_data = flow.request.json()
except Exception as e:
json_data = ''
#url无参数
url = str(flow.request.path).split('?')[0]
#noncestr
noncestr = flow.request.headers.get('busi-nonceStr','')
#时间戳
now_time = int(time.time())
sign = js_exec.call('get_sign',url,json_data,noncestr,now_time)
#更改时间戳和sign
flow.request.urlencoded_form['busi-timeStamp'] = now_time
flow.request.urlencoded_form['busi-signature'] = sign
js代码(exec.js)
const = (‘’);
= ‘^lC@I!$&@’
(url,,,){
e =
+‘\n’+
+ ‘\n’+
+ ‘\’
+ ‘\n’+url
+ ‘\n’
const hmac = .(‘sha1’, );
hmac.(e)
sign = hmac.(“hex”)
sign
然后执行
.exe -p 8081 -s .\.py
之后就可以随意发包了不用担心sign了
0x05 结语
公众号小惜渗透欢迎师傅们关注交流哈,另外这个文章等审核完后过些天也会同步,所以有过有想转发到公众号的师傅们等我微信投完原创再转发哈
像微信小程序目前有很多项目或思路能强制打开,这样我们debug去调试非常简单就能还原加密过程,但是一些其它APP为载体的小程序,目前还没有思路,如果有思路的师傅可以指点一下
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,请告知我们,本站将立刻删除涉嫌侵权内容。
相关文章
新开传奇私服网站专注于服务广大新开传奇首区和复古传奇私服玩家,我们承诺全年无休,每天为您提供最新的新开传奇网站和传奇sf999信息。...
2025-01-03
明确否认him存在,但是我们可以从一些蛛丝马迹中发现官方有说谎的可能性。就有细心的玩家,从这五个地方观察到了him存在,总共4个证据。...
2025-01-03
8条回答:【推荐答案】主公莫慌(手游)-新手奖励1.序列号:gsaq6617(官方)固定唯一,可重复激活无数新账号。2.奖励:3000绿钻,1000将魂,1紫将...
2025-01-03
网盘提取码: xawy帝国cms内核仿《新趣头条》娱乐游戏资讯网站源码,适合做电竞,娱乐,评测类的站点。利用模板改改可以轻松完成1个站点。不带安装教程...
2025-01-03
热评文章
2022年专属火龙之神途新版
1.80龙神合击传奇
1.76永恒小极品+5复古传奇
1.76双倍魔天大极品第三季单职业
1.76神梦传奇三职业
1.80聖统圣统合击三职业传奇