yaoyao7 发表于 2019-5-13 11:00

XCTF攻防世界逆向-IgniteMe.exe

本帖最后由 yaoyao7 于 2019-5-14 09:04 编辑

# IgniteMe.exe逆向分析
## 初步分析
                1. 查看文件信息和有无加壳
                  ![](https://i.postimg.cc/rFhjwkT8/Ignite-Me-File-Information.png)
                        
                        ---
                        并没有经过特殊处理,而且也没有进行加壳操作。
               
## 静态分析
      
                        1.直接拖进IDA,注意位数
                        2.首先查看字符串,寻找关键信息:
                              
                              ![](https://i.postimg.cc/0N5JM60F/Strings-Information.png)
                        
                        3. 跳转到可疑字符串处,发现关键跳转:
                              ![](https://i.postimg.cc/fbbJWGwh/KeyJump.png)
                              
                              F5查看代码:
                                    ![](https://i.postimg.cc/T2tNpmqM/JumpCode.png)
                                                                                                                              
                                 在该部分代码中,最关键的部分是图中所指示出的flag的相关信息,可以知道flag以“EIS{”开头且以“}”结尾,然后经过某个函数的处理和判断,根据函数处理结果输出flag正确还是错误。
                     4. 进入flag处理函数查看处理过程:
                     ![](https://i.postimg.cc/87yvcGY7/String-Convert.png)
                                                                                                               
                         很明显看出,这里就是主要的对flag进行处理的地方,首先对flag中的字符进行大小写转换,然后进入下一步操作:
                         ![](https://i.postimg.cc/bSjDWwZB/String-Convert1.png)
                                                                                                               
                     经过转换后的字符进行简单的运算操作,最后回到上个函数与固定字符串“GONDPHyGjPEKruv{{pj]X@rF”进行比较,相同则flag正确。

## 脚本

                根据静态分析,已经可以理清程序的执行思路,直接进行算法逆向,脚本编写:
                `
                import string
                str1 = "\x0d\x13\x17\x11\x02\x01\x20\1d\x0c\x02\x19\x2f\x17\x2b\x24\x1f\x1e\x16\x09\x0f\x15\x27\x13\x26\x0a\x2f\x1e\x1a\x2d\x0c\x22\x04"
                str2 = "GONDPHyGjPEKruv{{pj]X@rF"
                x = 0
                tmp= str()
                n = int()
                for char in str2:
                              n = ord(char) ^ ord(str1)
                              n -= 72
                              n ^= 0x55
                              tmp += chr(n)
                              x += 1
                print(tmp.swapcase())
                `

shelly1314 发表于 2019-5-13 12:30

感谢楼主分享

张永强 发表于 2019-5-13 12:38

学习下,感谢楼主!

wa4978 发表于 2019-5-13 15:07

向大佬学习。

wa4978 发表于 2019-5-13 15:08

向大佬学习。

onetwo931 发表于 2019-5-13 16:27

谢谢楼主分享,学习一下

zhongjiezhe 发表于 2019-5-13 20:00

尽管看不懂,但是感觉好厉害

眼镜ch 发表于 2019-5-13 20:58

向大佬学习了

yaoyao7 发表于 2019-5-14 08:58

不知道为什么,md写的内容,图片加载不出来。。。。

小泪痕 发表于 2019-5-14 16:18

学习 一下谢谢大婶分享
页: [1]
查看完整版本: XCTF攻防世界逆向-IgniteMe.exe