某海外上报接口 strData 纯算逆向

本文仅作学习使用

1.目标

aHR0cHM6Ly9tc3Nkay1zZy50aWt0b2suY29tL3dlYi9yZXBvcnQ/bXNUb2tlbj1ISEhrTHJFN0pWZlNUdE5lei1LOW9YeE96WlpHSFlmOEFKd1pEMUdmRzluNlgtWE9sTUdOcmpSUGZsZ0FrdVhOWGlIb1BvejFfNENXMXdmVnFvamkwZ2FRSVlITEUxaG03VllLUW1oNXM0NWpTNjRVTUNFQ3RIZnI0WF9LMkdYQ2c4MGpCbktIYm1ZaWREbz0mWC1Cb2d1cz1ERlN6c3dTN01ZRFBTRUd0Q3plN3g5WEZoc2JJDQo=

2. debug

2.1 xhr断点

2.2 经典jsvmp输出日志

bash 复制代码
"执行 M->",l,"执行func->", M[sg[112]]," 参数 B-> ",B,"返回 N->",N
bash 复制代码
N&&console.log("执行 p->",p,"执行func->",sg[320]," 参数 o-> ",o," 参数 i-> ",i," 参数 u-> ",u," 参数 a-> ",a," 参数 c-> ",c," 参数 f-> ",f," 参数 s-> ",s," 参数 l-> ",l)
bash 复制代码
N&&console.log("执行 hg->",hg,"执行func->", hg[2]," 参数 N[0]-> ",N[0],"  参数 q-> ",q,"  参数 I-> ",I,"  参数 N[1]-> ",N[1])
bash 复制代码
!N&&console.log("执行 B->",B,"执行func->", B[sg[256]]," 对象 q-> ",q,"  参数 I-> ",I,"返回 A->",A,"typeof A:",typeof A)

2.3 日志分析

拿到日志后分析,日志大概几十万行

  • 一阶段str-code-str:
    初始化码表并动态存取
    双递归计算
    上下文运算值关联
  • 二阶段加盐
    静态数组+时间戳+随机数计算盐和盐arr(扣代码即可)
    str加盐,盐arr转str,截取拼接
  • 三阶段生成数据
    str递归截取运算生成code
    使用新码表取值

2.4 注意点

一阶段取值后的结尾,递归8时未结束需要继续递归,并将最终输出值记录

二阶段加盐时控制流里面会把字符L先拼在前面

三节点取值结尾。若str长度不够3,则生成的4位数向后补=

3. Note

最后一,三阶段放一下经典码表吧

bash 复制代码
    //初始化码表
    var code_table = {}
    for (let i = 0; i < 256; i++) {
        code_table[String.fromCharCode(i)] = i
    }

注意此码表后面会一直往里push

bash 复制代码
Dkdpgh4ZKsQB80/Mfvw36XI1R25+WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=

然后再补个最终输出的截图

这玩意确实有点复杂,有很多坑,纯算算了5天

相关推荐
长沙火山2 天前
4.Theos安装
逆向·ios逆向
长沙火山2 天前
3.Theos 与 MonkeyDev
逆向·ios逆向
长沙火山2 天前
5.macOS 安装 Theos 完整教程
逆向·ios逆向
长沙火山2 天前
2.开发工具
逆向·ios逆向
长沙火山4 天前
第二十节_Android_加固原理
逆向·安卓逆向
长沙火山5 天前
第十六节_分析_WebSocket_API_请求
逆向·安卓逆向
长沙火山5 天前
第十三节_绕过_SSL_Pinning
逆向·安卓逆向
长沙火山5 天前
第十四节_Android_代码混淆与解混淆
逆向·安卓逆向
长沙火山6 天前
第二节_如何反编译_APK
逆向·安卓逆向
长沙火山6 天前
第七节_动态调试入门
逆向·安卓逆向