矿大BXSCTF-RE-普普通通的逆向

本文详细解析了逆向工程中的脱壳与反调试过程,通过实例演示了如何处理UPX壳,以及如何绕过多种反调试手段,包括GetTickCount间隔检查、进程名比对和IsDebuggerPresent函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址:http://bxs.cumt.edu.cn/challenge/reverse/reverse03.exe

就是给定账号要求获得具体的密码。

1.直接用IDA打后发现会说IAT错误(因为本人新手,查询后才知道是壳,然后补了好多壳的知识,手动脱壳暂时不熟练,还是直接用工具方便,后续再多练练)

用PEID检查,发现是UPX壳。

2.于是使用UPXshell脱壳,脱壳完成后再用IDA打开查看主函数。

3.这题里有很多反调试的方法。

(1).两个GetTickCount(),得到这两次的时间间隔, 如果在这之间用了单步调试,则会使两次时间间隔大于1000ms,则会影响这里V7的取值。在SUB4011E00里,会生成错误的密码前四位。绕过方法,直接修改V7在进入函数之前的值为0即可.

绕过方法:

用OD运行至此处,修改EAX为1;

(2).参考该博客https://blog.youkuaiyun.com/wellerweldon/article/details/1616384?utm_source=blogxgwz4

在SUB_4011E0里,从ID号0开始扫描所有的进程,并把进程名与相关名称进行对比,如果正确则会生成错误的密码。

绕过方法: 在比较前,在内存中找到存放该字符串的位置。

从这一步到内存中跟随立即数到:

把字符都修改为00即可让比对失效。

(3) IsDebuggerPresent 可以查出当前进程是否在被调试,如果是则返回1,不是则返回0.这里直接修改返回值为0即可绕过。

4.最终运行到这里直接获得密码

 

总结下:自己目前对反调试和加壳脱壳非常陌生,很多东西还需要慢慢弥补,这一题帮我收获了许多。最近在努力看书,加密与解密学到了很多东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值