FILE

  查壳后显示无壳,拖进IDA:

  运行程序时传递的第一个参数为一个文件名,并打开该文件。下面点进去encode函数分析一下:

  for循环中每三个为一组,进行Base64的操作,接下来两个if分别判断Base64后的尾部是加一个“=”还是两个“=”还是不加“=”。具体Base64编码方式可以参考我的这篇博客:https://www.cnblogs.com/reddest/p/9554948.html。所以encode()是对传入的字符串进行Base64编码。回到主函数看看encode()被用在哪里了:

  圈出来的部分就是判断输入的数据是否是正确的KEY了,并且可以发现并没有用到encode()的返回值v11和v12,所以encode()就是个摆在那里打扰分析思路的。老夫40米巨剑何在。

  根据异或的可逆性,v14[k] = k ^ flllag[k] ^ v13[k]。现在我们只缺v13数组中是哪些元素了,分析sub_400EB9():

  sub_400EB9()的返回值根据sub_400E6A()来定,跟进分析sub_400E6A():

  这里把传入的某个元素判断是否符合某个区间,然后分别返回不同的值。该函数传进来的是sttr_home[]字符串中的元素,主函数中双击该字符串:

  获取了sttr_home的元素后写个脚本跑出v13[],脚本如下:

 #include <cstdio>
char str[110] = "664e06226625425d562e766e042d422c072c45692d125c7e6552606954646643";
int jdg(int id){
if(str[id] >= '' && str[id] <= '')
return str[id] - '';
if(str[id] >= 'A' && str[id] <= 'F')
return str[id] - '';
if(str[id] < 'a' && str[id] > 'f')
return 0xFFFFFFFFLL;
return str[id] - 'W';
}
int calc(int x, int y){
return 16 * jdg(x) + jdg(y);
}
int main(){
for(int i = 0;i < 64;i += 2){
printf("%d, ", calc(i, i + 1));
}
return 0;
}

  接着写出根据v14[k] = k ^ flllag[k] ^ v13[k]写出相应脚本跑出KEY,并把KEY存到文件中,代码如下:

  接着用gcc编译并运行后,把a.txt作为参数传给file运行:

  把a.txt的MD5在线计算一下:

  把MD5加上flag{}就OKK啦!

最新文章

  1. 【转】【10g SQL新特性】q-quote使用
  2. Java 超简单实现发送邮件(可动态控制发送人数)
  3. CoCreateInstance调用返回代码0x80040154的一种解决方法
  4. MySQL运行状态show status中文详解(转)
  5. iOS开发:读取pdf文件
  6. 避免产生僵尸进程的N种方法(zombie process)
  7. [转]在Eclipse中使用JUnit4进行单元测试(高级篇)
  8. C#中自定义消息,与MFc对比
  9. MSSQLServer基础01(数据类型)
  10. postgresql9.5 run 文件linux安装后配置成开机服务
  11. SQL Server不区分大小写的问题
  12. 【转】javascript笔记之apply、call、bind用法
  13. call 和 apply方法解析
  14. java如何快速创建List
  15. IdentityServer4(7)- 使用客户端认证控制API访问(客户端授权模式)
  16. macOS: sudo : Operation not permitted
  17. JavaScript 声明全局变量和局部变量
  18. Redis集群官方推荐方案 Redis-Cluster
  19. 在MVC3中使用富文本编辑器:KindEditor的配置及上传图片
  20. 以python代码解释fork系统调用

热门文章

  1. Part2-HttpClient官方教程-Chapter1-基础
  2. 在Github里集成Readthedocs服务
  3. VPS性能测试(2):内存大小、交换空间、高速缓存、实际使用内存
  4. Kettle提高输入输出数据总结
  5. 关于级联查询,mybatis
  6. Cent os FTP配置
  7. memcache和redis的对比
  8. django自带的django.core.mail模块实现发邮件的功能
  9. 22:django 配置详解
  10. linux命令(30):touch命令