0%

【PoRE#0x00】欢迎来到逆向工程原理

为了在学校的高强度课程《逆向工程原理 Principles of Reverse Engineer》存活下来,站主决定开启一个系列笔记,并同步到博客上。
目标是将课程以及实验的要点以人话讲清楚,整理一些便于查询的cheatsheet,并尝试拓展学习一些有趣的内容,以便同学和自己参考。(如果有同学看的话(´_ゝ`))

本期作为第0期,主要记录课程的基础设施使用方法。

在 PoRE 中使用 git

本课程所有的 slides 获取、作业获取以及作业提交都通过 GIT 完成。
GIT 作为一个分布式的版本控制软件,自然有强大的文件同步功能,能在客户端和服务器之间同步文件。

完整的 GIT 系统是经典的客户端-服务端架构,服务器上存储了 GIT 仓库。
我们经常使用的 github,提供了 GIT 仓库的托管服务。而在PoRE课程中,我们使用的是课程搭建的 GIT 服务器。
在课程 GIT 服务器上,有如下一些仓库(repository,简称repo):

  • release:LAB 的分发版本
  • pore_2130xxx0xxx:每个人的个人仓库,主要用于提交
  • slides:存放课程的 slides

在 PoRE 中使用 git 的完整流程如下:

  1. 和TA注册公钥,服务器会允许你使用私钥来登录服务器的 gitpore 账号
  2. 使用 git clone 下载自己的个人仓库(目前是空的)
  3. 使用 gir remote add 将 release 仓库添加至远程仓库列表中,并命名为 release
    (以下步骤为每次 Lab 的流程)
  4. 使用 git pull release master 来让本地文件与 release 仓库的 master 分支同步(下载最新作业分发)
  5. 完成Lab,多使用 git commitgit push origin master 来在本地、远程存档。其中 origin 是指我们位于服务器的个人仓库。
  6. 在最后的提交时,使用 git tag 'submit' 来标记当前 commit 为最终版本。

此外,未来常用的操作还有:
0. 一键add:git add <path_of_root_dir>

  1. 撤回本地 commit,并且不还原文件:git reset --soft HEAD^
  2. 撤回远程 commit,并且不还原文件:上一步基础上将本地强行同步至远程仓库 git push origin master --force
  3. 删除本地 tag:git tag -d <tagname>
  4. 删除远程 tag:上一步基础上 git push origin :refs/tags/<tagname>

指定 git 使用的 SSH 密钥

如果需要在多个设备上使用同一对密钥,或者设备迁移之后要迁移密钥,或者想要同时使用多个密钥,可以通过如下的方式为不同的主机设置不同的密钥(这其实不是 git 的配置,而是 ssh 的配置):

进入 ~/.ssh/,如果没有 config 文件的话就创建一个 config 文件(文件名为 config)。
config 的规则是从上至下读取条目,若找到匹配的Host就使用配置,找不到就默认。具体规则详见 man page
config 的条目格式如下:

1
2
3
4
Host <NickName>
HostName <HostName/IP_addr>
User <User_name>
IdentityFile <Path_to_Private_Key>

具体来说,本课程的远程 git 服务器可以这样设置:

1
2
3
4
Host PoRE
HostName 106.15.186.69
User gitpore
IdentityFile <Path_to_Private_Key>

在设置完毕之后,再从服务器 clone repo 时,就可以从原先冗长的:
git clone gitpore@106.15.186.69:slides.git

简写为:
git clone PoRE:slides.git