>
This site is best viewed in a modern browser with JavaScript enabled.
### id="flarum-content">
【36D杯】逆向_签到和逆向_神光的wp
Yutian
###逆向_签到
IDA64打开,按F5。
看标箭头的几处,得知v6要等于0才正确。v6的运算是和后面的一串式子进行按位或,而0或0才能得到0,所以后面的一串异或式子的结果为0,那么因为异或的可逆运算,可以计算出v8。
脚本:
list=[102,109,99,98,127,58,85,106,57,82,122,55,81,19,51,35,67,70,41,61,41,32,127,28,38,77,49,20,80,94,-24,]
v6=0
v7=0
v8=0
l=len(list)
for i in range(l):
# v8=v6
# v6 |= v8^i^(i+(i^list[i]))
v8 = 0^i^(i+(i^list[i]))
print((chr(v8)),end='')
###逆向_神光
运行一下发现有字符串"key",IDA打开,Alt+T搜索"key",找到主函数,按F5
进入sub_4113B1
写脚本得到Str2的值
回到主函数,通过if判断得知需要让Str1与Str2相等,那么Str2就是key
运行程序,输入key:"wangzherongyao"
可以验证key正确了。回到主函数,进入sub_4113CF,对sub_415770反汇编时报错
到IDA汇编窗口,Alt+T搜索报错的415890,并Options→General→勾选Stack Pointer,发现415890这一行的sp值为负,所以报错
我选中add esp,15D8h这行指令,Edit→Patch program→Assemble,修改为nop空指令
然后再ALt+K一顿瞎改最后几行call、push等的sp,使得retn处的sp变回0,这样就可以F5了
成功反编译sub_415770,发现里面有俩循环,然后再由sub_4113E3继续处理dword_41A038,但是其中用于异或的dword_41A4DC的值我们却不知道
我想不出来怎么得到它的值,想想也许用od跑一下能在寄存器里找到它的值(但我不太会用od)
然后od打开,先一个劲点直直向下和三个点的按钮,直到出现输入key的提示,然后输入"wangzherongyao",结果flag就这么出现了...
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论