jsvmp逆向实战x-s、x-t算法还原

这篇具有很好参考价值的文章主要介绍了jsvmp逆向实战x-s、x-t算法还原。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是jsvmp

jsvmp就是将js源代码首先编译为自定义的字节码,只有对应的解释器才能执行这种字节码,这是一种前端代码虚拟化保护技术。

整体架构流程是服务器端通过对JavaScript代码词法分析 -> 语法分析 -> 语法树->生成AST->生成私有指令->生成对应私有解释器,将私有指令加密与私有解释器发送给浏览器,就开始一边解释,一边执行。

这些都不重要,只要知道有这么个技术就行了。jsvmp有一个特性,加密结果是一个一个字符生成的,要想一个个生成肯定需要循环,那无非就是for循环或者while循环以及switch case。这一点至关重要,算法的分析还原就依赖这个特性。

定位关键点

全局搜索关键字“X-s”,定位到main.***.js,这个js文件中会有多处生成x-s的地方,全部打上断点,最终会定位到 c = (a || void 0 !== window._webmsxyw ? window._webmsxyw : sign)(u, i) || {};,只有这行代码被调用并且生成了x-s,其它的几处都是原来的老版本已经废弃了。
jsvmp逆向实战x-s、x-t算法还原

log插桩

在断点处单步调试就会进入到jsvmp,把这个js文件保存到本地并用v_jstools进行ast混淆解密,选择仅变量压缩,压缩变量后替换原来的代码。
jsvmp逆向实战x-s、x-t算法还原

jsvmp逆向实战x-s、x-t算法还原
还记得我前面说过的jsvmp的特性吗?如果你还记得那将会为你节省大量时间,这个时候如果去盲目的动态调试你就会进入一个迷宫永远走不出来,正确做法就是直接在js文件中寻找循环的位置。
jsvmp逆向实战x-s、x-t算法还原
144行到164行有两个while循环,在这两个循环里面添加日志点,144-150这个while循环会无限执行,32g内存都能撑爆,暂时不管这个循环,在161行位置插入日志"h:",JSON.stringify(h[0]),"C:",C,"H:",H,运行结果如下图。
jsvmp逆向实战x-s、x-t算法还原
分析日志可知,当C==781的时候x-s已经生成,但具体生成步骤日志里并没有,那就在160行插入条件断点C==780&&H[0]==31&&H[1]==3&&H[2]==83&&H[3]==1&&H[4]==0,并且把所有进行过运算的方法里都插入日志点,比如185行"%","左:",r(A, B),"右:",r(E, Q),203行"|","左:",r(A, B),"右:",r(E, Q)等,142行特别重要"h3:",JSON.stringify(h[0]),"A:",A,"B:",B,这个日志点一定要打上。
jsvmp逆向实战x-s、x-t算法还原日志点打好之后先停用断点,只保留160行的条件断点,然后继续执行,再次断在160行。
jsvmp逆向实战x-s、x-t算法还原
清空控制台日志信息,启用所有断点(263行的断点停用,这个方法就是拼接字符串),继续执行代码,执行完毕后将日志保存到本地。
jsvmp逆向实战x-s、x-t算法还原

日志分析

notepad打开日志,拉到最底下,复制X-s前面一小部分,全局搜索,全词匹配,然后全部标记。
jsvmp逆向实战x-s、x-t算法还原
jsvmp逆向实战x-s、x-t算法还原
仔细观察下图中标红的位置,会发现明显规律,“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=”是固定的,这个时候就可以大胆猜测了,它可能是调用了字符串的charAt方法,传入参数就是下方的数字,返回一个字符,然后依次将字符拼接。
jsvmp逆向实战x-s、x-t算法还原
控制台验证一下,果然如此。
jsvmp逆向实战x-s、x-t算法还原
接下来就得找出13、19、0、34这四个数字怎么来的,往上翻看日志,找到了可疑之处,这里出现了一些位移计算,也生成了上一步需要的数字。
jsvmp逆向实战x-s、x-t算法还原
控制台验证一下,经过反复验证得知,13 = 53 >> 2,19 =((53&3)<<4)|(48>>4),0 = ((48&15)<<2)|(34>>6),34 = 34&63,而且加粗的数字是固定的,那么下一步就是要确定53,48,34的生成逻辑。
jsvmp逆向实战x-s、x-t算法还原
接着往上翻看日志,又找到可疑之处,一个json字符串"{\"signSvn\":\"50\",\"signType\":\"x1\",\"appId\":\"xhs-pc-web\",\"signVersion\":\"1\",\"payload\":\"5c401130ca247f32ba75cbf05e0e58476fd112ed52f233f67fce4c61c5bc93dfc25b0c6065eda2f639a922d4481a611116e2e3bfb89e2da1dad61c5041d6ac2bdad61c5041d6ac2bba1c4fcc5520a3e3f9f6b953ff819f7c4d3964d610405efa8a7e6e067da7404c0381f161cf3a5952aefd4645c665dc827a83a6069b97009fd07c9b6d6913acbc9074093d7367e83ad4cdc39c2b950152b2ef9cd5fbe10084ffcb49de03a9400d0a36d7b01017de7dfffbe9b83b736a194ddc12db02f7193f\"}"
jsvmp逆向实战x-s、x-t算法还原
数字12、13、14有规律的增长,也生成了上一步需要的数字53,48,34,还有三字符’5’、‘0’,‘"’,这三个字符像是从json字符串里面取出来的,12、13、14分别是索引,然后调用’5’.charCodeAt(),‘0’.charCodeAt(),‘"’.charCodeAt()。控制台验证一下猜想,果然如此。
jsvmp逆向实战x-s、x-t算法还原

代码还原

经过上面几个步骤分析,大致生成逻辑已经捋清楚,除了json字符串里面的payload还没还原外,其它的步骤都已还原,并对比了浏览器和代码生成的结果,是一致的,完整代码如下,下一篇文章将分析payload的还原过程。文章来源地址https://www.toymoban.com/news/detail-460504.html


var str1 = "{\"signSvn\":\"50\",\"signType\":\"x1\",\"appId\":\"xhs-pc-web\",\"signVersion\":\"1\",\"payload\":\"16e0c0c108d9481f25fa55e5d0b68ca2a3754a5a6fd39af8945de60083f572f85fbf196a7df36325df512bc23f13ef9616e2e3bfb89e2da1dad61c5041d6ac2bdad61c5041d6ac2bba1c4fcc5520a3e3f9f6b953ff819f7c4d3964d610405efa8a7e6e067da7404c0381f161cf3a5952aefd4645c665dc827a83a6069b97009fd07c9b6d6913acbc9074093d7367e83ad4cdc39c2b950152b2ef9cd5fbe10084ffcb49de03a9400d0a36d7b01017de7daaeec9560d5a42f0e8cf56bde5e4d9b8\"}";
var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var data = "XYW_";
var arr1 = []
for (var i = 0; i < str1.length; i++){
    var code = str1[i].charCodeAt();
    arr1.push(code)
}
var arr3 = [];
for(var i = 0; i< arr1.length; i += 3){
    arr3.push(arr1.slice(i, i + 3));
}

for (var i = 0; i < arr3.length; i++){
    var arr = arr3[i];
    var arg1 = move_r(arr[0],2);
    var arg2 = move_l(arr[0]&3,4) | move_r(arr[1],4);
    var arg3 = move_l(arr[1]&15,2) | move_r(arr[2],6)
    get_data([arg1,arg2,arg3,arr[2]&63])

}

function move_r(l,r){
    return l >> r;
}

function move_l(l,r){
    return l << r;
}

function get_data(arr){
    for (var i = 0; i < arr.length; i++){
        var code = arr[i];
        var result = str2.charAt(code);
        data += result;
    }
}
console.log(data)

到了这里,关于jsvmp逆向实战x-s、x-t算法还原的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最新PDD商家端Anti-Content参数逆向分析与纯算法还原

    【🏠作者主页】: 吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作! 【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关

    2024年04月09日
    浏览(39)
  • 《算法还原 - CTF》逆向exe程序 + ida Pro 反汇编分析伪C代码 + python算法复现

    二进制安全,能干什么 逆向分析: 负责成品软件的技术原理. 比如分析竞品软件,吸取技术上的优点,进行技术难点公关 病毒分析: 负责分析病毒样本.研究恶意代码的技术手段等工作.主要是在安全公司,尤其是在杀毒软件公司需求较多.如360 、腾讯电脑管家等. 漏洞挖掘分析: 负责

    2024年01月22日
    浏览(52)
  • 【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

    最近在写论文,导师那里很严格,所以我打算去知网下载文章进行参考,但是需要money,在同学的推荐下拿到了某宝一家免费的知网接口,今天就是对该网站的分析,最后成品会开源!在分析的时候被对方耍了一下,对方有一个登陆页面,登陆了后才发现只是个导航,其实登

    2023年04月22日
    浏览(52)
  • 【爬虫逆向分析实战】某笔登录算法分析——本地替换分析法

    作者最近在做一个 收集粉币 的项目,可以用来干嘛这里就不展开了😁,需要进行登录换算token从而达到监控收集的作用,手机抓包发现他是通过APP进行计算之后再请求接口的,通过官网分析可能要比 APP逆向方便多 ,但是通过这几天的观察我并没有头绪,这篇文章草稿创建了

    2024年02月05日
    浏览(49)
  • 逆向-还原代码之duowei_array (Arm 64)

          // source code #include stdio.h #define ROWS    3 #define COLS    4 void sum_rows(int ar[][COLS], int rows); void sum_cols(int [][COLS], int); int sum2d(int (*ar)[COLS], int rows); int main(void) {     int junk[ROWS][COLS] = {         {2, 4, 6, 8},         {3, 5, 7, 9},         {12, 10, 8, 6}     };     sum_rows(junk

    2023年04月10日
    浏览(32)
  • 66.网游逆向分析与插件开发-角色数据的获取-角色类的数据分析与C++还原

    内容来源于: 易道云信息技术研究院VIP课 上一个内容:65.网游逆向分析与插件开发-角色数据的获取-项目需求与需求拆解-CSDN博客 ReClass.NET工具下载,它下方链接里的 逆向工具.zip 里的reclass目录下:注意它分x64、x32版本,启动是用管理员权限启动否则附加时有些进程附加不上

    2024年02月03日
    浏览(51)
  • DX算法还原

    早在之前作者就写过一篇关于顶象的滑块验证,潦潦草草几句话就带过了。 出于互相学习的想法,给了一个大学生,奈何不讲武德把源码甩群里了,虽然在大佬们眼里不难, 不过拿着别人的东西乱传还是不太好。自认倒霉,大表哥们互相学习学习。文末作者留下还原的案 例

    2024年02月06日
    浏览(41)
  • 利用Velero对K8S备份还原与集群迁移实战

    Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。 开源地址:https://github.com/vmware-tanzu/velero 官方文档:https://velero.io/docs/v1.11/ 1.1 支持的版本列表 1.2 Velero组件

    2023年04月23日
    浏览(38)
  • x-s和web_session

    开工发现web更新了,目前笔记信息接口: /api/sns/web/v1/feed 请求时headers中需要x-s、x-t,cookie中需要有web_session。 web_session和当前环境绑定,重新注册后浏览器中的ID也会更新。 其主要依赖的参数是webId,类似于设备指纹。根据测试得出,webId只需要随机生成32位字符即可。 然后

    2024年02月03日
    浏览(26)
  • 瑞数6代vmp算法还原流程笔记

    **本文主要提供思路和流程,不提供代码**         1.debugger解决         第一个debugger通过右键一律不在此暂停解决         第二个通过在控制台输入以下hook eval的代码便可解决         2.如何调试           1.将控制台的日志错误输出关闭,不然一直输出报错的日志    

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包