zoukankan      html  css  js  c++  java
  • MRCTF (re和crypto)wp

    RE:
    一.PixelShooter(这题比赛我居然没看,靠,血亏,所以做不出来就不要一直死怼,这题挺好写的,)
    unity一般是用c#写的,刚好又是apk,可以用dnspy来反编译看看,在源码中找到了flag,应该要安装apk,玩一下,再来找线索,会更好,然后要去看控制类这块,一般核心代码在那边

    在这里插入图片描述
    二.here to go:
    这题校内的是没加混淆的,可以直接找到入口函数,当时写题只会查找字符串,go这个语言特性是字符串是挤在一起的,没有反斜杠0,ida识别不出来,所以只能去找入口函数来分析,我之前就是被这个劝退了,其实还是挺简单的这题,如果能懂go这个特性的话,校外的,是有混淆的,找不到入口函数,是去掉了符号表,可以用一个脚本来还原
    看了大佬的wp,可以通过区间来判断出,这个是在linux下编译,而且可以还原的

    在这里插入图片描述
    进入主函数,发现逻辑还算能读懂,虽然一堆函数不认识的2333,但是点进去那个变量,就发现了flag
    在这里插入图片描述
    剩下的题,和lin师傅交流了很久,感觉学到了很多东西,但是ida老是报错啊啊啊啊,网上都是安卓的动态,exe太少了,百度不到,自闭了,明天继续查一下
    三.junk
    这题算是我逆向很久的题了,通过这题学习了动态调试的魅力,尤其是加了花指令后,ida无法F5后,动态调试就很香,这题和名字一样,junkcode非常多,不得不说昂哥出题是真的骚,而且我ida的版本还有bug,无法本地调试,只能远程调试,以后做题也算多个思路吧,这变种的base64之前没遇到,看了下exp,好像也不是很难,现学了一下,真的是要耐心的看,几个动态调试常用快捷键盘alt + ctrl +k :patch;c转换成代码,d转换成数据(师傅好像更喜欢用d),p键创建新函数

    在这里插入图片描述
    先比较字符串的长度,patch一下,再下去调试。
    在这里插入图片描述
    每个字符都异或3
    在这里插入图片描述
    根据次数来调整向左移,还是右边移动,
    然后调用一个FB1090函数,
    在这里插入图片描述
    是变种base64,字典换了个,或者搜索字符串时候就会发现一个 变形的base64的字典,这个再去看引用,基本能猜测出来。
    在这里插入图片描述
    这边就是比较了,中间一堆完全没啥用,昂哥牛逼,感觉学到了很多。
    所以这边脚本的解密过程就变成了先求变种base64解密,再左移动和右移,再每个异或3

    import base64
    diy_base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)!@#$%^&*(+/"
    diy_ci="%BUEdVSHlmfWhpZn!oaWZ(aGBsZ@ZpZn!oaWZ(aGBsZ@ZpZn!oYGxnZm%w"
    base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    flag=""
    def rol(x):
        return ((x<<4)&0xff)|((x>>4)&0xff)
    
    for i in  range(len(diy_ci)):
        flag+=base[diy_base.index(diy_ci[i])]
    flag+="=="
    print(flag)
    for i in  range(len(flag)):
        a=rol(flag[i])
        a^=3
        print(chr(a),end="")
    
    
    
  • 相关阅读:
    Java web ch02_5
    Java web ch02_4
    Java web ch02_3
    Java web ch02_9
    myeclipse和eclipse的区别以及优越性
    新的学年,迎来新的活力!
    Javaweb中的Tomcat服务器(简单了解)
    一切都是对象
    java中被隐藏的具体实现
    SSL与TLS的区别以及介绍
  • 原文地址:https://www.cnblogs.com/YenKoc/p/12779906.html
Copyright © 2011-2022 走看看