能力值:
( LV2,RANK:10 )
|
-
-
101 楼
精品!希望和楼主一起进步!
|
能力值:
( LV2,RANK:10 )
|
-
-
102 楼
感谢,想下来看看
|
能力值:
( 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
请指点
|
能力值:
( LV2,RANK:10 )
|
-
-
104 楼
上面我写错了:can not open file :bbb.asm
|
能力值:
( 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
|
能力值:
( LV4,RANK:50 )
|
-
-
106 楼
注意:
是 ren 壳.asm aaa
不是 ren 壳.asm aaa.asm
|
能力值:
( LV2,RANK:10 )
|
-
-
107 楼
楼主真好,我试一下
|
能力值:
( LV2,RANK:10 )
|
-
-
108 楼
多谢楼主,我已搞定
|
能力值:
( 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
|
能力值:
( LV4,RANK:50 )
|
-
-
110 楼
最初由 scnbjxzx 发布 请教楼主两个问题?
get_knl_base proc ;得到 kernel32.dll 基址 ........
1、seh链最里层的句柄位于kernel32.dll中,所以可据此找到其基址
2、是偏移地址
|
能力值:
( LV2,RANK:10 )
|
-
-
111 楼
谢谢楼主 ,~!
|
能力值:
( 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]
|
能力值:
( 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等值
|
能力值:
( LV4,RANK:50 )
|
-
-
114 楼
这段是处理dll的代码,
不过因为某些原因,现在这个壳不能支持dll了
主要是在副线程中再创建线程和系统对dll回调有‘冲突’
|
能力值:
( 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文件在内存中可以装入两次吗?第一个进程引入第二个进程才能解吗?
|
能力值:
( LV4,RANK:50 )
|
-
-
116 楼
简单说,这些副线程由主线程通过设置几个变量来决定其运行和结束,同时,副线程在运行和结束时也会设置某些变量告诉主线程其活动状态
,它们互相协调运行
变量的每一bit对应控制一个线程
|
能力值:
( LV4,RANK:50 )
|
-
-
117 楼
4、好像可以吧,不过系统并未真正重调其文件,而是增加一次装入计数;
两个进程没有任何联系,双进程只是用来反调试器
我用od强制变单会出现异常,无法跟下去
我建议用softice调试,下断在第二次运行openeventa时
|
能力值:
( LV4,RANK:50 )
|
-
-
118 楼
还想多说一句,其实没有必要详细分析代码细节,了解其大至思路就可以了^_^
|
能力值:
( LV12,RANK:980 )
|
-
-
119 楼
呵呵,总算用OD跟到入口了:)
|
能力值:
( 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>
|
能力值:
( LV6,RANK:90 )
|
-
-
121 楼
编译搞定了~~谢谢楼主。。。。。。。
跟了半天~~找不到 OEP 。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
122 楼
thank you
|
能力值:
( LV2,RANK:10 )
|
-
-
123 楼
支持楼主写出源程序。
|
能力值:
( LV2,RANK:10 )
|
-
-
124 楼
请问楼主。什么时候可以把源码贴上?
|
能力值:
( LV2,RANK:10 )
|
-
-
125 楼
好东西!谢谢楼主无私提供!
|
|
|