首页
社区
课程
招聘
[原创]PEDIY技术之新思路(一)_简单实现记事本自动保存
发表于: 2009-4-3 12:56 14177

[原创]PEDIY技术之新思路(一)_简单实现记事本自动保存

2009-4-3 12:56
14177

【文章标题】: PEDIY技术之新思路(一)_简单实现记事本自动保存
【简单介绍】:在不改动记事本原代码的前提下,另类实现给记事本添加自动保存的功能(为什么要拿这个开刀,因为它简单,作为开篇比较好,前几天newjueqi写过关于这个功能实现的pediy文章,相信大家也比较熟悉),我为什么说它是个思路呢,是这样的,我觉得很多pediy的实现大多都是在原来代码区块里面改来该去,操作繁杂不说,空间也不一定够,而且很容易出错,所以这种改动的功能放到新的区块里面会更方便,而且编译产生二进制文件,在一次写进去,比直接修改代码来得容易和方便了。而且它至少还有两个好处:1 就是如果程序加了壳,这个时候你肯定不能直接改动代码,但是用这种方法却可以(你可以试下给记事本加个壳,把入口改一下,再按如下方法进行处理),2 经过如下方法处理后的程序,peid什么都查不出来了,或者会误判
【文章作者】: moonife
【读者对象】:都看看吧
【文章难度】:3/10(我自己定义的)
【作者邮箱】: moonife@163.com
【作者QQ号】: 765496322
【下载地址】: 附件
【编写语言】: win32 asm
【使用工具】: AddSection(我自己刚写的,附件里有)
【操作平台】: xp-sp3
【作者说明】:我有一个不知道是好不好的习惯,就是任何事都想要改进一下,可以更快捷和方便的完成,当然很多事也就只是想想,并没有实现的能力和条件,不过现在这个我算是成功实现了吧,所以就拿出来分享一下,希望可以给各位产生点价值。说真的,我都不知道如何去很好的描述这种思路,所以还是来具体的实现过程吧,各位自己体会了!有不足之处,还恳请各位大虾指正!谢谢了
*******************************************实现过程*********************************************
一 实现过程简介:
1 编写实现功能的代码, 产生功能代码编译后的数据文件
2 给记事本增加一个新的区块,并把数据文件写入,并更改记事本入口地址为新区块开头,执行完功能功能代码后返回原入口地址

二 具体操作过程:
-----------------------1 编写实现功能的代码, 产生功能代码编译后的数据文件----------------------------
下面是实现此功能的win32 asm 代码并给出比较详细的注译
; MakeData.asm
;***********************************************************************
.586
.model flat,stdcall
option casemap:none
;***********************************************************************
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
include  xlib.inc ;这个头文件来自 forgot & heXer 两位大牛的,主要是利用PEB原理搜索API和初始化库,
;为了更方便,我把罗云彬大哥的仿invoke指令宏定义加进去,具体使用见后面的AutoSave.asm
;因为篇幅关系,这个头文件就不贴了,附件里有
;***********************************************************************
.data?
hOutFile dd ?
BytesWritten dd ?
.const
szCaption db 'Info',0
szContext db 'success',0
szOutFileName  db 'notepad.data',0
;***********************************************************************
.code
include   AutoSave.asm  ;这里把实现功能代码引入,编译并产生数据文件,下面的应该都看懂,就不讲了
start:
invoke  CreateFile,offset szOutFileName,GENERIC_READ or GENERIC_WRITE,\
          FILE_SHARE_READ,\
          NULL,CREATE_ALWAYS,\
          FILE_ATTRIBUTE_NORMAL,NULL
   mov  hOutFile,eax
invoke  WriteFile,hOutFile,offset REMOTE_CODE_START,REMOTE_CODE_LENGTH,addr BytesWritten,NULL
invoke  MessageBox,0,offset szContext,offset szCaption,MB_OK
invoke ExitProcess,0
end start
;******************************************************************************
;AutoSave.asm
REMOTE_CODE_START        equ this byte
;******************Infect code start***************************
call        @F
                @@:
                pop        ebx
                sub        ebx,offset @B    ;relocation
initX   XFL_MAX, "user32"     ;引用xlib.inc里面的宏操作,功能是加载user32.dll库和初始化
lea eax,szContextR[ebx]
lea ecx,szCaptionR[ebx]
invokex   MessageBoxA,0,eax,ecx,MB_YESNO     ;功能开启选择对话框,注意这里是invokex哦,它不会进行参数检查,如果API进行字符处理,
;要加A或W
.if eax==IDNO
push Ret_Entry[ebx]                 ;返回原入口地址
   ret
.else
lea edi, [ebx + offset AutoSaveThread]
invokex CreateThread,NULL,0,edi,NULL,NULL,NULL ;产生一个线程,这个比较关键,关闭记事本后才退出,你应该想到它要干什么了吧
push Ret_Entry[ebx]
   ret
.endif  
;>>>>>>>>>>>>>>>>线程定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>
AutoSaveThread        proc        uses ebx edi esi ecx
call        @F
                @@:
                pop        ebx
        sub        ebx,offset @B           ;特别注意这里也需要重定位
                initX XFL_MAX, "user32"
   .while 1                       ;无限循环
lea edi, [ebx + offset szClassNmae]
   invokex FindWindowA,edi,NULL    ;查找记事本的窗口获得句柄
   .if eax
   mov ecx,eax
    xor eax,eax
    mov ax,3                        ;保持菜单项的ID,用资源编辑工具可以获得
invokex SendMessageA,ecx,WM_COMMAND,eax,0  ;给保存菜单项发送消息
.endif
    invokex  Sleep, 10000                      ;约多长时间循环一次,你可以按需改动
   .endw
    mov eax,TRUE
    ret
    AutoSaveThread  endp
;>>>>>>>>>>>>>>>>这里定义用到的数据>>>>>>>>>>>>>>>>>>>>>>>>>>>>
szContextR db '是否开启自动保存?',0
szCaptionR db 'AutoSave',0
szClassNmae  db  'Notepad',0   ;记事本主窗口的类名
Ret_Entry dd  0100739Dh       ;记事本的原入口地址,用lordpe等pe工具就可以得到
;******************Infect code end***************************
REMOTE_CODE_END                equ this byte
REMOTE_CODE_LENGTH        equ offset REMOTE_CODE_END - offset REMOTE_CODE_START

******2 给记事本增加一个新的区块,并把数据文件写入,并更改记事本入口地址为新区块开头,执行完功能功能代码后返回原入口地址******
运行附件里面的AddSection ,目标文件选择记事本程序,数据文件选择第一步中产生的notepad.data文件,并选上写入数据文件和更新入口地址,填写区块名字,然后生成,会在目标文件目录下生成 xxx@.exe文件,就ok了;如下图:
              
******************************************the end****************************************************************
Ps:不足之处还请给我指正一下,在这里要特别感谢forgot & heXer & 罗云彬 等无数大牛的无私奉献,再次感谢看雪学院!应该会有下一篇的吧,或者哪位用这种思路实现更多更好PEDIY
附件文件清单:AutoSave.asm , MakeData.asm,xlib.inc,AddSection.exe,(最终生成的)notepad@.exe,还有本文档。
                                                                                        写于:2009-4-2


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
2
学习了。123445
2009-4-3 16:55
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
...新思路?
2009-4-3 17:00
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
4
我还是很菜的了,见识不广,所以还请别见怪了
2009-4-3 18:03
0
雪    币: 242
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很需要这方面的资料~!

感谢分享~!
2009-4-3 18:27
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文,好工具,期待下篇

并建议版主加精华!
2009-4-3 18:43
0
雪    币: 561
活跃值: (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
收下了
2009-4-3 21:03
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
8
感觉与其说是PEDIY不如说是个简单功能壳..
2009-4-3 22:12
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
9
可以这么说,我为什么说它是个思路呢,是这样的,我觉得很多pediy的实现大多都是在原来代码区块里面改来该去,操作繁杂不说,空间也不一定够,而且很容易出错,所以这种改动的功能放到新的区块里面会更方便,而且编译产生二进制文件,在一次写进去,比直接修改代码来得容易和方便了
2009-4-3 22:57
0
雪    币: 1137
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
向LZ学习....
2009-4-4 11:29
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
11
最大的方便在于不需要写反汇编代码了 只asm就好

最大的收获是
include  xlib.inc ;这个头文件来自 forgot & heXer 两位大牛的,主要是利用PEB原理搜索API和初始化库,
;为了更方便,我把罗云彬大哥的仿invoke指令宏定义加进去

这两个极为方便..
2009-4-4 11:50
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
加节比较容易被发现!
2009-4-4 20:21
0
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
佩服.



但是请问为什么在我机器上搞出来的exe就只这么点
上传的附件:
2009-4-4 20:30
0
雪    币: 268
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
怎么我下载下来被卡巴报警了?
2009-4-15 19:18
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
15
没有事的,因为notepad@.exe加了一个“陌生”的节而已
2009-4-15 19:26
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
dos时代的病毒大都是这样做的
2009-4-16 20:32
0
雪    币: 551
活跃值: (2270)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
17
好东西真不错,学习收藏
2009-4-17 23:42
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
还是学到了不少东西~~至少汇编代码值得我研究
2009-4-18 12:12
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
ding
努力学习中......
2009-4-20 20:03
0
雪    币: 200
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
收藏了。。。。
2009-5-5 11:08
0
雪    币: 260
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
可以说说xlib.inc怎样用么?
2009-6-4 13:29
0
游客
登录 | 注册 方可回帖
返回
//