一.[ACTF新生赛2020]rome1
二.[GXYCTF2019]luck_guy1
三.大端模式与小端模式
四.下周计划
一.[ACTF新生赛2020]rome1
第一步 查壳
无壳,为32bit,拖进IDA分析
第二步 寻找关键字
看到you are correct,点进去,ctrl+x看看哪里引用了correct;
第三步 生成伪代码可得
第四步 从后往前分析
v1经过变换后要和v12数组的前16位相等,推测为静态分析相等类题目
接着往上看,这是v1进行的变换,大小写字母都发生变换,其他则不变
再向上看,可知v12的值
这时候就知道题目的意思是我们输入的值经过变换后等于Qsw3sj_lz4_Ujw@l
第五步 写脚本,取余操作比较麻烦,这里我选择用最暴力的方法(一个个试)来写
可以得到结果
遇到的问题:输入的是16个数,但这里只有4个数,又从头看了一遍,发现这四个是int型,4字节,我们输入的为char型,一个字节,4*4=16。这就刚刚好了。
二.[GXYCTF2019]luck_guy1
第一步依旧先查壳 无壳,64bit
第二步查找关键字,看到了flag,
第三步,点进去,看看哪里引用了,按F5生成伪代码
第四步,对伪代码进行分析,这里的循环进行了5次,发现case2,case3没有用,(rand()%200的意思为随机取0-199的整数),再注意看case1,case4,case5分别什么意思。
case1:输出flag,flag=f1+f2;点进去f1,可得f1的值,f2为空
case4:对f2进行赋值
case5:对f2的值进行变换
第五步:写脚本分析f2
最后可得flag为GXY{do_not_hate_me}
遇到的问题:从数据的高位开始输入,0x7F为数据高位,如下图
这样的方式是不对的,数据在此处的储存方式为小端模式,应该从低位输入才对,如下图
三.大端模式与小端模式
小端模式
数据的低位放在低地址空间,数据的高位放在高地址空间
小端就是低位对应低地址,高位对应高地址
读取数据:注意是从低地址读起,在读出来的时候会从低位开始放
大端模式
数据的高位放在低地址空间,数据的低位放在高地址空间
读取数据:注意从低地址开始读取,读到的从高位开始放
如下图
四.下周计划
学习关于apk逆向知识,初步学习apkIDE的使用
学习滴水逆向知识
完成BUU逆向2-3题