吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7248|回复: 30
收起左侧

[Web逆向] 某网站wasm md5简单分析

  [复制链接]
我是不会改名的 发表于 2023-9-21 22:49
本帖最后由 我是不会改名的 于 2023-9-21 22:52 编辑

某网站wasm md5逆向分析

目标网站:aHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXIxb2JoanRpNTguaHRtbA==

目标参数:&vf=

一扣代码

下一个xhr断点

image-20230921195350251

往回找堆栈,发现核心部分在mmc里面,下个断点刷新跟进去

image-20230921195535804

传入参数就是链接去头去尾,返回字符串长32

image-20230921195756858

跟进去,看起来就一个简单的webpack

(window.iqiyiPlayerJSONPCallback = window.iqiyiPlayerJSONPCallback || []).push([[1], {
    1089: function(module, exports, __webpack_require__) {
    ...............
    },
    576: function(x, a, e) {
        var i;
        i = function(x, a, i) {
            var r = e(1089)
              , c = null;
            i.exports = {
                setEngine: function(x) {
                    c = x
                },
                mmcd: r.mmcd,
                mmc: function() {
                    var x = c && c.sbtr;
                    x && x.authkeyInvoking();
                    var a = r.mmc.apply(r, arguments);
                    return x && x.authkeyInvoked(),
                    a
                }
            }
        }
    }
}]);

关键函数就是1089里面的mmc,直接扣下来,因为没有依赖其他文件直接拿下来就行了,简单运行一下

image-20230921201011825

结果就是不一样,说明很可能检测了环境,直接上v神插件

插件地址:https://github.com/cilame/v_jstools

image-20230921201456141

检测了一些简单的东西

image-20230921203822118

点击生成临时环境,复制到文件开头

image-20230921205544375

根据报错修改代码

image-20230921205832957

测试结果完全一致

image-20230921205925238

算法还原

首先是一个简单的ob混淆,随便找个开源的就能还原

image-20230921210748008

然后删除虚假分支,我用的蔡老板插件

image-20230921211001515

然后删除无用代码,找大妈

image-20230921211253366

从还原后的代码可以依稀看出来,是wasm,只不过并没有看到有wasm文件,它是直接编译成了asm.js

image-20230921211950857

通常最简单的命令是

emcc main.cpp -s WASM=1 -o main.js

要想不输出wasm,而是转成asm.js.把WASM=1 改成WASM=0

除此之外,它还将异步加载改为了同步-s WASM_ASYNC_COMPILATION=0;

如果是异步加载,直接运行会报错

最常见的报错就是

TypeError: Cannot read properties of undefined (reading 'apply')

主要原因就是,异步加载asm没有赋值,也就是c导出函数与js没完成交互

image-20230921212923009

既然是wasm,那么环境检测很可能不在wasm,而是在导入函数中,目前遇到的检测,有直接导入检测函数,有把eval导入,wasm里面存有部分检测代码,除此之外,由于go自带js的特殊性,给人一种感觉可以直接获取环境,实际上还是通过js交互的

目标网站就属于第一种导入函数

image-20230921213618235

导入了很多函数,一个个分析发现,只要au返回6就行

function aU() {
    return 6
}

image-20230921214030777

测试和网站一样,基本准备工作就完成了

返回值是32位很可能是md5,搜索一下关键字

image-20230921214501425

然后就没有然后了

image-20230921214544155

还原是不可能还原的,这辈子都不可能的

从初始化的值没看出有什么魔改,找一份标准的md5,有很明显的特征,16*轮循环,把每次的case打印出来,简单画一个图

image-20230921215718350

把出现16次的打印一下

import numpy as np
from matplotlib import pyplot as plt
from collections import Counter
from t import data
counts = Counter(data)
valid_data_points = {key for key, value in counts.items() if value == 16}
filtered_data = np.array([point for point in data if point in valid_data_points])
plt.plot(filtered_data)
plt.show()

很明显有4次16轮循环

image-20230921220005058

101,80,25,-117,-98,96,88,17,

第一轮核心部分就这些

101

                        case 101: {
                                v = $x & ~Rx | Qx & Rx,
                                Ex = sa + -1 | 0,
                                s = 80,
                                Ex = Ex >> 2,
                                f = v,
                                ta = na,
                                v = (v + (Ux & -2) & -2 | Ux & 1) + (v & 1) | 0,
                                g = aa + ((ia | 0) % 16 | 0) | 0;
                            break
                        }

就对应着

(b & c) | ((~b) & d) 以及safe_add(a, q)

                       case 80: {

                                s = sa + 32 | 0,
                                    s = (g | 0) > (s >> 2 | 0) ? 36 : 25;
                                break
                            }
                       case 25: {
                            s = (g | 0) > (Tx | 0) ? 136 : 139;
                            break
                        }
                       case -117: {
                                s = (g | 0) == (Tx | 0) ? 166 : 158;
                                break
                            }
                      case -98: {
                                s = (g | 0) > (Tx + 1 | 0) ? 83 : 96;}
                      case 96: {
                                s = 88,
                                    f = c[G + (g << 2) >> 2] | 0;
                                break
                            }

​                           

看起来没啥用

                        case 88: {
                            Ex = ca + (ia << 3) | 0,
                                g = f >> 1,
                                g = _i64Add(c[Ex >> 2] | 0, c[Ex + 4 >> 2] | 0, _bitshift64Shl(g | 0, ((g | 0) < 0) << 31 >> 31 | 0, 1) | 0, w() | 0) | 0,
                            w() | 0,
                                g = (f & 1) + g | 0,
                                Ex = (g + (v & -2) & -2 | v & 1) + (g & 1) | 0,
                                f = ((ia | 0) % 4 | 0) * 5 | 0,
                                ta = f + 7 | 0,
                                f = 25 - f | 0,
                                f = Ex << ta | (f ? Ex >>> f : Ex),
                                s = 17,
                                Vx = $x,
                                Fx = (f + (Rx & -2) & -2 | Rx & 1) + (f & 1) | 0,
                                _x = Rx,
                                xa = Qx,
                                ra = ia + 1 | 0,
                                ma = ka;
                            break
                        }

88就是最核心的了,看不懂不重要,其中f就是加密的数据,保存下来跑一下

image-20230921220906655

添加一个日志点,保存数据

image-20230921221048019

from Crypto.Util.number import long_to_bytes
d = [1935762479, 1819557736, ''']
datas = b""
for i in d:
    datas += long_to_bytes(i)[::-1]
print(datas)

去除填充转成字符串,随便找个在线网站试一下,很好说明只是加盐了,只是加的有一点点离谱

总结

总的来说,相对还是不难,比某迅的vmp加wasm简单一点,环境监测有但不多,有混淆相当于没有(蔡老板yyds),主要是控制流烦人,我这里取巧了,大佬们直接还原就行了

除此之外,app,TV端用的应该是同一套代码还原基本一致,trace代码,找到添加数据位置,拿出来就行了,只是TV端同一个src可能有

两个盐,主要是qd_v不一样。 bj.7z (1.3 MB, 下载次数: 174)

image-20230921222821587

免费评分

参与人数 27吾爱币 +36 热心值 +27 收起 理由
wuaiquchao + 1 鼓励转贴优秀软件安全工具和文档!
aAChengYay + 1 + 1 我很赞同!
felix009 + 1 + 1 我很赞同!
zjczzz + 1 + 1 我很赞同!
baiduyys + 1 + 1 我很赞同!
fateofkingdom + 1 谢谢@Thanks!
forte5 + 1 + 1 我很赞同!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
gaosld + 1 + 1 热心回复!
zhan + 1 + 1 谢谢@Thanks!
aniu + 2 + 1 用心讨论,共获提升!
allspark + 1 + 1 用心讨论,共获提升!
Bob5230 + 1 + 1 我很赞同!
yiyuh95 + 1 + 1 热心回复!
Tonyha7 + 1 + 1 神中神
杨辣子 + 1 + 1 大佬就是大佬
OVVO + 1 + 1 我很赞同!
逍遥一仙 + 4 + 1 用心讨论,共获提升!
zhengsg5 + 1 + 1 谢谢@Thanks!
notproblem + 1 + 1 谢谢@Thanks!
wangguang + 2 + 1 佬tql
max2012 + 1 + 1 我很赞同!
horsebojack + 1 + 1 热心回复!
Eqwer + 2 + 1 我很赞同!
熊猫拍板砖 + 2 + 1 谢谢@Thanks!
正己 + 4 + 1 月亮哥哥ddddhm!!!
hrh123 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

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

涛之雨 发表于 2023-9-22 11:03
tql!请速速删掉,让我来发
yiyuh95 发表于 2023-9-23 14:12
大佬,为啥我根据你教程拿到那个盐值后后面跟着好几个\x的十六进制数据,这个去掉与不去掉结果都不正确哎,求大佬再指点一下,给个提示
liangjinwuxin 发表于 2023-9-23 09:24
可以,原来还有检测环境的说法啊。这个厉害
gallon 发表于 2023-9-23 10:45
大佬已经开始注入了,我还不懂是什么呢
xixicoco 发表于 2023-9-24 01:12
太强了,牛逼
naturewonder 发表于 2023-9-24 12:43
怎么判断加盐那块还不是很清楚,烦请楼主指导下
ttyer 发表于 2023-9-24 13:03
记录一下。番茄下载失效了。能站内消息指导一下吗?
jingyao066 发表于 2023-9-25 10:10
感谢分享
cl5531 发表于 2023-9-25 14:51
果然是高手
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-23 15:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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