返回列表 发帖

[讨论]为什么生成器生成的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
荣誉会员

汇编的看不太明白,不过一般做法就是把资源释放出来,然后打开文件,移动文件指针,写入,跟做文件补丁似的
帖子64 精华2 积分3215 阅读权限100 性别男 在线时间32 小时 注册时间2005-10-16 最后登录2007-3-15 查看详细资料TOP 软件项目外包

asm
运维管理组

TOP

跟做文件补丁有啥关系捏?貌似文件补丁是进程控制这一块的,和释放资源有关系 ?[s:41]游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn
帖子1604 精华30 积分8760 阅读权限150 性别男 在线时间954 小时 注册时间2006-9-21 最后登录2008-7-24 查看详细资料TOP 良辰择日,预测咨询,公司改名,权威易经

ybjh
荣誉会员

TOP

文件补丁:改写一个文件的数据使之被破解等等
生成器:改写木马的配置信息

[s:57]
帖子64 精华2 积分3215 阅读权限100 性别男 在线时间32 小时 注册时间2005-10-16 最后登录2007-3-15 查看详细资料TOP

asm
运维管理组

TOP

引用:
引用第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
荣誉会员

TOP

WriteProcessMemory,内存补丁

------------------------------------------------------
delphi代码,汇编不会

var
  exefile:tresourcestream;
  f:File;
  temp:array[0..199] of char;
const offset=1000;          //偏移
begin
  exefile:=tresourcestream.Create(Hinstance,&#39;MYFILE&#39;,&#39;EXEFILE&#39;);
  try
   exefile.SaveToFile(ExtractFilePath(ParamStr(0)) +&#39;server.exe&#39;);
  finally
   exefile.Free ;
  end;

  AssignFile(f,ExtractFilePath(ParamStr(0)) +&#39;server.exe&#39;);
  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(&#39;生成完毕&#39;,&#39;完毕&#39;);
end;

//也可以使用资源、附加数据等方式配置,上面的也可以直接修改资源流以后再保存
帖子64 精华2 积分3215 阅读权限100 性别男 在线时间32 小时 注册时间2005-10-16 最后登录2007-3-15 查看详细资料TOP 少女暴富的隐秘(图)

xxfish
荣誉会员

TOP

引用:
引用第5楼ybjh于2006-12-25 17:32发表的 :
WriteProcessMemory,内存补丁

------------------------------------------------------
delphi代码,汇编不会

.......
楼上的是通过把资源保存到流,然后保存流...然后通过Delphi封装的AssignFile函数打开并且定位文件指针来进行写入信息..和内存补丁有何关系??..你保存到流中完全可以通过定位流中的指针来进行写入..
帖子31 精华0 积分3128 阅读权限100 在线时间57 小时 注册时间2008-1-3 最后登录2008-7-20 查看详细资料TOP 让女孩一夜变的更有女人味

qq227479645
晶莹剔透§烈日灼然

TOP

返回列表