|
|
发表于 2025-10-6 14:26:54
|
显示全部楼层
本帖最后由 RENaa_FD 于 2025-12-6 18:51 编辑
顺便提供一下基于certutil的实现还有C程序源码,这个大概有点实用性- @echo off
- call :clean
- (
- echo.TVNDRgAAAABkAwAAAAAAACwAAAAAAAAAAwEBAAEAAABhAAAAPgAAAAEAAxUADgAA
- echo.AAAAAAAARVu9piAAYQD1ZH9nHgMADluAgI0AEAHgAABiAFA0AAAPYLt77cq365ls
- echo.smiO3uSrOl1BuVWjWN2t3XbXlbbdqnm3nW6zu9i7G8J1O7NeC45F8jL+jBmmcZLU
- echo.LpHJENmjBrEiowDxAAARMQCwIgD/h7erBflwcUEaeBFwR4QVwobkkCZAzALZKHRk
- echo.VmeKeEIFQQVAAAd4fIzvE99//ffQ/gBAAAAAAACRAhExtsIwLFxv6vb/Ss/9F6UL
- echo.G7OANgAbnqAkCbCqMjsZoN000oOHdeGAcUbV86Vg5vBVqBKweo3C7TT1UEJaKXC1
- echo.T8IiikX6K6LR76jMiRKhckZQhsYhfiSTKCkAIXOroc7VxiyMzBtrApJHx7v6dsD6
- echo.s2iKXg4O7ymqLqN8KnBH4O4xb17HKxu8ApIugXX0gMyKDl08e0lIdhYGYpRN6BUW
- echo.O9AVAoE8pXopI2z6s3CTVyuxoODrVzmilCBwG3XMrOJBXVj3aO+Z6f7Vjk6ckVAj
- echo.SRHSiBo9nxMH2XYrpr2mm5Vus7x9dIht+fy1yfYUv7Nb148AifQiuRVPAXuf64ue
- echo.sYlw2Zf6+7PibI9xmEyG6mnQb40+p8X4Xo+shWwPP1s6EOEzJA+NfBUMnU5Rk2qk
- echo.E3DG/N/GCAjKjjIFcBK97jCXIbCbC5GJ7+ysgy3wk4Pun2y8lkjWxhZC/2IGlp5J
- echo.AeERz773pPdvpFaYKBfdHdVVSTnLLuwiVuasbEi9Q3BFgMzs2Ft8uOx2m5uIcL+s
- echo.zV78s2TOexpectvxK85706lRCiInISsTs+E9RJRtxEnq7v8pRAbsuN/afbjyqTE/
- echo.yI+zsz+9fkaKWAT+YzWHjhn2lU7XjhSHqDxEBO9JiuENa79wgyBXmPxTOLoBX3Fr
- echo.GGm9PTWlOViLUbRtbdu19i7NMUBEGeOX6bT/GTf4bHdG+qgbv55eS4spX2i6BPCg
- echo.UWeSgliVl8mgroMVMwC1Jo3CXKyCtYLlf8xk8OgC4nmVgSlLqVr1Ywm7qjh7VVQX
- echo.2OYfJUwWWt58cQsqV617BN2BXUJ9IkR6bboIKllYJvv6HbNAs8izSLSokAjTInSi
- echo.I10AOg==
- )>a.tmp
- certutil -decode a.tmp a.cab >nul 2>&1
- expand -F:a a.cab .\a.exe >nul 2>&1
- <nul set /p="Input password here: "
- for /f "delims=" %%v in ('a.exe') do set pwd=%%v
- echo You input: %pwd%
- call :clean
- echo Press any key to exit.
- pause >nul 2>&1
- goto :eof
- :clean
- del /f /q a.exe >nul 2>&1
- del /f /q a.cab >nul 2>&1
- del /f /q a.tmp >nul 2>&1
- goto :eof
复制代码 C程序源码(这个是AI改的)- /* pw_minimal_x86.c - minimal x86 with proper entry stub */
- typedef unsigned long DWORD;
- typedef void* HANDLE;
- typedef int BOOL;
- typedef void* LPVOID;
- typedef const char* LPCSTR;
- typedef unsigned int UINT;
- /* constants */
- #define STD_INPUT_HANDLE (-10)
- #define STD_OUTPUT_HANDLE (-11)
- #define STD_ERROR_HANDLE (-12)
- #define ENABLE_ECHO_INPUT 0x0004
- #define ENABLE_LINE_INPUT 0x0002
- #define INVALID_HANDLE_VALUE ((HANDLE)-1)
- /* kernel32 prototypes - force stdcall for x86 */
- BOOL __attribute__((stdcall)) GetConsoleMode(HANDLE hConsoleHandle, DWORD *lpMode);
- BOOL __attribute__((stdcall)) SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode);
- HANDLE __attribute__((stdcall)) GetStdHandle(DWORD nStdHandle);
- BOOL __attribute__((stdcall)) ReadConsoleA(HANDLE hConsoleHandle, LPVOID lpBuffer, DWORD nNumberOfCharsToRead, DWORD* lpNumberOfCharsRead, LPVOID pInputControl);
- BOOL __attribute__((stdcall)) WriteFile(HANDLE hFile, const void *lpBuffer, DWORD nNumberOfBytesToWrite, DWORD *lpNumberOfBytesWritten, LPVOID lpOverlapped);
- void __attribute__((stdcall)) ExitProcess(UINT uExitCode);
- /* Minimal assembly entry: call C entry(), then call ExitProcess(return_value) */
- /* We call the C function named "entry" (it will be emitted as _entry). */
- /* Use global symbol _start so linker --entry=_start works. */
- __asm__ (
- ".text\n"
- ".globl _start\n"
- "_start:\n"
- " call _entry\n" /* call the C function entry(); return val in EAX */
- " pushl %eax\n" /* push return-code */
- " call _ExitProcess@4\n" /* call ExitProcess(return-code) */
- );
- /* Actual program logic in C (entry). Return int in EAX. */
- int entry(void){
- HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
- HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
- HANDLE hErr = GetStdHandle(STD_ERROR_HANDLE);
- if(hIn == INVALID_HANDLE_VALUE || hOut == INVALID_HANDLE_VALUE) return 1;
- DWORD mode = 0;
- if(GetConsoleMode(hIn, &mode)) SetConsoleMode(hIn, mode & ~(ENABLE_ECHO_INPUT|ENABLE_LINE_INPUT));
- char pw[256];
- unsigned int len = 0;
- for(;;){
- char ch = 0;
- DWORD read = 0;
- if(!ReadConsoleA(hIn, &ch, 1, &read, 0) || read==0) break;
- if(ch == '\r' || ch == '\n') break;
- if(ch == 8){
- if(len){
- len--;
- char bs[] = "\b \b";
- DWORD w=0; WriteFile(hErr, bs, 3, &w, 0);
- }
- continue;
- }
- if(len + 1 >= sizeof(pw)) continue;
- pw[len++] = ch;
- char star = '*';
- DWORD w=0; WriteFile(hErr, &star, 1, &w, 0);
- }
- pw[len] = '\0';
- char nl = '\n';
- { DWORD w=0; WriteFile(hErr, &nl, 1, &w, 0); }
- { DWORD w=0; WriteFile(hOut, pw, len, &w, 0); }
- return 0;
- }
复制代码 构建命令- gcc -m32 pw_minimal_x86.c -o a.exe -Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-exceptions -fno-stack-protector -fno-builtin -fno-builtin-memcpy -fno-builtin-memset -ffreestanding -nostdlib -Wl,--gc-sections -Wl,--entry=_start -Wl,--subsystem,console -Wl,--image-base,0x400000 -Wl,--file-alignment,0x200 -Wl,--section-alignment,0x200 -lkernel32 -s
复制代码 声明: 此处内容全部基于MIT协议开放源代码,可以随意使用,只需要说明来源即可- MIT License
- Copyright (c) 2025 RENaa_FD
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
复制代码 |
评分
-
查看全部评分
|