标题:
[讨论]为什么生成器生成的exe是空的?大家有什么办法?
[打印本页]
作者:
冰绿茶
时间:
2008-7-24 17:26
标题:
[讨论]为什么生成器生成的exe是空的?大家有什么办法?
[讨论]为什么生成器生成的exe是空的?大家有什么办法?
议题作者:Asm
信息来源:邪恶八进制信息安全团队
这几天请教了mika,对木马生成器有些了解,逐渐用汇编语言写了一个,用VC++资源编辑器载入客户端后,接着查看二进制的资源如下:
1.jpg
(17 KB)
2006-12-24 03:29
2.jpg
(70 KB)
2006-12-24 03:29
3.jpg
(59 KB)
2006-12-24 03:29
现在我要替换掉内存地址是000800H的内容,按照一般的写法,主要代码如下:
复制内容到剪贴板
代码:
invoke FindResource,NULL,ASM,RT_RCDATA ;查找资源
mov hRsrc,eax
invoke SizeofResource,NULL,hRsrc ;获取资源长度
mov dwSize,eax
invoke LoadResource,NULL,hRsrc ;装载资源
mov hResData,eax
invoke GlobalAlloc,GPTR,dwSize ;分配内存
mov lpData,eax
invoke LockResource,hResData ;锁定它
mov lpRes,eax
invoke lstrcpyn,lpData,lpRes,dwSize ;按照mika的ms06041网马的写法
invoke lstrlen,addr szBuffer
lea esi,szBuffer
mov edi,lpData
add edi,800h ;要替换的内容的内存地址
mov ecx,eax
cld
rep movsb
invoke CreateFile,offset szName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.if eax != NULL
mov hFile,eax
invoke WriteFile,hFile,lpData,dwSize,addr dwSizeWritten,NULL
写完后正常生成一个asm.exe,但是用VC++资源编辑器打开看二进制代码,打开发现就除了一个PE头MZ和我填写的URL,其他的PE资源就没有了,不过却能够把URL输入到000800H这个位置:
1.jpg
(63 KB)
2006-12-24 03:29
2.jpg
(64 KB)
2006-12-24 03:29
所以我猜想生成exe和htm的方法不一样!为了证实这个猜想,我用我编写的程序中的字符串"asm.exe"换成mika的"mika.htm",正常生成一个"mika.htm",并且能把URL写入正确的位置...
在主程序中,二进制的资源是正确的了,为什么生成的时候exe却是空的捏?
给出完整代码大家帮我看一下:
复制内容到剪贴板
代码:
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h ;图标
DLG_MAIN equ 1
IDC_URL equ 1001
ASM equ 1002
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
.data
szUrl db 156 dup(0)
szName db 'asm.exe',0
szText db '成功生成',0
szCaption db '恭喜',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
LOCAL hRsrc,hResData,hFile,dwSize,dwSizeWritten,lpData,lpRes
LOCAL szBuffer[100h]:byte
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
invoke GetDlgItemText,hWnd,IDC_URL,addr szBuffer,sizeof szBuffer
invoke FindResource,NULL,ASM,RT_RCDATA
mov hRsrc,eax
invoke SizeofResource,NULL,hRsrc
mov dwSize,eax
invoke LoadResource,NULL,hRsrc
mov hResData,eax
invoke GlobalAlloc,GPTR,dwSize
mov lpData,eax
invoke LockResource,hResData
mov lpRes,eax
invoke lstrcpyn,lpData,lpRes,dwSize
invoke lstrlen,addr szBuffer
lea esi,szBuffer
mov edi,lpData
add edi,800h
mov ecx,eax
cld
rep movsb
invoke CreateFile,offset szName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.if eax != NULL
mov hFile,eax
invoke WriteFile,hFile,lpData,dwSize,addr dwSizeWritten,NULL
invoke MessageBox,hWnd,offset szText,offset szCaption,MB_OK
invoke CloseHandle,hRsrc
invoke CloseHandle,hResData
invoke CloseHandle,hFile
invoke GlobalFree,lpData
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
复制内容到剪贴板
代码:
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN 0x1000 //图标
#define DLG_MAIN 1
#define IDC_URL 1001
#define ASM 1002
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico"
ASM RCDATA DISCARDABLE "asm.exe"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 50, 50, 263, 51
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "木马服务端生成测试"
FONT 9, "宋体"
{
LTEXT "正文:", -1,14,16,26,14
EDITTEXT IDC_URL,43,16,148,14,ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
PUSHBUTTON "生成exe",IDOK,200,17,44,14
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>游戏吧 http://www.game8.cc/MyBlog http://www.asm32.cn
帖子1604 精华
30
积分8760 阅读权限150 性别男 在线时间954 小时 注册时间2006-9-21 最后登录2008-7-24
查看详细资料
TOP
良辰择日,预测咨询,公司改名,权威易经
ybjh
荣誉会员
作者:
gaofeng
时间:
2008-7-24 17:26
汇编的看不太明白,不过一般做法就是把资源释放出来,然后打开文件,移动文件指针,写入,跟做文件补丁似的
帖子64 精华
2
积分3215 阅读权限100 性别男 在线时间32 小时 注册时间2005-10-16 最后登录2007-3-15
查看详细资料
TOP
软件项目外包
asm
运维管理组
作者:
超越改
时间:
2008-7-24 17:26
跟做文件补丁有啥关系捏?貌似文件补丁是进程控制这一块的,和释放资源有关系 ?[s:41]游戏吧 http://www.game8.cc/MyBlog http://www.asm32.cn
帖子1604 精华
30
积分8760 阅读权限150 性别男 在线时间954 小时 注册时间2006-9-21 最后登录2008-7-24
查看详细资料
TOP
良辰择日,预测咨询,公司改名,权威易经
ybjh
荣誉会员
作者:
fjx16888
时间:
2008-7-24 17:26
文件补丁:改写一个文件的数据使之被破解等等
生成器:改写木马的配置信息
[s:57]
帖子64 精华
2
积分3215 阅读权限100 性别男 在线时间32 小时 注册时间2005-10-16 最后登录2007-3-15
查看详细资料
TOP
asm
运维管理组
作者:
houyongwang_5
时间:
2008-7-24 17:26
引用:
引用第3楼ybjh于2006-12-25 09:21发表的:
文件补丁:改写一个文件的数据使之被破解等等
生成器:改写木马的配置信息
[s:57]
生成木马可以用文件补丁?[s:57] 貌似在补丁中,一个WriteProcessMemory过去虽然改写指令实现破戒,但最终的结果并没有保存到这个exe中吧?....
不过这个问题我也快解决了,昨晚温习了一下资源和PE,再加上内存管理,呵呵,够了... [s:39]游戏吧 http://www.game8.cc/MyBlog http://www.asm32.cn
帖子1604 精华
30
积分8760 阅读权限150 性别男 在线时间954 小时 注册时间2006-9-21 最后登录2008-7-24
查看详细资料
TOP
让女孩一夜变的更有女人味
ybjh
荣誉会员
作者:
小鱼儿
时间:
2008-7-24 17:26
WriteProcessMemory,内存补丁
------------------------------------------------------
delphi代码,汇编不会
var
exefile:tresourcestream;
f:File;
temp:array[0..199] of char;
const offset=1000; //偏移
begin
exefile:=tresourcestream.Create(Hinstance,'MYFILE','EXEFILE');
try
exefile.SaveToFile(ExtractFilePath(ParamStr(0)) +'server.exe');
finally
exefile.Free ;
end;
AssignFile(f,ExtractFilePath(ParamStr(0)) +'server.exe');
Reset(f,1);
seek(f,offset);
zeromemory(@temp[1],200);
BlockWrite(f,temp,200);
seek(f,offset);
BlockWrite(f,edit1.text[1],length(edit1.Text));
CloseFile(f);
application.MessageBox('生成完毕','完毕');
end;
//也可以使用资源、附加数据等方式配置,上面的也可以直接修改资源流以后再保存
帖子64 精华
2
积分3215 阅读权限100 性别男 在线时间32 小时 注册时间2005-10-16 最后登录2007-3-15
查看详细资料
TOP
少女暴富的隐秘(图)
xxfish
荣誉会员
作者:
快乐天使
时间:
2008-7-24 17:26
引用:
引用第5楼ybjh于2006-12-25 17:32发表的 :
WriteProcessMemory,内存补丁
------------------------------------------------------
delphi代码,汇编不会
.......
楼上的是通过把资源保存到流,然后保存流...然后通过Delphi封装的AssignFile函数打开并且定位文件指针来进行写入信息..和内存补丁有何关系??..你保存到流中完全可以通过定位流中的指针来进行写入..
帖子31 精华
0
积分3128 阅读权限100 在线时间57 小时 注册时间2008-1-3 最后登录2008-7-20
查看详细资料
TOP
让女孩一夜变的更有女人味
qq227479645
晶莹剔透§烈日灼然
欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/)
Powered by Discuz! 7.2