sysucsa-reverse 新手赛wp

不正经的逆向入门

    • 前言
    • heythere
    • sysucsa_0
    • sysucsa
    • sysucsa2
    • apl
    • hide2

前言

太猛了你们
apl都被人做出来了。。我当时都做了一整天。。。

heythere

好了相信大家做web和misc和crypto也做得差不多了,我就来发发这个题的引导教程8
这个题50分,emm,是个签到题。“公认最难入门”的二进制,其实也不是那么玄乎。。
首先,你得先有个IDA!
然后打开IDA64(因为题目是64位的程序),加载题目
sysucsa-reverse 新手赛wp_第1张图片
点确定,然后
sysucsa-reverse 新手赛wp_第2张图片
IDA处理之后就可以看到这样的界面。
IDA的基本操作要会一些,不会的话引导文档链接里面有
众所周知,c语言程序,main函数是必不可少的(雾),我们双击main,看看主函数写了什么
sysucsa-reverse 新手赛wp_第3张图片
有的同学也可能是这样的
sysucsa-reverse 新手赛wp_第4张图片
这是ida反汇编的结果。
如果你对汇编足够熟悉,直接读汇编语言来破解程序逻辑也是极好的
我们按一下F5,会有个提示框,点确定。
然后会有如下界面:
sysucsa-reverse 新手赛wp_第5张图片
那么这个程序就很显然了。
先输入一个字符串str。
然后对str第i位与i异或
最后与s比较,若正确,则输出Right!
换言之,把s的第i位异或i,是不是就可以得出正确的输入了呢?
我们先双击s,看看s是什么。
在这里插入图片描述
这里都是16进制,我们把这段抄下来。
这里我用了python进行编程,用c也可以,看个人喜欢。
在这里插入图片描述
然后对s的第i位与i进行异或,再把s转化为ASCII字符输出。
sysucsa-reverse 新手赛wp_第6张图片
flag就出来了!具体是什么我就不放了,大家去试试吧~

sysucsa_0

其实是sysucsa的弱化版本。
先在linux运行一下
在这里插入图片描述
输出一段乱码???
把这个可执行文件拖入ida中,同样的,点main函数,然后F5
sysucsa-reverse 新手赛wp_第7张图片
发现程序很丑,大意就是将translate(x)根据x的不同一个个字符输出。
我们看看translate写了啥。
在这里插入图片描述
这和上面那题差不多,也是a[i]异或i,把逆回去就好了,注意输出的顺序
(双击a可以看到a的值)
sysucsa-reverse 新手赛wp_第8张图片
在这里插入图片描述
自己试试看吧~

sysucsa

和sysucsa0很像。都是translate。不过这次的输出顺序就没这么简单了。
sysucsa-reverse 新手赛wp_第9张图片
可以看到是一连串的dword。这里教大家一个小技巧
先用鼠标选定一段数据(比如这里的dw段)
sysucsa-reverse 新手赛wp_第10张图片
然后按*键(shitf+8),就会弹出窗口,确定的话就可以自动转为数组了。
有些参数可以调,看题目需求可以微调一下。
sysucsa-reverse 新手赛wp_第11张图片
在这里插入图片描述
再回到程序段重新按一下F5,就可以看到很舒服的画面了
sysucsa-reverse 新手赛wp_第12张图片

对tranlate函数里的a也操作一波,就会有
sysucsa-reverse 新手赛wp_第13张图片
观察一下A的数据,发现偶数(即左边这一列)都是可见字符,于是考虑是不是左边的字符按一定顺序输出就能得到flag
保险做法是左右都试一试,再不行就人脑组合一下。不过这个题显然没这么费劲,就没整这么复杂。
参照sysucsa0的做法,换换数据,换换输出顺序,就得到flag啦。

sysucsa2

做法一:
先程序解密:
judge函数被加密
在这里插入图片描述
在ida里面可以运行python脚本 直接复制可以运行(记得敲两下回车)

judge=0x600B00
for i in range(182):
    addr=0x600B00+i
    byte=get_bytes(addr,1)
    byte=ord(byte)^0xC
    patch_byte(addr,byte)

改结尾地址(右键 编辑函数)
取消函数定义/再重定义(c+p(Define))
解密后长这样
sysucsa-reverse 新手赛wp_第14张图片
会发现和 i i i异或 逆着异或回去就OK了

flag_enc="fmcd\x7fk7d;V\x60;np"
flag=""
for i in range(len(flag_enc)):
    c=flag_enc[i]
    flag+=chr(ord(c)^i)

print flag

做法二:
直接gdb动态调试跟着走,judge函数会把异或后的flag放到参数里,跟着调试就完事了。
看得懂得需要一点汇编基础,起码要看得出来汇编操作的异或,或者能找到异或后的地址看得出来是flag

apl

其实就是网鼎杯原题 我改了一下flag。。
我看后台很多人交原flag啊
https://xz.aliyun.com/t/2666
是我们王磊师兄写的wp,顺便骗一波阅读。
如果仔细读了那篇wp,懂了它的运作(和这个题是一模一样的),把加密的数据改一改,就能得到这个题的flag了
当然可以自己百度apl自己慢慢玩,这个还挺简单的,在国际赛的那个原题分也不高,就是比较好玩!

hide2

rctf的magic 原题
https://www.52pojie.cn/thread-742361-1-1.html
出题就说了出题人也不会做。等一个大哥做一哈。有兴趣的可以去看看,也是蛮有意思的一个题。

你可能感兴趣的:(sysucsa-reverse 新手赛wp)