今晚也是在学习逆向的路上有了一个小小的收获,花了一个晚上细细的品鉴一些师傅关于花指令的文章,感觉收益匪浅(昨晚也因为花指令的re感觉有些小崩溃,都有点想撂挑子走人了(哈哈哈哈自嘲一下))
言归正传,之前做花指令都是自己乱nop,看运气成功了的话就皆大欢喜,没成功就只能老老实实去看其他师傅的wp,但是最后也没有好好总结,只是懂个大概就略过这个知识点直接去逆了。
现在讲讲我对于这个newstarctf的花指令的理解
这边爆红了,可以看到这边有很多push,应该是为了下面的call做铺垫
call $+5-->>11FF+5(B)=1204
将retaddr压入栈,并且跳到1204:
pop rbx 将栈顶的值存入rbx(也就是将返回的地址值存入rbx)
然后执行add rbx, (offset sub_1216 - offset loc_1204),相当于就是把
rbx存储的地址值加上0x12,也就是1204+12=1216
现在就猜想其实这个call(中间的一大堆)没啥作用,nop掉后也是直接运行1216处的指令,到这也就有些豁然开朗了
mov [rsp+30h+var_18], rbx,把rbx(1216)存储的值赋给[rsp+30h+var_18],这个估计就是存放返回地址值的地方了//这步感觉挺关键
最后也就ret到1216处了。
哈哈,对于花指令也是有一些些理解了,虽然可能比较简单(师傅们轻点喷),现在还是个小菜鸡,还得慢慢学唉!!!之前都不怎么分析汇编,还是因为恐惧哇,汇编真的太抽象,不过,汇编还是最本质的!!!