Nssctf.reverse 花指令

花指令参考: https://xz.aliyun.com/news/14062

1、[MoeCTF 2022]chicken_soup

考点:jx+jnx类型花指令

(1)jnz和jz的互补跳转

去除方法:首先定位jz/jnz的跳转位置;然后按d或者u将汇编代码转为数据;然后patch为90;也就是nop指令;然后按c重新转为汇编代码;最后在函数起点按P重新编译函数;最后F5反汇编!

_asm{
   //vc内联汇编插入花指令
    jz Label;
    jnz Label;
    _emit 0xC7;//_emit;表示插入一个数据
    Label:
}

跳转指令构造花指令

 __asm {
   
         push ebx;
         xor ebx, ebx;//xor寄存器;此处为1
         test ebx, ebx;//zf为1,执行jz
         jnz LABEL7;
         jz    LABEL8;//永真条件跳转
     LABEL7:
         _emit 0xC7;//显示为db,影响反汇编(p和F5失效)
     		//上面这行patch成90,然后按C
     LABEL8:
         pop ebx;
     }

(2)例题:[MoeCTF 2022]chicken_soup [HNCTF 2022 WEEK2]e@sy_flower

查壳为32位;分析主函数发现主要是loc_401000和loc_401008对v4数组加密;跟进发现函数被加花指令(类型是jz/jnz永恒跳转类型的花指令)

在这里插入图片描述

原理:jz和jnz互补跳转会跳转到E9 C7 45 F8 00;也就说卡在这了;后面的代码IDA无法反汇编;将此处改为nop指令;也就是跳过这个永恒跳转就行。

去花操作:打开opcode bytes的显示;先按d/u将汇编代码转为数据;然后将e8 patch为90;然后按c将数据转回为汇编代码;按P重新编译函数(在loc_401000函数的起点);再按F5进行反汇编

在这里插入图片描述

然后得到伪代码继续分析就行!很简单的两个函数;就不写了!

2、[NSSRound#3 Team]jump_by_jump_revenge

考点:花指令

(1)发现花指令
在这里插入图片描述

去花:按d或者u转为data
在这里插入图片描述

将E9 patch为90;也就是将jmp—>nop

在这里插入图片描述

按c还原为汇编代码;在看出开始出按p重新编译;最后按f5得到伪代码
在这里插入图片描述

 Str2 = "~4G~M:=WV7iX,zlViGmu4?hJ0H-Q*";
  for ( i = 0; i < 29; ++i )//处理str1
  {
   
    if ( i == 29 )
      v1 = __indword(v0);
    v0 = (Str1[i] + Str1[(i * i + 123) % 21]) % 96 + 32;
    Str1[i] = v0;
  }
  if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巅峰赛2000分以下是巅峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值