时间从来不语,却回答了很多问题


描述

在github的设置添加了密钥,其他系统也能使用此密钥对进行push,但是windows就是不行(试了很多方法包括添加到了ssh-agent)。最后发现是没有设置ssh针对host使用对应私钥的问题。

解决

~/.ssh/目录下创建config文件或者修改已有的ssh配置文件,然后写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# github
Host github.com
HostName github.com
IdentityFile /path/to/id_rsa
PreferredAuthentications publickey
User yourusername

# custom gitlab
Host ${gitlab_ip}
HostName ${gitlab_ip}
IdentityFile C:\Users\kcaok\.ssh\gitlab_id_rsa
PreferredAuthentications publickey
User gitlab



PubkeyAcceptedKeyTypes +ssh-rsa
阅读此文


post @ 2022-06-09

前言

golang与传统相比,有许多有趣的特性。它们做到例如降低耦合、提高代码灵活性的效果。在学习过程中我总结了以下一些特性,它们体现了Go箴言的思想:

简单,诗意,简洁

  • 不要通过共享内存进行通信,通过通信共享内存

Don’t communicate by sharing memory, share memory by communicating.

  • 并发不是并行

Concurrency is not parallelism.

阅读此文


post @ 2022-05-18

基本ROP

参考地址:基本 ROP - CTF Wiki

ret2text

通过覆盖返回地址跳转到程序已有的某个代码地址(可以是各种危险函数或者gadgets

GDB动态调试,可以看到 esp 为 0xffffcd40,ebp 为 0xffffcdc8,同时 s 相对于 esp 的索引为 esp+0x1c,因此,我们可以推断

  • s 的地址为 0xffffcd5c
  • s 相对于 ebp 的偏移为 0x6c
  • s 相对于返回地址的偏移为 0x6c+4

payload:

阅读此文


介绍

前面讲了一点类与结构体的反汇编分析,这篇简单介绍其构造函数与析构函数的相关知识。

构造函数和析构函数都是类中特殊的成员函数,构造函数支持重载,析构函数只能是一个无参函数,且他们都不可定义返回值。调用构造函数后,返回值为对象首地址,也就是this指针。

构造函数出现时机

对象定义时,构造函数同时调用。因此知道了对象的生命周期,其构造函数便可推断。我们按照生命周期不同分以下几种对象来讨论。

局部对象

编译器隐藏了构造函数的调用过程,我们试分析以下代码:

阅读此文


介绍

angr 是一个多架构二进制分析工具包,具有执行动态符号执行(如 Mayhem、KLEE 等)和对二进制文件进行各种静态分析的能力。

乍一看它真正吸引人的地方是它的符号执行引擎。简言之,符号执行意味着在不实际执行程序的情况下,就可以分析哪些输入经历了哪些代码路径。最常见的例子就是一个程序根据输入的一个字符串跟自身生成的字符串作比较来打印一些东西。符号执行允许我们像对待方程一样分析一个程序,解这个方程然后告诉我们正确的输入。

有很多ctf writeup之类的东西写到它,但是从学习者的角度太看,这些远远不够。

如何安装

建议你使用一个全新的ubuntu20.04虚拟机,直接运行下面的命令安装python3与依赖、虚拟环境组件:

1
sudo apt install python3-dev libffi-dev build-essential virtualenvwrapper

如果安装失败,那么你可以按照下面的顺序从angr的官方仓库依次安装,它们也是angr的主要组成模块:

阅读此文


昨天改博客主题,改到三点改出个bug,今天中午解决了。如图:

解决:打开\themes\freemind.bithack\source\css\highlight.css,添加下面一行:

1
2
3
4
5
6
7
8
.highlight pre {
border: 0;
margin: 0;
padding: 0;
white-space: pre;
/* 隐藏滚动条 */
overflow: inherit;
}
阅读此文


介绍

前面的文章讨论了C++面向对象基础。现在我们知道,C++结构体与类只有默认访问控制的区别:publicprivate。并且是在编译期检查,当越权访问时,编译过程会检查此类错误并给予提示。那么对于C++的面向对象来讲,编译器是如何对其进行处理并生成二进制程序的?

(了解一件事物的原理,对它的了解就会很透彻)

对象的内存布局

创建结构体或类的实例也就是对象后,会为对象分配相应的内存空间。其实也就是一种变量,局部对象会在栈上分配,new或者malloc出来的会在堆上分配。对象的首地址即为对象的指针,从低地址开始存放对象的成员。从内存低地址到高地址按照定义的顺序存放。对象的大小只包含数据成员,成员函数属于执行代码,并不在对象的布局中。那么一个对象会占多大的空间呢?

空类

空类没有任何数据成员(包括虚表指针,后面会讲),理论上对象内存大小会为零。但是这样无法获取实例的地址,this指针也会失效。因此不能被实例化。因此没有数据成员会分配1字节的空间用于实例化,可以用来代表对象的指针,但是它不会被使用。

阅读此文


post @ 2022-04-25

安装AFL++

首先强烈建议新开一个20.04的虚拟机用来安装。

请查看此篇博客:

AFL++学习日志(一)开始Fuzz与crashes分析 - Mundi’s Space

在安装依赖这一步,请安装clang

获取源码这一步,请将仓库git到$HOME下并编译

阅读此文


环境

最好使用Python3.8以后的版本,并且更新pip版本。

PyQt5是第三方写的Qt的Python接口,诞生比较早,所以用的人多,文档丰富。PySide2是Qt官方为Python编写的接口库,2018年发布,虽然比较晚但毕竟是亲儿子,以后还是学它吧。

安装:

1
pip install pyside2

此过程会自动根据不同环境安装Qt Designer到python目录/site-packages/PySide2文件夹下。

Qt Designer

阅读此文


本文只是用来熟悉C++的面向对象语法,前提是学过别的

内容概括

类和对象

函数可在类或结构体中直接定义,也可以只进行声明,在类或结构体外再用命名空间进行定义。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 在内部定义
class Box {
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度

double getVolume(void) {
return length * breadth * height;
}
};

// 在外部定义
class Box {
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
// 成员函数声明
double get(void);
void set( double len, double bre, double hei );
};

// 成员函数定义
double Box::get(void) {
return length * breadth * height;
}

void Box::set( double len, double bre, double hei) {
length = len;
breadth = bre;
height = hei;
}

其他成员函数:

阅读此文
⬆︎TOP