2026年对抗反汇编方法

对抗反汇编方法1 插入流氓字节 阻止真正的指令被反汇编 线性反汇编和面向代码流的反汇编 线性反汇编是遍历一个代码段 一次一条指令的线性反汇编 不考虑代码流的控制指令 而面向代码流的反汇编是会检查每一条指令 然后建立反汇编的地址列表 然后这样的反汇编算法会更加先进 而不易出错 比如 text 00 jz short near ptr loc 1 text 00

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



1.插入流氓字节,阻止真正的指令被反汇编

线性反汇编和面向代码流的反汇编:

线性反汇编是遍历一个代码段,一次一条指令的线性反汇编,不考虑代码流的控制指令。而面向代码流的反汇编是会检查每一条指令。然后建立反汇编的地址列表,然后这样的反汇编算法会更加先进,而不易出错。比如:

 .text:00 jz short near ptr loc_+1

.text:00 .text:00 loc_: ; CODE XREF: .text:00�j .text:00 call near ptr 8B4C55C7h 

观察以上的汇编代码,你会发现jz跳转到了call 指令中间,这显然是不可能的,所以call指令一定是一个数据而不是代码,在此处按d键,然后再观察

 xor eax, eax .text:00 jz short loc_ .text:00 ; ————————————————————————— .text:00 db 0E8h .text:00 ; ————————————————————————— .text:00 .text:00 loc_: ; CODE XREF: .text:00�j .text:00 mov eax, [ebp+0Ch] 

这样显然很正确了,对于call 指令而言,如果后面四个字节跟的是地址,它对应的机器码是0xe8,此处显然是把数据0xe8当成了call指令,才会出现这样的问题。

2.固定条件的跳转指令

 xor eax, eax .text:00 jz short loc_ 

3.函数指针问题

 mov [ebp+var_4],offset sub_4011c0; call [ebp+var_4] 可用IDA脚本语言IDC进行修正函数为AddCodeXref(); 

3.函数未识别的问题

import idaapi idaapi.CompileLine(‘static n_key(){ RunPythonStatement(“nopIt()”);}’) AddHotkey(“Alt-N”,“n_key”) def nopIt():

start=ScreenEA() end=NextHead(start) for ea in range(start,end): PatchByte(ea,0x90) Jump(end) 

4,异常触发

 push offset sub_4014c0 push large dword ptr fs:0 mov large fs:0,esp xor ecx,ecx div ecx 

属于滥用结构化异常(SEH)来对抗反汇编,通过人为构造一些比如访问一个无效的内存区域,除0等来触发异常,

SHE链是一个函数列表,处理线程的异常,列表中的函数要么处理异常,要么向下传递,如果传递到最后一个异常处理函数,就会被认为是一个不能处理的异常,弹出“an unhandled exception has occurred ”。

查找SEH链,操作系统会检查FS寄存器,这个寄存器中包含一个段选择子,从概念上来讲,链表以栈的方式工作,第一个调用的是最后一个加入链表的记录。前面的例子就是把自己的异常处理加入到链表的头部,然后用除0来触发异常,进而执行自己的代码。

小讯
上一篇 2026-04-25 11:16
下一篇 2026-04-25 11:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/274056.html