你好陌生人,请不要试图越过权限文章,谢谢!

对微信小程序上的程序一点分析

说点啥

  一开始,由于受人之托对掌尚北国APP进行分析,一般来说,我是要进行抓包,事实上我也是这么做了;我下载好APP后发现没找到应该有的活动信息,才发现这个活动在微信小程序上独有的,这就很难受,毕竟微信这种封闭的生态,可能不好搞,但总归交互总要走网卡,所以应该还是能够抓包的,就来试试吧。

分析的过程坎坷

安装模拟环境

  经过朋友推荐,我下载了一个MuMu模拟器,非常适合进行对手机抓包,当然bp也是可以抓的,我单纯是为了方便。后面我采取了HttpCanar一款比较优秀的抓包的软件,很香。看看效果

  抓包的效果,都是可以比较直接的抓到这些数据包的,可以看见里面的请求信息与响应信息,比较直观的获取。

分析数据

  我直接把抓的url结合参数进行请求,结果是完全成功,可以进行下一部分析请求参数了

  他的参数是以json形式请求,其他参数没多大问题,重要是sign这个签名,太坑了,任意修改添加一个参数,报错。

  这就很无奈了,经过测试,我删除其中参数也会报错,增加其他参数也会报仇,并且我还尝试了以下方法:

  • 对json的value值拼接字符串加密失败

  • 对json的value值基于ascill加密失败

    所以我猜想可能是基于json的数据以某种形式进行加密,大可能使用了循环遍历了里面的参数,因为我添加新参数也报错就是证明,

    补充:sign是32位 符合MD5大写形式

    可能存在一个匿参数appid参与验签,因为图中有一个appkey

    都是我的猜想。

逆向获取微信小程序源码

  后来我想到,sgin肯定是在前端生成的,它肯定有一套属于自己的算法,那我是不是获取到他的源码就可以呢,说做就做。

  我们都明白,微信小程序虽然内嵌在微信,属于一个生态,但是他本质上还是属于web界面,所以肯定会有痕迹,缓存,于是我查了一下资料,果真,有方法可以获取到微信源码。它的方法是这样的:

对模拟器进行root操作,并下载RE管理器

  解释一下,微信会缓存一个wxapkg的包在系统文档中,所以我们只要找到这个包,反编译一下就可以获取到他的源码了。

在这个文件路径下,找到缓存的类似于这样的文件打开,如果不确定,可以删除,然后重新登录微信重新缓存就好

  这个就是啦,我们压缩一下发送到我们电脑,然后反编译

  反编译的程序是我在github上找的,直接拿来跑

  这个反编译后的代码结构,很遗憾,并不是完整的,这也是没有办法的办法。

碰撞MD5

  没办法,还是没找到sgin的生成方式,我写了一个程序去猜测了一下,然而并没有什么用。只能把他的MD5放到网络跑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import hashlib




dict_list ={
"time":"1618572891wx0ae5e7e4b7ffd8ba"
}

s = ""
for item in dict_list:
s += str(dict_list[item])


z = ""
for item in sorted(s):
z +=item


print("字符串拼接的结果:" + s )
print("基于ascill排序后的结果:" + z)

input_name = hashlib.md5()
input_name.update(s.encode("utf-8"))


success_sign = "7664aefab9fd99269f8cbd8349441017"

# .upper()
password = (input_name.hexdigest())
print("正确结果:" + success_sign )
print("实际结果:" + password)




if(password == success_sign):
print("success")
else:
print("error")

结尾

  很遗憾,最后我也没能破解sgin的加密算法,因为源代码太乱了,我找不到它的生成方式,算是一个小缺憾,我把它这个像MD5的sgin放到网络上碰撞,看看后面有没有结果,如果能的话就应该可以成功使用这些接口直接操作了。虽然没能完成,过程中确进一步的了解到了新的知识,还算可以接受,记录一些,以后方便使用。