首页
社区
课程
招聘
我以前写的一个壳(已放上源程序,在47楼)
发表于: 2006-3-7 21:28 124806

我以前写的一个壳(已放上源程序,在47楼)

2006-3-7 21:28
124806
收藏
免费 7
支持
分享
最新回复 (240)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
101
精品!希望和楼主一起进步!
2006-3-22 20:59
0
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
102
感谢,想下来看看
2006-3-23 10:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
103
楼主:我按你说把生成花指令.asm 改名为 hua.asm, 壳.asm 改名为aaa.asm然后:
ml /c hua.asm
link5 hua;
hua               生成了hua.obj 和hua.exe
但是在执行
ml /c /coff bbb.asm  提示按can not find file : bbb.asm
请指点
2006-3-23 11:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
104
上面我写错了:can not open file :bbb.asm
2006-3-23 11:36
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
105
最初由 tuboshu 发布
楼主:我按你说把生成花指令.asm 改名为 hua.asm, 壳.asm 改名为aaa.asm然后:
ml /c hua.asm
link5 hua;
hua 生成了hua.obj 和hua.exe
但是在执行
........

ml /c hua.asm    生成hua.obj
link5 hua;       生成hua.exe
hua              运行hua,生成bbb.asm
2006-3-23 11:56
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
106
注意:
是  ren 壳.asm aaa
不是 ren 壳.asm aaa.asm
2006-3-23 11:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
107
楼主真好,我试一下
2006-3-23 12:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
108
多谢楼主,我已搞定
2006-3-23 15:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
109
请教楼主两个问题?

get_knl_base        proc      ;得到 kernel32.dll 基址
        assume fs:nothing
        mov eax,fs:[0]

check_int3_0

        push edx
@@:
        cmp dword ptr [eax],-1      请楼主解释一下,通过这里为什么可
        je @f                       得到 kernel32.dll 基址?
        mov eax,[eax]
        jmp @b                       
@@:
        mov eax,[eax+4]
        and eax,0ffff0000h
@@1:
        cmp word ptr [eax],'ZM'
        je @f
        sub eax,10000h
        jmp @@1       

set_seh        proc    uses eax flag,ofs
        assume fs:nothing

        cmp flag,0

check_int3

        je @f
        mov eax,fs:[0]
        mov flag,eax
        lea eax,flag
        mov fs:[0],eax
        jmp ss9
@@:
        mov eax,[ofs+4]          这里的ofs值是堆栈地址,还是堆栈内  的值(则为0)?
        mov fs:[0],eax
        ret 4*4
ss9:               
        ret 0
set_seh        endp
2006-3-23 16:56
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
110
最初由 scnbjxzx 发布
请教楼主两个问题?



get_knl_base proc ;得到 kernel32.dll 基址
........


1、seh链最里层的句柄位于kernel32.dll中,所以可据此找到其基址
2、是偏移地址
2006-3-23 18:36
0
雪    币: 226
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
111
谢谢楼主 ,~!
2006-3-23 19:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
112
谢谢楼主!还有一些不解这处请指教!

若ofs 当作偏址则mov eax,[ofs]与mov eax,ofs等效?是吗?
另外下在返回ret 4*4有些不理解这里退一级seh我的理解用ret 2*4就可以我不知我错在哪?

entry1:      ;!!!
        cld
        call get_knl_base

        push eax
        lea ecx,p_ll[ebx]
        invoke get_func_address,eax,ecx
        mov f_LoadLibrary[ebx],eax
        pop eax

        mov knl_base[ebx],eax

        lea edi,p_funcnames[ebx]
        lea esi,p_funcs[ebx]
@@:
        cmp byte ptr [edi],0
        je @f
        mov eax,knl_base[ebx]
        invoke         get_func_address,eax,edi
        mov [esi],eax
        add esi,4
        mov ecx,-1
        mov al,0
        repne scasb
        je @b
@@:

        lea eax,user32name[ebx]
        push eax
        call f_LoadLibrary[ebx]
        mov hUser32[ebx],eax
        lea ecx,p_msgbox[ebx]
        invoke get_func_address,eax,ecx
        mov f_MessageBox[ebx],eax

;;;mov check1[ebx],0

;call disp1

        cmp file_type[ebx],1   ;exe
        je is_exe
        cmp file_type[ebx],2   ;dll
        jne error_exit

        cmp dword ptr [esp+24h+4+4],1 这里 [esp+24h+4+4]内存的什么数这里有个什么数据结构? ;dll_process_attach
        jne dll_ret
        mov eax,[esp+24h+4+0]
        mov hModule[ebx],eax

        push eax
        call f_DisableThreadLibraryCalls[ebx]
2006-3-23 20:20
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
113
1、是
2、还有弹2个4是前面invoke set_seh ,1,handleseh的参数,注意它是ret 0返回的,没有弹出2参数
3、这个是系统回调dll的参数,大概是这个样子 dll_entry proc hInstDLL:DWORD, reason:DWORD, unused:DWORD
esp+24h是程序开始的压栈偏移pushfd,pushad
[esp+24h+4+0]-->hInstDLL
[esp+24h+4+4]-->reason
reason有:DLL_PROCESS_ATTACH、DLL_PROCESS_DETACH、DLL_THREAD_ATTACH、DLL_THREAD_DETACH等值
2006-3-23 20:42
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
114
这段是处理dll的代码,
不过因为某些原因,现在这个壳不能支持dll了
主要是在副线程中再创建线程和系统对dll回调有‘冲突’
2006-3-23 20:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
115
谢谢楼主提供源程序和耐心解释, 让我学到不少东西!
这两天我都在学习中。 这里又有几处不能肯定的地方,请指教:
程序中check_thread        proc para

1:
        mov ebx,para
        lea eax,seh1[ebx]

        invoke set_seh,1,eax
       
ct0:
@@:
        test flag_thread_end[ebx],1 该线程启动后不会满足退出条件, 是吗?
        jnz ct9
        test flag_thread_active[ebx],1
        jz @b
       

2:

checkAPI_thread        proc para
        mov ebx,para

        lea eax,seh1[ebx]
        invoke set_seh,1,eax

ca0:
        test flag_thread_end[ebx],100b    该线程启动后就不会满足退出条件, 是吗?
        jnz ca9

        cld
ca1:

3:

        or flag_thread_active[ebx],10b  ;active decode

@@:
        test flag_thread_finish[ebx],10b   这里作为主线程。 我找不到结束循环条件,
    不知怎么进入第二个入口点。
        int 0f7h

        jz @b               
       

                               
        jmp _ok       

        lea eax,second_entry[ebx]
        mov dword ptr proc_ret_addr[ebx+1],eax
        popad
        popfd

proc_ret_addr  label byte     ;!!!     
        push 12345678h          ;!!!
        ret

isnot?        proc stdcall         uses eax ecx edx pt
        mov ecx,0
        mov edx,pt

4:
  问个愚蠢的问题。 不知同一dll文件在内存中可以装入两次吗?第一个进程引入第二个进程才能解吗?
2006-3-24 08:20
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
116
简单说,这些副线程由主线程通过设置几个变量来决定其运行和结束,同时,副线程在运行和结束时也会设置某些变量告诉主线程其活动状态
,它们互相协调运行
变量的每一bit对应控制一个线程
2006-3-24 09:26
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
117
4、好像可以吧,不过系统并未真正重调其文件,而是增加一次装入计数;
   两个进程没有任何联系,双进程只是用来反调试器

我用od强制变单会出现异常,无法跟下去
我建议用softice调试,下断在第二次运行openeventa时
2006-3-24 09:31
0
雪    币: 209
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
118
还想多说一句,其实没有必要详细分析代码细节,了解其大至思路就可以了^_^
2006-3-24 09:35
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
119
呵呵,总算用OD跟到入口了:)
2006-3-25 00:29
0
雪    币: 414
活跃值: (987)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
120
支持 ..............

Definitions File [nul.def]:
LINK : warning L4051: kernel32.lib : cannot find library
Enter new file spec:
LINK : warning L4021: no stack segment

bbb.obj(bbb.asm) : error L2029: '_CreateFileA@28' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_VirtualFree@12' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_LoadLibraryA@4' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_VirtualAlloc@16' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_GetCommandLineA@0' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_CloseHandle@4' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_VirtualQuery@12' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_ExitProcess@4' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_ReadFile@20' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_SetFilePointer@16' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_GetProcAddress@8' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_GetTickCount@0' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_GetFileSize@8' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_WriteFile@20' : unresolved external
bbb.obj(bbb.asm) : error L2029: '_VirtualProtect@16' : unresolved external

There were 15 errors detected

D:\MASM32\BIN>
2006-3-26 03:28
0
雪    币: 414
活跃值: (987)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
121
编译搞定了~~谢谢楼主。。。。。。。

跟了半天~~找不到 OEP 。。。
2006-3-26 03:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
122
thank you
2006-3-26 14:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
123
支持楼主写出源程序。
2006-3-26 20:33
0
雪    币: 205
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
124
请问楼主。什么时候可以把源码贴上?
2006-3-27 13:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
125
好东西!谢谢楼主无私提供!
2006-3-28 22:08
0
游客
登录 | 注册 方可回帖
返回
//