此篇用来记录我在jarivsOJ上的一些题解,只给解题思路,不放flag

Misc

0x01 You Need Python(300)

题目有两个文件,一个py文件,另一个是经过编码的key

文件key

首先看到提示key_is_here_but_do_you_know_rfc4042,baidu一下了解到是utf9编码,于是将这个文件解码,得到一串字符(md里对下划线要转义才能正常显示,偷个懒所以我这里贴出的字符是没转义过的,请不要直接拿去进行下一步的操作以免出错

*((//++-%)**((%(-))++(%++_______%+-(//(%)))))+*(((/)+%+-(_______//))**(*(+)++%))+*(((//+%)+(-))**((+)+-(//)))+*((+-(//-%__%))**(++))+*(+-(//-%%))**(-+)+(+)**(%%++)+(___-)*((//-_____%%)+)**(-(//+%)+)+(+(%)*+)**+(((__%)+_______-(//)))+(____/)*(((-+)*(+___)))+((+-)**)+__(((+-/+-%%)*(-+/+%))**)+(//)*(((%%++)%)+-)**+*((/(%))+)*((%)*+___+)+//++/_

对下划线计数,运算符正常运算可以得到5287002131074331513,一开始以为这就是真正的key,然后死活解不出来,后来尝试ascii解码得到I_4m-k3y,这才是正确的key

文件flag.py

marshal.loads是反序列化操作,用uncompyle2即可解决。

脚本如下

  1. #参考链接:https://www.aliyun.com/jiaocheng/475933.html
  2. import uncompyle2
  3. import marshal, zlib, base64
  4. co = marshal.loads(zlib.decompress(base64.b64decode('eJxtVP9r21YQvyd/ieWm66Cd03QM1B8C3pggUuzYCSWstHSFQijyoJBhhGq9OXJl2ZFeqAMOK6Q/94f9Ofvn1s+d7Lgtk/3O997du/vc584a0eqpYP2GVfwDEeOrKCU6g2LRRyiK4oooFsVVUSqkqxTX6J1F+SfSNYrrdKPorC76luhbpOEGCZNFZw2KG3Rmk26QtuXi3xTb7ND6/aVu0g2RuvhEcZNut5lAGbTvAFbyH57TkYLKy8J6xpDvQxiiiaIlcdqJxVcHbXY6bXNlZgviPCrO0+StqfKd88gzNh/qRZyMdWHE29TZZvIkG7eZFRGGRcBmsXJaUoKCQ9fWKHwSqNeKFnsM5PnwJ7q2aKk4AFhcWtQCh+ChB5+Lu/RmyYUxmtOEYxas7i/2iuR7Ti14OEOSmU0RADd4+dQzbM1FJhukAUeQ+kZROuLyioagrau76kc1slY1NNaY/y3LAxDQBrAICJisV2hMdF2lxQcyFuMoqcX3+TCl6xotqzSpkqmxYVmjXVjAXiwBsEfBrd1VvTvLCj2EXRnhoryAKdpxcIgJcowUB68yAx/tlCAuPHqDuZo0CN3CUGHwkPhGMA7aXMfphjbmQLhLhJcHa0a+mpgB191c1U1lnHJQbgkHx+WGxeJbejnpkzSavo2jkxZ7i725npGAaTc8FXmUjbUETHUmkxXN5zqL5WiWxwE7Bc11yyYzNJpN02jerq+DzNNodfxOX8kE4FcmYKscDdYD1oPGGucXYNmgs1F+NTf3GOt3Mg7b+NTVruqoQyX1hOEUacKw+AGbP38ZOq9THRXaSbL5pXGQ8bho/Z/lrzQaHxdoCrlev+t6nZ7re57r+57rHXag93Deh37k+vuw9zorO/Qj/B50cAf2oyOsvut3D+ADWxdxfN/1Drqu39mHzvcRswv/Hvz7sHeg9w8Qzy99DzuFwxhPhs6zWTbOI3OZRiaZZcVj5wVwOklx7OwVxR47PR46r/SVM8ulBJic9zku/eqY/MqJxiDj+Gd55wS3f35pbLCzHoEwzKKpDkN5i+TR+1AYCWTo5IV0Z0P9H3phDDd6lMzPdS5bbo9eJGbTsW9nbDqLL1N9Iq+rRxDbll2x67a9Lf27hw5uK1s1rZr6DOPF+FI=')))
  5. f = open('test','w')
  6. uncompyle2.uncompyle('2.7.3',co,f)

拿到源码之后就很好做了,运行源码可以知道我们需要输入keyflag,然后经过encrypt函数的加密和cipherText比较,而key我们已经拿到了,简单分析一下encrypt函数可以发现,连爆破都不用,直接赋值就好了。。

解题脚本如下

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. __Author__ = "LB@10.0.0.55"
  4. import utf9
  5. import hashlib
  6. from libnum import n2s
  7. from string import printable
  8. def get_key():
  9. a = open('key','r').read()
  10. print type(a)
  11. key = utf9.utf9decode(a)
  12. print key
  13. exp = ''
  14. num = 0
  15. for i in key:
  16. if i == '_':
  17. num += 1
  18. elif num != 0:
  19. exp += str(num) + i
  20. num = 0
  21. else:
  22. exp += i
  23. exp += str(num)
  24. return n2s(eval(exp))
  25. def sha1(string):
  26. return hashlib.sha1(string).hexdigest()
  27. def calc(strSHA1):
  28. r = 0
  29. for i in strSHA1:
  30. r += int('0x%s' % i, 16)
  31. return r
  32. def decrypt(key):
  33. print key
  34. keySHA1 = sha1(key)
  35. print keySHA1
  36. intSHA1 = calc(keySHA1)
  37. print intSHA1
  38. r = ''
  39. flag = '-185-147-211-221-164-217-188-169-205-174-211-225-191-234-148-199-198-253-175-157-222-135-240-229-201-154-178-187-244-183-212-222-164'
  40. flag = flag.split('-')[1:]
  41. flag = [ eval('-'+i) for i in flag ]
  42. print len(flag),flag
  43. for i in range(33):
  44. r += chr(-int('0x%s' % keySHA1[i % 40], 16)+intSHA1+flag[i])
  45. intSHA1 = calc(sha1(r[:i + 1])[:20] + sha1(str(intSHA1))[:20])
  46. print len(r),r
  47. def main():
  48. key = get_key()
  49. decrypt(str(key))
  50. main()

Crypto

Reverse

Pwn

作者: LB919

出处:http://www.cnblogs.com/L1B0/

如有转载,荣幸之至!请随手标明出处;

JarvisOJ - Writeup(5.31更新)的更多相关文章

  1. BugKu-杂项(Misc)的部分Writeup(持续更新)

    第一次写博客,有不好的地方,麻烦大佬指正,我用了些时间把BugKu里的Misc的解题思路和套路整理了一下,发出来分享 各位小可爱们,右边有目录可以快速跳转哦 1.签到题 给了一张二维码,扫描关注就得到 ...

  2. MySQL的学习记录(3.31更新)

    MySQL的学习记录(3.31更新) 0x00 安装及配置 Windows 1.首先官网下载(https://dev.mysql.com/downloads/mysql/) ps:不想官网下载的可以到 ...

  3. VMware ESXi 7.0 U2 SLIC & Unlocker Intel NUC 专用镜像 202109 更新

    2021.08.31 更新:集成 "vmkusb-nic-fling" 和 "nvme-community",现在只有一个镜像. 2021.06.16 更新:集 ...

  4. VMware ESXi 7.0 U2 SLIC & Unlocker USB 网卡驱动集成镜像 202109更新

    2021.08.31 更新:集成 "vmkusb-nic-fling"."net-community" 和 "nvme-community" ...

  5. linux可以这样玩 之 杂乱无章的随笔(不定期更新)

    文章目录 快速重命名 vim的进化 vim高亮当前行 vim列编辑 vim块编辑 vim行编辑 vim 中替换内容 vim保留当前已经编辑的内容,切换到其他用户继续编辑 修改服务的进程限制 CentO ...

  6. Portable Basemap Server:多数据源多客户端的底图服务器

    Portable Basemap Server:多数据源多客户端的底图服务器 [poll id=”1″]2014.3.8更新v3.1~在线切片转换为MBTiles时,增加RecreateEmptyCa ...

  7. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  8. 78. Android之 RxJava 详解

    转载:http://gank.io/post/560e15be2dca930e00da1083 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Fli ...

  9. Android --日期控件使用并显示选择的日期

    1. main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

随机推荐

  1. Python学习笔记四:主要图表

    图表部分,很多要记忆的.以下来自于培训材料的记录. 但我个人觉得更重要的是要根据业务特点确定用什么样的图表,然后再去查具体的参数,光记住参数意义不是很大. import numpy as np imp ...

  2. Eclispe WEB项目 转到 IDEA 后无法部署问题

    IDEA是个强大的IDE  这个就不用多说了 Eclispe 的Web项目  转到IDEA之后,开始部署会出现大量的问题 项目从SVN下载下来的时候,大概就是这个样 第一步是先设置  项目结构  也就 ...

  3. 消息队列和Kafka

    ------20191211闪

  4. Java 中多态的实现(下)

    Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...

  5. 避免layui form表单重复触发submit绑定事件

    个人博客 地址:http://www.wenhaofan.com/article/20180927002336 在使用以下代码监听lay-filter为editConfig的提交按钮后,当点击提交按钮 ...

  6. [ C++ ] 常用位运算技巧

    1.除以二 a >> 1 2.二的n次方 1 << n 3.十进制转2进制 x&(1<<i) 持续更新

  7. sql server和my sql 命令(语句)的区别,sql server与mysql的比较

    sql与mysql的比较 1.连接字符串sql  :Initial Catalog(database)=x;  --数据库名称      Data Source(source)=x;        - ...

  8. 在docker上部署centos

    1.查找镜像源$ docker search centosNAME DESCRIPTION STARS OFFICIALcentos The official build of CentOS. 385 ...

  9. HttpApplication处理管道处理过程简单描述

    HttpApplication对象是由Asp.net帮助我们创建的,它是asp.net中处理请求的重要对象.为了便于扩展,HttpApplication采用处理管道的方式进行处理,将处理的步骤分为多个 ...

  10. bat代码中判断 bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT

    · bat 代码中判断bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT 一.判断bat是否是以管理员权限运行 @echo off net.exe session >NUL & ...