题目
两个足够聪明的人玩轮流取石头的游戏,谁取到最后一个石头谁就赢了,他们一次只能取1个、3个、7个或8个石头,写一程序判断n个石头时先取的人是输还是赢。
输入格式:
一个整数n,其值不超过10000000。
输出格式:
如果先取的人赢,请以单独一行输出1,否则输出0。
输入样例:
这里是3组输入。
1 | 1 |
输出样例:
1 | 1 |
使用HTTPS协议时需要输入账号密码,比较麻烦,虽然可以配置自动保存密码,但明文保存可能导致安全性的降低。
在部署博客时也收到了github的邮件提醒:
On July 1st, 2020, basic authentication using password to this endpoint will no longer work
故决定使用ssh密钥连接git
打开git bash
,配置用户名和邮箱:
1 | git config --global user.name author |
1 | ssh-keygen -t rsa -C "[email protected]" |
回车设置为默认路径,然后输入两次密码(直接回车则密码为空)
打开https://github.com/settings/keys
将id_rsa.pub
内容填入即可
执行
1 | ssh -T [email protected] |
输入密码验证,返回正确则说明配置完成。
之后都使用git协议来克隆仓库
如:
1 | git clone [email protected]:XhyEax/LeetCode.git |
申请SSL证书前,请务必提前解析好域名记录(解析后最好等一会,以全球生效)
此处可使用Caddy
自动申请的Let's Encrypt
证书,个人使用的是CloudFlare
的免费证书
1 | https://bd.xxx.com { |
把tls选项改为邮箱(似乎不加也行):
1 | https://bd.xxx.com { |
1 | service caddy restart |
(非递减排序)
1 | sort:addi $sp,$sp,-20 |
计算机组成原理与设计(第五版) 机械工业出版社 第94页
解题方法并不唯一,仅供参考。
https://down.52pojie.cn/Challenge/Happy_New_Year_2020_Challenge.rar
关注“吾爱破解论坛”微信公众号,回复指定字符串即可获得本题正确口令。
使用PEiD
查壳,得知该程序是UPX
壳,并修改了区段名。于是使用OD
脱壳,再用ImportREConstructor
修复IAT。
再次查壳,得到Borland Delphi v3.0 *
。故使用IDR
(爱盘下载地址)进行分析。
查看窗体,定位到关键函数TForm1.edtPwdChange
:
其中对输入字符串进行切片,然后分别进行md5计算,并与以下字符比较:E7EE5F4653E31955CACC7CD68E2A7839
ea6b2efbdd4255a9f1b3bbc6399b58f4
c8d46d341bea4fd5bff866a65ff8aea9
反查md5并拼接即可得到52pojie2019game
输入进行校验,得到提示:
将该字符串回复到公众号即可获得本题正确口令。
使用AndroidKiller
反编译,打开MainActivity.smali
,发现checkFlag
和onClick
方法被nativie化了。
于是使用IDA
打开libcrack_j2c.so
,定位到onClick
方法,可以发现是通过JNI反射调用Java方法。由此可以大致分析出程序流程:
首先获取输入框文本,对长度进行判断,为30则调用checkFlag
方法进行检查
在checkFlag
方法中,定位到关键位置:
由此可知,安装并打开该APP后,输入30位长度的字符串,点击确定就会调用equals
方法
于是使用Frida
进行hook,打印出调用该方法的参数和实例内容,从而得到真码:ed61f6308c74bcf35c71729d4db24c
将该字符串回复到公众号即可获得本题正确口令。
Frida脚本如下:
1 | if(Java.available) |
祝各位身体健康,心想事成!