目录存档: WIN32技巧

21

检测内核回调表钩子

    KernelCallbackTable,就是apfn hook检测,看XT有这个功能,网上也没找到相关内容,就自己实现了一下,纯VB,其实就是特征码暴力搜索+PE文件解析,没什么新颖的,XP SP3测试成功,其它系统未测,估计也差不多~

    代码注释不多,结构规范,下载地址:http://win32-fake-program.googlecode.com/files/DetectKernelCallbackTableHook.rar

    来晒张图~

 

[……]阅读全文

21

关于LdrLoadDll

调用过程:LoadLibraryA->LoadLibraryW->LdrLoadDll……

针对有些未加载kernel32.dll的进程,可以用ShellCode+LdrLoadDll进行DLL注入

还有就是可以用LdrGetProcedureAddress代替GetProcAddress

使用方法:

Private Declare Function LdrLoadDll Lib "NTDLL.DLL" (PathToFile As String, ByVal Flags As Long, ModuleFileName As UNICODE_STRING, ModuleHandle As Long) As Long

Private Type UNICODE_STRING
    Length As Integer
    MaximumLength As Integer
    Buffer As Long
End Type

Private Sub xx()

    Dim uPath As UNICODE_STRING
    Dim hModule As Long
  
    uPath.Buffer = StrPtr(dllPath)
 &nbsp

[……]阅读全文

21

也许还有一种DLL注入方法

只是瞎想的,未尝试,未必可行,无码

说一下步骤:

1.获取本进程的kernel32.dll基址,获取LoadLibraryA函数地址,后者与前者相减计算出LoadLibraryA在kernel32里的偏移位置(也可以直接使用获取到的LoadLibraryA函数地址,但是不保证所有系统兼容)

2.获取目标进程的kernel32.dll基址,加上之前所得的偏移计算出目标进程内LoadLibraryA函数地址

3.构造一段ShellCode写入目标进程,ShellCode恢复GetMessage的InlineHook,接着push DLL(push的是内存地址,之前要将DLL路径写入到目标进程),然后call LoadLibraryA(注意是偏移),然后再call一次GetMessage

4.Inline Hook目标进程的GetMessage(会频繁调用,前提是有窗口的程序),jmp到ShellCode的位置

5.ShellCode被执行,DLL成功注入

 

该方法无需CreateRemoteThread、SetWindowsHookEx,如果可行的话应该可以bypass各个杀软。

 

缺点应该有不少,比如线程同步问题,还有就是只支持GUI程序。水平太菜,有问题的地方希望各位大牛指正。

 

[……]阅读全文

21

获取进程路径的种种方法

RT。在网上搜集了一下,整理了如下几种方法。

1.PEB->ProcessParameters->ImagePathName
2.EPROCESS->SeAuditProcessCreationInfo->ImageFileName->Name
3.EPROCESS->SectionObject->SegmentObject->ControlArea->FileObject->FileName
4.ZwQueryInformationProcess-PEB,RtlVolumeDeviceToDosName(这个没看明白)

理论上讲都可以伪装……

BTW:推荐一个好网站http://msdn.moonsols.com/,各个系统的各个结构都可以在上面查到,很好很强大。

 

[……]阅读全文

21

远程执行多参函数

2011-6-8注:

原地址失效了,考虑到还有很多人问我要,更正一个新的下载地址:
http://naylon.0ginr.com/download/OldFxExecuteRemoteFunction_Demo.rar
以前比较水,就写了这么一个东西,实际上缺陷十分多,很多东西都没考虑,不推荐应用到实际开发中。

 

    RT,昨天写的,今天整理成了模块,虽说这东西技术不是很高明,但有的时候还是蛮有用的。

    具体功能看Demo,不解释,高手bypass。

    Demo下载地址:ftp://58.185.67.6/download/naylon/FxExecuteRemoteFunction_Demo.rar

    顺便贴关键代码(modFxExecuteRemoteFunction.bas):

Option Explicit

Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "

[……]阅读全文

21

获取线程函数的所在模块

XueTr和天琊的“察看线程”里都能看到线程所属的模块,但是自己却一直想不出来如何实现。苦恼了很久,后来参考了倒霉蛋儿的一篇文章,使用的GetMappedFileNameA来实现的上述功能,但是我试了半天总是出错,vb6.exe直接挂掉了,于是只能放弃GetMappedFileNameA,后来我就想,有的线程函数一定是在模块里的,那么线程函数的地址一定大于模块的基址,小于(模块的基址+模块的大小),正好倒霉蛋儿的代码里有获取线程入口地址的方法,于是就有了办法,遍历模块,然后一个个进行上述判断,如果匹配就记录下该模块。

为了图方便,我使用了Tesla.Angela的HdEnumModules(因为LdrModule结构里的模块信息比较详细),写了个easy的函数获取线程所属模块,一共有三个参数,第一个是线程所属进程的句柄,第二个是线程句柄,第三个是线程线程入口函数的地址(传0自动获取),函数代码如下,各种声明就不贴了。。

Public Function FxGetThreadModuleFileName(ByVal hProcess As Long, ByVal hThread As Long, Optional ByVal StartAddr As Long = 0) As String
    Dim lPtr As Long
    Dim pbi As PROCESS_BASIC_INFORMATION
    Dim tPEB_LDR_DATA As PEB_LDR_DATA
   &nb

[……]阅读全文