V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
升级到 Windows 11
ling516
V2EX  ›  Windows

bat 脚本怎么加密,不想让人看到

  •  
  •   ling516 · 47 天前 · 3458 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。
    18 条回复    2021-10-22 17:07:08 +08:00
    miyuki
        2
    miyuki  
       47 天前 via iPhone   ❤️ 1
    没有“加密”,只有混淆
    icemanpro
        3
    icemanpro  
       47 天前
    bat to exe
    IsaacYoung
        4
    IsaacYoung  
       47 天前
    std::string result = system("./some_command");
    IsaacYoung
        5
    IsaacYoung  
       47 天前
    用 c++重写
    std::string result = system("./some_command");

    编译成二进制
    CatCode
        6
    CatCode  
       47 天前
    bat 脚本就是 windows 的一些调用吧 改用 C#写啊 编译成 exe 然后 UPX 打包
    kokutou
        7
    kokutou  
       47 天前
    @CatCode #6 upx 分分钟脱掉。。。
    .net 还是要上混淆。。。
    2i2Re2PLMaDnghL
        8
    2i2Re2PLMaDnghL  
       47 天前
    @icemanpro
    @IsaacYoung 这两种静态内容的可以直接读 .data 提取。
    就算加壳现场解密,也可以被 Procmon 秒破(直接读你的 syscall )。
    2i2Re2PLMaDnghL
        9
    2i2Re2PLMaDnghL  
       47 天前
    @ysc3839 可以被自动化地反混淆
    disk
        10
    disk  
       47 天前
    @2i2Re2PLMaDnghL 很多恶意软件会通过加密的 bat/powershell 来实现一些功能,一样被逆向干碎。混淆下糊弄普通用户就差不多了。
    crab
        11
    crab  
       47 天前
    简单点 base64 下吧,不懂的以后是加密,懂的再怎么弄解密也只是时间问题。
    ysc3839
        12
    ysc3839  
       47 天前 via Android
    @2i2Re2PLMaDnghL 我没仔细看过里面的实现,但是其他脚本语言比如 JavaScript,反混淆后变量名也不能保留,可读性会很差。
    如果这也不能接受,那只能改用别的语言了。
    2i2Re2PLMaDnghL
        13
    2i2Re2PLMaDnghL  
       47 天前   ❤️ 1
    @ysc3839 两个的实现都是字典法,然后把代码替换成字符串截取
    特殊地,第二个强行改了 BOM 头,直接用文本编辑器打开是乱码,但当作 UTF-8 打开就是很正常的内容。
    没有做变量名混淆的样子……

    主要是 bat 很难改变量名,因为所有变量名都是线程间共享、进程间 CoW 的环境变量名,其副作用是不可控的。
    g00001
        14
    g00001  
       47 天前
    可以在 aardio 里嵌入 BAT 生成 EXE 文件,
    方法很简单, 例如下面几句代码按 F7 就可以生成 EXE 了:

    import console
    import process.batch;

    //批处理 for 遍历并拆分字符串
    var bat = process.batch(`
    @echo off
    for %%i in (abc,def,xyz) do echo %%i
    `)
    console.log(bat.read(-1))

    console.pause()

    这样对付一般的小白用户没问题了,
    如果还想增加难度,可以把关键信息用 C 语言实现,批处理可以与 aardio 混编,aardio 又可以方便地调用 C 写的 DLL,例如:

    import tcc;
    //编译 DLL
    tcc.build( "/start.dll" ).code = /***
    #include <windows.h>
    __declspec(dllexport) int Add( int a,int b )
    {
    return a + b;
    }
    ***/

    //加载 DLL
    var dll = raw.loadDll( "/start.dll",,"cdecl" );
    //调用 C 函数
    var result = dll.Add(12,3);
    cat9life
        15
    cat9life  
       47 天前
    绝对的加密肯定是没有啊,编译成 exe 对付一般人应该够了
    ling516
        16
    ling516  
    OP
       47 天前
    @cat9life 怎么编译成 exe
    ling516
        17
    ling516  
    OP
       47 天前
    @ysc3839 两个试了都不行 代码无法运行
    ling516
        18
    ling516  
    OP
       47 天前
    @icemanpro 谢谢 这个可以了 编译 exe
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1340 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:09 · PVG 02:09 · LAX 10:09 · JFK 13:09
    ♥ Do have faith in what you're doing.