补档:Asis20 两道简答题writeup
本文为之前参加过的ctf比赛的writeup,迁移到这个博客来吧
Relzzy (solved)
读了一个flag.txt文件,然后用一段shell脚本跑一下输出一个result.txt文件;
shell脚本里面有python代码,扒出来运行一下,发现是一个顺序序列的生成代码;
然后把这个顺序序列拿去和结果异或就得到答案了…
不过学到的一点是使用bytes.fromhex(字符串)可以把hex形式的字符串转成字符串;
123456789101112131415161718192021222324252627282930import osimport decimalimport timedef test1(): decimal.getcontext().prec = 2992 index=0xfd x = str(decimal.Decimal(1) / decimal.Decimal((1010 - int(time.strftime('%m')))*1000 +1))[2:] print(x) print(int(x[3*index ...
补档:Hitcon20 & Hxp20 & 上海大学生20 三道简单题的writeup
本文为之前参加过的ctf比赛的writeup,迁移到这个博客来吧,两道简答题,重在参与
table {
margin: auto;
}
REEXCELlent
艹,这个z3有毒,怎么排列不按名字来的;
下载下来是个excel,界面输入一个类似序列号的东西,后面第三行会动态地根据序列号进行变化,然后第二行看到了会根据输入的不同改变颜色,并且一开始什么都没有输的时候就有一格是绿色,如果不知道可能会以为这是装饰;
第一感觉是用公式弄的,但是首先选中输入框,发现没有公式(也很正常,毕竟是输入),然后在变化的输出框发现有一个拼接字符串的公式CONCATENATE,发现后面应该是跟着另外的sheet的名字,然后跟着行和列信息,eg.Tablele4!D4;
右键下面唯一的sheet,出现了取消隐藏,共有其他四个表,发现后三个表东西很多,搜了一下怎么跟踪公式:
操作
作用
公式->追踪引用单元格
可以把这个公式依赖的格子给显示一下,但是实际上还没有把光标放到公式去上色好用,不过在看对应哪个格子还是有点用的
公式->追踪从属单元格
看看这个格子被哪些其他格子使用 ...
补档:RoarCTF 2020 初赛 slime_war
本文为之前参加过的ctf比赛的writeup,迁移到这个博客来吧
REslime_war(solved)
刷了全图竟然只有2?还是乱码
经典一道题玩一天,感觉得练一下密码学,不然只做逆向还是不太行;
自己搞了一天,在共享文档上和龙哥交流,慢慢把条件给理顺了,经典的控制台程序编程,没有套框架,代码用IDA看都非常好懂,感觉应该是我比较能做的一类题目了;
题意是玩一个游戏,收集5个隐藏条件最后出flag;
首先是改攻击力,走了一圈打了全图,发现通关后并没有flag,看代码发现有一个变量被不同的地方累计了5次,直接xref然后每个变量增加的地方都下个断点,然后再玩一次,把原来打的2给定位了,发现:
第一个在0x1400066B0的地方,在第七层有一个隐藏奖励获取的地方,打穿然后回到第一层,进去隐藏关卡再出来触发;
第二个应该就是打通boss,但是这里并不是唯一的条件,后面再说;
第三个是键盘输入,接下来就是看剩下的断点,其实从这里开始才在认真看程序,第一个是类似一个作弊码要输入一个东西,在龙哥的提醒下发现程序根据键盘的输入逐渐对一个状态值继续累加(龙哥提醒:状态机),所以说看一下程序可以把这 ...
TMCTF Final 2020 Challenge 4 writeup
本文为之前参加过的ctf比赛的writeup,迁移到这个博客来吧
REChallenge 4(保底分)
这题不难,应该是最快打到低保分数的题了;
题目给了一个python文件和一个so文件,运行python文件,共有999个迷宫,每个迷宫是有一个32位输入的密钥拿去解密,每个迷宫对应一个函数,这个函数会对密钥的前16位进行约束,一看就感觉可以用z3来解;
提示指出迷宫1是第一扇门,输入1并把z3解出来的密钥和提示的后16位密钥拼起来得到了下一扇门的后16位密钥;
做到这里以为稳了,只要把剩下的门的前16位密钥都给解出来,然后拼起来一个一个去试把门给试出来就行;
然后就开始写代码,分成下面步骤:
首先考虑把IDA反编译的每个函数的代码给提取出来,问了A博代码的提取方法,虽然一开始乱找找到了,但是没想到C文件太大导致导出慢,还以为搞错了;
IDA提取C代码:File -> Produce File -> Create C file (ctrl+F5)
接下来写正则表达式把约束提取出来,转化成z3的python表示,这一步没什么好说,写的很快,后面再上和整理代码;
值得学 ...
补档:2020西湖论剑初赛
本文为之前参加过的ctf比赛的writeup,迁移到这个博客来吧
剑指2021 西湖论剑 writeupRE官方wp在安恒的公众号里面,回复”逆向wp”
Cellular(solved 1血)
读题意大概是输入由L或者R组成的字符串,然后对某个数据结构进行操作,使用动态调试发现程序只要判断某个位置的L或者R字符输入错误就会结束;
这样的话可以逐位进行L或者R的输入,可以在0x4021D5位置下个断点,每次构造输入看能否到达这个断点,不能的话就修改当前字符,这样做25次之后可以得到path,再进行一下md5即为flag;
flag:md5(RLRLLRLLLRRLLRLLRLRLLRLLR)=b144da06ead3c5585cf18ce942055857
babyre(unsolved)
0x5440EC处修改为1可以打印调试信息;
输入32位
12345678912345678912345678912121
loader(solved 3血)
loader.exe运行需要带三个参数;
bat替换掉一些字符可以得到以下的代码,这样可以得到运行loader.exe的参数;
1234 ...
论文阅读:Messy States of Wiring: Vulnerabilities in Emerging Personal Payment Systems
该论文为本周讨论班battle论文,由我负责进行小组领读,因此对该论文做一个记录
文章介绍该论文发表在Usenix Security 21上,是一篇关注了新兴的个人支付系统(Personal Payment System,PPS)安全的文章。该文章对PPS进行系统建模,并分析每个流程所存在的安全漏洞,并结合这些漏洞在收集到的35个PPS平台上进行分析和攻击,是第一篇关注到这种系统并进行安全分析的文章。
文章的研究背景文章研究的PPS是一个为商户提供订单管理,订单查询以及交易过程中的资金交易情况的平台,在用户,第三方支付平台(如微信,支付宝)以及商户这三者间建立联系。
由于第三方平台在注册商业账户时候所需要的高门槛,高保证金(或者高预计营收),以及高手续费等问题,部分商户会选择使用PPS来实现对订单的管理,但是这类平台目前处于一个比较不成熟的阶段,因此其中的安全问题值得进行分析
对PPS系统的建模PPS系统包含5个阶段,分别是注册和密钥分发,订单生成,订单支付,支付通知以及历史订单查询。下面分阶段说明。
注册和密钥分发
注册:商户在第三方支付平台注册个人账户用于收款,在PPS中注册商业 ...
UI Automator Viewer无法获取到当前布局元素的原因
近期在测试过程中需要获取到界面上的某些按钮的resource ID去在代码中定位到对应的点击响应函数,官方SDK中自带的UI Automator Viewer(简写成UIAV好了)可以满足这个需求,但是使用的过程中发现部分应用会没办法导出布局,因此有了这篇博客来看下是什么原因。
问题描述UIAV无法获取到当前屏幕的布局,显示的错误如下:
上网冲浪查找这个错误相关的信息和解决方法,包括开启USB调试,重新启动adb server,手动获取布局文件和截图等,都没啥用。
问题原因在尝试手动获取到布局文件和屏幕截图再分别导入到UIAV的时候,突然发现获取到的屏幕截图的大小为0kb,另外的uix布局文件倒是看起来很正常,那么结合到当前的使用场景就很容易想到可能是当前的窗口禁止了屏幕截图类的操作,导致UIAV无法获取到屏幕截图从而报错。
根本原因是Android 4.2(API Level 17)中引入的窗口保护机制,如果添加了FLAG_SECURE那么该窗口禁止截图或者屏幕录制的时候为黑屏。
解决方法还是需要使用到屏幕截图功能,不然在布局文件里面去找太麻烦了,搜了一下Xposed和Magisk ...
环境配置问题汇总
虽然下面这些环境配置的问题一般只需要3分钟去搜索下就能得到答案,但为了方便起见还是做一个记录。
Gradle的存储位置Android Studio的gradle的默认位置位于用户所在的系统盘(一般是C盘咯),这对于C盘空间紧缺的电脑不太友好。
可以通过配置一个环境变量搞定,GRADLE_USER_HOME的默认值为$USER_HOME/.gradle,可以添加一个环境变量,将存储位置配置到非系统盘。
参考资料
安卓自动化测试 从抢菜应用中学习
背景之前的项目中接触过一些自动化测试相关的内容,但是后来自动化测试的脚本就不是我负责搞了,只是帮忙辅助下,近期的项目以及日常生活(指抢菜啥的)中用到了类似自动化测试相关的方法,所以这篇博客就简单做下面向安卓应用的自动化测试方法总结,并以其中使用无障碍功能完成自动化测试的开源抢菜应用为例看看实现上是否有比较新颖的地方。
目前了解到的测试相关技术先说下这篇博客想讲的内容主题,首先针对的对象是安卓应用,同时这里测试的含义并不是传统的项目开发中测试功能是否有bug,而是说实现一个类似状态机的系统,模拟用户的操作去完成特定的任务,可能说成脚本比较贴切,但同时我们又希望脚本具有一定的判断能力,而不是按照固定的操作顺序去执行。
目前我了解到的有这三种方法,他们的区别以及优缺点总结如下:
MonkeyMonkey是adb中自带的一种安卓应用测试工具,其名字的由来是猴子的自由点击测试,顾名思义这个工具可以提供类似于自动执行点击相关的一系列操作,通常用在应用测试中。
这款工具在随机测试中应用广泛,可以配置各种不同类型点击的比例,具有可重放测试流程的功能。优点同时也是缺点就是随机测试,一方面随机测试可以针对 ...
常用shell命令
Bash写在前面,推荐一个查看命令用法的工具tldr(Too Long Dont Read),相比man来说展示的命令使用方法更加简洁,需要快速上手或者说一时想不起来比较经典的用法可以用这个命令查询,需要更加细致的命令再去搜索或者man里面找;可以通过pip安装。
trtranslate,字符操作命令,支持替换等功能。
字符替换使用-t指定,为tr命令的默认参数,需要替换的字符集合使用[]包围,可以使用正则表达式表达字符集合,如[a-z]
12$ tr [被替换字符集合] [替换字符集合]$ tr [:lower:] [:upper:] // 特殊,大小写字符集合
删除字符12$ tr -d [需要被删除的字符集合]$ tr -d "[a-Z][A-Z]"
压缩重复字符1$ tr -s [需要被删除的字符集合]
grep正则搜索输入中的匹配字符
参数:
i 忽略大小写
a 不要忽略二进制数据,搜索二进制文件必带参数
l 只输出匹配上的结果的文件名
搜索文件/文件夹中的指定字符串12$ grep -i -l -a "[正则表达式]" [文件名, ...