攻防世界新手村Reverse

博客内容涉及逆向工程的多个方面,包括ELF文件分析、Python pyc文件反编译、C代码条件判断解析以及64位文件的动态调试。通过IDA和GDB等工具,对程序进行查壳、脱壳、函数分析和断点调试,最终揭示隐藏的flag。文章还介绍了如何处理程序中避免执行关键代码的技巧,并提供了具体的调试步骤。
摘要由CSDN通过智能技术生成


题目描述:菜鸡觉得前面的题目太难了,来个简单的缓一下

查壳,ELF文件


Linux进行调试


在IDA的main主函数下,查找字符串who


可看到flag

题目描述:菜鸡和菜猫进行了一场py交易

是pyc文件,可知要进行反编译

用户输入的值进行了一个条件判断,encode(flag)== correct

进行反推



查壳

调试

搜索关键字符DUCTF,可看到一串16进制



运行程序

搜索关键字input,在While循环内先是判断用户输入的数值是
1-8,并且大于0,小于或者等于8,后面是判断灯的亮灭。

判断byte_532E28是否都为1,若都为1,则进入sub_457AB4,点击跟进

进行异或



main主函数分析,有一段16进制数

后面进行比较,输出结果




是C文件

代码分析
在main主函数下,有4个条件判断,其中在最后获取密钥传值hash要为 unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;所以这你可以忽略第1个条件判断,并满足剩下三个的条件判断。

要满足second模五不等于3,或者模17等于8



得到flag


UPX的壳

脱壳


main主函数下获得flag


ELF文件

F5反编译成c语言
在这里插入图片描述
一个个查看子函数

在authenticate发现一个加密函数decrypt,可见flag就藏在这里,是对8048A90的字符串进行加密。

使用gdb进行调试,并且在decrypt下断点,并查看下一个mov地址的eax寄存器内容

下断点

单步走

x表示要查看寄存器的内容,/s表示用字符串形式显示,/W表示4字节宽,/sw字符串形式并且四字节宽来显示。

乱码,嘤
还是用IDA动态调试吧

因为是ELF文件,所以选择在Linux下调试IDA
若不会设置,参考https://www.cnblogs.com/zhwer/p/12484708.html

在这个地方设置一个断点

运行到断点处之后,点击eax寄存器查看内容,就可以得到flag
flag为9447{you_are_an_international_mystery}


64位文件


使用到IDA64位进行动态调试

将flag写入到了文件,616C662F706D742F16进制下使用r进行校验ASCII,可看到目录


在一个子函数调用call _fopen下的mov跳转设置断点

并不完整的flag

点击offset偏移,即可偏移到对应的完整flag




发现在地址0040109E处执行了解密函数,同时发现00401094处会跳转绕过解密函数,而0040109A处会触发int3中断,导致函数提前退出,而执行完sub_401000后又会直接跳转到4010EF处,导致无法执行下面的callds:MessageBoxA函数获得flag。归结起来,需要修改三处:①jzshortloc_4010B9需要改为jnzshortloc_4010B9(或者nop),使得不会绕过下面代码②int3需要改为nop,使得int3不被触发③jmpshortloc_4010EF需要改为jmpshortloc_4010B9(不能nop,需要绕过下面的第一个messagebox,使得输出不冲突),使得下面弹框窗口不会被绕过




得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值