首页 > 编程语言 >常见反汇编技术

常见反汇编技术

时间:2023-08-18 15:22:06浏览次数:44  
标签:jz 常见 技术 eax 指令 call 反汇编 跳转

一. 相同目标的跳转指令

当jz与jnz的目地地址相同时,此时相当于jmp,但是IDA会将jnz后面的指令(实际上不会执行的指令)进行反汇编,这个时候如果加上比如call(E8),jmp(E9)等字节指令,那么势必会导致反汇编出现问题。
这个时候我们需要将jnz后面的代码转化为数据,然后使正常跳转的位置转化为代码段。
例如:74 03 75 01 E8 58(4011c5) C3 90 90
对应汇编指令为:

jz loc_4011c4+1;
jnz loc_4011c4+1;
call near ptr 90D0D521h;

这里显然就是出现了问题,jz和jnz都是跳转至loc_4011c5,即至58 c3 90 90。
实际的汇编代码为:

pop eax;
retn;
nop;
nop;

也就是说这个E8(call)实际上应该是无用的数据,但是却被反汇编,我们的解决方法就是将这个字节改为数据类型。

二.固定条件的跳转指令

当条件一定满足时说明这条判断语句指令后面的代码一定处于可执行状态,那么false对应的指令一定不会执行,这个时候倘若出现反汇编错误就可以对false对应的指令进行修改。
例如:33 C0 74 01 E9(jmp) 58(4011c5) C3 68 94
汇编指令为:

xor eax,eax;
jz loc_4011c4+1;
jmp near ptr 94A8D521h;

这里jz是一定会跳转的所以E9是不会执行应该是从4011c5开始反汇编。
正确反汇编代码为:

xor eax,eax;
jz loc_4011c4+1;
pop eax;
retn;

三.无效的反汇编指令

流氓字节作为合法指令的一部分时,需要对字节码进行详细的分析,甚至是到底层分析。
例如:66 B8 EB(4011c2) 05 31 C0 74 FA E8(call) real code
汇编指令为:

mov ax, 05EBh;
xor eax,eax;
jz sub_4011c0+2;
call ;

这里实际上就是跳转之后为可执行代码的部分。
实际汇编代码流程:

mov ax, 05EBh;
xor eax,eax;
jz sub_4011c0+2;
jmp sub_4011c2+4;

这里就需要对这一段代码进行详细分析,判断这段代码实际产生的效果,然后使用脚本用nop指令替换无效指令。

四.混淆控制流图

1.函数指针问题:将函数指针放入寄存器或者堆栈当中,然后使用call调用对应函数,这样的话就没办法直接通过ctrl+x查看函数调用,但是这里可以通过查看对offset sub_4011c0的调用来进行分析。

mov [ebp+var_4], offset sub_4011c0;
push 2Ah;
call [ebp+var_4];

2.滥用返回指针
使用retn指令来实现函数调用

	var_4    =byte ptr -4;
4011c0	call $+5;//将4011c5压入栈中
4011c5	add [esp+4+var_4],5;//将栈转化为4011CA
4011c9	retn;//调用4011CA函数

4011ca push ebp;
...
...

这样的话就无法正常定位有关的函数调用

标签:jz,常见,技术,eax,指令,call,反汇编,跳转
From: https://www.cnblogs.com/ONEZJ/p/17640615.html

相关文章

  • 微信开发之一键删除好友的技术实现
    简要描述:删除联系人请求URL:http://域名地址/delContact请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String微信实列IDwcId是String需删除的微信id返回数据:参数名类型说明codestring1000成功,1001失败msgstring反馈......
  • 华秋硬创联合安创加速器,加速和创新赋能技术驱动型创业者
      01大赛介绍中国硬件创新创客大赛始于2015年,由深圳华秋电子有限公司主办,至今已经成功举办八届,赛事范围覆盖华南、华东、华北三大地区,超10个省市区域。大赛影响了超过45万工程师群体,吸引了35000多名硬创先锋报名参加线上线下培训会,并成功聚集了400多家生态合作伙伴,与500多......
  • iBooker 布客技术评论 20230818
    一、程序员自检手册为了避免焦虑,你首先需要做的就是梳理你的业务:(1)你所在的行业是轻资产还是重资产?重资产就是人绕着机器转,创业需要买一大堆设备。如果是重资产,赶紧换一个。(2)你在行业中的位置,离最终用户有多远?如果中间有一堆中间商赚差价,要么干掉,要么走人。(3)你目前的技能能够......
  • 中交中南工程局有限公司即将亮相2023国际桥梁与隧道技术大会
    第十一届国际桥梁与隧道技术大会将于9月23日-25日在成都举办,中交中南工程局有限公司将亮相本届大会,展示企业最新科技成果,敬请期待!近日,2023年《财富》世界500强排行榜揭晓,中交集团以1382.70亿美元营业收入排名第63位。中交集团已连续16年荣登该榜单,公司的品牌价值和市场影响力不断增......
  • window系统常见问题和解决办法
    网络相关❓ip能ping通,但是就是无法上网ip冲突:就是由于网络中出现了两个同样的ip地址,使网络很不稳定,有时能ping通,有时ping不通释放ip并重新获取:管理员权限运行cmd,输入ipconfig/release释放ip,再输入ipconfig/renew重新获取ip网络设备故障交换机带机......
  • 【分布式技术专题】「分布式ID系列」百度开源的分布式高性能的唯一ID生成器UidGenerat
    推荐超值课程:点击获取UidGenerator是什么UidGenerator是百度开源的一款分布式高性能的唯一ID生成器,更详细的情况可以查看官网集成文档uid-generator是基于Twitter开源的snowflake算法实现的一款唯一主键生成器(数据库表的主键要求全局唯一是相当重要的)。要求java8及以上版本......
  • 一文带你读懂设计模式之责任链模式 | 京东云技术团队
    1.前言emm,翻了一下之前刚入职时候的学习笔记,发现之前在熟悉业务代码的时候曾经专门学习并整理过过设计模式中的责任链模式,之前只是对其简单了解过常用的设计模式有哪些,并未结合实例和源码深入对其探究,利用熟悉代码契机进行系统学习并整理文档如下。2.什么是责任链模式?俗话说没有规......
  • 如何打造一个“无需激励”自运转的技术团队?
    自激励和无激励的定义是不需要管理人员进行额外的激励动作,团队和团队的人员就可以达到一个可接受的,甚至是理想的工作效果。我们来拆解一下,自激励和无激励的关键是”不需要管理人员额外的激励动作“,这句话表示激励不需要管理则额外花费精力去做。有没有可能呢?有可能。比如我们在一个......
  • 【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战
    并发编程介绍当今软件开发领域越来越强调性能和伸缩性,因此,利用并发编程可以更好地利用计算资源,提高应用程序的性能和响应速度。以下是一些关于并发编程的相关信息供您参考。什么是并发编程并发编程是指在一个程序中同时执行多个独立的计算任务,并通过各种手段来协调不同任务之间的交......
  • 【技术积累】Docker部署笔记
    服务器环境搭建nacos镜像使用宝塔Docker管理器直接拉起nacos环境并运行注意:在同一台服务器中,nacos只对内网才能注册,图中172.17.0.2是内网地址,在多台服务器中需要跨ip注册服务需要百度自行学习,本次部署使用同一台服务器部署。启动命令//加内存限制启动dockerrun\--nam......