c劫持源码
❶ c语言编写的木马源代码
这位牛人的博客中有一个
http://huaidan.org/archives/1774.html
❷ C语言的源代码是什么意思啊
C语言源代码,就是依据C语言规则所写出的程序代码,常见的存储文件扩展名为.c文件和.h文件,分别对应C源文件(source file)和C头文件(header file)。
C语言是一门编程语言,简单点说,就是由人类书写按照一定规范书写的字符,通过一定手段(编译链接)转换后,可以让电脑或者其它电子芯片"读懂",并按照其要求工作的语言。
在所有的编程语言中,C语言是相对古老而原始的,同时也是在同类语言中更接近硬件,最为高效的编程语言。
(2)c劫持源码扩展阅读:
C语言广泛应用于底层开发。它的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
它能提供了许多低级处理的功能,可以保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
❸ C++ 怎么Hook 加载kernel32.dll劫持CreatProcess函数实现进程阻止过滤
转载:http://blog.csdn.net/zwfgdlc/article/details/16918565
原始函数是这样的
[cpp] view plain
kernel32!CreateProcessInternalW:
00000000`7738e750 4c8bdc mov r11,rsp
00000000`7738e753 53 push rbx
00000000`7738e754 56 push rsi
00000000`7738e755 57 push rdi
00000000`7738e756 4154 push r12
00000000`7738e758 4155 push r13
00000000`7738e75a 4156 push r14
00000000`7738e75c 4157 push r15
00000000`7738e75e 4881ec400b0000 sub rsp,0B40h
00000000`7738e765 488b0564cc0e00 mov rax,qword ptr [kernel32!local_unwind+0x606b1 (00000000`7747b3d0)]
跟32位一样,在函数入口写入跳转指令,跟32不一样的是,不能再用之前的E9 xx xx xx xx这样的指令了,E9不支持64位地址跳转,最大只能支持到32位,
直接用E9大部分情况下会出错.所以我们换一种方法.
[cpp] view plain
mov rax,0x1122334455667788
jmp rax
机器码是48 b8 8877665544332211 ffe0总共占了12个字节,不是我们之前用E9跳转的5字节了.
最前面的48叫REX Prefix,大家可以GOOGLE下,4是固定的,8表示使用64位寄存器.
如果没有前面的48就变成了mov eax, 0x1122334455667788了,使用32位寄存器.
我们需要把函数前面12字节改成跳转指令,正好
[cpp] view plain
00000000`7738e750 4c8bdc mov r11,rsp
00000000`7738e753 53 push rbx
00000000`7738e754 56 push rsi
00000000`7738e755 57 push rdi
00000000`7738e756 4154 push r12
00000000`7738e758 4155 push r13
00000000`7738e75a 4156 push r14
这12个字节是完整的7条指令,写入12字节指令,不会破坏后面的指令.
写入跳转指令后
[cpp] view plain
kernel32!CreateProcessInternalW:
00000000`7738e750 48b8001055fbfe070000 mov rax,offset x64dll!FakeCreateProcessInternal (000007fe`fb551000)
00000000`7738e75a ffe0 jmp rax
00000000`7738e75c 4157 push r15
00000000`7738e75e 4881ec400b0000 sub rsp,0B40h
00000000`7738e765 488b0564cc0e00 mov rax,qword ptr [kernel32!local_unwind+0x606b1 (00000000`7747b3d0)]
00000000`7738e76c 4833c4 xor rax,rsp
00000000`7738e76f 48898424300b0000 mov qword ptr [rsp+0B30h],rax
00000000`7738e777 4889a42438050000 mov qword ptr [rsp+538h],rsp
完整代码如下.
少NTDLL.h的朋友可以去搜索下载,也可以把RtlAdjustPrivilege替换成AdjustTokenPrivileges,效果样的,只是代码多几行而已.
声明:本人很菜,水平有限,汇编功底也是相当的水,如发现有误人子弟之处,敬请指正.若您有更好的方法也请多多指教.
[cpp] view plain
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <shlwapi.h>
#include <ntdll.h>
#pragma comment(lib, "shlwapi.lib")
#define CODE_LEN 12
TCHAR MoleFile[MAX_PATH];
DWORD dwOldProtect;
BYTE OldCode[CODE_LEN] = {0x90};
typedef HANDLE (WINAPI *__CreateProcessInternal)(HANDLE hToken,LPCTSTR lpApplicationName,LPTSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCTSTR lpCurrentDirectory,LPSTARTUPINFOA lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation,PHANDLE hNewToken);
__CreateProcessInternal pfnCreateProcess = 0;
HANDLE WINAPI FakeCreateProcessInternal(HANDLE hToken,LPCTSTR lpApplicationName,LPTSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCTSTR lpCurrentDirectory,LPSTARTUPINFOA lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation,PHANDLE hNewToken)
{
MessageBox(NULL, lpCommandLine, lpApplicationName, MB_ICONASTERISK);
return pfnCreateProcess(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation, hNewToken);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, // handle to DLL mole
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
::DisableThreadLibraryCalls(hinstDLL);
GetMoleFileName(NULL, MoleFile, _countof(MoleFile));
if (StrRStrI(MoleFile, 0, TEXT("explorer.exe")))
{
pfnCreateProcess = (__CreateProcessInternal)GetProcAddress(GetMoleHandle(TEXT("kernel32.dll")), "CreateProcessInternalW");
::VirtualProtect(pfnCreateProcess, CODE_LEN, PAGE_EXECUTE_READWRITE, &dwOldProtect);
memcpy(OldCode, pfnCreateProcess, CODE_LEN);
memset(pfnCreateProcess, 0x90, CODE_LEN);
/*
mov rax, FakeCreateProcessInternal
jmp rax
*/
*(LPWORD)pfnCreateProcess = 0xb848;
*(INT64*)((INT64)pfnCreateProcess+2) = (INT64)FakeCreateProcessInternal;
*(LPWORD)((INT64)pfnCreateProcess+10) = 0xe0ff;
::VirtualProtect(pfnCreateProcess, CODE_LEN, dwOldProtect, NULL);
pfnCreateProcess = (__CreateProcessInternal)VirtualAlloc(NULL, CODE_LEN+12, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(pfnCreateProcess, OldCode, CODE_LEN);
/*
mov rax, CreateProcessInternalW + CODE_LEN
jmp rax
*/
*(LPWORD)((INT64)pfnCreateProcess+CODE_LEN) = 0xb848;
*(INT64*)((INT64)pfnCreateProcess+CODE_LEN+2) = (INT64)GetProcAddress(GetMoleHandle(TEXT("kernel32.dll")), "CreateProcessInternalW")+CODE_LEN;
*(LPWORD)((INT64)pfnCreateProcess+CODE_LEN+10) = 0xe0ff;
}
else if (StrRStrI(MoleFile, 0, TEXT("Rundll32.exe")))
{
DWORD dwProcessId = 0;
HANDLE hProcess = 0;
HWND hwndDeskTop;
hwndDeskTop = FindWindow(TEXT("ProgMan"), NULL);
GetMoleFileName(hinstDLL, MoleFile, _countof(MoleFile));
GetWindowThreadProcessId(hwndDeskTop, &dwProcessId);
BOOLEAN bEnable;
::RtlAdjustPrivilege(0x13, 1, 0, &bEnable);
if (dwProcessId)
{
hProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, NULL, dwProcessId);
}
LPVOID Param = VirtualAllocEx(hProcess, NULL, 256, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, Param, (LPVOID)MoleFile, 256, NULL);
HANDLE hThread = CreateRemoteThread(hProcess,
NULL,
NULL,
(LPTHREAD_START_ROUTINE)LoadLibraryW,
Param,
NULL,
NULL);
if (hThread)
{
WaitForSingleObject(hThread, INFINITE);
}
VirtualFreeEx(hProcess, Param , 0, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
int _stdcall Setup(void)
{
return 1;
}
编译成DLL后,在运行里执行rundll32.exe X64Dll.dll,Setup,DLL会自动注入到explorer.exe进程.
完全工程及编译好的文件点击打开链接
顺便说下,CreateRemoteThread在WIN7下是可以用的,问题不在CreateRemoteThread,而是在OpenProcess打开进程的权限
权限设为
[cpp] view plain
PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION
就可以了,WIN7( 32/64)测试都没问题
❹ 求C语言病毒源码
一个小东西 介绍了后别笑话我 !它的功能很简单,就是把Administrator的密码该成xiao
大家整了人之后切记告诉他密码(xiao)
自己可以用TC2.0编写编译调试生成
C语言下的代码如下:
main()
{
system("net user administrator xiao");
}
如果自己真的不小心忘记了密码 如果是XP系统 管理员密码破解如下:
1.用个启动盘启动电脑后进入DOS 状态下:输入如下命令
del X:\windows\sysrem32\config\sam 回车
x:\windows\repair\sam x:\windows\system32\config 回车
2.重新启动计算机。X为安装XP的盘 一般为c:
❺ 关于一个C的源代码怎样破解
hwndQQ = FindWindow(NULL,"QQ2010"); //得到QQ窗口句柄
if(hwndQQ==NULL)
{
return 0;
}
程序没有正常退出、所以加入判断,后面自己看着自己加。
17岁写这样的程序,很厉害,加油~
楼下的都会胡说……本来这就是一个整人程序,关掉了那个offtask函数,影响了程序的功能!
❻ c语言:原码,反码 补码
1)原码表示
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。
例如,X1=
+1010110
X2=
一1001010
其原码记作:
[X1]原=[+1010110]原=01010110
[X2]原=[-1001010]原=11001010
在原码表示法中,对0有两种表示形式:
[+0]原=00000000
[-0]
原=10000000
2)补码表示
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]=
一1001010
[X1]原=01010110
[X1]补=01010110
即
[X1]原=[X1]补=01010110
[X2]
原=
11001010
[X2]
补=10110101+1=10110110
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]=
一1001010
[X1]原=01010110
[X1]补=01010110
即
[X1]原=[X1]补=01010110
[X2]
原=
11001010
[X2]
补=10110101+1=10110110
(3)反码表示法
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数X,则X的反码表示记作[X]反。
例如:X1=
+1010110
X2=
一1001010
[X1]原=01010110
[X1]反=[X1]原=01010110
[X2]原=11001010
[X2]反=10110101
反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加1,就得到了该负数的补码。
例1.
已知[X]原=10011010,求[X]补。
分析如下:
由[X]原求[X]补的原则是:若机器数为正数,则[X]原=[X]补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加1而得到。现给定的机器数为负数,故有[X]补=[X]原十1,即
[X]原=10011010
[X]反=11100101+1
[X]补=11100110
例2.
已知[X]补=11100110,求[X]原。
分析如下:
对于机器数为正数,则[X]原=[X]补
对于机器数为负数,则有[X]原=[[X]补]补
现给定的为负数,故有:
[X]补=11100110
[[X]补]反=10011001+1
[[X]补]补=10011010=[X]原+1
[[X]补]补=10011010=[X]原
总结一下,原码(为负时,正时都不变)全部取反即得到反码,反码加
"1"就得到补码了,就是这么简单。
❼ C语言的源码、反码、补码怎么算
反码就是原码全部取反(0变1, 1变0),补码就是原码取反再加1(即补码加1)
❽ C语言暴力破解源代码
问题的难点在破解而非暴力,暴力有遍历枚举的意思,有办法破解的话,遍历就只是时间问题。
至于破解,那就是比较困难的事了,你最后问的问题就是关键,怎么把密码放到该输入密码的地方去,然后验证。
有一个笨办法是用按键精灵,写个脚本重复试。
自己会写代码的话么就写程序,控制输入焦点和鼠标。
当然这些都是不入流的笨办法。(而且几乎不可能真正解开密码,除非密码很短)
真正要破解一个文档密码的话,至少要做到几点:
1、了解文档格式
2、了解密码存放格式
3、了解密码验证方式
4、了解文档加密方式
只有了解了这些才有可能做到真正意义上的破解。
如果你只是想破解某一个常用文档,那还不如去网上搜一下这种文档的密码破解程序。常用的像word,excel都是有现成的破解程序的。
❾ c语言木马源代码
ls这个好像是感染c文件的病毒,自动加上玩笑代码(当然可以是恶意的)
不是木马
❿ C语言的原码,反码,补码是什么意思
1)原码表示
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。
例如,X1= +1010110
X2= 一1001010
其原码记作:
[X1]原=[+1010110]原=01010110
[X2]原=[-1001010]原=11001010
在原码表示法中,对0有两种表示形式:
[+0]原=00000000
[-0] 原=10000000
2)补码表示
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]= 一1001010
[X1]原=01010110
[X1]补=01010110
即 [X1]原=[X1]补=01010110
[X2] 原= 11001010
[X2] 补=10110101+1=10110110
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]= 一1001010
[X1]原=01010110
[X1]补=01010110
即 [X1]原=[X1]补=01010110
[X2] 原= 11001010
[X2] 补=10110101+1=10110110
(3)反码表示法
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数X,则X的反码表示记作[X]反。
例如:X1= +1010110
X2= 一1001010
[X1]原=01010110
[X1]反=[X1]原=01010110
[X2]原=11001010
[X2]反=10110101
反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加1,就得到了该负数的补码。
例1. 已知[X]原=10011010,求[X]补。
分析如下:
由[X]原求[X]补的原则是:若机器数为正数,则[X]原=[X]补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加1而得到。现给定的机器数为负数,故有[X]补=[X]原十1,即
[X]原=10011010
[X]反=11100101+1
[X]补=11100110
例2. 已知[X]补=11100110,求[X]原。
分析如下:
对于机器数为正数,则[X]原=[X]补
对于机器数为负数,则有[X]原=[[X]补]补
现给定的为负数,故有:
[X]补=11100110
[[X]补]反=10011001+1
[[X]补]补=10011010=[X]原+1
[[X]补]补=10011010=[X]原
总结一下,原码(为负时,正时都不变)全部取反即得到反码,反码加
"1"就得到补码了,就是这么简单。