![](https://i-blog.csdnimg.cn/blog_migrate/4da3ea56a722048fe904073ee853eda7.png)
做题之前,x86-64会涉及大端序和小端序存储
![](https://i-blog.csdnimg.cn/blog_migrate/5820e8d59310d725a3e716c6712ee01d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0496f61a1f2d733d07ababea10f1ab26.png)
在ida中,如果直接在程序中存储数据则会使用小端序存储,如果在程序运行之前就存储的数据,则ida会把小端序存储转为大端序存储,使用时:若在程序中赋值,输出顺序要倒置,若值本身就存储在变量中,输出顺序为原序
![](https://i-blog.csdnimg.cn/blog_migrate/69e6ecdc3d687d4284c513db39cf5139.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ca6a792b9451c9b0e4dea44803603e93.png)
跟进Decry()
![](https://i-blog.csdnimg.cn/blog_migrate/326f61ae92073260a325ebc6f9b09db8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/777e2df1f846291e9e28802a8c7509a4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a2a61cb34aa632bf5f3f0f33e16b63dd.png)
大致流程:输入字符串,将字符串加密后与密文进行对比,相同则成功,反之失败
![](https://i-blog.csdnimg.cn/blog_migrate/6f1d528a5bb9aeda24ab6b06c3ff6dc7.png)
text赋值中涉及小端序,正确的顺序是要将其倒置,其中join()函数跟进分析就是strcat()
![](https://i-blog.csdnimg.cn/blog_migrate/eb1aa244dbf3a0dd8ec68bea5659c321.png)
join()
![](https://i-blog.csdnimg.cn/blog_migrate/43b69278d47146dc8e1ff727e3183d21.png)
因为大写字母ascii码与小写字母ascii码相差32,所以for()语句是将大写转换成小写
![](https://i-blog.csdnimg.cn/blog_migrate/dbf849f9b36e8e0bb0e5e1cb76cd06ef.png)
while(1)输入并加密,将值存入str2中,分析一系列if(),发现只对字母进行加密
根据流程,结合暴力破解的方法写脚本
![](https://i-blog.csdnimg.cn/blog_migrate/802cacc2e96d1f5850a204b5ca2cc094.png)
得到flag{KLDQCUDFZO}
笔记:
![](https://i-blog.csdnimg.cn/blog_migrate/1d12b3166b602d34838e0222732aab8e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4bcf809b9b582aafe139e24b059fa921.png)
主函数中Exit()
![](https://i-blog.csdnimg.cn/blog_migrate/bb3eaaebdd70a171b73f4095b2d6a186.png)