上周总结了部分简单杂项题思路,这周总结UNCTF和BUUCTF上简单逆向问题.
通过做题发现逆向题有一些大致的做题思路:
第一步
则是通过查壳工具(PEID)检查文件属性及是否带壳,有壳则要用特定的去壳工具(upx)去壳。
就如BUUCTF中逆向一题,查看是无壳的,则可以进行下一步
第二步
使用IDA等工具打开,进行反汇编得到伪代码,找到main函数或一些特殊的函数,或使用搜索获得字符串,然后进行分析
第三步
比如BUU中逆向二题,经过反汇编得到伪代码并进行分析,分析常常涉及一些算法逻辑,特殊加密(base64,url),汇编指令等等,较明显的有snert的逆向二题,是一道典型的"迷宫问题"如下:
1,2,,3,4分别对应上下左右,从*开始到#,碰到1则结束,则可通过遍历得到flag
*第四步
脚本编写,通常一些题给出算法比较难以直接看出flag,这就需要用python编写一些工具脚本从而进行快速解题,较典型的是此次unctf逆向第一题,起初也是根据函数算法一个个推来的,后来尝试编写脚本解题
v5=[0]
for i in range(9):
v5.append(0)
v5[0] = 118
v5[1] = 103
v5[2] = 112
v5[3] = 107
v5[4] = 99
v5[5] = 109
v5[6] = 104
v5[7] = 110
v5[8] = 99
v5[9] = 105
def aaaa(a1):
if a1==109:
return 109
if a1<=111:
if a1<=110:
a1-=2
else:
a1+=3
return a1
flag=""
for i in v5:
print aaaa(i)
flag+=chr(aaaa(i))
print (flag)