• 汇编之dll注入


    InjectCode:(一般定标号 用上一个标号减下一个标号就是所在位置)
      push 0
      push 0
      push 0
      push 0
    LABEL1:        (标号是用来修改对方进程中的相对函数调用位置)
      mov  eax, 76748700h
      call eax
      ret
    打开目标进程:
      LOCAL @hWnd:HWND
      LOCAL @dwPID:DWORD
      LOCAL @hProcess:HANDLE
      LOCAL @pBuff:PVOID
      LOCAL @dwNumber:DWORD 
      LOCAL @hThread:DWORD 
      LOCAL @hUser32:DWORD 
      LOCAL @pfnMsgBox:DWORD 
      LOCAL @dwOld:DWORD 
      ;远程线程注入
      ;1.FindWindow
      invoke FindWindow, offset g_ClassName, NULL
      .if eax == NULL
        ret
      .endif
      mov @hWnd, eax
      ;2.获取进程pid
      invoke GetWindowThreadProcessId, @hWnd, addr @dwPID 
      ;3.打开进程
      invoke OpenProcess,PROCESS_ALL_ACCESS, FALSE, @dwPID
      .if eax == NULL
        ret
      .endif
      mov @hProcess, eax
      ;4.远程申请内存
      invoke VirtualAllocEx,@hProcess, NULL, 1000h, MEM_COMMIT, PAGE_EXECUTE_READWRITE
      .if eax == NULL
        jmp  SAFE_EXIT
      .endif
      mov @pBuff, eax
      ;修改内存保护属性
      invoke VirtualProtect,offset InjectCode, 1000h, PAGE_EXECUTE_READWRITE, addr @dwOld
      ;API地址重定位
      invoke GetModuleHandle, offset g_User32
      mov @hUser32, eax
      invoke GetProcAddress,@hUser32, offset g_MessageBox
      mov @pfnMsgBox, eax
      mov esi, @hUser32
      sub eax, esi  ;offset
      add eax, esi  ;+base  ;遍历模块列表
      mov ebx, offset LABEL1
      mov dword ptr [ebx+1], eax
      ;5.写入代码
      invoke WriteProcessMemory,@hProcess, 
                                @pBuff, 
                                offset InjectCode, 
                                offset Inject - offset InjectCode, 
                                addr @dwNumber
      .if !eax
        jmp   SAFE_EXIT
      .endif
      ;6.创建远程线程
      invoke CreateRemoteThread,@hProcess, NULL, 0, @pBuff, NULL, 0, NULL
      .if eax == NULL
        jmp   SAFE_EXIT
      .endif
      mov @hThread, eax  
    SAFE_EXIT: 
      .if @hThread != NULL
        invoke CloseHandle, @hThread
      .endif
      
      .if @hProcess != NULL
        invoke CloseHandle,@hProcess
      .endif
      
      ret
    注入代码编写  
    方法一 :数据区通过代码偏移计算传入
    InjectCode:
     mov  ebp, offset InjectCode
     push MB_OK
     lea  eax, [ebp+26h]
     push eax
     lea  eax, [ebp+19h]
     push eax
     push NULL
    LABEL1:
     mov  eax, 12345678h
     call eax
     ret
     INJECT_MSG db "hello World!", 0
     INJECT_TITLE db "Title", 0
    
    方法二 call来调用
    位置无关代码记录的是一个相对值,而不是地址的绝对值
    InjectCode:
     call next1       ;位置无关代码
    next1:
     pop ebp
     sub ebp, next1
     ;mov  ebp, offset InjectCode
     push MB_OK
     lea  eax, [ebp+offset INJECT_MSG]
     push eax
     lea  eax, [ebp+offset INJECT_MSG]
     push eax
     push NULL
    LABEL1:
     mov  eax, 12345678h
     call eax
     ret
     INJECT_MSG db "hello World!", 0
     INJECT_TITLE db "Title", 0
    
    
    
    
    
    
    
    方法三  将数据用二进制当参数入栈
    InjectCode:
      ;loadlibrary "user32.dll"
      push 00646c72h
      push 6f57206fh
      push 6c6c6568h
      mov  ebx, esp
      push 00000065h
      push 6c746954h
      mov ecx, esp
      push MB_OK
      push ecx
      push ebx
      push NULL
    LABEL1:
    
      mov  eax, 12345678h
      call eax
      add  esp, 20
      retn  4
    
    多参不好声明用静态库
    
    联合编译
    一将汇编当做导出函数做动态库  在其他语言中加载dll
    二将其他语言当做动态库连接到汇编语言中去
    
    汇编控制台工程要调初始化化函数 mainCRTSTARTUP  、
    入口函数也是需要main函数才能执行 这样才能和c语言保持相同性
    
    汇编Dll需要包含__DllMainCRTStartup@12
    学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
  • 相关阅读:
    python gzip get url
    nginx 日志解析,nginx缓存
    Keepalived
    SEO 搜索引擎优化
    检测网站是否支持gzip的本地代码
    使用logrotate做nginx日志轮询
    YUI Compressor下载
    Adobe Illustrator有 机会装一下
    同步时间
    买不起书啊nginx http server filetype:pdf 30刀
  • 原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13618735.html
Copyright © 2020-2023  润新知