normal系列
normal 1632位的c/c++文件
ida 分析
进入sub_40100A
关于crypcreathash API 内的 0x8004(ALG_ID),在这里丢个链接
ALG_ID (Wincrypt.h) - Win32 应用|微软文档 (microsoft.com)
第二个密码的加密方式
8003是md5加密。纯6位数破解起来有点慢了
看看后面的加密
里面有个提取AAA文件资源(加密的rtf文件)
还有个小异或
最后结果存入rtf文件
查下rtf文件头,因为密码2一定与前6位文件头异或
写出脚本
123456789101112131415161718192021import hashlibflag2=b'@DBApp'flag1=[0]*6for i in range(48,57): for j in range(48,57): for k in range(48,57): for m in range(48,57): for l in range(48,57): ...
normal系列
normal15jeb分析
找到mainactivity
进入flagcheck关键函数
肉眼可见
key和flag分别十次哈希和aes加密。
而原key已经进行过两次哈希算法,currkey使用的是原key 的三个字节,这三个字节无法溯源
只能爆破
本题采用的是aes ecb pkscs5padding 的加密方式
因为这次的加密是采用java中的包来完成的,我们也就采用相应的java包来解密
(虽然说我不是很会java)
学习一下java的crypto包和这个什么
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970import java.io.ByteArrayOutputStream;import java.security.MessageDigest;import javax.crypto.Cipher; //crypto包快速入口 :https://nowjava. ...
TAMUCTF 2022
REdo3
这题目里面藏了干扰
直接看向1330地址
call 了一个寄存器值,这个值0FF7C958Dh已经超出地址范围了,先nop掉,反编译试试
清楚看到argc要为3,argv[1]要为5
而unk_2008地址跳转进去是一段数据
因为开头有大量的重复数据,推测密文内部参杂了垃圾数据
下拉看见有一段连续不重复数据,推测为真正密文
已知flag内有gigem五个字母,和key等长
那么求出key只要反向运算就好了
12345678910data=[ 0x23, 0x30, 0x2F, 0x2A, 0x3A, 0x3F, 0x29,0x78, 0x7E, 0x39, 0x30, 0x6A, 0x3A, 0x10, 0x3A, 0x25, 0x3E, 0x79, 0x2C, 0x08, 0x34, 0x38, 0x79, 0x21, 0x24, 0x39,0x53]key='gigem'data_key=[0]*len(data)for i in range(len(data)): data_key[i]=data[i]^(ord(key[i% ...
normal系列
normal14分析加密
change函数是将输入转存为十六进制数
这里的gmpz似乎调用的是某个库内的函数,检索一下
__gmpz_init_set_str((mpz_ptr, const char *, int) const char是需要转存的字符串,int是转存的数据进制,mpz_ptr 是目标空间。
简单来讲就是将字符串转化成对应进制存入新位置
12v7_raw = "ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35"print(str(int(v7_raw,16)))
78510953323073667749065685964447569045476327122134491251061064910992472210485
这是转换的结果
关于__gmpz_powm函数,在这里引入一个文档,学习一下
gmp_lib.mpz_powm Method (machinecognitis.github.io)
十六进制数输入进行pown的运算之后和comparedata比较
...
normal系列
normal13ovll平坦流,真麻烦啊
这里是核心部分,输入长度为21(稍微优化了下)
里面的函数都是由简单的运算组成的需要爆破一下
12345678data = [0xF3, 0x2E, 0x18, 0x36, 0xE1, 0x4C, 0x22, 0xD1, 0xF9, 0x8C, 0x40, 0x76, 0xF4, 0x0E, 0x00, 0x05, 0xA3, 0x90, 0x0E, 0xA5]for i in range(33,127): flag = [0] * 21 flag[0] = i for j in range(len(data)): flag[j+1] = ((data[j] ^ (flag[j] ^ 18) * 3 + 2) - flag[j] % 7)&0xff print(''.join(chr(x)for x in flag))
#flag{mY-CurR1ed_Fns}
TAMUCTF 2022
existing-tooling
简单的elf题
v6赋值xmmword格式内容
obj抄入v6长度为73
obj异或
得出结果
12345678910data=[0xBA, 0xB8, 0x0E, 0x80, 0xA6, 0x52, 0x6E, 0x18, 0x82, 0xB2, 0x1C, 0x97, 0xA2, 0x46, 0x72, 0x06, 0x82, 0xB5, 0x00, 0x81, 0x94, 0x50, 0x68, 0x00, 0x82, 0xA2, 0x1D, 0x84, 0xBF, 0x40, 0x64, 0x14, 0xB1, 0xBD, 0x10, 0xBA, 0xA4, 0x5B, 0x58, 0x11, 0xA4, 0xBF, 0x08, 0x88, 0xA2, 0x4A, 0x66, 0x19, 0xB1, 0xA8, 0x36, 0x97, 0xAE, 0x5F, 0x62, 0x07, 0xAE, 0xB4, 0x36, 0x95, 0xA2, 0x ...
TAMUCTF 2022
REdo 1.c文件
12345678910111213141516171819202122232425262728293031#include <stdio.h>#include <string.h>#define STR_LEN 34#define EXIT printf("Sorry that's not the flag\n"); return 1;#define SUCCESS printf("THAT'S THE FLAG!\n"); return 0;#define PARAMS printf("Usage: ./code <flag>\n"); return 1;#define POINTER char* flag = (char*)(&a);int main(int argc, char** argv) { int a[] = {0x65676967,0x00000000,0x34427b6d,0x5f433153,0x ...
TAMUCTF 2022
Covfefe123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102// // Decompiled by Procyon v0.5.36// public class Covfefe{ public static void main(final String[] array) { final int n = 35; final int[] array2 = new int[n]; for (int i = 0; i < n; ++i) { array2[i] = 0; } array2[0] = 103; ...
TAMUCTF 2022
REdo2123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 ...
normal系列
normal12这题目的执行顺序比较混乱
大致跑一遍
推测,将所有参数传入v19,v19加密后传入dest
func2里面要求前面必须为flag{
func3里面要求结尾必须为}且长度为40
func4是要求输入的13,18,23,28必须为 ‘-’
func5是加密
大致逻辑就是a-z 字符-48
0-9字符+17
123456789101112131415data=[0x0000004A, 0x00000032, 0x00000032, 0x00000036, 0x00000031, 0x00000043, 0x00000036, 0x00000033, 0x0000002D, 0x00000033, 0x00000049, 0x00000032, 0x00000049, 0x0000002D, 0x00000045, 0x00000047, 0x00000045, 0x00000034, 0x0000002D, 0x00000049, 0x00000042, 0x00000043, 0x00000043, 0x0000002D, 0x00000049, 0x ...