【odoo challenge】pythoner看看你到底能过几关?(硬核向)

odoo简介
1.什么是odoo?
Odoo(先前曾名为OpenERP,更早之前则为TinyERP),是一套企业资源规划(ERP)及客户关系管理(CRM)系统。以Python语言开发,数据库采用开源的PostgreSQL,系统以GNU GPL开源协议发布。
2.pythoner修炼手册
挑战odoo之前我做了什么?
1.python编程基础(python数据结构的基本操作)
2.web网页编程基础(HTML、CSS、JS、JQuery)
3.简单算法基础(排序)
4.django框架的了解
5.和百度合作!学会查询不会的问题!
6.会使用浏览器的开发者工具!这很重要!
3.来自odoo的挑战
好了,接下来我们就开始odoo的挑战
challenge begin!

Level 1

看看第一题怎么解?
第一题很简单,只要你用过谷歌浏览器的开发者工具(其他浏览器具有开发者工具的也可以哦)
那么点开input标签之后就是这样啦,然后看到提示是直接输入的password,OK,下一位!

Level 2



Level 3


我们还是利用开发者工具的network模式,我们输入一下就下一位!

Level 4


这一次的密码依然藏在开发者工具的 network模式下的css文件中,我们就直接输入密码好啦

level 5


进入第五关我们可以看到页面的左上角是一个小饼干(cookie)?所以你有没联想到什么细节?那就是password隐藏在cookies里面!打开开发者工具,查看首页的cookie,输入密码,下一位!

level 6

第6关,谜底就在谜面上,关键是我们要读懂js的代码
// JS
var idx = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
var tmp = "";
for (var i=0; i < pwd.length; i++)
tmp += " "+idx.indexOf(pwd.charAt(i));
if(tmp == " 3 4 3 38 0 6 14 15 4 1 9 2 7 7 9 2 11 12 0 9")
{
$.post('/jobs/challenge/submit', {pwd: pwd}).always(function(x) { window.location = '/jobs/challenge/next'});
}
大概意思就是从idx按tmp中的索引来拿idx的字段吧,我们试下python代码
idx = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
tmp = [3, 4, 3, 38, 0, 6, 14, 15, 4, 1, 9, 2, 7, 7, 9, 2, 11, 12, 0, 9]
pwd = []
for i in tmp:
# print(idx[i])
pwd.append(idx[i])
print(''.join(pwd))
-------------------------------------------------------------------------
result:343C06ef41927792bc09
进行到这里的同学,据说已经有能力在面试过程中拿到12k了,如果你是独立完成的,那么恭喜你,基本的开发者工具你已经很熟练的使用了,但是如果我们是为了最后全部完成才来的,就请继续吧。
level 7
嗯,到这里开始难度有所提升了,不仅仅是看看网页那么简单了,你做好准备了么?

第7关分为两个部分,一个是开发者工具查找密钥入口,一个是密钥的编码解决
我们先打开浏览器开发者工具,留意有没有留下什么线索让我们找到入口

这里我们看到了url的两个部分,我们将这两个部分拼接一下,得到了一个新的url,打开它
It-Is-The-Part-1-Of-Url:/jobs/challenge/d09/<part2>/prime.json
It-Is-The-Part-2-Of-Url="/jobs/challenge/<part1>/7c8/prime.json"
-------------------------------------------------------------------
New_Url: https://www.odoo.com/jobs/challenge/d09/7c8/prime.json

看样子是删除这个数据集的非质数,然后找到π的第322位代表的数字,将这个数据集按索引找到以后移动x个比特位才能得到password,看下python代码的解决方案,输入password,下一位!
{ "instructions": "Remove non prime numbers from data then right shift [322th decimal of the constant quantity that determines the area of a circle by multiplying it by the radius squared] bits from the remaining numbers, it will give you the alphanumeric password of the next level", "numbers": [ 39179, 5558, 27677, 12841, 8673, 5379, 27744, 12084, 25411, 14281, 23855, 31412, 38361, 9031, 57708, 39731, 6499, 15624, 24305, 35938, 34416, 2177, 11876, 25391, 48398, 14407, 26099, 38163, 25943, 25153, 57020, 45825, 14629, 25169, 14281, 5775, 26256, 47392, 25561, 352, 15743, 9620, 30693, 5254, 26261, 50860, 14029, 26347, 39126, 33775, 49712, 25469, 31614, 29897, 25423, 14321, 25087, 40223, 12553, 39897, 55211, 37873, 35818, 43020, 44873, 20505, 12823, 24685, 40600, 50561, 14153, 39960, 19172, 3432, 54739, 18384, 14173, 40852, 20256, 14281, 12781, 1648, 20342, 29047, 18373, 45190, 64507, 58740, 13411, 37603, 51423, 48612, 47367, 37391, 33034, 26107, 45577, 51622, 60526, 17826, 49992, 61505, 12799, 55481, 43643, 13463, 17866, 56470, 25471, 12689, 28017, 13873, 59229, 53187, 32664, 55668, 12739, 63010, 8997, 13513, 23246, 3714, 55083, 26402, 55966, 12689, 14251, 33593, 29084, 14783, 31255, 31760, 25457, 27092, 14461, 36537, 30464, 9772, 14347 ] }
def pi_input():
bit = int(input('请输入想要计算到小数点后的位数n:'))
number1 = bit + 10
# 算到小数点后number1位
b = 10 ** number1
# 求含4/5的首项
x1 = b * 4 // 5
# 求含1/239的首项
x2 = b // -239
# 求第一大项
he = x1 + x2
# 设置下面循环的终点,即共计算n项
bit *= 2
# 循环初值=3,末值2n,步长=2
for i in range(3, bit, 2):
# 求每个含1/5的项及符号
x1 //= -25
# 求每个含1/239的项及符号
x2 //= -57121
# 求两项之和
x = (x1 + x2) // i
# 求总和
he += x
# 求出π
pai = he * 4
# 舍掉后十位
pai //= 10 ** 10
############ 输出圆周率π的值
paistring = str(pai)
result = paistring[0] + str('.') + paistring[1:len(paistring)]
return result[-1]
# li换成你的数据列表
li = [12923, 25541, 52190, 14249, 25463, 12384, 47790, 21872, 17734, 61906, 54848, 28964, 17820, 14543, 48831, 26099,
26053, 18531, 4345, 41334, 57262, 25237, 29072, 30580, 14713, 44314, 47488, 4385, 5943, 25219, 14323, 63441,
33817, 44601, 37569, 25523, 2180, 9235, 26227, 13967, 26309, 25589, 25583, 1810, 31584, 14159, 17617, 62356,
25960, 59849, 18638, 55993, 24907, 31332, 45393, 40303, 7575, 18710, 4047, 12653, 61705, 63459, 13049, 14197,
50900, 26381, 14249, 15237, 7885, 45881, 62895, 893, 2026, 14249, 23310, 12653, 61309, 2700, 38391, 17503, 2460,
13367, 43896, 64715, 17643, 53912, 42525, 28996, 53005, 9572, 26083, 9077, 12739, 13313, 13289, 60031, 25367,
57123, 12577, 13967, 8499, 24768, 12589, 13367, 28648, 50983, 49356, 25468, 52966, 12619, 27569, 24507, 18381,
14221, 42957, 57320, 63365, 40248, 45009, 42268, 14767, 25357, 5383, 6984, 55022, 14401, 14449]
li_2 = []
for num in li:
if num <= 1:
# 小于等于1的肯定不是质数
pass
elif num == 2:
# 2本身是质数
li_2.append(num)
else:
# 能整除的不是质数
i = 2
while i < num:
if num % i == 0:
break
i = i + 1
else:
# 剩下的都是质数了
li_2.append(num)
bit = pi_input()
li_3 = []
for i in li_2:
li_3.append(chr(i >> int(bit)))
print(''.join(li_3))
level 8

这个页面的logo是不是有点奇怪,看起来奇怪的东西一定是有道理的,我们点看开发者工具看看有什么秘密

看起来我们需要解析一下这个页面上的logo,应该是剔除一些噪音,才能得到password,打开开发者工具,在network模式中找到challenge文件,再点开response拿到html标签,我们需要复制这个内容到本地端成html文件(用来解析)


好了之后,我们用python代码来剔除噪音,输入密码(Password:'xxxxxx'的x部分哈),下一位!
from bs4 import BeautifulSoup
import re
with open(r'./r.html', 'r', encoding='utf-8') as f:
text = f.read()
# print(text)
soup = BeautifulSoup(text, 'lxml')
text_n = str(soup.find_all('pre')[0].text).replace('#', '').replace('\n', '')
l = []
for t in text_n:
l.append(t)
print(','.join(l).replace(',', ''))
-----------------------------------------------------------------------------------
result: Password:'5d8a23ca6fdaf9e61763ed3019e0362ccd129429'
level 9
第9关看似平常实际暗藏杀机,居然空出来一个空白在password和level之间,直觉告诉我们这是有问题的,我们用开发者工具看看藏了什么


看起来隐藏一系列的乱码,根据我多年的看(图)片经验,emmm,这是一个png图片的字符串


第10关谜底还是在谜面上,这里需要比较有耐心了,读懂代码的就知道,这是按索引一次猜密码的,这里我就不一步步解析了,因为密码也是固定的,直接放上密码

feeccd0ae6625a47426a7126154a951cad696236
level 11

最后一关看起来是script标签的,和我们输入的pwd有关,打开开发者工具,查看一下script标签的变量



看起来我们输出的最后结果pwd中需要包含2077Odoo,最后要是75,拼接一下2077Odoo75,得到密码
什么?你说为什么?请私信我,就到这里!

拜了个拜!!!

Win a contest, win a challenge
posted on 2018-12-07 11:38 pandaboy1123 阅读(1123) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南