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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1120|回复: 15
上一主题 下一主题
收起左侧

[Web逆向] WEB前端逆向反反调试一例

  [复制链接]
跳转到指定楼层
楼主
scz 发表于 2024-6-28 17:07 回帖奖励
创建: 2024-06-28 16:14

WEB前端逆向初学者的若干备忘。

某案例,几乎每个js都用同一套路混淆过,就反调试而言,主要干几件事:

a. 美化检测
b. 无限debugger
c. 屏蔽console对象各函数
d. 清Console

先说c,大致意思如下:

function any () {
};

let pobj        = typeof window !== "undefined" ? window : global;
let obj         = pobj.console;
let name        = 'log';
let func        = obj[name];
let func_       = any.constructor.prototype.bind( any );
func_.toString  = func.toString.bind( func );
obj[name]       = func_;

console.log('invisible');

上例是某js替换(屏蔽)console.log的代码。接着说b。

let x   = function () {return true;}.constructor;
let y   = x( "console.log('ok')" );
x === Function.constructor;
x === Function.prototype.constructor;
y instanceof Function;
y.call();
y();

(function () {return true;}).constructor("console.log('ok')").call();
(function () {return true;}).constructor("console.log('ok')").apply();

上述代码用Function.constructor构造匿名函数并执行之。正常编程不会出现这种代码,却是反调试常用手段之一,比如:

(function(){}).constructor("debugger").call();
(function(){}).constructor("debugger").apply();

该案例中a+b+c+d组合遍布各个js,一招鲜吃遍天,没啥质量,以数量取胜。虽然都在js混淆掩护下进行,但套路化之后固定模式太明显,不反混淆时肉眼可Overrides。由于数量实在不少,逐个Overrides显然不是最佳方案,尝试寻找一次性解决方案。

// ==UserScript==
// home.php?mod=space&uid=170990         BypassDebugger
// home.php?mod=space&uid=467642    http://tampermonkey.net/
// home.php?mod=space&uid=1248337      2024-06-28
// @description  Anti Anti Debug
// home.php?mod=space&uid=686208       Me
// home.php?mod=space&uid=195849        https://*/*
// home.php?mod=space&uid=609072        none
// @run-at       document-start
// ==/UserScript==

(function() {

    'use strict';

    console.clear   = function () {};

    function HookObjectMethod ( object, attr ) {
        let func        = object[attr];
        let func_       = function () {
            let ret;
            if ( arguments.length === 1 && arguments[0].startsWith( "debugger" ) ) {
                ret = function() {};
            }
            else {
                ret = func.apply( object, arguments );
            }
            return ret;
        }
        func_.prototype = func.prototype;
        func_.toString  = func.toString.bind( func );
        object[attr]    = func_;
    }

    HookObjectMethod( Function.prototype, 'constructor' );

    function HookObjectProperty ( object, attr ) {
        Object.defineProperty( object, attr, {
            enumerable: false,
            writable: false,
            configurable: false
        });
    }

    let funcarray   = ["log", "warn", "info", "error", "exception", "table", "trace"];
    for ( let i = 0; i < funcarray.length; i++ ) {
        HookObjectProperty( console, funcarray[i] );
    }

})();

现在反调试都是在js混淆掩护下进行,无论如何,AST反混淆有百利而无一害。我是反混淆了两个js之后,意识到其余js都是同一套路,才来寻找一次性解决方案。

逆向工程主要是思路,对抗双方是场猫鼠游戏,没有永远的胜者。

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
MeowAwA + 1 谢谢@Thanks!
allspark + 1 + 1 用心讨论,共获提升!
为之奈何? + 1 + 1 我很赞同!

查看全部评分

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

推荐
 楼主| scz 发表于 2024-6-30 13:45 |楼主
悦来客栈的老板 发表于 2024-6-30 09:29
反混淆后替换,不需要任何hook代码。我调试分析的时候,基本不用hook,对js逆向而言,属于落后的技术。

我说的overrides就是替换,你可能没仔细看。之所以hook,是因为几乎每一个js都混淆了,我手工overrides了近十个,这还是没有继续使用其他功能的情况。所以才用hook将所有的反调试一次性过了。那你是觉得我不会反混淆并overrides?
推荐
悦来客栈的老板 发表于 2024-6-30 09:29
反混淆后替换,不需要任何hook代码。我调试分析的时候,基本不用hook,对js逆向而言,属于落后的技术。
沙发
legendweb 发表于 2024-6-29 00:35
你这个我油猴脚本hook一下就行了,无限debugger
3#
15053087 发表于 2024-6-29 02:57
legendweb 发表于 2024-6-29 00:35
你这个我油猴脚本hook一下就行了,无限debugger

油猴脚本能分享学习一下吗,感谢
4#
uronpen 发表于 2024-6-29 07:26
legendweb 发表于 2024-6-29 00:35
你这个我油猴脚本hook一下就行了,无限debugger

能分享学习一下吗?谢谢
5#
kidll 发表于 2024-6-29 09:14
遇到无限debugger,新手弟弟不知所措
6#
meigui6431 发表于 2024-6-29 10:39
值得借鉴参考,还需研究,谢谢您
7#
QZMASE 发表于 2024-6-29 10:46
逆向小白前来学习
8#
wasm2023 发表于 2024-6-29 11:33
厉害学到了,还搞了原型链
9#
ibrucekong 发表于 2024-6-29 11:38
对抗与反对抗
10#
clovert 发表于 2024-6-29 21:21
看看再说。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-7-2 15:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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