无题
本文章来自:b站:”可厉害的土豆“
【我只是简单的搬运了一下】看文章不如看视频
基础AES属于分组加密算法
明文长度固定为128位
密钥长度可以是128,192,256
当密钥的长度是128位的时候,进行 10次循环
当密钥的长度是192位的时候,进行 12次循环
当密钥的长度是256位的时候,进行 14次循环
最后得到的密文也是128位
过程我们用 128位密钥来进行讲解过程
明文–>初始变化–>9次循环运算–>1论最终运算–>密文
初始变化将16个字节的明文和密钥转化成4*4的矩阵。
将这2个矩阵进行异或操作
9论循环变换分为:字节代换–>行位移–>列混合–>轮密钥加
字节代换将处理出来的结果和S-BOX表进行一个映射关系
比如如下的19进行查表后:第一行第9列,将19转换成d4
将所有的进行代换
行位移
第一行左移0个字节
第二行左移1个字节
第三行左移2个字节
第四行左移3个字节
将字节代换后的数据进行行移位后:
列混合将输入的输入的4*4的矩阵左乘一个固定的4*4矩阵
【这里的左乘不是通常意义上的左乘,而是有限域的左乘】
...
无题
PZGalaxy第一次写HTML的题。
根据判断条件我们知道输入的data是8位长度,并且前4 位是2023。所以只需要爆破后4位即可。
爆破出来后是20230127 然后再输入就得到flag
confuse_re拿到是一个ELF文件64位的
首先用IDA分析,左边的函数很难看,所以就只能看start函数。跟进后:
猜测如上
我们现在就看看加密的函数
跟进后很奇怪。。
我们看汇编代码呢?
我们手动去除一下这些花后:F5
跟进:
这下,就需要用IDApython来写一下脚本来去除花指令了
无题
2023-11-30
众里寻他千百度,蓦然回首难寻出头路。
无题
ezpython.pyc首先是修复pyc文件头:key:yuanshen
因为python版本是3.11
所以得用pycdc来进行反编译得到:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781 ...
无题
crackme一个UPX壳
修改一下特征码,然后就可以用工具去
然后用IDA打开就是flag
ISCTF{873c-298c-2948-23bh-291h-kt30}
babyre使用:pyinstxtractor.py 工具解 后用
然后在线工具反编译pyc文件:
结合给的txt文件中的:
123456p+q=292884018782106151080211087047278002613718113661882871562870811030932129300110050822187903340426820507419488984883216665816506575312384940488196435920320779296487709207011656728480651848786849994095965852212548311864730225380390740637527033103610408592664948012814290769567441038868614508362013860087396409860(p+1)*(q+1)=2129278907 ...
Afkayas.2
:这个CM 和上一个Afkayas.1 类似,但是算法有一点点不同,并且这里还需要去除一个Nag
逆向算法首先还是通过关键的字符串的进行定位,不会的看我的上一篇文章。
然后前面还是一样len(UserName) * 88888 + ascii(UserName[0])
但是的去尝试的时候发现密码不是这个。
我们接着往下看。
发现这里有一个新的数字,当尝试这个数字的时候,发现就是需要的PassWord
所以我们就需要跟进这个计算出这个数据的call
这里 我们跟进的时候发现,好像是这么的简单。
我们重新分析,因为上面好想有点点错误。。。
这里是将上面计算出来的值+2
然后往下:
将上面计算出来的值*3 然后再减2
然后减去-(-15)也就是+15
经过这些计算最后就得到了PassWord
后面就是一个cmp
中间用到了很多浮点数来计算,然后又转整数
我们用python来实现一下:
12345678910UserName = input("请输入你的用户名:")#第一个地方Password1 = len(UserName) * 88888 + ord(Us ...
Afkayas.1
缺少MSVBVM50.DLL该程序是编号2程序。
如果最开始遇到了说缺少MSVBVM50.DLL 的话可以看通过:https://cn.dll-files.com/msvbvm50.dll.html
这个地址下载,并且放在你的:
12C:\Windows\SysWOW64\C:\Windows\System32\
这2个位置。
分析程序,首先是运行:可以查看字符串,以便于我们快速定位
然后是
调查程序信息
知道是一个VB 没有壳的程序32位的程序
VB程序可以使用:VB Decompiler它来进行反编译
使用X32dbg来动态调试
通过字符串来进行定位:网上找到函数的入口点然后下断点。
也就是找到push ebp的位置
然后F9 运行,当这个程序运行起来后,输入用户名Dgor和密码12345678点击OK , 就会发现程序断在了push ebp这个位置。
然后我们F8单步调试一直往下:找到程序读取我们输入的用户名和密码的位置:
然后一步一步的分析:可以看我写的注释
然后中间有一部一份代码不知道是干什么的。就接着往下走,找到出现密码12345678的位置。
可以看到的是 ...
代码混淆
原理代码混淆的原理首先看:https://firmianay.gitbooks.io/ctf-all-in-one/content/doc/3.2.6_instruction_confusion.html
方式1.代码变形
指将单条或者多条指令转化成等价的单挑或多条指令。其中对单挑指令的变形叫做局部变形,对多条指令的变形结合起来就叫做全局变形。
例子:
1mov eax,12345678h
可以用下面的组合来代替
12push 12345678hpop eax
更进一步:
12345pushfdmov eax, 1234shl eax, 10mov ax, 5678popfd
pushfd 和 popfd 是为了保护 EFLAGS 寄存器不受变形后指令的影响。
继续替换:
12345pushfdpush 1234pop eaxshl eax, 10mov ax 5678
这样的结果就是简单的指令也可能会变成上百上千条指令,大大提高了理解的难度。
再看下面的例子:
1jmp {label}
可以变成:
12push {label}ret
...
VM逆向
这种题首先他会有以一个while(1)的循环,这个循环的作用就是模拟计算机去读取东西然后进行操作。
他首先会有一个伪汇编,然后用一个if去判断,判断是哪一个指令。然后进行该指令。
例子:
123sub_4111BD((int)v3); //这个函数是定义伪汇编sub_4112EE((int)v3); //这个函数是循环读取指令sub_411078(); //最后的比较
这三个函数就很重要
sub_4111BD
sub_4112EE这个是一个VM的题。Wp说很简单,但是我觉得一点都不简单。
首先我们来分析伪汇编的内容。
sub_4111BD:
fun1:是一个模仿mov 操作的函数
fun2:
是一个模仿xor的函数
fun3:
是一个读取文件的操作。
然后我们来看循环读取指令的操作
就是一直读取,然后遇到F4就结束。
最后看flag的判断的函数
就是执行完上面的“加密”[循环的操作后]flag要和byte_41A000取反后的值相同。
然后就是用脚本来模拟出这些操作:将他弄成伪代码
首先我们找到要执行的代码来进行匹配的数据:
因为我们知道一直到F4就会停止。所 ...
ISCTF2022
我复现所看的Wp来自:
https://www.cnblogs.com/Only-xiaoxiao/p/16859493.html
如果想看Wp 请看上面这篇文章,写得很好,我只是将它的方法记录下来,并且我也有很多地方都没有能够成功的找出flag。看我的只会浪费你的时间。【真的】
5121-babyre这个题,我分析不来…看了Wp后:
一个5251的编码:
flag{1594826307}
babyopcode这个是一个VM的题。Wp说很简单,但是我觉得一点都不简单。
首先我们来分析伪汇编的内容。
sub_4111BD:
fun1:是一个模仿mov 操作的函数
fun2:
是一个模仿xor的函数
fun3:
是一个读取文件的操作。
然后我们来看循环读取指令的操作
就是一直读取,然后遇到F4就结束。
最后看flag的判断的函数
就是执行完上面的“加密”[循环的操作后]flag要和byte_41A000取反后的值相同。
然后就是用脚本来模拟出这些操作:将他弄成伪代码
首先我们找到要执行的代码来进行匹配的数据:
因为我们知道一直到F4就会停止。所以我们就提取数据一直到F4. ...