本帖最后由 Net_S 于 2018-4-20 18:56 编辑
我也是逆向初学者,大家一起学习一起探讨~~
1.Easy_vb
下载然后直接拖到OD,直接右键查看字符串
翻一下直接发现结果
2.Easy_Re先运行一下返现是一个输入flag,然后返回结果的程序,里面包含几个字符串,输入flag
扔到OD里老样子,搜字符串,找到"输入flag吧",右键下断点
然后F9运行程序,到断点停下:
按F7继续运行,到008D105A调用了输入函数,这时候去程序窗口随便输入一个flag,然后继续F7,到008D1062这开始比较,我们看一下汇编程序做了什么:
这几行是关键,鼠标点到到第一行时,在OD中汇编窗口下面的窗口里会显示与这一行命令有关的内存情况,我这里显示的是: [mw_shl_code=c,true]堆栈地址=0073F7F0, (ASCII "qwert")
eax=00000001[/mw_shl_code] qwert就是我输入的flag,点到下一行为 [mw_shl_code=c,true]堆栈地址=0073F7D0, (ASCII "DUTCTF{We1c0met0DUTCTF}")
ecx=008D115D (re1.008D115D)[/mw_shl_code] 眼熟的就知道这就是flag,但是我们还是分析一下,整段程序其实是一个循环,将我输入的qwert放入eax寄存器,将正确flag放入ecx寄存器,然后取每一位比较,都一致会跳转到flag get,不一致则跳转到flag不正确。 3.游戏过关 这一题有点懵啊,我打开看了看说明,然后随便点了点就出flag了 然后随便试了试发现是输入1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 就会返回flag,调试了一下,发现是一个很长的循环函数,还没发现返回flag的地方。 待续~~~
|