逆向+南邮Hello Re+攻防世界re1

把exe执行文件在ida中打开,在反汇编代码中

在ida浏览A界面选定要查看的函数,按f5看到了伪代码, 于是点击字符串按R转化为其实际值发现一串特别像flag的字符串,只不过是逆序,打出来就是flag。

flag{Welcome_To_RE_World!}

 

 

 


 

写一些Python脚本,把十六进制转化字符串,,
a=[0x0, 0x67, 0x6e, 0x62, 0x63, 0x7e, 0x74, 0x62, 0x69, 0x6d,

0x55, 0x6a, 0x7f, 0x60, 0x51, 0x66, 0x63, 0x4e, 0x66, 0x7b,

0x71, 0x4a, 0x74, 0x76, 0x6b, 0x70, 0x79, 0x66 , 0x1c]
s=''
for i in range(1,len(a)):
    s += chr(a[i]^i)
    print (s)

运行得到结果。flag{read_asm_is_the_basic}

 

在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器
不同的处理器,寄存器的个数、结构是不同的。

16位处理器有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

32位处理器有16个寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、EIP、ES、CS、SS、DS、FS、GS、EFLAGS。

64位处理器有15个寄存器:RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、R15

    使用时只有寄存器的名字不同,机制上差别不大
    需要注意的是32位是由栈来传参的,64位前六个参数由寄存器RDI、RSI、RDX、RCX、R8、R9依次传参,超过第六个的参数由栈来传参

寄存器的作用
可以用来读写数据到电脑的周边设备
可将寄存器内的数据执行算术及逻辑运算
存于寄存器内的地址可用来指向内存的某个位置,即寻址

攻防世界,,,Re1

打开之后是结构图,按空格键到反汇编代码,

如下,再按tab键,到伪代码, 查看,

 

伪代码:

首先三行printf肯定不会输出flag,双击查看详细内容,发现,

有敏感信息,按R键转化为字符串,看到了flag的逆序,逆序输入,提交flag成功,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,可以将该函数表达式写成如下形式: ```c #include <math.h> double calculateExpression(double Kk, double re1, double re2, double rc, double rk) { double result = 0.0; double term1 = 2 * Kk * re2 * (rc * rc / (rk * (re1 * re1 + re2 * re2)) + 3 * pow((re1 / re2 + re2 / re1), 2) / 4 - 3); double term2 = (re1 * re1 + re2 * re2) * (re1 * re1 + re2 * re2) * ((pow((re1 / re2 + re2 / re1), 3) * exp(rc * rc / (rk * (re1 * re1 + re2 * re2)))) / 8 - 1); double term3 = -Kk * (-2 * rc * rc * re2 / (rk * pow(re1 * re1 + re2 * re2, 2)) + 3 * (-2 * re1 / (re2 * re2) + 2 / re1) * (re1 / re2 + re2 / re1) / 4); double term4 = (re1 * re1 + re2 * re2) * ((pow((re1 / re2 + re2 / re1), 3) * exp(rc * rc / (rk * (re1 * re1 + re2 * re2)))) / 8 - 1); double term5 = -Kk * (rc * rc * re2 * pow((re1 / re2 + re2 / re1), 3) * exp(rc * rc / (rk * (re1 * re1 + re2 * re2)))) / (4 * rk * pow(re1 * re1 + re2 * re2, 2)); double term6 = (-3 * re1 / (re2 * re2) + 3 / re1) * pow((re1 / re2 + re2 / re1), 2) * exp(rc * rc / (rk * (re1 * re1 + re2 * re2))) / 8; double term7 = (re1 * re1 + re2 * re2) * ((pow((re1 / re2 + re2 / re1), 3) * exp(rc * rc / (rk * (re1 * re1 + re2 * re2)))) / 8 - 1); result = term1 / term2 - term3 / term4 - term5 * term6 / term7; return result; } ``` 你可以调用该函数,并传入相应的参数值,即可计算该表达式的结果。注意,该代码仅包括函数定义部分,你需要根据实际需求进行适当的修改和完善(如添加头文件、声明变量等)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值