攻防世界—刷题(6)

一.梅津美治郎

1.查壳:无壳,32位。

2.IDA反编译。

直接shift+f12查看字符串

 找到“You passed level1!”(有信息:flag不止一部分。),跟进。得到第一部分flag:r0b0RUlez!

 查看sub_4015EA函数,这里应该有第二部分flag。

emmmmm,关键应该在 __debugbreak,但是静态调试无法实现。直接动调

  这儿有个int 3断点,不太了解这个int 3,问了一下大佬:

这里有个debugbreak函数,这函数的话,也就是相当于一个int 3指令,引发一个中断,把执行权移交给调试器,如果没有调试器,那就移交给其他异常处理回调函数,如果都没有,那么程序就自己断下来,这里就是为了触发回调函数,如果没有调试器附加,那么debugbreak产生的异常会被AddVectoredExceptionHandler添加的回调函数捕获来处理。

这就需要回看main函数了

通过动调得到v3=kernel32.dll:有中断处理

 

 

 这就可以和 __debugbreak连接起来了,分析代码可知sub_40157F为第二处flag,跟进。

逻辑就是一个简单的对2异或 :点击dword_40AD98可得到字符串

 3.exp

 4. get flag

flag{r0b0RUlez!_w3lld0ne}

二.76号

1.查壳:无壳,32位。

2.IDA反编译。

把 jmp     short near ptr loc_804843A+1 nop掉。p键定义函数

进入main函数

关键在sub_8068580

 

逻辑:从开始看可之a2为flag的下标v3为flag只需要根据a2的值对应就行。需要注意的是flag的位数看每个case的return只有k对应return是返回1.所以flag末尾是k,再根据k处的代码a2=12可知flag有13位。

3.get flag

flag{09vdf7wefijbk}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值