吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4036|回复: 45
收起左侧

[Web逆向] 某解析wasm逆向

  [复制链接]
heihei123 发表于 2023-12-2 14:56
本帖最后由 heihei123 于 2023-12-6 14:26 编辑

目标网址:

aHR0cHM6Ly92aXAueWV5dWxpbmdmZW5nLmNvbS8=
aHR0cHM6Ly8xMTAuNDIuMi4yNDc6OTA5MC94cGxheWVyL2FwaS5waHA=

1、首先打开f12抓包并按下播放
image.png

注意这之前要先过掉下面的检测

Date.prototype.valueOf = () => 1701318661525

image-1.png

2、发现视频地址如下
image-2.png
继续往上找 api.php很可疑
image-3.png

用通过调用堆栈发现下面很可疑、但是代码太难看了
image-4.png
解混淆后看一下
image-5.png
可以看出params参数就是下面这行代码生成的

IIiIIi11 = encrypt(JSON["stringify"](iI1iiii));

控制台打印一下encrypt
image-6.png
然后在如图所示的位置下一个断点、并点击播放
打印一下argument、继续单步进入
image-7.png
然后就进入了wasm中
image-8.png
在wasm中搜索一下md5,aes之类的关键词并下断点
最后在$crypto/cipher.newCBC和$crypto/aes.NewCipher这两个地方下断点

为什么呢?因为这玩意是Go编译的,看前面使用了Go对象就知道
在网上搜索了一下

Go AES加密

image-9.png
是不是很相似、接下来就是就是找key和iv了

encrypt函数就一个参数是代加密的明文 很显然key和iv是在程序运行时获取的

根据上面的Go的AES实现我们可以知道key是NewCipher时传入的,iv是newCBC时传入的(图中key和iv一样所以没有)
image-10.png
image-11.png
打上断点后 运行
image-12.png
可以看到成功在NewCipher处断住了 查看一下值
image-13.png
可以看到173648位置的'abcdef1234567890'很可疑
继续运行到newCBC
image-14.png
同样打印一下173824位置处有个'1234567890abcdef'
image-15.png

验证一下上面的猜测
先看encrypt('1')的值
image-16.png
很不对劲 为什么是null呢?

调试发现encrypt和decrypt都只能使用一次,使用了之后应该是修改了某些东西,反正就是不能用了

点击播放按钮刷新,断住查看
image-17.png
encrypt('1')的值是'hlUV9j5EVfhgSWGjL4okdg=='

先用JS复现、代码如下

t = '1';
key = CryptoJS.enc.Utf8.parse('abcdef1234567890');
iv = CryptoJS.enc.Utf8.parse('1234567890abcdef');
result = CryptoJS.AES.encrypt(t, key, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7
}).toString();

image-18.png
发现结果一毛一样,就是标准的AES_CBC加密
但是到这还没完

我们实际使用的时候会发现和CryptoJS的结果不完全对的上
encrypt(s)的结果
image-19.png

CryptoJS
image-20.png
就是后面的有点对不上,而且encrypt(s)同样的s每次结果都不太一样
一看就是在在wasm中加盐了,因为有decrypt直接使用decrypt输出一下结果看看
image-21.png
果然多了个timeout和fingerprint,每次都有变化就是因为timeout这个时间戳在变

fingerprint很好找(ps:好像随便的填都行''.padEnd(8,0))
image-22.png
image-23.png

对应的python代码

from Crypto.Cipher import AES  
from Crypto.Util.Padding import pad, unpad
def add_to_16(value):
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)
def AesEncryptCBC(origData):
        iv = '1234567890abcdef'
        key = 'abcdef1234567890'
        cipher = AES.new(add_to_16(key), AES.MODE_CBC, add_to_16(iv))
        paddedData = pad(origData.encode('utf-8'), AES.block_size)
        encryptedData = cipher.encrypt(paddedData)
        return base64.b64encode(encryptedData).decode()

def AesDecryptCBC(t):
        iv = '1234567890abcdef'
        key = 'abcdef1234567890'
        cipher = AES.new(add_to_16(key), AES.MODE_CBC, add_to_16(iv))
        decryptedData = cipher.decrypt(base64.b64decode(t))  
        decrypted_text = unpad(decryptedData, AES.block_size).decode('utf-8')
        return decrypted_text

成功请求
image-24.png

最后

  1. 这样分析只是基于这是标准的AES、魔改或函数名改了都会很
  2. wasm里面还有一个比较值得一看的函数$runtime.stringFromBytes, 当时没想到用decrypt解密时就是看这个的
    image-25.png

在JS中是靠下面这两个函数写入wasm中的
image-26.png

  1. 最后还有一点就是python模拟请求的时候要注意一下,JS中请求是下面这样的
    image-27.png
    python中就要使用json不能是params或data
    image-28.png
  2. 因水平有限,若有错误之处、还请指出😄

image-24.png

免费评分

参与人数 12吾爱币 +15 热心值 +10 收起 理由
trust1234 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
cxc666999 + 1 用心讨论,共获提升!
timeslover + 1 谢谢@Thanks!
changesmile + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
江南小虫虫 + 1 用心讨论,共获提升!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yp17792351859 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
熊猫拍板砖 + 2 + 1 用心讨论,共获提升!
hehehero + 1 + 1 热心回复!
howyouxiu + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
T4DNA + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

涛之雨 发表于 2023-12-29 10:50
changesmile 发表于 2023-12-16 00:02
我后面理解你的写法,把两个Date都写死这样取出来都一样就能过debugger,这个是vm生成的不能修改文件,如 ...

楼主的做法的从Date比较时候使用的属性上下的文章,
打开控制台试一下下面两个例子就知道了

[JavaScript] 纯文本查看 复制代码
console.log(new Date()>999999999999999999)
Date.prototype.valueOf = () => 9999999999999999999
console.log(new Date()>999999999999999999)

[JavaScript] 纯文本查看 复制代码
const oldTime=new Date("2022");
const newTime=new Date("2023");
console.log(oldTime<newTime)
Date.prototype.valueOf = () => 999
console.log(oldTime<newTime)
头像被屏蔽
Chris2023 发表于 2023-12-7 22:11
wasm2023 发表于 2023-12-4 14:38
qqycra 发表于 2023-12-4 15:06
现在wasm逆向真多啊
vcdemon 发表于 2023-12-4 16:35
那种很大的wasm文件,浏览器里代码显示不全的,该怎么调试呢?
涛之雨 发表于 2023-12-4 22:23
本帖最后由 涛之雨 于 2023-12-4 22:26 编辑

原来是这个。。。刚准备看wasm

image.png

麻烦楼主编辑一下帖子,把多余的不支持的html标签处理一下,
(此外,小声逼逼,建议使用Markdown编辑)
huxian2020 发表于 2023-12-5 00:32
没有js文件吗
130366 发表于 2023-12-5 05:50
真厉害,好羡慕你哦
xjcyxyx 发表于 2023-12-5 07:15
学习了,谢楼主
hlowld 发表于 2023-12-5 10:31
学习一下,好东西
kinful 发表于 2023-12-5 11:21
感谢楼主分享!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-27 13:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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