0%

RE1[P5] WP 初学者详细版

2024-08-06 05:27By
ishllm
C语言逆向动态调试

Problem: [RE1]P5

因为是初学,wp写得详细一点

思路

F5反编译一下,看到有个伪随机

进入oo0o函数,是rc4的密钥流产生,以及明文与密钥流的异或

再次跟进函数,可以看出来是rc4的s盒初始化与生成,也就是整体就是rc4算法,那就找key和密文,key就是此处的a2,也就是最最外层传进来的v6,我们可以通过动态调用提取key,因为key已经帮我们算好了

这个文件是linux的64位elf文件,所以我们使用remote linux debugger,需要将linux_server复制到kali,然后运行


接着在ida这配置一下,linux的ip和登录密码,parameter是在比如, aa.exe adfsdf,当运行exe文件必须要我们后面带参数时,就在parameter这里写参数

我们在v6生成后的地方断点,然后运行debug

按一下f9,会一直运行到断点处,然后随便输入字符串,按回车

可以看到已经运行到断点处了

我们双击v6,可以看到已经产生了

当然也可以用脚本提取,在这个地方按tab键

看汇编处,可以看到异或完的结果在edx,我们在下一行下断点

右键edit breakpoint,改为trace,脚本

auto edx = GetRegValue("EDX"); Message("%c",edx&0xff);


然后debug就可以出现

有看到说最后cmp阶段比对时,V2[j-8]为密文起始位置,不是很理解,找不到在哪里有说,我通过动态调用来获取密文,在比较的地方按tab键

按F2下了两个断点,第一个断点是用来打印密文的,也就是eax的值,第二个断点是用来改零标志位ZF值的,当输入的flag经过加密后和密文不同时,ZF为0,函数直接结束,所以要改为1,才能接着循环打印

第一个断点的设置

auto eax = GetRegValue("EAX"); Message("%d ",eax&0xff);


然后像上面那样开始调试
按F9,输入flag,

多次按F9跟进,直到ZF=0,修改为1

当F9跟进完会自动退出循环,说明密文全部打印完了

EXP

  • 用的是视频的c语言版本的

总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论

加载中...