M(没)F(饭)C(吃)的实训
0 Preview
现在是🌍的白儿京时间七月十四日的学校生活。
👴还是没有放假!因为👴要参加实训。少有的能全天抱着电脑,不用爬🌄去上课的时间。
最重要的是不用上那些有害智商的课程。
It’s a waste of time. A bunch of people running around,bumping into each other.
Gguy up front says, " Two plus two. "
The people in the back say, " Four! "
Then the bell rings, and they give you a carton of milk and a
Piece of paper that says you can go to take a dump or something.
👴非常喜欢这种课,建议多来点。懂得都懂
1 失算了
👴大概是真正接触 MFC 最晚的 杂项手 逆向手 了。
之前有做过 MFC 写的题,不出所料,👴连 flag 的屁都没闻到(逃
不过这次实训 ...
深入理解计算机系统(四)
0 Preview
知识点开始聚合了,之前学的都会用到。
学这个是真的煎熬!
立个flag:从今天开始假期内,博客日更!
1 存储模式(字节排序)
关于存储模式,我之前跟着滴水逆向学的时候记过笔记,感觉没有csapp里面详细,就再记一遍。
1.1 代码验证
补充个前提知识,Union(共用体) 数据类型。
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
🍊共用体采用的是小端存储,所以我们可以提前预想一下程序的运行结果
12345678910111213141516C#include<stdio.h>void main(){ union NUM { int a; char b; } ...
深入理解计算机系统(三)
1 IEEE 754
小贴士:IEEE 754 虽然没有规定咋念,但是一口气念三个 E 有点尴尬。
所以可以念成 “ I Triple E 754 ” ,就是 triple kill。。。。
加深理解,还是要动手算一两个例题,要不然就是:
脑子:我会了!
手:你会个der!
1.1
然后再反过来求一次机器数,就差不多掌握了。
逃)
2 浮点数的特殊表示
仔细思考就可以发现,我第二篇中的浮点数的表示范围是长0000001开始的,并没有 全0 和 全1
前面所描述的都是 IEEE 754 中规格化数的表示,下面介绍一下特殊数的表示。
以下都以单精度(float)为例:
+0: 0 00000000 00000000000000000000000
-0: 1 00000000 00000000000000000000000
+∞:0 11111111 00000000000000000000000
-∞:1 11111111 00000000000000000000000
这也是为什么浮点数除 0 的结果是 “ +/-∞ ” 而不是数据溢出的原因。
2.1 非数
下图 ...
深入理解计算机系统(二)
Preview
这个系列只是我学计算机系统基础的笔记,所以说目录不是很整齐。
我也只会记一些重要的东西。
本文刚好解决了昨天的一个问题:
为什么 -2147483648 < 2147483647 的返回结果为 false?
变形补码
双符号位,用于存放可能的溢出的中间结果。
一般用于值太大,用 4位补码 无法表示,故 “ 溢出 ” 但用变形补码可保留符号位和最高数值位。
取反加一的由来
上一篇我写补码部分过于仓促,只写了一句:
整数补码是他本身,负数补码要将原码取反加一。
仔细一想,我自己也不知道为啥要取反加一,所以又去学了学。
定义
我们举个例子,写出详细的计算过程:
设机器数为 8 位,求 -123 的补码:
简便方法:负数求补码从右往左数,找到第一个 “ 1 ”,然后将 1 左边的取反即可。不对第一位取反,相当于加一。
补码求真值,有两种方法:
1、减一取反
2、取反加一
C语言中基本的数据类型
小贴士来啦!
通常在一个数后面加上 ” u “ 或 ” U “ 表示该数为无符号整数。
我现在才知道之前做逆向题,IDA 伪代码里的 u 是啥意思。。。。。
我是土狗。
...
深入理解计算机系统(一)
Preview
决定回归本质,短期内放下 CTF 认真去研究研究底层。
k4👴:等你底层学完了,CTF 不跟玩似的?
我就信了k4👴的这句话,开搞!
我的学习路线是跟着天问之路的任务来的。
第一周是 CSAPP 或者南京大学的计算机系统基础(我是链接)
看完第一集,我得出了一个结论,我是土狗!!!
我 C语言 白学了!我的逆向也白学了!
Question
1 C 语言中一下三个表达式的 返回结果 是多少?
1.1、-2147483648 < 2147483647;
1.2、
123Cint i = -2147483648;i < 2147483647;
1.3、-2147483647 - 1 < 2147483647
这几个问题在之前出逆向题目的时候,就碰到过,因为一个数据溢出导致了整个逆向题垮掉。
2 我直接截图课件算了,记录博客更重要的是方便自己回忆。
冯诺依曼体系
输入设备,输出设备,存储器,控制器,运算器
现代计算机体系
一些名词:
CPU :central processing unit 中央处理器
MAR :Memory Address Re ...
👴
📧💖💊💕📧💖💈💶📧💖💉💥📧💖💊💗📧💖💉💂📧💖💉💇📧💖💊💒📧💖
很久没写水文了,刚好最近发生了些事情,就决定写一写。
💉💨📧💖💈💴📧💖💊💓📧💖💉👾📧💖💉💅📧💖💊💝📧💖💉💪📧💖💉💍
前言
👴实在没得写了
这要从MISC带师那里说起了。
和几位二进制方向的师傅聊了聊,发现自己的学习方式和路线都有点歪了。
正准备从MISC退出,转而一心一意二进制。
👴迈着轻快的步伐,走向实验室,还没开门。
“上,上,我有护盾。。。”
…
太稀奇了,头一次见在实验室打游戏的。想起来之前学长定的规矩:
谁再让我看见在这里打游戏,直接回宿舍,工位让给有需要的人。
记第一次逆向出题
起因
早都想出题了,之前不是打了个 ISCC 吗?
擂台赛有某组织进行一些匪夷所思的操作,看得我也想出一道题,越难越好,越变态越好。
我们联合起来!形成🍞🧀🍞;
于是就诞生了 这道 《1+1的签到题》
出题思路
我接触逆向时间并不长,小半年不到。看的题也不多,想拿出一些新鲜的好玩的东西出题。
就想起来之前 美国普度大学 举办的 b01lers-ctf-2021 中出现的新题型(对我来说):
残缺程序逆向;
这种题难度较高,对逆向的思维和技术有较高要求。但是我水平受限,不能把精髓提炼出来。
所以降低了题目难度;题目中并没有太多的函数调用,减少了难度。加密也用的非常常见的base;一眼就能看出来。算得上签到题了。
伪随机数
基础就不讲了,百度一大堆。
建议上手试验一下,用C语言写一个随机数脚本,python写一个。都制定相同的种子。在windows下和在linux下运行结果都是不同的。
所以要严谨,该题编译为elf文件就是在暗示要在 linux 下的随机数。
base换表
一个是base58的换表,即便粗心也能因为报错反应过来。
第二层是base64的表,我定义了一个假表,在加密时并 ...
爬虫序章-爬取百度并提取信息
Python-爬虫序章
出了道re题,当了一早上客服,好在终于有人解出来了(未提示)。
打开知识星球发现学长发布了作业,让学python爬取东西。
突发奇想:我要当 python👴 , 我要爬🐍图!!!
要求
使用 requests + BeautifulSoup 两个库。编写脚本,抓取 百度主页 。
运行结果 打印 出百度主页的 “ 意见反馈 ” 四个 汉字。
🌟代码中不允许出现汉字。
🌟两个库都需要用到。
准备
!!!看仔细!!!
要爬取的东西就是箭头指向的那个,小小的——意见反馈。
首先分析一下问题;整体思路要清楚,即便没有学过爬虫但是依靠编程基础和思维,也可以想到步骤;
我的第一印象如下:
⭐️request 用来获取百度网页信息;
⭐️对获得的信息进行检索匹配;
⭐️输出
不过有一个很明显的问题,要求代码中不能出现中文,意思是不能直接进行字符串匹配然后输出;然后诞生了一下思路:
⭐️把中文转换成其他编码,绕过学长定的要求。(不建议)
比如 base64 啥的。
⭐️F12 查看网页源码,找到 意见反馈 这些按钮不同的地方,匹配输出;
操作
首先安装上面提到的 ...
ISCC奇幻冒险-序章
ISCC奇幻之旅
About Me
Shangu 一个刚开始学习 二进制安全 的菜鸡。目标是 0NEP1ECE !
仨月 , 还算不上入门,倒是我奇葩的脑洞和莫名其妙的运气,做MISC十分顺畅。
MISC 👴,这只是个巧合,并不是我的初衷,我生是二进制的人,死是二进制的👴(如果转 PWN 不算)
进入正题,这篇博客是讲 ISCC 的。提到 ISCC 就绕不过一个问题,毕竟 比赛结束当晚最后的四十秒每个人都经历了。
坦白,我是河南人,对 就是那个经常被喷的 “HN-” 前缀。
关于河南我们今后再聊,只能说,河南是独特的,也很有意思。
学到了进步了
只说学习,ISCC 很和我的口味,赛时25天有充足的时间去解题。可能是我懒吧,之前参加的 虎符、蓝帽 之类的短赛时,结束以后几乎没有去复现,见到不会的就跳过,也只能这样。
而 ISCC 碰见不会的,我会去现学现用;
我有的是时间。
如何学?没思路?
这个之后再说,这一篇是我吐槽用的。
最后给自己再强调一遍,我是个逆向手,不是杂项手。
见识了
见识了,真的见识了。
十五分钟二百解,三十个人在二十秒内提交flag,高达百分之九十四的惊 ...
汇编(五)堆栈平衡和ESP、EBP寻址
前言
本文汇总五个重点,为了学起来更加方便我将他们按照递进关系重新排列。分别是:
函数、传参、ESP寻址、堆栈平衡、EBP寻址。
看完本文就能感受到我这么安排的用意。
环境
为了更加深入理解,先假设你接到了一项任务:用汇编语言实现一个两数相加求结果的功能,并且要多次使用。
函数
因为要多次使用该功能,所以我们要选择函数来解决。和c语言差不多,汇编的函数也是在一个“模块”中调用另一个“模块”。这只是笼统的介绍,下面演示一下实际操作:
构架模型
函数外部:
1、将第一个数存入寄存器;
2、将第二个数存入另一个寄存器;
函数内部:
3、将他们两个相加,返回值会覆盖第一个寄存器的数据。
4、将返回值复制到EAX寄存器(为了规范,返回值默认存入EAX)
编写代码:
12345678CODEMOV ECX,1 //第一个数存入ECXMOV EDX,2 //第二个数存入EDXADD ECX,EDX //相加,返回值覆盖ECXMOV EAX,ECX
F8单步执行,观察寄存器数值变化。
执行完结果应如图所示:
这里为了直观,进行了 ...