Handmake
Analyse
1. 查看文件类型
m1sceden4@DESKTOP-H37I3CV:/reverse/Handmake$ file challenge
challenge: ASCII text, with CRLF line terminators
发现是文本文件,cat一下
可以看到这是go代码,篇幅很长,共有15w行之多。将文件后缀改为.go,通过任意编辑器打开文件
2. 分析文件内容
这段go代码定义了很多很多函数,在不知道题目意思的情况下,大概可以感觉这些函数应该是起到混淆和加大逆向难度的作用
找到main函数,代码如下:
func main() {
var nFAzj, CuSkl string
jjxXf := []byte{
37, 73, 151, 135, 65, 58, 241, 90, 33, 86, 71, 41, 102, 241, 213, 234, 67, 144, 139, 20, ...
Analyze
from Crypto.Util.number import *
from secret import flag
def encrypt1(n):
n1 = hex(n>>200).encode()
n2 = str(hex(n))[20:].encode()
return n1,n2
def encrypt2(m , n_1):
c_1 = pow(m,e_1,n_1)
print('c_1 = '+str(c_1))
def encrypt3(m , n_2):
c_2 = pow( m , e_2 , n_2)
print('c_2 = '+str(c_2))
def encrypt4(m):
k = getPrime(512)
m = m % k
c_3 = pow(m, e_2, n_3)
print('c_3 = ' + str(c_3))
print('m = ' + str(m))
print('k = ' + str(k))
...
概述
1.两种信息流:数据信息流,控制信息流$\left { \begin{aligned} 指令信息\状态信息\时序信息 \end{aligned} \right.$
2.五个部件:运算器,存储器,控制器,输入设备,输出设备
3.冯诺依曼体系结构计算机的特点:
硬件由五大部分组成运算器,控制器,存储器,输入设备,输出设备
软件以二进制表示
采用存储程序
所有的程序预先存放在存储器中
指令采用串行执行的方式
4.计算机系统的层次结构
graph BT;
数学模型,算法应用程序 --> 作为软件资源的应用程序 --> 语言处理程序 --> 操作系统级 --> 机器语言(指令系统) --> 微程序控制器,硬连逻辑部件
5.机器语言,汇编语言,高级语言
机器语言:二进制代码表示的机器语言,最底层,机器直接执行
汇编语言:一种需要助记符表示的与机器语言一一对应的语言,需要汇编后才能执行
高级语言:接近人类语言,与计算机结构无关,需要经过解释和编译
6.编译程序与解释程序最大区别在于:前者生成目标代码,后者不生成
7.汇编程序即汇编写的程序,与编译程序,...
1.linux文件权限一共10位长度
第一段指文件类型
第二段指拥有者所具有的权限
第三段指所属组的成员对于这个文件具有的权限
第四段指其他人对于这个文件有没有任何权限
2.shell是一种命令解释程序
3.>将标准输出信息写入一个新文件(重定向),>>将标准输出信息添加到一个已存在的文件中
4.ctrl+alt+F1:图形界面切换到文字终端界面
5.whereis -b [filename]:查找系统中指定文件名的二进制文件
6.free显示系统中已用资源和空闲资源,m参数以mb为单位显示系统中的资源,t显示系统中的资源并最后进行统计
7.关闭linux的命令:
halt:立刻关机
shutdown -h now:立刻关机(root)
poweroff:立刻关机
8.less显示文件内容时可以上下滚动而more不可以
9./proc/cpuinfo获得CPU的相关信息
10.grub可以引导windows操作系统.grub是引导装入器,负责装入内核并引导Linux系统,也可以引导其他操作系统.如果引导器不能很好的工作或者不具有弹性,那么很可...
Description
题目描述:忘了
附件内容:
from Crypto.Util.number import *
from random import *
from libnum import *
import gmpy2
from secret import x
flag = b'?????????'
m = bytes_to_long(flag)
def obfuscate(p, k):
nbit = p.bit_length()
while True:
l1 = [getRandomRange(-1, 1) for _ in '_' * k]
l2 = [getRandomRange(100, nbit) for _ in '_' * k]
l3 = [getRandomRange(10, nbit//4) for _ in '_' * k]
l4 = [getRandomRange(2, 6) for _ in '_' *k]
A = sum([l1[_] * 2 ** ...
前言
这题当时国赛的时候由于没有怎么碰过MISC,到最后一步没做出来,实在是难受,今天复盘了一下
Analyze
拿到题目附件是一个流量包,可以看到分别有2.4.0,2.3.0,2.2.0,2.10.0,2.8.1,2.8.0这些地址的USB流量,我们可以一个一个筛选出来,然后通过导出特定分组进行保存,用UsbKeyboardDataHacker来提取其中的信息,最终会发现2.10.1和2.8.1中有有效信息
这里展示一下2.8.1的提取过程
# usb.src=="2.8.1"||usb.dst=="2.8.1"
31 0.010805 2.8.1 host USB 35 URB_INTERRUPT in
32 0.010818 host 2.8.1 USB 27 URB_INTERRUPT in
33 0.110764 2.8.1 host USB 35 URB_INTERRUPT in
34 0.110777 host 2.8.1 USB 27 URB_INTERRUPT in
35 0.166...