当前位置: 首页 > news >正文

x64汇编案例5

x64汇编案例5
1)案例介绍
咱们平时在公司开发软件,或是自己写代码卖给客户的时候,肯定都做过各种各样的软件防御和反调试检测保护吧?像常见的调试类OD,x64dbg,IDA,还有抓包类Burp,Fiddler,都是我们重点要防范的对象。遇到这些逆向分析工具,咱们是不是最常用的方法就是调用Win32API里的Process32Next函数,遍历系统里正在运行的进程。一旦检测到上面这些风险进程名称存在,咱们的程序就直接拒绝启动,从源头阻止逆向破解。当然啦这种基础的进程检测防护放到现在来说,防护力度已经比较简单很容易被绕过。各位不用着急,等后面的进阶逆向课程,还有驱动开发课程,咱会一步步教大家更深入的技术,带大家搞懂怎么从R3应用层到R0内核层,甚至包括DMA相关的绕过和检测思路,实现各种防护绕过和更强的安全对抗,彻底吃透软件攻防的核心逻辑。

题外话:
PCIe三层:
物理层:排线,金手指,差分信号传输
数据链路层:校验,重传,帧封装
事务层:最重要,发读写请求,DMA指令都是走这层

DMA板子插入PCIe插槽,主板枚举PCIe设备
系统分配BAR(BaseAddressRegister-基地址寄存器)地址
板子通过PCIe事务层下发DMA读写TLP包
直接跨过CPU,绕过系统保护,读写整机物理内存
上位机软件再和DMA板子通信,读游戏内存,写内存


2)案例

x64汇编案例5
1)案例介绍
咱们平时在公司开发软件,或是自己写代码卖给客户的时候,肯定都做过各种各样的软件防御和反调试检测保护吧?像常见的调试类OD,x64dbg,IDA,还有抓包类Burp,Fiddler,都是我们重点要防范的对象。遇到这些逆向分析工具,咱们是不是最常用的方法就是调用Win32API里的Process32Next函数,遍历系统里正在运行的进程。一旦检测到上面这些风险进程名称存在,咱们的程序就直接拒绝启动,从源头阻止逆向破解。当然啦这种基础的进程检测防护放到现在来说,防护力度已经比较简单很容易被绕过。各位不用着急,等后面的进阶逆向课程,还有驱动开发课程,咱会一步步教大家更深入的技术,带大家搞懂怎么从R3应用层到R0内核层,甚至包括DMA相关的绕过和检测思路,实现各种防护绕过和更强的安全对抗,彻底吃透软件攻防的核心逻辑。

题外话:
PCIe三层:
物理层:排线,金手指,差分信号传输
数据链路层:校验,重传,帧封装
事务层:最重要,发读写请求,DMA指令都是走这层

DMA板子插入PCIe插槽,主板枚举PCIe设备
系统分配BAR(BaseAddressRegister-基地址寄存器)地址
板子通过PCIe事务层下发DMA读写TLP包
直接跨过CPU,绕过系统保护,读写整机物理内存
上位机软件再和DMA板子通信,读游戏内存,写内存


2)案例

x64汇编案例5
1)案例介绍
咱们平时在公司开发软件,或是自己写代码卖给客户的时候,肯定都做过各种各样的软件防御和反调试检测保护吧?像常见的调试类OD,x64dbg,IDA,还有抓包类Burp,Fiddler,都是我们重点要防范的对象。遇到这些逆向分析工具,咱们是不是最常用的方法就是调用Win32API里的Process32Next函数,遍历系统里正在运行的进程。一旦检测到上面这些风险进程名称存在,咱们的程序就直接拒绝启动,从源头阻止逆向破解。当然啦这种基础的进程检测防护放到现在来说,防护力度已经比较简单很容易被绕过。各位不用着急,等后面的进阶逆向课程,还有驱动开发课程,咱会一步步教大家更深入的技术,带大家搞懂怎么从R3应用层到R0内核层,甚至包括DMA相关的绕过和检测思路,实现各种防护绕过和更强的安全对抗,彻底吃透软件攻防的核心逻辑。

题外话:
PCIe三层:
物理层:排线,金手指,差分信号传输
数据链路层:校验,重传,帧封装
事务层:最重要,发读写请求,DMA指令都是走这层

DMA板子插入PCIe插槽,主板枚举PCIe设备
系统分配BAR(BaseAddressRegister-基地址寄存器)地址
板子通过PCIe事务层下发DMA读写TLP包
直接跨过CPU,绕过系统保护,读写整机物理内存
上位机软件再和DMA板子通信,读游戏内存,写内存


2)案例

x64汇编案例5
1)案例介绍
咱们平时在公司开发软件,或是自己写代码卖给客户的时候,肯定都做过各种各样的软件防御和反调试检测保护吧?像常见的调试类OD,x64dbg,IDA,还有抓包类Burp,Fiddler,都是我们重点要防范的对象。遇到这些逆向分析工具,咱们是不是最常用的方法就是调用Win32API里的Process32Next函数,遍历系统里正在运行的进程。一旦检测到上面这些风险进程名称存在,咱们的程序就直接拒绝启动,从源头阻止逆向破解。当然啦这种基础的进程检测防护放到现在来说,防护力度已经比较简单很容易被绕过。各位不用着急,等后面的进阶逆向课程,还有驱动开发课程,咱会一步步教大家更深入的技术,带大家搞懂怎么从R3应用层到R0内核层,甚至包括DMA相关的绕过和检测思路,实现各种防护绕过和更强的安全对抗,彻底吃透软件攻防的核心逻辑。

题外话:
PCIe三层:
物理层:排线,金手指,差分信号传输
数据链路层:校验,重传,帧封装
事务层:最重要,发读写请求,DMA指令都是走这层

DMA板子插入PCIe插槽,主板枚举PCIe设备
系统分配BAR(BaseAddressRegister-基地址寄存器)地址
板子通过PCIe事务层下发DMA读写TLP包
直接跨过CPU,绕过系统保护,读写整机物理内存
上位机软件再和DMA板子通信,读游戏内存,写内存


2)案例

;Project mouse right -> Build Dependencies -> Build Customizations
;Project mouse file.asm -> propertis -> item type -> Microsoft Macro Assembler
; Only rely on VS2022 built-in tools, no need for external MASM32 library

option casemap:none
; Link required libraries for x64 Windows resolve external symbols
includelib ucrt.lib ; Universal C Runtime Library contains printf implementation
includelib legacy_stdio_definitions.lib ; Provides legacy stdio function symbols printf compatibility
includelib kernel32.lib ; Windows Kernel32 library contains ExitProcess
includelib psapi.lib ; Process Status API

externdef printf:proc

; Windows api
externdef MessageBoxA:proc
externdef ExitProcess:proc
externdef GetSystemTime:proc
externdef Sleep:proc
externdef CreateToolhelp32Snapshot:proc
externdef Process32First:proc
externdef Process32Next:proc
externdef CloseHandle:proc
externdef GetLastError:proc


.data

szTitle db 'x64 Process Lister', 0
szMsg db 'Process Listing Complete', 0

; Print process info PID + full process name
szProcFormat db 'Process ID: %lu, Name: %s', 0Ah, 0

; Error message format strings include GetLastError() code
szSnapErr db 'Failed to create process snapshot (Error Code: %lu)', 0Ah, 0
szFirstErr db 'Failed to retrieve first process (Error Code: %lu)', 0Ah, 0
szNextErr db 'Failed to retrieve next process (Error Code: %lu)', 0Ah, 0

; STANDARD WINDOWS x64 PROCESSENTRY32 STRUCTURE
; Size = 304 bytes (0x130)
PROCESSENTRY32 struct
dwSize dd ? ; 0x00: Size of the structure
cntUsage dd ? ; 0x04: Number of references to the process
th32ProcessID dd ? ; 0x08: Unique process ID "PID"
pad1 dd ? ; 0x0C: 4 byte padding
th32DefaultHeapID dq ? ; 0x10: Process default heap ID (x64 = 8 bytes)
th32ModuleID dd ? ; 0x18: Process module ID
cntThreads dd ? ; 0x1C: Number of threads in the process
th32ParentProcessID dd ? ; 0x20: Parent process ID "PPID"
pcPriClassBase dd ? ; 0x24: Base priority of process threads
dwFlags dd ? ; 0x28: Flags
szExeFile db 260 dup(0) ; 0x2C: Full path/name of the process executable MAX_PATH=260
PROCESSENTRY32 ends

; Align structure instance to 16 byte
align 16
pe32 PROCESSENTRY32 <> ; Instance of PROCESSENTRY32 for process data

.code
;----------------------------------------------------------------------
; Notes: - Follows x64 stack alignment rules sub rsp, 40h for shadow space
; - Properly cleans up handles to avoid resource leaks
; - Uses standard Windows API error handling GetLastError
;----------------------------------------------------------------------
; C function testGetProcess()
testGetProcess proc
; Allocate 32 bytes of shadow space + 8 bytes for alignment
sub rsp, 40h

; CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
mov rcx, 0Bh ; TH32CS_SNAPPROCESS 0x0B = snapshot all processes
mov rdx, 0 ; th32ProcessID = 0 enumerate all processes
call CreateToolhelp32Snapshot

; Check if snapshot handle is INVALID_HANDLE_VALUE = -1
cmp rax, -1
jne SnapshotSuccess ; Jump if snapshot created successfully

; Snapshot failed
call GetLastError
mov rcx, offset szSnapErr ; Error format string
mov rdx, rax ; Error code from GetLastError()
call printf ; Print error message
jmp Cleanup ; Jump to stack cleanup

SnapshotSuccess:
mov rbx, rax

; Init PROCESSENTRY32 structure
; Set dwSize to the correct size of PROCESSENTRY32 304 bytes = 0x130
mov dword ptr [pe32.dwSize], 304

; Get first process in the snapshot Process32First(snapshot_handle, &pe32)
mov rcx, rbx ; 1 param snapshot handle
lea rdx, [pe32] ; 2 param pointer to PROCESSENTRY32 instance
call Process32First

; Check if Process32First succeeded
test rax, rax
jnz ProcessLoop ; Jump if first process retrieved

; Process32First failed
call GetLastError
mov rcx, offset szFirstErr
mov rdx, rax
call printf
jmp CloseSnapshot ; Jump to close snapshot handle

ProcessLoop:
; Print current process info (PID + full executable name)
; printf(szProcFormat, PID, szExeFile)
mov rcx, offset szProcFormat ; 1 param format string
mov edx, [pe32.th32ProcessID] ; 2 param PID
lea r8, [pe32.szExeFile] ; 3 parma pointer to full process name
call printf

; Get next process in the snapshot Process32Next(snapshot_handle, &pe32)
mov rcx, rbx ; 1 parma snapshot handle
lea rdx, [pe32] ; 2 param pointer to PROCESSENTRY32
call Process32Next

; Continue loop if next process exists non-zero return = success
test rax, rax
jnz ProcessLoop ; Repeat if more processes

; Check if Process32Next failed
call GetLastError
cmp rax, 18 ; ERROR_NO_MORE_FILES 18 = normal end of list
je CloseSnapshot ; No error skip print error

; Process32Next failed
mov rcx, offset szNextErr
mov rdx, rax
call printf

CloseSnapshot:
; CloseHandle(snapshot_handle)
mov rcx, rbx
call CloseHandle

Cleanup:
add rsp, 40h
ret
testGetProcess endp

2)案例 其他案例请查看,aes解码,密钥123456789,密文U2FsdGVkX1/Bd4k8ZAij4D8oMKFwS3bBvmalzk3NT7UEJTw7/qemqhDLwG4nl9H9/nO3Xk0Ebmv0W50P9akHkb0F2ubxR31a6lldXh/T1P5UbUFht0mf2SUJwAKMq1bg

http://www.jsqmd.com/news/972981/

相关文章:

  • 用51单片机和ADC0809做个简易电压表,从Proteus仿真到实物焊接全流程(附源码)
  • 2026年最新白山市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 2026年最新昆明市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • LOFAR与uGMRT联合观测星系团射电晕的技术解析
  • 2026年最新三明市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 2026年最新怀化市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • 从‘一视同仁’到‘区别对待’:图解Circle Loss如何给难样本‘加权重’,PyTorch代码逐行解析
  • 2026年淄博采购供应商岗位SCMP试听课怎么问?众智商学院官网费用班期 - 众智商学院职业教育
  • 告别‘我’字打不出!手把手教你为手心输入法配置完整的自然码辅码表(附下载)
  • 罗马尼亚语NLP模型优化与低资源语言处理实践
  • 2026年最新达州市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • 一束光,为什么能同时“通信”和“感知”?
  • 2026年最新白银市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 2026年最新三沙市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 2026年最新来宾市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • MuleSoft AI编排:用企业级集成驯服大语言模型不确定性
  • ESP8266+巴法云MQTT实战:手把手教你打造一个可自定义指令的智能家居遥控App
  • 2026年最新福州市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • 2026年最新百色市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 2026年最新三亚市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 用Excel搭框架、MATLAB跑算法:17个运营决策预测实战案例包
  • 多维聚合数据变形术:从GROUP BY到结构化输出的工程实践
  • 深入AVB签名机制:从盐值、哈希到RSA签名,一次搞懂镜像验签的全过程
  • STM32F103RCT6+RC522门禁系统避坑指南:从OLED显示乱码到继电器驱动,新手必看的5个调试难点
  • 从零搭建企业级实验环境:eNSP结合CE/NE/USG6000V镜像的完整部署流程
  • 2026年最新兰州市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 超越调参:用XGBoost做房价预测时,你的特征工程真的做对了吗?
  • 深入浅出:用TMS320F280049的SDFM模块做个简易“示波器”与阈值报警器
  • 2026年最新抚州市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • 罗马尼亚语模型训练:Transformer与Mamba架构对比与优化