数字图像处理实验
数字图像处理的基础将彩色图转换为灰度图代码:
1234RGB = imread('D:\reports\test.jpg')subplot(121),imshow(RGB)gray = rgb2gray(RGB)subplot(122),imshow(gray)
转换的结果是:
将灰度图转为为索引图代码:
123456RGB = imread('D:\reports\test.jpg')subplot(221),imshow(RGB)gray = rgb2gray(RGB)subplot(222),imshow(gray)[X,map] = gray2ind(gray,8)subplot(223),imshow(X,map)
结果:
结论:变为索引值之后图像变得非常的不自然了,图中的显色有分块的现象,特别是在水中的那部分,这是为什么呢?将函数中索引值8增大,这个值越大发现图像之中的颜色表示就更加的自然(最后那幅图的索引值是64的)
索引值:图像颜色映射的个数,也表示图像的灰度级数
将索引图转化为真彩色的图代码:
12345678RGB ...
DASCTF2022-FATE
CrackMeMFC的逆向分析CracckMe,写题的时候在网上搜到了逆向分析CrackMe 这篇文章,通过OD+IDA的方式定位到关键代码处,然后进行解密的操作。
知识点: MD5 Sha1 Hashcat Wincrpt
定位关键函数OD来定位关键代码和提取数据,因为这个程序有反调试,而OD之中有插件,能够很好的反反调试而提取相关的数据。
IDA能够很好的反编译相应的代码,搞清楚函数的逻辑。
搜索MessageBoxA,因为当输入flag和key之后,输入错误会弹出弹窗,而MessageBoxA 有可能是表示弹窗的函数位置
(Ctrl+G)跟踪表达式【TextA/W】 就找到引用这个函数的地址,看到这个地址之后,发现它的下方就是“Wrong!!!“字符串,就找到对应输出Wrong的这个函数的位置,
定位到输出wrong!!!的代码处
并且在它的下面就是输出successful的代码处
在ida之中能更加容易的分析代码,所以通过这两个输出wrong和Success的地址,在ida之中定位到这两个函数,并且通过他们向上就找(交叉引用的方法)到对输入的key和flag进行验证的函 ...
starCTF2022_Simple+NaCl
Simple_File_System这道题当时卡在这里就是不知道存放的数据在哪里,结果后来发现就是在image.flag文件之中(被自己蠢哭了!!!!)
数据提取将程序运行一遍,将加密之后的文本的内容写入一个文件之中,再将这个文件放入010之中,提取前5个字节的内容,也就是 *CTF{ 加密之后的结果,然后再将image.flag文件放入ida之中,搜素这5个字节,将这段数据提取出来,这段数据就是flag加密之后的结果了,分析加密过程,逆得结果
解密过程分析代码就能找到对flag文件加密的关键代码
异或的对象 0xDEEDBEEF
解密脚本12345678910111213src = [0x00,0xD2,0xFC,0xD8,0xA2,0xDA,0xBA,0x9E,0x9C,0x26,0xF8,0xF6,0xB4,0xCE,0x3C,0xCC,0x96,0x88,0x98,0x34,0x82,0xDE,0x80,0x36,0x8A,0xD8,0xC0,0xF0,0x38,0xAE,0x40]for i in range(len(src)): src[i] = ((src[i] ...
DASCTF_Login
Login这道题里面给了两个文件,一个作为了客户端,一个作为服务器,两个程序之间相互传输数据,对登录的token、password以及verify这三个数进行了验证。
验证的主逻辑是在check程序之中,这里有三中加密(RSA、Hill、AES),这次的AES进行了魔改,解密的脚本不得不自己来码代码!!
两个程序的交互提供了两个文件,一个文佳时客户端界面,一个时服务器界面,要实现两个页面的交互
打开的是两个程序,一个程序作为的是客户端(login),一个作为的是服务器(check)
在这两个程序之中找到start函数,然后打开第一个参数,就是main函数
login程序:
和服务器进行一系列的交互
一个while循环向服务器发送和接受消息
其中的if语句会根据接受到的参数,来做出特定的反应
连接服务器:
客户端和服务器间的交互:
if语句发送数据:
客户端:
连接客户端:
进入main函数之中,和客户端进行交互,验证三个数据
rsa解密大素数:
113123058934861171416713230498081453101147538789122070079961388 ...
HFCTF2022_theShellcode
the_shellcode用ida载入之后,显然这个地方被加壳了,这里是Themida壳
定位到OPE这是是使用插件直接反反调试
sharpOD安装sharpOD,设置其中的配置:主要时要勾上图中标注的那个选项(这个可以去程序中的反调试)
按f9就能够运行起程序,就能够运行起程序了
OPE定位并且下硬件断点按E打开可执行模块窗口
可执行模块窗口:(快捷键:Alt+E)列出了当前被调试进程加载的所有可执行模块。它也显示了很多有用的信息,比如模块大小、入口地址、模块版本、以及可执行文件路径等。
打开该模块我们看到时一堆乱码,在这里我们需要去掉模块分析(汇编窗口,右键 -> 分析 -> 从模块中删除分析)
通过查找程序执行时输出的字符串 “please input the shellcode:” 定位到程序的正真入口的地方
右键->Search for -> All referenced text strings
通过上面的字符串表我们就到达了程序的入口处了 push ebp的位置,我们就直接在这个地方下断点(方便之后直接定位到程序的入口)
这 ...
starCTF2021
StarCTF2021自己的程序分析能力还要加强啊!!!!chacha20的解密不知道问题出在哪里??? qemu-riscv64也没能配置好环境,调试不了程序,所以 Favourite Architecture flag0 只解了一半,希望有大佬能指导指导咋搞啊???
Stram这是一个rust编写的elf文件
程序流程分析找到main函数,进入第一个函数之中
读取输入数据打开flag文件,读取其中的数据
对输入的加密过程这里的加密过程调用了rustcrypto_api
init_chacha: 利用输入生成随机数种子
refill_wide:流密钥加密的过程
因为密钥的生成和输入显然是有关系的,这样的流密钥加密我们并不能够直接解密,所以使用爆破的方法
加密结果的输出加密的结果会被写入到一个名为output的文件之中
所以该程序的输入,我们可以通过写入flag文件输入;该程序输出的获取,我们可以通过读取ouput文件得知
python和程序的交互(subprocess模块)subprocess模块
subprocess.Popen 类:创建并返回一个子进程,并在这个进 ...
2022DASCTF_X_SU_StarGate
StarGate这道题因为自己各种基础知识不牢固的原因写了很久,细节上的知识需要自己不断地积累,也觉得自己写代码太烂了!!!太菜了!!!
使用nc连接靶机,返回得到文件的base64加密内容
提取出这个base64加密的内容,放入在线网站之中bse64解密,得到的是一个elf文件
将这个elf文件放入ida之中,通过字符串定位到关键的代码位置
分析流程(欧拉路径问题)题目之中给了提示 “寻找欧拉路径”
对于一个给定的图,怎样判断是否存在着一个恰好包含了所有的边,并且没有重复的路径?这就是一笔画问题。用图论的术语来说,就是判断这个图是否是一个能够遍历完所有的边而没有重复。这样的图现称为欧拉图。这时遍历的路径称作欧拉路径(一个环或者一条链),如果路径闭合(一个圈),则称为欧拉回路
通过catflag这个字符串定位到一个相关联的函数
if语句之中的判断条件是判断走过了所有的路径,每个变量参数代表的是某路径是否走过的标志位
查看字符串表,图中红色方框中的字符串就能够定位到一个函数之中,每个函数之中的逻辑都一样
字符串定位到的函数:每次输入一个字符串,相当于到达某一个对应的函数,跳 ...
陇原战疫2021网络安全大赛
陇原战”疫”2021网络安全大赛最后还加了一道周末打的DASCTF比赛的re题目
findmeRC4加密
定位加密函数在main函数之中是主逻辑
通过里面比较的函数定位到对应的位置,发现是引用了strcmp这个函数
可以看到这个函数可能被另外一个函数改动了,定位到这个函数,这一看到这个函数把strcmp指引到了另外一个函数
RC4算法S盒的生成
它的S盒是利用用户输入的密钥生成S盒
利用密钥流进行加密的操作
RC4加密的函数
S盒的生成S盒的生成的函数:sub_40164C((int)v9, (int)v7, v4);
对输入进行加密的函数:sub_401767((int)v8, (int)v6, v10);
所以将内存之中需要解密的数据dump出来
密文需要解密的对象是:
1[0xb7,0x52,0x85,0xc1,0x90,0xe9,0x07,0xb8,0xe4,0x1a,0xc3,0xbd,0x1d,0x8e,0x85,0x46,0x00,0x21,0x44,0xaf,0xef,0x70,0x32,0xb5,0x11,0xc6]
密钥密钥是引用该函数输入的参数: ...
DASCTF_Oct
DASCTF_Oct_re这两道题中都有加密的知识点,第一道题的SM4的解密在最后一步仍然有问题,希望大佬能够指点指点(●’◡’●)
马猴烧酒知识点:
魔改SM4
魔改base64
用ida6将文件载入其中
定位到相应的代码的位置,这段代码开始的位置就有一段flag{this_is_fake_flag}的flag
密钥的生成第一个函数是获取时间戳,第二个函数是对时间戳base64的变表加密,第三个异或运算得到密钥
获取时间戳使用0x61624B82 演变得到一串数组
脚本:
12345678910111213141516key = 0x61624B82a13 = 0a14 = 0while key: a13 = key%10 key = key//10 a14 = 87 if a13<=9: a14 = 48 print(chr(a13+a14),end='') obj = '0181383361'for i in range(len(obj)): print(obj[l ...
frida+d3mug复现
FRIDA-API使用篇frida中有五种对象,分别是Java、Interceptor、NativePointer、NativeFunction、NativeCallback对象
这些都是在编写frida脚本的时候会用到的对象以及对应的函数。
frida知识更多的学习,可以查看这些文章
Java对象无论是想对so层亦或java层进行拦截,都必须编写Java.perform,java对象是很重要的
附加调用Java.performJava.perform(fn)主要用于当前线程附加到Java VM并且调用fn方法。该API是非常重要的
示例:
1234567891011121314151617unction frida_Java() { //运行当前js脚本时会对当前线程附加到Java VM虚拟机,并且执行function方法 Java.perform(function () { //判断是否Java VM正常运行 if(Java.available) { //如不意外会直接输出 h ...