是逆向啊啊

 [HNCTF 2022 WEEK2]e@sy_flower

1.查壳选择合适IDA

2.发现去除花指令

发现花指令

 jnz+jz用连续两条相反的条件跳转,或是通过stc/clc汇编指令来设置位,使条件跳转变为永真或者永假跳转

将花指令nop

Edit-Patch program-Change bytes

将E9改为90 

3.反编译

找到main函数,在main函数之前摁P重定义,F5反编译

函数的分析

(1)Arglist中的字符两两交换位置(2n与2n+1交换)

(2)Arglist中的每个字符与字符'0'进行异或操作

4.脚本

嘿嘿嘿得到flag

[LitCTF 2023]ez_XOR

1.查壳选IDA

2.寻找关键字符

shift+F12

发现关键字并追踪

3.反编译

并不是到此处就可以直接写脚本了,点击XOR发现里面还有玄机

好了,现在可以写脚本了

4.脚本

花指令的小知识

形式一:

如果我们插入的花指令是一个操作码,那么后面程序原本的机器码就会被误认为是这个操作码的操作数,从而导致反汇编引擎的解析错误。

形式二:

插入的花指令也可以是改变堆栈平衡的汇编代码,跟形式一相同在这些花指令上面写上跳转指令,虽然花指令不会被执行,但是IDA进行解析时会认为该函数堆栈不平衡,从而使F5功能失效

保持堆栈的平衡

push ebp ---  -把基址指针寄存器压入堆栈
pop ebp ----把基址指针寄存器弹出堆栈
push eax ----把数据寄存器压入堆栈
pop eax ----把数据寄存器弹出堆栈
nop -----不执行
add esp,1-----指针寄存器加1
sub esp,-1-----指针寄存器加1
add esp,-1--------指针寄存器减1
sub esp,1-----指针寄存器减1
inc ecx -----计数器加1
dec ecx -----计数器减1
sub esp,1 ----指针寄存器-1
sub esp,-1----指针寄存器加1
jmp 入口地址----跳到程序入口地址
push 入口地址---把入口地址压入堆栈
retn ------ 反回到入口地址,效果与jmp 入口地址一样
mov eax,入口地址 ------把入口地址转送到数据寄存器中.
jmp eax ----- 跳到程序入口地址
jb 入口地址
jnb 入口地址 ------效果和jmp 入口地址一样,直接跳到程序入口地址
xor eax,eax 寄存器EAX清0
CALL 空白命令的地址 无效call

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值