2017年强网杯hide逆向

1.先用file命令查看文件基本信息,文件为64位ELF文件,剥去了符号表信息。

2.用checksec查看文件,文件加了upx壳。

3.ida静态分析,大概只看到了几个地址和长度。

4.gbd动态调试一下,发现起始地址是从0x400000开始的,一运行程序自动退出,应该是开启了反调试,那么下面直接运行程序,把内存dump出来看看。

5.直接运行程序,从0x400000开始,尝试dump出来一些内存,字节长度尝试2997072。dump了快10分钟,真的dump了一些东西。

6.ida分析dump出来的文件

找到start函数,start函数中赋值给rdi的就是main函数了,找到main函数,就好分析了。

看这段代码,关键就是要分析sub_4009AE函数,结果点开以后,直接告诉flag是错误的。

思路一下就断了,这个函数应该是估计是个假函数,那么就用那个关键字符串再搜索一下,看看有没有其他地方还有提示。查找发现“Enter the flag:”出现了两次,第一次就是上面的函数,那现在来看看下面那个地方。

分析这段汇编代码,发现用户输入的字符串存到了unk_6CCDB0中。

对这段代码进行反编译,提示没有函数,那么新建一个函数,在jle跳转指令之后添加一个函数。这样按f5就能反编译了。

看到了核心算法部分。输入的字符串格式应该为qwb{XXXXXX},中间有16个字符.输入字符串存储在unk_6CCDB0中,而后面处理的数组为unk_6CCDB4, 刚好是中间那16个字符。

分析代码发现,数组主要进过两个函数处理,共处理六次,最后得到的加密数组qword_4C8CB0逐位比较,相等即可。

qword_4C8CB0为16字节采用小端存储,所以恢复成字节数组时,要逆序。

函数sub_4C8CC0 主要是通过中间的for循环进行加密。

sub_4C8E50函数进行逐字节异或处理。

最后加密要得到的目标数组即为qword_4C8CB0。

至此程序已经分析完毕。

 

7.加密算法逆向。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值