刘功瑞的博客

有一天你突然惊醒,发现这一切,都只不过是一场梦。

2019CNAS能力验证攻防比赛 第三题 恶意代码和垃圾邮件防范 writeup(sql注入,逆向)

去年能力验证的题,当时对逆向了解不多,所以没做出来,但是一直记着这个事情,今年学了逆向后,又把这题找出来做了几次,都没做出来,今天有了灵感终于做出来了!!!下图是我当时比赛完后写的writeup,链接http://www.liugongrui.com/?id=113

image.png

附件下载下来解压里面有两个文件

image.png

使用ida打开lesuo.exe,结合实际运行情况,可以看出lesuo.exe执行后会在d盘下生成一个rsa.exe

image.png

剩下的加密工作都是由rsa.exe完成,所以使用ida打开rsa.exe,查看字符串窗口可以看到一些文件目录和后缀名

image.png

通过运行调试发现执行流程是这样的:

  1. lesuo.exe在d盘下生成一个rsa.exe

  2. rsa.exe对d:/flag/*.abcdef文件进行加密

  3. 加密后生成*.abcdef.encode文件

我们就是要看看如何解密encode文件,经过寻找关键字,在rsa.exe中发现了一个好像是解密的函数

image.png

找到调用他的地方

image.png

发现必须 rand()%10000==1才能进入解密函数

可以分别使用动态和静态来解决这个问题


动态调试

使用od打开,搜索命令 cmp edx, 1

image.png

设置断点,F9运行,发现没有进入断点程序就结束了,经过测试发现必须在d:/flag/目录下有后缀名为abcdef的文件时,才会走到这里,随便创建一个文件d:/flag/1.abcdef

image.png

重复刚才的步骤,成功断下

image.png

把下面的跳转nop掉

image.png

然后手动删除d:/flag/1.abcdef.encode,因为解密函数只会执行一次,不删除的话就不能解密flag.abcdef.encode了,然后按下F9

image.png

得到解密后的字符串

0000666C61677B64646539313833612D333430362D343538662D613830342D3033386333366133656332357D

十六进制转字符串得到flag

image.png

flag{dde9183a-3406-458f-a804-038c36a3ec25}


静态调试

找到随机数这个位置

image.png

按下tab切换到汇编视图

image.png

从call sub_406520开始到jnz short loc_406A13全部nop掉

image.png

image.png

保存修改后,在刚才随机数那个地方按F5,可以看到已经有了变化

image.png

然后执行修补过后的rsa.exe(如果遇到修改后执行什么都没显示的情况,删除rsa.exe重新执行lesuo.exe,重新生成rsa.exe,再重复以上步骤)

image.png


发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.liugongrui.com.All Rights Reserved.